diff --git a/src/bios/exp/FUNC_LOW_PRINT.ASM b/src/bios/exp/FUNC_LOW_PRINT.ASM index d58795e..29ad79c 100644 --- a/src/bios/exp/FUNC_LOW_PRINT.ASM +++ b/src/bios/exp/FUNC_LOW_PRINT.ASM @@ -190,25 +190,25 @@ LP_PRINT_ALL: ; ;------------------------------------------------------------------[#82] +; LP_PRINT_SYM: - CALL LP_BEG_P - EXX - LD C,A - EXX - LD A,#50 - OUT (SLOT3),A - -.loop: EXX - LD A,D - OUT (PORT_Y),A -.cont: LD (HL),C - INC D - TEST_40 - DJ_NEXT_HL - EXX - DJNZ .loop - - JP LP_END_P + CALL LP_BEG_P + EXX + LD C,A + EXX + LD A,#50 + OUT (SLOT3),A + ; +.loop: EXX + LD A,D + OUT (PORT_Y),A +.cont: LD (HL),C + INC D + TEST_40 + DJ_NEXT_HL + EXX + DJNZ .loop + JP LP_END_P ;------------------------------------------------------------------[#82] ; @@ -429,7 +429,7 @@ LP_END_P: ; !!!!! RET .short: EX AF,AF' EXX - LP_CLOSE_PG + LP_CLOSE_PG EXX EX AF,AF' AND A diff --git a/src/bios/rom/SETUP/AUTOIDE.asm b/src/bios/rom/SETUP/AUTOIDE.asm index a7173c8..72922f7 100644 --- a/src/bios/rom/SETUP/AUTOIDE.asm +++ b/src/bios/rom/SETUP/AUTOIDE.asm @@ -186,7 +186,7 @@ AUTODETECT: ; CALL AUTODETECTING .IDEJUMPBACK: - CALL NC,MODEL + CALL NC,PRINT_IDE_MODEL LD A,(SKIP) INC A LD A,msgStrings.ideNone @@ -508,19 +508,20 @@ IDE_CMD: /////////////////////////////////////////////////////////////////////[v] -MODEL: LD HL,IDENTIFY_DEVICE_BUFFER.ModelNumber - LD A,(HL) - OR A - JR Z,.unknown - LD B,20 ;!HARDCODE - CALL DWPRINT - AND A - RET -.unknown: - LD A,msgStrings.ideUnknown - CALL POSTMSG - AND A - RET +PRINT_IDE_MODEL: + LD HL,IDENTIFY_DEVICE_BUFFER.ModelNumber + LD A,(HL) + OR A + JR Z,.unknown + LD B,+(_ATA_IDENTIFY_DEVICE_DATA.MaximumBlockTransfer - _ATA_IDENTIFY_DEVICE_DATA.ModelNumber)/2 + CALL PRINT_STR_BIG_ENDIAN + AND A + RET + ; +.unknown: LD A,msgStrings.ideUnknown + CALL POSTMSG + AND A + RET /////////////////////////////////////////////////////////////////////[^] @@ -536,7 +537,7 @@ BITS_WAITS: .loop: IN A,(C) AND D CP E - RET Z + RET Z DEC HL CALL SKIPKEY RET C @@ -827,7 +828,7 @@ DETECTORS: CALL BITS_WAITS.WAIT_PRT RET C ; - LD BC,IDE.Read.Status + ; BC = IDE.Read.Status IN A,(C) RRCA RET diff --git a/src/bios/rom/SETUP/MAIN.asm b/src/bios/rom/SETUP/MAIN.asm index cf40b26..b9c7910 100644 --- a/src/bios/rom/SETUP/MAIN.asm +++ b/src/bios/rom/SETUP/MAIN.asm @@ -1277,7 +1277,7 @@ PIDBOARD: CALL FN_CRIPT.board_id LD A,'-' CALL PRINT_CHAR POP HL - CALL IZPRINT + CALL IPRINT.Z POP DE PUSH DE LD A,D diff --git a/src/bios/rom/SETUP/VIDEO_IO.asm b/src/bios/rom/SETUP/VIDEO_IO.asm index eb14978..d12c672 100644 --- a/src/bios/rom/SETUP/VIDEO_IO.asm +++ b/src/bios/rom/SETUP/VIDEO_IO.asm @@ -16,73 +16,159 @@ ScreenPOS: JP LP_SET_PLACE ;; -;!TODO переделать, а то криво как-то -DWPRINT: - LD A,(HL) - CP ' ' - JR NZ,PRINTDW - INC HL - LD A,(HL) - DEC HL - CP ' ' - JR NZ,PRINTDW - INC HL - INC HL - DJNZ DWPRINT - RET -;!TODO переделать, а то криво как-то -PRINTDW: - PUSH BC - LD E,(HL) - INC HL - LD A,(HL) - INC HL - CALL PRINT_CHAR - LD A,E - CALL PRINT_CHAR - POP BC - DJNZ PRINTDW - RET -PRINTA: LD E,A - JP LP_PRINT_ATR -PRINT_CHAR: - LD B,1 - JP LP_PRINT_SYM + IF BIG_ENDIAN_STR_PRINT = 2 +PRINT_STR_BIG_ENDIAN: + LD A,(HL) + CP ' ' + JR NZ,.PRINTDW + INC HL + LD A,(HL) + DEC HL + CP ' ' + JR NZ,.PRINTDW + INC HL + INC HL +.no_space: DJNZ DWPRINT + RET + ; +.PRINTDW: PUSH BC + LD E,(HL) + INC HL + LD A,(HL) + INC HL + CALL PRINT_CHAR + LD A,E + CALL PRINT_CHAR + POP BC + LD A,' ' + CP E + JR Z,.no_space + DJNZ .PRINTDW + RET + + ELSEIF BIG_ENDIAN_STR_PRINT = 0 +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 + LD B,A + ; +.print_loop: CALL .no_space + RET Z + LD D,H + LD E,L + PUSH DE + PUSH BC + LD D,' ' + CALL LP_PRINT_LINE6 + POP BC + POP DE + PUSH HL + AND A + SBC HL,DE + LD A,B + SUB L + LD B,A + JR Z,.exit + LD A,' ' + INC B + PUSH BC + CALL PRINT_CHAR + POP BC + POP HL + DJNZ .print_loop + RET + ; +.no_space: LD A,(HL) + CP ' ' + RET NZ + INC HL + DJNZ .no_space + RET + ; +.exit: POP HL + RET + + ELSEIF BIG_ENDIAN_STR_PRINT = 1 +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 + LD B,A + JP LP_PRINT_LINE2 + ENDIF + + + +PRINTA: LD E,A + JP LP_PRINT_ATR +; +PRINT_CHAR: LD B,1 + JP LP_PRINT_SYM ; -TPRINTZ: CALL LP_SET_PLACE -PRINTZ: LD B,0 - LD D,B - JP LP_PRINT_LINE6 +;TPRINTZ: CALL LP_SET_PLACE +PRINTZ: LD B,0 + LD D,B + JP LP_PRINT_LINE6 +; -HPRINTZ: LD B,0 - LD D,B - LD E,COLORS.CGA.INK.WHITE - JP LP_PRINT_LINE5 +; HPRINTZ: LD B,0 +; LD D,B +; LD E,COLORS.CGA.INK.WHITE +; JP LP_PRINT_LINE5 -CPRINTZ: LD B,0 - LD D,B - LD E,A - JP LP_PRINT_LINE5 +CPRINTZ: LD B,0 + LD D,B + LD E,A + JP LP_PRINT_LINE5 +; -;HL - NUMBER -IZPRINT: LD D,1 - JR IPRIN -IPRINT: - LD D,0 -IPRIN: LD BC,10000 - CALL PRINTDG - LD BC,1000 - CALL PRINTDG - LD BC,100 - CALL PRINTDG - LD BC,10 - CALL PRINTDG - LD A,L - ADD A,#30 - JP PRINT_CHAR +IPRINT: LD D,0 +.I: LD BC,10000 + CALL PRINTDG + LD BC,1000 + CALL PRINTDG + LD BC,100 + CALL PRINTDG + LD BC,10 + CALL PRINTDG + LD A,L + ADD A,#30 + JP PRINT_CHAR + ;HL - NUMBER +.Z: LD D,1 + JR .I PRINTDG: LD A,#2F diff --git a/src/bios/shared/DEFINES.INC b/src/bios/shared/DEFINES.INC index 86aebc9..d619abc 100644 --- a/src/bios/shared/DEFINES.INC +++ b/src/bios/shared/DEFINES.INC @@ -23,4 +23,8 @@ BETA_RC EQU 0 ; DEFINE FDD_NormalCount 0 ; !TODO DEFINE UnusedSettingsFeatures 0 ; ;DEFINE OPTIMIZE_RW_PROCEDURE 0 ; + DEFINE BIG_ENDIAN_STR_PRINT 0 ; +; ; 0 - печать с порчей буфера и пропуском двойных пробелов - в 1,5 раза шустрее стока +; ; 1 - печать с порчей буфера без пропуска двойных пробелов - в 3 раза шустрее стока +; ; 2 - печать без порчи буфера без пропуска двойных пробелов - сток ;===============================================================; \ No newline at end of file