From 9710fd7a2924928dc3968e48dd2af5e54296e1de Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Sun, 23 Mar 2025 00:18:58 +1000 Subject: [PATCH] =?UTF-8?q?=D0=BA=D0=BE=D0=B2=D1=8B=D1=80=D1=8F=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20LP=5FPR=5FLINE=5FDIR?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Shared_Includes | 2 +- src/bios/exp/BIOS_FUNC.asm | 4 +- src/bios/exp/EXTENDED/FDD_DRIVER_2.asm | 21 +- src/bios/exp/FUNC_LOW_PRINT.ASM | 463 +++++++++++++++---------- 4 files changed, 293 insertions(+), 197 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index 840faf4..7c03abc 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 840faf40250ec41742e4da3c1f68077ba78a2dc6 +Subproject commit 7c03abc82040df54cec2bc6701b0f602fa08fd26 diff --git a/src/bios/exp/BIOS_FUNC.asm b/src/bios/exp/BIOS_FUNC.asm index 47c4f8c..3ef3da1 100644 --- a/src/bios/exp/BIOS_FUNC.asm +++ b/src/bios/exp/BIOS_FUNC.asm @@ -209,7 +209,7 @@ TAB_FNS: DB low FN_LIB ; #DE DB low FN_LIB ; #DF ; Ex - DB low LP_PR_LINE_DIR ; #E0 + DB low LP_PR_LINE_DIR.START ; #E0 DB low FN_RESERVED ; #E1 DB low FN_RESERVED ; #E2 DB low FN_RESERVED ; #E3 @@ -401,7 +401,7 @@ TAB_FNS: DB high FN_LIB DB high FN_LIB ; Ex - DB high LP_PR_LINE_DIR + DB high LP_PR_LINE_DIR.START DB high FN_RESERVED DB high FN_RESERVED DB high FN_RESERVED diff --git a/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm b/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm index 7a56109..7b86671 100644 --- a/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm +++ b/src/bios/exp/EXTENDED/FDD_DRIVER_2.asm @@ -337,6 +337,7 @@ FDD_5x_WRITE: ;Return: ; HL:IX - Sector + Sector counter ; DE - Address + (Sector counter * Size sector) +;?? B - Sector counter ;[]===========================================================[] FDD_5x_LONG_WRITE: CALL SAVE_INTERRUPTS.switch_off @@ -421,11 +422,21 @@ FDD_5x_LONG_WRITE: JR NZ,.ADW8BIT INC B .ADW8BIT: ADD IX,BC - LD BC,0 - ADC HL,BC - LD B,A - XOR A - RET + ;!TEST + ;LD BC,0 + ;ADC HL,BC + ;LD B,A + ;XOR A + ;RET + ; + LD B,A + RET NC + INC HL + XOR A + RET + ; + + ; ;------------------------------- diff --git a/src/bios/exp/FUNC_LOW_PRINT.ASM b/src/bios/exp/FUNC_LOW_PRINT.ASM index 6160403..3968f55 100644 --- a/src/bios/exp/FUNC_LOW_PRINT.ASM +++ b/src/bios/exp/FUNC_LOW_PRINT.ASM @@ -76,6 +76,11 @@ .LLL: ; ENDM + MACRO DJNZ_NEXT_HL_ADDR addr + DJNZ addr + CALL LP_NEXT_HL_DIR + ENDM + ;********************************* @@ -468,7 +473,7 @@ CLS_WIN: CALL LP_BEG_P PUSH DE ; .loop1: CALL LP_AT_D - CALL LP_TAB_E + ;CALL LP_TAB_E PUSH DE EXX LD BC,(SYS_PAGE.SYS_WORK1) @@ -659,20 +664,86 @@ LP_TAB_E: LD A,(WIN_ID_0.SIZE_REL) RET ;************************************************************* + +LP_NEXT_HL_DIR: LD A,SYS_PAGE + OUT (SLOT3),A + LD A,4 ;!HARDCODE длина одного описателя квадратика + ADD L + LD L,A + LD A,(WIN_ID_0.V_END) + CP L + CALL C,.end_line + ; +.no_end_line: LD A,(WIN_ID_0.H_BEG) + LD D,A + LD A,(WIN_ID_0.SIZE_REL) + LD B,A + RET + ; +.end_line: LD A,L + SUB 4 ;!HARDCODE длина одного описателя квадратика + LD L,A + PUSH HL + PUSH BC + PUSH DE + EXX + PUSH BC + PUSH DE + PUSH HL + LD A,(WIN_ID_0.USER.SIZE_V) + LD B,A + CALL LP_SCROLL_UP.RUN + EXX + LD C," " + ; + LD HL,(WIN_ID_0.V_END) + DEC L + DEC L + DEC L + LD H,#C3 + ; + LD A,(WIN_ID_0.H_BEG) + LD D,A + ; + LD A,#50 + OUT (SLOT3),A + ; + EXX + LD A,(WIN_ID_0.SIZE_REL) + LD B,A + ; +.loop_cl_line: EXX + LD A,D + OUT (PORT_Y),A + LD (HL),C + INC D + TEST_SCR_40 + EXX + DJNZ .loop_cl_line + ; + POP HL + POP DE + POP BC + EXX + POP DE + POP BC + POP HL + ; + LD A,SYS_PAGE + OUT (SLOT3),A + RET + + ; вычисление нового места LP_NEXT_HL: LD A,SYS_PAGE OUT (SLOT3),A - INC L - INC L - INC L - INC L + LD A,4 ;!HARDCODE длина одного описателя квадратика + ADD L + LD L,A LD A,(WIN_ID_0.V_END) CP L - JR NC,.no_end_line + JR C,.end_line ; - LD HL,(WIN_ID_0.V_BEG) - INC L - LD H,#C3 ;!HARDCODE .no_end_line: LD A,(WIN_ID_0.H_BEG) LD D,A LD A,(WIN_ID_0.SIZE_REL) @@ -680,6 +751,11 @@ LP_NEXT_HL: LD A,SYS_PAGE LD A,#50 OUT (SLOT3),A RET + ; +.end_line: LD HL,(WIN_ID_0.V_BEG) + INC L + LD H,#C3 ;!HARDCODE + JP .no_end_line ; !ожидается, что портятся только альтернативные регистры и те, что как параметры на входе LP_BEG_P: EX AF,AF' @@ -1205,7 +1281,7 @@ LP_SCROLL_UP: DEC E ;CALL LP_TAB_E ; вычислить переменные для строки POP BC .loop2: EXX - PUSH HL + PUSH HL EXX POP HL @@ -1224,7 +1300,7 @@ LP_SCROLL_UP: DEC E LD A,L EXX - LD L,A + LD L,A EXX LD A,(WIN_ID_0.USER.SIZE_H) @@ -1237,7 +1313,7 @@ LP_SCROLL_UP: DEC E LD A,#50 OUT (SLOT3),A ; открыть страницу для переноса EXX - LD A,D ; получить порт начала строки + LD A,D ; получить порт начала строки EXX .loop1: OUT (PORT_Y),A INC A ; следующее значение порта @@ -1576,161 +1652,170 @@ WIN_RESTORE: AND A ;!FIXIT нет описания, недоделана. Печать с управляющими символами ;------------------------------------------------------------------[#E0] +LP_PR_LINE_DIR: + ;!TODO недоделана +.BELL: ; ... + ; ... + JR .loop + ;!TODO недоделана +.BACK: LD A,SYS_PAGE + OUT (SLOT3),A + ; + LD A,(WIN_ID_0.H_BEG) + CP D + JR Z,.next_full ;!FIXIT возможно, что не сюда + INC B + DEC D + JR .next_full ;!FIXIT возможно, что не сюда + ; +.EXIT: POP IX + JP LP_END_P +;;;;;;;;;;;;;;;;; ; DE - место символа в окне ; HL - адрес с выводимой строкой -; B - разделитель -LP_PR_LINE_DIR: +; B - разделитель +;;;;;;;;;;;;;;;;; +.START: PUSH IX + IN A,(SLOT3) + LD C,A CALL LP_BEG_P - LD A,#50 - OUT (SLOT3),A - -.loop: EXX - LD A,D - OUT (PORT_Y),A + ; LD A,#50 + ; OUT (SLOT3),A + ; EXX +.loop: LD A,D + OUT (PORT_Y),A + EXX + LD A,C + OUT (SLOT3),A + ; LD A,(HL) + LD XH,A INC HL CP B - JR Z,.exit + JP Z,.EXIT EXX - ; печатаемые символы - CP 14 - JR NC,.print - CP 7 - JR C,.print - ; управляющие символы - SUB 7 - JR Z,LP_BELL ; A = 07 "BELL" - DEC A - JR Z,LP_BACK ; A = 08 "Backspace" - DEC A - JR Z,LP_TAB ; A = 09 "TAB" - DEC A - JR Z,LP_LF ; А = 10 "Line Feed" - DEC A - JR Z,.VT ; А = 11 "Vertical Tabulation" = "Line Feed", если LF работает как CRLF - DEC A - JR Z,LP_CLS ; А = 12 "Form feed" - разрыв страницы, начало нового листа, может работать как VT - DEC A - JR Z,LP_CR ; А = 13 "Carriage Return" - ; - + ; печатаемые символы + CP 14 + JR NC,.print + CP 7 + JR C,.print + ; управляющие символы + SUB 7 + JR Z,.BELL ; A = 07 "BELL" + DEC A + JR Z,.BACK ; A = 08 "Backspace" + DEC A + JR Z,.TAB ; A = 09 "TAB" + DEC A + JR Z,.LineFeed ; А = 10 "Line Feed" + DEC A + JR Z,.VertTab ; А = 11 "Vertical Tabulation" + DEC A + JR Z,.CLS ; А = 12 "Form feed" - разрыв страницы, начало нового листа, может работать как VT + DEC A + JR Z,.CR ; А = 13 "Carriage Return" ; выводить! -.VT: ; ... - ; ... -.print: LD (HL),A - INC D - -.next: ; ... - ; ... - TEST_SCR_40 - DJNZ_NEXT_HL - EXX - JR .loop - -.exit: JP LP_END_P -; -; -LP_PRINT_LN_D11: - LD A,#50 - OUT (SLOT3),A - JR LP_PR_LINE_DIR.next - -;!TODO недоделана -LP_BELL: - JR LP_PR_LINE_DIR.next - -LP_BACK: - LD A,SYS_PAGE - OUT (SLOT3),A - - LD A,(WIN_ID_0.H_BEG) - CP D - JR Z,LP_PRINT_LN_D11 - INC B - DEC D - JR LP_PRINT_LN_D11 - -;-------[TAB] -LP_TAB: LD A,SYS_PAGE - OUT (SLOT3),A - LD A,(WIN_ID_0.H_BEG) - SUB D - NEG - AND %0000'0111 - NEG - ADD A,8 - LD C,A - LD A,#50 - OUT (SLOT3),A - -.loop: LD (HL),' ' - INC D - DEC B - JR Z,.end_Line - DEC C - JR NZ,.loop - - JR LP_PR_LINE_DIR.next -.end_Line: - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,(WIN_ID_0.H_BEG) - LD D,A - LD A,(WIN_ID_0.SIZE_REL) - LD B,A - ;JP LP_LF -;-------[TAB end] -LP_LF: LD A,SYS_PAGE - OUT (SLOT3),A - - INC L - INC L - INC L - INC L - - LD A,(WIN_ID_0.V_END) - CP L - JR NC,LP_PRINT_LN_D11 - ;!TEST BIOS SCROLL - ;LD A,(WIN_ID_0.V_BEG) - ;LD L,A ; вернуться наверх без скролла!!! - ;-------------------------------------------------------------\ - PUSH HL - PUSH BC - EXX - PUSH BC - PUSH DE - EXX - - LD A,(WIN_ID_0.USER.SIZE_V) - LD B,A - CALL LP_SCROLL_UP.RUN - - EXX - POP DE - POP BC - EXX - POP BC - POP HL - ;-------------------------------------------------------------/ ; - ; scrolling ???? - JR LP_PRINT_LN_D11 - -LP_CLS: ; ... - ; scrolling ???? - JR LP_PR_LINE_DIR.next - -LP_CR: LD A,SYS_PAGE - OUT (SLOT3),A - - LD A,(WIN_ID_0.H_BEG) - LD D,A - LD A,(WIN_ID_0.SIZE_REL) - LD B,A - - JR LP_PRINT_LN_D11 +.print: LD A,#50 + OUT (SLOT3),A + LD A,XH + LD (HL),A + INC D +.next_full: TEST_SCR_40 +.next: DJNZ_NEXT_HL_ADDR .loop + JR .loop + ;-------[TAB] ;!FIXIT заполняет пробелами +.TAB: LD A,SYS_PAGE + OUT (SLOT3),A + LD A,(WIN_ID_0.H_BEG) + SUB D + NEG + AND %0000'0111 + NEG + ADD A,8 + LD C,A + LD A,#50 + OUT (SLOT3),A + ; +.loop_tab: LD (HL),' ' + INC D + DEC B + JR Z,.end_Line + DEC C + JR NZ,.loop_tab + JR .next_full + ; +.end_Line: LD A,SYS_PAGE + OUT (SLOT3),A + LD A,(WIN_ID_0.H_BEG) + LD D,A + LD A,(WIN_ID_0.SIZE_REL) + LD B,A + JP .LineFeed_go + ;-------[TAB end] + ; + ;-------[Line Feed] +.VertTab: ; +.LineFeed: LD A,SYS_PAGE + OUT (SLOT3),A + ; +.LineFeed_go: LD A,4 ;!HARDCODE длина одного описателя квадратика + ADD L + LD L,A + ; + LD A,(WIN_ID_0.V_END) + CP L + CALL C,LP_NEXT_HL_DIR.end_line + ;!TEST BIOS SCROLL + ;-------------------------------------------------------------\ + ; LD A,L + ; SUB 4 ;!HARDCODE длина одного описателя квадратика + ; LD L,A + ; PUSH HL + ; PUSH BC + ; PUSH DE + ; EXX + ; PUSH BC + ; PUSH DE + ; PUSH HL + ; ;EXX + ; LD A,(WIN_ID_0.USER.SIZE_V) + ; LD B,A + ; CALL LP_SCROLL_UP.RUN + ; ;EXX + ; POP HL + ; POP DE + ; POP BC + ; EXX + ; POP DE + ; POP BC + ; POP HL + ;-------------------------------------------------------------/ + ;LD HL,(WIN_ID_0.H_BEG - 1) + ;LD L,A ; WIN_ID_0.V_END - вернуться наверх без скролла!!! + ; + ;!TODO CALL clear_last_line_1F +; .SetPage_Loop: LD A,#50 +; OUT (SLOT3),A + JP .loop + ;-------[Line Feed end] + ; +.CLS: ; ... + ;!TODO CLS + JP .loop + ; +.CR: LD A,SYS_PAGE + OUT (SLOT3),A + ; + LD A,(WIN_ID_0.H_BEG) + LD D,A + LD A,(WIN_ID_0.SIZE_REL) + LD B,A + ; + ;LD A,#50 + ;OUT (SLOT3),A + JP .loop ;------------------------------------------------------------------[#E0] @@ -1823,43 +1908,43 @@ LP_SCR_MNU: ; DB 40,32,0,0,#1B,0,0,0 ; DB 0,0,0,0,0,0,0,0 -; LP_S %01100010,40,#4000 -; LP_S %01100010,40,#4028 -; LP_S %01100010,40,#4050 -; LP_S %01100010,40,#4078 -; LP_S %01100010,40,#40A0 -; LP_S %01100010,40,#40C8 +; LP_S %0110'0010,40,#4000 +; LP_S %0110'0010,40,#4028 +; LP_S %0110'0010,40,#4050 +; LP_S %0110'0010,40,#4078 +; LP_S %0110'0010,40,#40A0 +; LP_S %0110'0010,40,#40C8 ; -; LP_S %01100010,40,#4800 -; LP_S %01100010,40,#4828 -; LP_S %01100010,40,#4850 -; LP_S %01100010,40,#4878 -; LP_S %01100010,40,#48A0 -; LP_S %01100010,40,#48C8 +; LP_S %0110'0010,40,#4800 +; LP_S %0110'0010,40,#4828 +; LP_S %0110'0010,40,#4850 +; LP_S %0110'0010,40,#4878 +; LP_S %0110'0010,40,#48A0 +; LP_S %0110'0010,40,#48C8 ; -; LP_S %01100010,40,#5000 -; LP_S %01100010,40,#5028 -; LP_S %01100010,40,#5050 -; LP_S %01100010,40,#5078 -; LP_S %01100010,40,#50A0 -; LP_S %01100010,40,#50C8 +; LP_S %0110'0010,40,#5000 +; LP_S %0110'0010,40,#5028 +; LP_S %0110'0010,40,#5050 +; LP_S %0110'0010,40,#5078 +; LP_S %0110'0010,40,#50A0 +; LP_S %0110'0010,40,#50C8 ; -; LP_S %01100100,40,#4000 -; LP_S %01100100,40,#4028 -; LP_S %01100100,40,#4050 -; LP_S %01100100,40,#4078 -; LP_S %01100100,40,#40A0 -; LP_S %01100100,40,#40C8 +; LP_S %0110'0100,40,#4000 +; LP_S %0110'0100,40,#4028 +; LP_S %0110'0100,40,#4050 +; LP_S %0110'0100,40,#4078 +; LP_S %0110'0100,40,#40A0 +; LP_S %0110'0100,40,#40C8 ; -; LP_S %01100100,40,#4800 -; LP_S %01100100,40,#4828 -; LP_S %01100100,40,#4850 -; LP_S %01100100,40,#4878 -; LP_S %01100100,40,#48A0 -; LP_S %01100100,40,#48C8 +; LP_S %0110'0100,40,#4800 +; LP_S %0110'0100,40,#4828 +; LP_S %0110'0100,40,#4850 +; LP_S %0110'0100,40,#4878 +; LP_S %0110'0100,40,#48A0 +; LP_S %0110'0100,40,#48C8 ; -; LP_S %01100100,40,#5000 -; LP_S %01100100,40,#5028 +; LP_S %0110'0100,40,#5000 +; LP_S %0110'0100,40,#5028 ; ; DEFB #FF,0,0,0 ;