diff --git a/Shared_Includes b/Shared_Includes index 20f00d2..daae799 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 20f00d231f2a8e7979248c02769c9528ee67f457 +Subproject commit daae799b0dfc833d6bbbb8910910790f834996a3 diff --git a/src/bios/exp/EXP.asm b/src/bios/exp/EXP.asm index 781836d..5ff6a7d 100644 --- a/src/bios/exp/EXP.asm +++ b/src/bios/exp/EXP.asm @@ -1441,8 +1441,7 @@ DOS_OFF: ;------[ ; !TODO что- то связанное с переменными LIB_TABLE ; ]------ ; _mInfoBLOCK #3E20-$,#FF ; [x] -FN_LIB: - SCF +FN_LIB: SCF RET // // IN A,(SLOT3) diff --git a/src/bios/exp/EXTENDED/FDD_DRIVER.asm b/src/bios/exp/EXTENDED/FDD_DRIVER.asm index cdde91d..dbeca2e 100644 --- a/src/bios/exp/EXTENDED/FDD_DRIVER.asm +++ b/src/bios/exp/EXTENDED/FDD_DRIVER.asm @@ -1,13 +1,6 @@ -; !FIXIT ALL -; ;[]===========================================================[] -;!TODO -; объеденить процедуры FDD_5x_LONG_READ и FDD_5x_LONG_WRITE -; объеденить процедуры READ_SECTOR и WR_SEC - - ; FDD.CHANGE: ; LD A,#01 ; AND A diff --git a/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM b/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM index 7e2e1f7..a9049a6 100644 --- a/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM +++ b/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM @@ -26,18 +26,16 @@ _ZIP_WAITS_ EQU 128 ;[]================================================================[#50] ; IN: A - бит 4..7 - тип устройства, бит 0..3 - номер устройства -; DE - буффер 64 байта для названия устройства -; OUT: NC - в буфере название +; B - номер подфункции: +; 1 - получить 512 байтов Identify Device +; 2 - получить название, серийник и версию прошивки устройства +; HL - буффер 71 байт для названия устройства +; OUT: NC - в буфере запрашиваемые данные ; СF - в A номер ошибки ATAPI_5x_GET_DRIVE_NAME: - LD B,A ; сохраняем A LD C,IDE.Device.ATAPI - CALL SELECT_DRIVE.drv_params - JP Z,ATAxx_5x_GET_DRIVE_NAME - ; - LD A,BIOS.Error.BadNumber - SCF - RET + LD E,IDE.CMD.ATAPI.IdentifyPacketDevice + JP ATAxx_IdentifyDevice ;[]================================================================[#50] diff --git a/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM b/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM index 5185c0d..c9e0afa 100644 --- a/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM +++ b/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM @@ -79,18 +79,16 @@ WRITE_OUTI_DUPs EQU 32 ; bytes ;[]================================================================[#50] ; IN: A - бит 4..7 - тип устройства, бит 0..3 - номер устройства -; DE - буффер 64 байта для названия устройства -; OUT: NC - в буфере название +; B - номер подфункции: +; 1 - получить 512 байтов Identify Device +; 2 - получить название, серийник и версию прошивки устройства +; HL - буффер 71 байт для названия устройства +; OUT: NC - в буфере запрашиваемые данные ; СF - в A номер ошибки ATA_5x_GET_DRIVE_NAME: - LD B,A ; сохраняем A LD C,IDE.Device.HDD - CALL SELECT_DRIVE.drv_params - JP Z,ATAxx_5x_GET_DRIVE_NAME - ; - LD A,BIOS.Error.BadNumber - SCF - RET + LD E,IDE.CMD.ATA.IdentifyDevice + JP ATAxx_IdentifyDevice ;[]================================================================[#50] @@ -320,7 +318,7 @@ RW_ATA_SECTORs: PUSH BC ; ; EXX LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready) + IDE.CtrlByte.Ready - CALL WAITPRT.custom + CALL WAITPRT.custom_DE EXX RET C ; @@ -345,7 +343,7 @@ RW_ATA_SECTORs: PUSH BC ; EX AF,AF' EXX LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.DataRequest+IDE.CtrlByte.Error)+IDE.CtrlByte.DataRequest - CALL WAITPRT.custom + CALL WAITPRT.custom_DE EXX RET C ;DI ;R01 REMOVED "DI" @@ -462,87 +460,6 @@ ATA_IdlePasses: CALL .CHECK_DRV RET ;!TODO доделать эту же хурму для других устройств ;███████████████████████████████████████████████████████████████████████████████████████████████████████; -/* - IFN OPTIMIZE_RW_PROCEDURE -WRITE_ATA_SECTORs: - LD C,IDE.Device.HDD - CALL SELECT_DRIVE - RET C - EXX - ;LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0 - CALL WAITPRT - EXX - RET C - EX AF,AF' - PUSH AF - PUSH DE - CALL PRESET - POP HL - POP AF - LD XL,0 - LD XH,A - LD BC,IDE.Write.Command - LD A,IDE.CMD.ATA.WriteSectorsWithRetry - OUT (C),A - ; SAVE HL?! - EXX - LD DE,#8908 ;WAIT BUSY=0 & DRQ=1 & ERR=0 - CALL WAITPRT.custom - EXX - RET C - ; -.big_loop: IN A,(SLOT3) - EX AF,AF' - LD A,XH - OUT (SLOT3),A - ; WRITE SECTOR 512 bytes ;!HARDCODE sector size - LD BC,IDE.Write.Data - LD D,512/WRITE_OUTI_DUPs ;!HARDCODE sector size -.loop: DUP WRITE_OUTI_DUPs - OUTI - EDUP - DEC D - JR NZ,.loop - ; ; ; ; ; - EX AF,AF' - OUT (SLOT3),A - ;EI - ; - LD A,H - OR L - JR NZ,.W33 - ; next page in mem block - LD HL,#C000 - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD D,high SYS_PAGE.RAM_TABLE - LD E,XH - LD A,(DE) - LD XH,A - EX AF,AF' - OUT (SLOT3),A - ; -.W33: INC XL ;INC SAVED SECTORS - EXX - ;LD DE,#C140 ;WAIT BUSY=0 & ERR=0 & READY=1 - CALL WAITPRT - EXX - RET C - LD BC,IDE.Read.Status - IN A,(C) - BIT IDE.CtrlBit.DataRequest,A - ; - RET Z - JP .big_loop - ;JP NZ,.big_loop - ;XOR A - ;RET - ; - ENDIF -*/ -;[]===========================================================[#53, #56] ;[]================================================================[#54] @@ -568,7 +485,7 @@ ATA_5x_VERIFY: ;PUSH IY ; !FIXIT RET C EXX LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready) + IDE.CtrlByte.Ready - CALL WAITPRT.custom + CALL WAITPRT.custom_DE EXX RET C ;PUSH DE @@ -685,25 +602,25 @@ DIV32X: ;HL:DE / BC => DE:IX HL-OSTATOK ; E - PATTERN ; !!! некоторые функции надеются, что на выходе всегда ZF WAITPRT: LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready+IDE.CtrlByte.Error) + IDE.CtrlByte.Ready +.custom_DE: LD HL,#0000 ; задержка ;!HARDCODE .custom: LD BC,IDE.Read.Status - LD HL,#0000 ; задержка ;!HARDCODE ; -.loop: PUSH HL -; -.loop2: IN A,(C) - AND D - CP E - JR Z,.ok +.loop: PUSH HL ; 11 +; ;;;;;;;;; +.loop2: IN A,(C) ; 12 + AND D ; 4 + CP E ; 4 + JR Z,.ok ; 7 ; - DEC HL - LD A,L - OR H - JP NZ,.loop2 - ; - POP HL - DEC L - JR NZ,.loop - ; error + DEC HL ; 6 + LD A,L ; 4 + OR H ; 4 + JP NZ,.loop2 ; 10 + ; ;;;;;;;;; 51 + POP HL ; 10 + DEC L ; 4 + JR NZ,.loop ; 12 + ; error ;;;;;;;;; 37 LD A,BIOS.Error.NotReady SCF RET diff --git a/src/bios/exp/EXTENDED/IDE/shared.asm b/src/bios/exp/EXTENDED/IDE/shared.asm index b6b255e..ede3095 100644 --- a/src/bios/exp/EXTENDED/IDE/shared.asm +++ b/src/bios/exp/EXTENDED/IDE/shared.asm @@ -4,39 +4,6 @@ ; Выход: A - MediaParameters, C - DriveType ; не портит L SELECT_DRIVE: CALL .drv_params -; AND #0F -; LD IY,IDE.INIT_TBL_IDE0 -; JR Z,.channel -; ; -; DEC A -; LD IY,IDE.INIT_TBL_IDE1 -; JR Z,.channel -; ; -; DEC A -; LD IY,IDE.INIT_TBL_IDE2 -; JR Z,.channel -; ; -; DEC A -; LD IY,IDE.INIT_TBL_IDE3 -; JR NZ,.error -; ; -; .channel: EXX -; IN A,(SLOT3) -; PUSH AF -; LD A,SYS_PAGE -; OUT (SLOT3),A -; ; -; LD H,(IY + IDE.HDD_INIT_TABLE.MediaParameters) -; LD C,(IY + IDE.HDD_INIT_TABLE.DriveType) -; LD B,(IY + IDE.HDD_INIT_TABLE.DRV_Flags) -; POP AF -; OUT (SLOT3),A ;возврат страницы -; ; -; LD A,C -; EXX -; ; -; CP C - ; EXX SCF LD A,BIOS.Error.BadNumber @@ -53,11 +20,10 @@ SELECT_DRIVE: CALL .drv_params LD BC,IDE.Write.DeviceHead OUT (C),A ; -.del_me: LD A,high IDE.Read.Status + LD A,high IDE.Read.Status IN A,(low IDE.Read.Status) AND IDE.CtrlByte.Busy ; тестирование задержек - ;JR NZ,.del_me JR Z,.notBusy LD B,32 DJNZ $ @@ -127,82 +93,82 @@ CHANGE_MEM_BLK: LD HL,#C000 RET ;======================================================================= - +; NOT USED ;======================================================================= ; IN: B - бит 4..7 - тип устройства, бит 0..3 - номер устройства ; DE - буффер 64 байта для названия устройства ; OUT: NC - в буфере название ; СF - в A номер ошибки -ATAxx_5x_GET_DRIVE_NAME: - LD A,B - AND #0F - LD HL,SYS_PAGE.IDE_0.NAME - JR Z,.ldir - ; - DEC A - LD HL,SYS_PAGE.IDE_1.NAME - JR Z,.ldir - DEC A - LD HL,SYS_PAGE.IDE_2.NAME - JR Z,.ldir - DEC A - LD HL,SYS_PAGE.IDE_3.NAME - JR NZ,.error - ; -.ldir: EXX - LD C,SLOT3 - IN B,(C) - LD D,SYS_PAGE - OUT (C),D - EXX - LD A,(HL) - EXX - OUT (C),B - EXX - AND A ;CONFIGURE_IDE_DRIVES.IDE_NAME_MARKER.None - JR Z,.error - ; - INC A ;CONFIGURE_IDE_DRIVES.IDE_NAME_MARKER.NoInfo - JR Z,.autodetect - ; - INC A ;CONFIGURE_IDE_DRIVES.IDE_NAME_MARKER.Unknown - JR Z,.UnknownName - ; - LD B,SYS_PAGE.IDE_x.NAME.Size -.loop: EXX - OUT (C),D - EXX - LD A,(HL) - EXX - OUT (C),B - EXX - LD (DE),A - INC HL - INC DE - DJNZ .loop - RET - ; -.UnknownName: LD HL,.Unknown_str - LD BC,.Unknown_str.Size - LDIR - XOR A - EX DE,HL - LD B,SYS_PAGE.IDE_x.NAME.Size - .Unknown_str.Size -.loop_zero: LD (HL),A - INC HL - DJNZ .loop_zero - RET - ; -.autodetect: ;!FIXIT сделать детект!!! - JR .UnknownName - ; - ; если нет драйва -.error: LD A,BIOS.Error.BadNumber - SCF - RET - ; -.Unknown_str: BYTE 'Unknown' -.Unknown_str.Size EQU $ - .Unknown_str +; ATAxx_5x_GET_DRIVE_NAME: +; LD A,B +; AND #0F +; LD HL,SYS_PAGE.IDE_0.NAME +; JR Z,.ldir +; ; +; DEC A +; LD HL,SYS_PAGE.IDE_1.NAME +; JR Z,.ldir +; DEC A +; LD HL,SYS_PAGE.IDE_2.NAME +; JR Z,.ldir +; DEC A +; LD HL,SYS_PAGE.IDE_3.NAME +; JR NZ,.error +; ; +; .ldir: EXX +; LD C,SLOT3 +; IN B,(C) +; LD D,SYS_PAGE +; OUT (C),D +; EXX +; LD A,(HL) +; EXX +; OUT (C),B +; EXX +; AND A ;CONFIGURE_IDE_DRIVES.IDE_NAME_MARKER.None +; JR Z,.error +; ; +; INC A ;CONFIGURE_IDE_DRIVES.IDE_NAME_MARKER.NoInfo +; JR Z,.autodetect +; ; +; INC A ;CONFIGURE_IDE_DRIVES.IDE_NAME_MARKER.Unknown +; JR Z,.UnknownName +; ; +; LD B,SYS_PAGE.IDE_x.NAME.Size +; .loop: EXX +; OUT (C),D +; EXX +; LD A,(HL) +; EXX +; OUT (C),B +; EXX +; LD (DE),A +; INC HL +; INC DE +; DJNZ .loop +; RET +; ; +; .UnknownName: LD HL,.Unknown_str +; LD BC,.Unknown_str.Size +; LDIR +; XOR A +; EX DE,HL +; LD B,SYS_PAGE.IDE_x.NAME.Size - .Unknown_str.Size +; .loop_zero: LD (HL),A +; INC HL +; DJNZ .loop_zero +; RET +; ; +; .autodetect: ;!FIXIT сделать детект!!! +; JR .UnknownName +; ; +; ; если нет драйва +; .error: LD A,BIOS.Error.BadNumber +; SCF +; RET +; ; +; .Unknown_str: BYTE 'Unknown' +; .Unknown_str.Size EQU $ - .Unknown_str ; если не поддерживается возврат имени для устройства ;LD A,BIOS.Error.InvalidSubFunction @@ -212,36 +178,177 @@ ATAxx_5x_GET_DRIVE_NAME: ;======================================================================= -;Function: Detect Disk -; A - Disk -; С - Type -;Return: CF=0 - A=Drive type, H=MediaParameters -; CF=1 - drive not present, A=#02 -;DRV_DETECT: CP #84 ;!HARDCODE max IDE drives (#80,#81,#82,#83) -; CCF -; JR C,.error -; ; -; LD IX,IDE.INIT_TBL_IDE0 -; AND 3 -; JR Z,.get_param -; LD IX,IDE.INIT_TBL_IDE1 -; DEC A -; JR Z,.get_param -; LD IX,IDE.INIT_TBL_IDE2 -; DEC A -; JR Z,.get_param -; LD IX,IDE.INIT_TBL_IDE3 -; .get_param: IN A,(SLOT3) -; LD B,A -; LD A,SYS_PAGE -; OUT (SLOT3),A -; ; -; LD H,(IX + IDE.HDD_INIT_TABLE.MediaParameters) -; LD A,(IX + IDE.HDD_INIT_TABLE.DriveType) -; CP C ; compare Type -; LD C,SLOT3 -; OUT (C),B -; RET Z -; SCF -; .error: LD A,BIOS.Error.BadNumber -; RET \ No newline at end of file +; !FIXIT можно попробовать использовать в AUTOIDE.asm для сокращения кода +; A - бит 4..7 - тип устройства, бит 0..3 - номер устройства +; C - IDE.Device.HDD +; E - IDE.CMD.ATA.IdentifyDevice / IDE.CMD.ATAPI.IdentifyPacketDevice +; HL - Buffer +ATAxx_IdentifyDevice: + PUSH HL + PUSH BC + CALL .RUN_CMD + POP BC + JR C,.error + ; + DJNZ .get_full_name + ; B=1 + POP HL +.read_hdd_data: LD BC,IDE.Read.Data + INIR + INIR + RET + ; +.invalidFunction: + POP HL + LD A,BIOS.Error.InvalidSubFunction + SCF + RET + ; + ; B=2 +.get_full_name: DJNZ .invalidFunction + ; + LD HL,SYS_PAGE.MS_BUF + IN A,(SLOT3) + PUSH AF ; страница пользователя + LD A,SYS_PAGE + OUT (SLOT3),A + CALL .read_hdd_data + LD HL,SYS_PAGE.MS_BUF + _ATA_IDENTIFY_DEVICE_DATA.FirmwareRevision + LD B,+(_ATA_IDENTIFY_DEVICE_DATA.MaximumBlockTransfer - _ATA_IDENTIFY_DEVICE_DATA.FirmwareRevision)/2 + CALL ATAxx_IdentifyDevice.STR_BIG_ENDIAN_TO_LITTLE + LD HL,SYS_PAGE.MS_BUF + _ATA_IDENTIFY_DEVICE_DATA.SerialNumber + LD B,+(_ATA_IDENTIFY_DEVICE_DATA.BufferType - _ATA_IDENTIFY_DEVICE_DATA.SerialNumber)/2 + CALL ATAxx_IdentifyDevice.STR_BIG_ENDIAN_TO_LITTLE + POP AF ; страница пользователя + EXX + LD B,A + LD C,SLOT3 + LD D,SYS_PAGE + EXX + POP DE + LD HL,SYS_PAGE.MS_BUF + _ATA_IDENTIFY_DEVICE_DATA.ModelNumber + LD B,_ATA_IDENTIFY_DEVICE_DATA.MaximumBlockTransfer - _ATA_IDENTIFY_DEVICE_DATA.ModelNumber + CALL .ldirSwitched + ; + LD HL,SYS_PAGE.MS_BUF + _ATA_IDENTIFY_DEVICE_DATA.SerialNumber + LD B,_ATA_IDENTIFY_DEVICE_DATA.BufferType - _ATA_IDENTIFY_DEVICE_DATA.SerialNumber + CALL .ldir + ; + LD HL,SYS_PAGE.MS_BUF + _ATA_IDENTIFY_DEVICE_DATA.FirmwareRevision + LD B,_ATA_IDENTIFY_DEVICE_DATA.ModelNumber - _ATA_IDENTIFY_DEVICE_DATA.FirmwareRevision + ;CALL .ldir +.ldir: EXX + OUT (C),D + EXX +.ldirSwitched: LD A,(HL) + EXX + OUT (C),B + EXX + LD (DE),A + INC HL + INC DE + AND A + RET Z + ; + DJNZ .ldir + XOR A + LD (DE),A + INC DE + RET + ; +.error: POP HL + CP BIOS.Error.BadNumber + SCF + RET Z + LD A,BIOS.Error.NotReady + RET + ; + ; +.RUN_CMD: CALL SELECT_DRIVE + RET C + ; + LD BC,IDE.Write.Command + OUT (C),E + LD A,E + EXX + SUB IDE.CMD.ATA.IdentifyDevice + LD H,A + LD L,A + JR Z,.wait + ; + LD H,#0C +.wait: LD DE,IDE.CtrlByte.Busy * 256 + 0 + CALL WAITPRT.custom ; HL = 0 or #0CB7 + EXX + RET C + ; + LD BC,IDE.Read.Status + IN A,(C) + RRCA + RET C + ; + AND (IDE.CtrlByte.DataRequest + IDE.CtrlByte.Ready) / 2 + SCF + RET Z + ; + EXX + LD DE,256*IDE.CtrlByte.DataRequest + IDE.CtrlByte.DataRequest + CALL WAITPRT.custom_DE + EXX + RET + ; + ; LD BC,IDE.Read.Data + ; LD HL,SYS_PAGE.MS_BUF + ; IN A,(SLOT3) + ; EX AF,AF' + ; LD A,SYS_PAGE + ; OUT (SLOT3),A + ; INIR + ; INIR + ; EX AF,AF' + ; RET + ; + ; +; 1 - печать с порчей буфера без пропуска двойных пробелов - в 3 раза шустрее стока +; может потом сделать из этого API печати для BIG ENDIAN +.STR_BIG_ENDIAN_TO_LITTLE: + LD D,H + LD E,L + LD A,(HL) + AND A + RET Z + ; + INC HL +.loop_ch: LD A,(DE) + LDI + LD (DE),A + INC HL + INC DE + DJNZ .loop_ch + RET +;======================================================================= +/* +; D - MASK +; E - PATTERN +; !!! некоторые функции надеются, что на выходе всегда ZF +WAITPRT: LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready+IDE.CtrlByte.Error) + IDE.CtrlByte.Ready +.custom: LD BC,IDE.Read.Status + + + ; ATAPI or Absent + ; Exit: CF - No device + ; NC - ATAPI +.IdentPDevChk: LD E,IDE.CMD.ATAPI.IdentifyPacketDevice + LD BC,IDE.Write.Command + OUT (C),E + ; + LD HL,PAUSES.HALT.Time_2s + LD DE,IDE.CtrlByte.Busy*256 + 0 + CALL BITS_WAITS.Clear_BUSY + RET C + ; + ; BC = IDE.Read.Status + IN A,(C) + RRCA + RET +*/ \ No newline at end of file diff --git a/src/bios/rom/SETUP/AUTOIDE.asm b/src/bios/rom/SETUP/AUTOIDE.asm index 71f049d..8a88a6e 100644 --- a/src/bios/rom/SETUP/AUTOIDE.asm +++ b/src/bios/rom/SETUP/AUTOIDE.asm @@ -163,14 +163,6 @@ START: ; reset all LD (HL),C INC HL DJNZ .FILLIDE - ;CLEAR HDD NAME - LD HL,SYS_PAGE.IDE_NAMES_TABLE - LD B,low SYS_PAGE.IDE_NAMES_TABLE.Size - INC C ; IDE_NAME_MARKER.None -.FILLIDE_NAME: - LD (HL),C - INC HL - DJNZ .FILLIDE_NAME ; EX AF,AF' OUT (SLOT3),A @@ -613,25 +605,30 @@ IDE_CMD: /////////////////////////////////////////////////////////////////////[v] PRINT_IDE_MODEL: LD HL,IDENTIFY_DEVICE_BUFFER.ModelNumber - LD B,+(_ATA_IDENTIFY_DEVICE_DATA.MaximumBlockTransfer - _ATA_IDENTIFY_DEVICE_DATA.ModelNumber)/2 LD A,(HL) OR A JR Z,.unknown ; - CALL PRINT_STR_BIG_ENDIAN + ;CALL PRINT_STR_BIG_ENDIAN + LD B,+(_ATA_IDENTIFY_DEVICE_DATA.MaximumBlockTransfer - _ATA_IDENTIFY_DEVICE_DATA.ModelNumber)/2 + PUSH HL + CALL ATAxx_IdentifyDevice.STR_BIG_ENDIAN_TO_LITTLE + POP HL + LD B,_ATA_IDENTIFY_DEVICE_DATA.MaximumBlockTransfer - _ATA_IDENTIFY_DEVICE_DATA.ModelNumber + CALL LP_PRINT_LINE2 AND A RET ; -.unknown: LD HL,.marker - LD A,.marker.Size - CALL COPY_IDE_NAME_TO_SYS_PAGE +.unknown: ;LD HL,.marker + ;LD A,.marker.Size + ;CALL COPY_IDE_NAME_TO_SYS_PAGE LD A,msgStrings.ideUnknown CALL POSTMSG AND A RET ; -.marker: BYTE IDE_NAME_MARKER.Unknown -.marker.Size: EQU $ - .marker +;.marker: BYTE IDE_NAME_MARKER.Unknown +;.marker.Size: EQU $ - .marker /////////////////////////////////////////////////////////////////////[^] @@ -839,7 +836,6 @@ Bug31SecCheck: LD A,(MasterSlave) /////////////////////////////////////////////////////////////////////[v] GETPARAM: LD HL,PAUSES.WAIT.IDE - ;LD DE,256*(IDE.CtrlByte.Busy + IDE.CtrlByte.DataRequest) + IDE.CtrlByte.DataRequest LD DE,256*IDE.CtrlByte.DataRequest + IDE.CtrlByte.DataRequest CALL BITS_WAITS.WAIT_PRT RET C @@ -1067,30 +1063,30 @@ Nop_CHANELS: ; HL - адрес строки ; IY - адрес данных драйва в SYS_PAGE (.IDE_0 .. .IDE_3) ; Выход: B - длина строки -COPY_IDE_NAME_TO_SYS_PAGE: - ; save IDE name - LD C,A - LD B,0 - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - ; SYS_PAGE.IDE_x --> SYS_PAGE.IDE_x.NAME - PUSH IY - POP DE - SET 1,D - LD A,%0010'0000 - XOR E - LD E,A - SLA E - SLA E - ; - LD A,C - LDIR - LD B,A - EX AF,AF' - OUT (SLOT3),A - RET +; COPY_IDE_NAME_TO_SYS_PAGE: +; ; save IDE name +; LD C,A +; LD B,0 +; IN A,(SLOT3) +; EX AF,AF' +; LD A,SYS_PAGE +; OUT (SLOT3),A +; ; SYS_PAGE.IDE_x --> SYS_PAGE.IDE_x.NAME +; PUSH IY +; POP DE +; SET 1,D +; LD A,%0010'0000 +; XOR E +; LD E,A +; SLA E +; SLA E +; ; +; LD A,C +; LDIR +; LD B,A +; EX AF,AF' +; OUT (SLOT3),A +; RET /////////////////////////////////////////////////////////////////////[^] diff --git a/src/bios/rom/SETUP/VIDEO_IO.asm b/src/bios/rom/SETUP/VIDEO_IO.asm index f84e702..571f1fe 100644 --- a/src/bios/rom/SETUP/VIDEO_IO.asm +++ b/src/bios/rom/SETUP/VIDEO_IO.asm @@ -106,28 +106,28 @@ ScreenPOS: ; RET ;======================================================================= ; 1 - печать с порчей буфера без пропуска двойных пробелов - в 3 раза шустрее стока -PRINT_STR_BIG_ENDIAN: - PUSH HL - PUSH BC - LD D,H - LD E,L - INC HL - ; -.loop_ch: LD A,(DE) - LDI - LD (DE),A - INC HL - INC DE - DJNZ .loop_ch - ; - POP BC - POP HL - LD A,B - ADD A,B - PUSH HL - CALL CONFIGURE_IDE_DRIVES.COPY_IDE_NAME_TO_SYS_PAGE - POP HL - JP LP_PRINT_LINE2 +; PRINT_STR_BIG_ENDIAN: +; ;PUSH HL +; PUSH BC +; LD D,H +; LD E,L +; INC HL +; ; +; .loop_ch: LD A,(DE) +; LDI +; LD (DE),A +; INC HL +; INC DE +; DJNZ .loop_ch +; ; +; POP BC +; ;POP HL +; ;LD A,B +; ;ADD A,B +; ;PUSH HL +; ;CALL CONFIGURE_IDE_DRIVES.COPY_IDE_NAME_TO_SYS_PAGE +; ;POP HL +; JP LP_PRINT_LINE2 ;=======================================================================