diff --git a/Shared_Includes b/Shared_Includes index 7c03abc..9143dcb 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 7c03abc82040df54cec2bc6701b0f602fa08fd26 +Subproject commit 9143dcb7f8fd9cd3ae0bc179b94fced5efd8667f diff --git a/src/bios/exp/BIOS_FUNC.asm b/src/bios/exp/BIOS_FUNC.asm index 3ef3da1..063881c 100644 --- a/src/bios/exp/BIOS_FUNC.asm +++ b/src/bios/exp/BIOS_FUNC.asm @@ -141,7 +141,7 @@ TAB_FNS: DB low EMM.MergeMemBlocks ; #9E слияние двух блоков DB low EMM.FullInit ; #9F инициализация всей памяти, системных переменных ; Ax - DB low PIC_FN0 ; #A0 ОТКРЫТИЕ ОКНА + DB low PIC_FN0_OpenWin ; #A0 ОТКРЫТИЕ ОКНА DB low PIC_FN1 ; #A1 ВЫВЕСТИ ТОЧКУ DB low PIC_FN2 ; #A2 ВЫВОД ЛИНИИ COPY DB low PIC_FN3 ; #A3 ВЫВОД ЛИНИИ FILL @@ -333,7 +333,7 @@ TAB_FNS: DB high EMM.MergeMemBlocks DB high EMM.FullInit ; Ax - DB high PIC_FN0 + DB high PIC_FN0_OpenWin DB high PIC_FN1 DB high PIC_FN2 DB high PIC_FN3 diff --git a/src/bios/exp/FUNC_LOW_PRINT.ASM b/src/bios/exp/FUNC_LOW_PRINT.ASM index f58e1ee..2269496 100644 --- a/src/bios/exp/FUNC_LOW_PRINT.ASM +++ b/src/bios/exp/FUNC_LOW_PRINT.ASM @@ -70,18 +70,20 @@ .LLL: EX AF,AF' ENDM ; + MACRO CORRECT_SCR_40_BACK + EX AF,AF' + JR C,.LLL + DEC D ; режим 40 +.LLL: EX AF,AF' + ENDM ; + + MACRO DJNZ_NEXT_HL DJNZ .LLL CALL LP_NEXT_HL .LLL: ; ENDM - MACRO DJNZ_NEXT_HL_ADDR addr - DJNZ addr - CALL LP_NEXT_HL_DIR - ENDM - - ;********************************* ;* LOW LEVEL PRINTER * @@ -208,8 +210,6 @@ LP_PRINT_ATR: CALL LP_BEG_P DJNZ_NEXT_HL EXX DJNZ .loop - ;LD A,SYS_PAGE - ;OUT (SLOT3),A JP LP_END_P ;------------------------------------------------------------------[#83] ; @@ -241,8 +241,6 @@ LP_PRINT_LINE: CALL LP_BEG_P DJNZ_NEXT_HL EXX DJNZ .loop - ;LD A,SYS_PAGE - ;OUT (SLOT3),A JP LP_END_P ;------------------------------------------------------------------[#85] ; @@ -287,8 +285,8 @@ LP_PRINT_LINE3: CALL LP_BEG_P INC HL CP D JR NZ,.NoEnd + ; DEC HL - ;LD A,' ' ;!TEST EXX LD C,' ' JP LP_PRINT_ALL.cont @@ -323,8 +321,8 @@ LP_PRINT_LINE4: CALL LP_BEG_P INC HL CP D JR NZ,.NoEndSymbol + ; DEC HL - ;LD A,' ' ;!TEST EXX LD C,' ' JP LP_PRINT_SYM.cont @@ -345,10 +343,12 @@ LP_PRINT_LINE4: CALL LP_BEG_P LP_PRINT_LINE5: CALL LP_BEG_P LD A,#50 OUT (SLOT3),A + EXX + LD C,PORT_Y + EXX ; .loop: EXX - LD A,D - OUT (PORT_Y),A + OUT (C),D EXX LD A,(HL) INC HL @@ -398,10 +398,12 @@ LP_END_P: LD A,SYS_PAGE LP_PRINT_LINE6: CALL LP_BEG_P LD A,#50 OUT (SLOT3),A + EXX + LD C,PORT_Y + EXX ; .loop: EXX - LD A,D - OUT (PORT_Y),A + OUT (C),D EXX LD A,(HL) INC HL @@ -438,15 +440,6 @@ LP_GET_PLACE: CALL LP_BEG_P NEG EXX ADD A,D - ; - EX AF,AF' - JR C,.LLL - EX AF,AF' - AND A - RRA ; режим txt 40 - EX AF,AF' -.LLL: EX AF,AF' - ; EXX LD E,A LD A,(WIN_ID_0.V_BEG) @@ -459,6 +452,12 @@ LP_GET_PLACE: CALL LP_BEG_P RRCA AND %0011'1111 LD D,A + ; режим txt 40 + EX AF,AF' + JR C,.no_txt40 + SRL E + AND A +.no_txt40: EX AF,AF' JP LP_END_P.short ;------------------------------------------------------------------[#8E] ; @@ -471,16 +470,15 @@ LP_CLS_WIN2: LD C,A ;--------------------------------------------------------[#8D] ;--------------------------------------------------------[#89] LP_CLS_WIN: LD C,' ' - ;JR CLS_WIN -;----------------- ---------------------------[#89] +;---------------- -----------------------------[#89] CLS_WIN: CALL LP_BEG_P - LD (SYS_PAGE.SYS_WORK1),BC ; сохранить цвет + LD (SYS_PAGE.SYS_WORK1),BC ; сохранить цвет ; !TODO использовать переменные окна PUSH DE ; .loop1: CALL LP_SET_CUR PUSH DE EXX - LD BC,(SYS_PAGE.SYS_WORK1) + LD BC,(SYS_PAGE.SYS_WORK1) ; !TODO использовать переменные окна EXX LD B,L LD A,#50 @@ -611,10 +609,11 @@ LP_SIZE: CALL LP_OPEN_PG AND %0010'0000 CALL LP_CLOSE_PG RET NZ - ; - LD A,E - ADD A,A - LD E,A + ; txt 40 + ; LD A,E + ; ADD A,A + ; LD E,A + SLA E RET ; @@ -641,7 +640,7 @@ LP_SET_CUR: ; LP_AT_D: ADD A,L LD L,A INC L - LD H,#C3 + LD H,#C3 ;!HARDCODE начало описателей в SLOT3 EXX ;RET ; @@ -664,15 +663,8 @@ LP_SET_CUR: ; LP_AT_D: ; EX AF,AF' JR C,.LLL - SLA D ; режим txt 40 + SLA D ; режим txt 40. не должно ставить CF .LLL: EX AF,AF' - ;LD A,(WIN_ID_0.USER.MODE) - ;AND %0010'0000 - ;JR Z,.skip_Dx2 - ;LD A,D - ;ADD A,A - ;LD D,A - ; .skip_Dx2: LD A,(WIN_ID_0.H_BEG) ADD A,D LD D,A @@ -680,7 +672,6 @@ LP_SET_CUR: ; LP_AT_D: RET ;************************************************************* - LP_NEXT_HL_DIR: LD A,SYS_PAGE OUT (SLOT3),A LD A,4 ;!HARDCODE длина одного описателя квадратика @@ -700,12 +691,14 @@ LP_NEXT_HL_DIR: LD A,SYS_PAGE SUB 4 ;!HARDCODE длина одного описателя квадратика LD L,A PUSH HL + DEC HL PUSH BC PUSH DE EXX PUSH BC - PUSH DE PUSH HL + LD A,(WIN_ID_0.V_BEG) + LD D,A LD A,(WIN_ID_0.USER.SIZE_V) LD B,A LD E,0 ; всю строку окна скроллим @@ -713,6 +706,8 @@ LP_NEXT_HL_DIR: LD A,SYS_PAGE EXX LD C," " ; + LD A,SYS_PAGE + OUT (SLOT3),A LD HL,(WIN_ID_0.V_END) DEC L DEC L @@ -728,7 +723,6 @@ LP_NEXT_HL_DIR: LD A,SYS_PAGE EXX LD A,(WIN_ID_0.SIZE_REL) LD B,A - ; .loop_cl_line: EXX LD A,D OUT (PORT_Y),A @@ -739,7 +733,6 @@ LP_NEXT_HL_DIR: LD A,SYS_PAGE DJNZ .loop_cl_line ; POP HL - POP DE POP BC EXX POP DE @@ -771,7 +764,7 @@ LP_NEXT_HL: LD A,SYS_PAGE ; .end_line: LD HL,(WIN_ID_0.V_BEG) INC L - LD H,#C3 ;!HARDCODE + LD H,#C3 ;!HARDCODE начало описателей в SLOT3 JP .no_end_line ; !ожидается, что портятся только альтернативные регистры и те, что как параметры на входе @@ -794,21 +787,21 @@ LP_INI_P: EX AF,AF' CALL LP_OPEN_PG LD A,(WIN_ID_0.USER.MODE) CP #C0 - JR NC,LP_INI_NO_ZG ; открытие бордера... + JR NC,.NO_ZG ; открытие бордера... LD A,(WIN_ID_0.USER.MODE_S) AND %0000'0001 - JR NZ,LP_INI_NO_ZG ; открытие Spectrum-Screen + JR NZ,.NO_ZG ; открытие Spectrum-Screen ; LD A,(WIN_ID_0.USER.MODE) BIT 4,A - JR Z,LP_INI_NO_ZG ; открытие графического экрана + JR Z,.NO_ZG ; открытие графического экрана LD DE,(SYS_PAGE.WIN_ZG) ; знакогенератор EXX EX AF,AF' - CALL WIN_SET_ZG.SET ;LP_SET_ZG1 - EXX + CALL WIN_SET_ZG.SET ;LP_SET_ZG1 ;!TODO стоит ли каждый раз закидывать шрифт? EX AF,AF' -LP_INI_NO_ZG: LD A,(WIN_ID_0.H_BEG) + EXX +.NO_ZG: LD A,(WIN_ID_0.H_BEG) LD D,A LD A,(WIN_ID_0.V_BEG) LD L,A @@ -818,16 +811,12 @@ LP_INI_NO_ZG: LD A,(WIN_ID_0.H_BEG) LD A,(WIN_ID_0.USER.MODE) BIT 5,A LD A,(WIN_ID_0.USER.SIZE_H) - JR NZ,LP_INI_40 + JR NZ,.TXT_40 + ; TXT_80 ADD A,A SCF -LP_INI_40: LD B,A +.TXT_40: LD B,A LD (WIN_ID_0.SIZE_REL),A - ;LD DE,(SYS_PAGE.WIN_MODE_SC) ; место по горизонтали и страница моды - ;LD HL,(SYS_PAGE.WIN_MODE_SH) ; место по вертикали с адресом - ;INC HL - ;LD B,0 - ;CALL LP_TAB_H2 EX AF,AF' EXX JP LP_END_P @@ -870,29 +859,29 @@ LP_SC_TAB: DW LP_SET_32 ; 0 - спе ; !TODO ; LP_SET_MNU: ; LD IX,LP_SCR_MNU -; JP LP_SET_MODE +; JP PIC_FN0_OpenWin LP_SET_32: LD HL,#4104 .X: LD IX,LP_SCR_32 - JP LP_SET_MODE + JP PIC_FN0_OpenWin LP_SET_64: LD HL,#4104 .X: LD IX,LP_SCR_64 - JP LP_SET_MODE + JP PIC_FN0_OpenWin LP_SET_40: LD HL,#4000 .X: LD IX,LP_SCR_40 - JP LP_SET_MODE + JP PIC_FN0_OpenWin LP_SET_80: LD HL,#4000 .X: LD IX,LP_SCR_80 - JP LP_SET_MODE + JP PIC_FN0_OpenWin PIC_SET_S1: LD IX,PIC_320X256_1 - JP LP_SET_MODE + JP PIC_FN0_OpenWin PIC_SET_S2: LD IX,PIC_320X256_2 - JP LP_SET_MODE + JP PIC_FN0_OpenWin ;------------------------------------------------------------------[#80] ; @@ -934,26 +923,27 @@ WIN_OPEN: CALL .Prepare ; HL = X + Y*64 + #4000 + #1000*RGMOD. место на экране по знакоместам ; IX - описатель окна ; E - bit0: номер экрана -PIC_FN0: -LP_SET_MODE: ; финт для совместимости со старыми прогами, где передавались другие параметры - LD A,H - AND %00001'0000 ; переместить бит 4 в регистр E - XOR E - LD E,A - ; - LD A,L - AND #3F - ADD HL,HL - ADD HL,HL - LD L,A - ; - LD A,H - AND #3F - LD H,A +;LP_SET_MODE: +PIC_FN0_OpenWin: + ; финт для совместимости со старыми прогами, где передавались другие параметры + LD A,H + AND %00001'0000 ; переместить бит 4 в регистр E + XOR E + LD E,A ; + LD A,L + AND #3F + ADD HL,HL + ADD HL,HL + LD L,A + ; + LD A,H + AND #3F + LD H,A CALL WIN_OPEN.Prepare LD (IX + Window_Variables.USER.PLACE_H),L LD (IX + Window_Variables.USER.PLACE_V),H + ; WIN_OPEN_W1: LD A,L ADD A,A INC A ; вычисление PORT_Y @@ -1293,9 +1283,15 @@ LP_SCROLL_UP: DEC E .EXIT: JP LP_CLOSE_PG ; ; -.RUN: PUSH BC - CALL LP_SET_CUR ; вычислить переменные для строки - POP BC +.RUN: CALL LP_SET_CUR ; вычислить переменные для строки + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!TODO + ; отличие от LP_SCROLL_DN + LD A,(WIN_ID_0.V_END) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + LD C,A + LD A,#50 + OUT (SLOT3),A ; открыть страницу для переноса + ; .loop2: EXX PUSH HL EXX @@ -1303,16 +1299,16 @@ LP_SCROLL_UP: DEC E ; LD E,L LD D,H - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!TODO - ; отличие от LP_SCROLL_DN + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!TODO + ; отличие от LP_SCROLL_DN LD A,4 ADD L LD L,A ; - LD A,(WIN_ID_0.V_END) + LD A,C CP L RET C ; если конец, то выход - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PUSH BC LD A,L EXX @@ -1324,8 +1320,6 @@ LP_SCROLL_UP: DEC E LD C,A LD B,0 ; - LD A,#50 - OUT (SLOT3),A ; открыть страницу для переноса EXX LD A,D ; получить порт начала строки EXX @@ -1339,8 +1333,6 @@ LP_SCROLL_UP: DEC E LDD JP PE,.loop1 ; - LD A,SYS_PAGE - OUT (SLOT3),A POP BC DJNZ .loop2 RET @@ -1363,9 +1355,15 @@ LP_SCROLL_DN: DEC E ;!FIXIT .EXIT: JP LP_CLOSE_PG ; ; -.RUN: PUSH BC - CALL LP_SET_CUR - POP BC +.RUN: CALL LP_SET_CUR + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!TODO + ; отличие от LP_SCROLL_UD + LD A,(WIN_ID_0.V_BEG) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + LD C,A + LD A,#50 + OUT (SLOT3),A ; открыть страницу для переноса + ; .loop2: EXX PUSH HL EXX @@ -1373,18 +1371,17 @@ LP_SCROLL_DN: DEC E ;!FIXIT ; LD E,L LD D,H - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!TODO - ; можно совместить. признак направления в рег C - ; отличие от LP_SCROLL_UD + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!TODO + ; отличие от LP_SCROLL_UD LD A,L SUB 4 LD L,A ; - LD A,(WIN_ID_0.V_BEG) + LD A,C CP L ; .CONT: L >= A JR Z,.CONT RET NC ; если конец, то выход - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .CONT: PUSH BC LD A,L EXX @@ -1396,8 +1393,6 @@ LP_SCROLL_DN: DEC E ;!FIXIT LD C,A LD B,0 ; - LD A,#50 - OUT (SLOT3),A ; открыть страницу для переноса EXX LD A,D ; получить порт начала строки EXX @@ -1411,8 +1406,6 @@ LP_SCROLL_DN: DEC E ;!FIXIT LDD JP PE,.loop1 ; - LD A,SYS_PAGE - OUT (SLOT3),A POP BC DJNZ .loop2 RET @@ -1653,24 +1646,27 @@ LP_PR_LINE_DIR: ; LD A,(WIN_ID_0.H_BEG) CP D - JR Z,.next_full ;!FIXIT возможно, что не сюда + JR Z,.loop INC B DEC D - JR .next_full ;!FIXIT возможно, что не сюда + CORRECT_SCR_40_BACK + JP .loop ; .EXIT: POP IX JP LP_END_P ;;;;;;;;;;;;;;;;; -; DE - место символа в окне +; DE - место символа в окне, если A != 0 ; HL - адрес с выводимой строкой ; B - разделитель +; A - mode ;;;;;;;;;;;;;;;;; .START: PUSH IX + AND A ; check mode for DE + ; IN A,(SLOT3) LD C,A CALL LP_BEG_P - ; LD A,#50 - ; OUT (SLOT3),A + CALL NZ,LP_SET_CUR ; mode for DE ; EXX .loop: LD A,D @@ -1713,8 +1709,9 @@ LP_PR_LINE_DIR: LD (HL),A INC D .next_full: CORRECT_SCR_40 -.next: DJNZ_NEXT_HL_ADDR .loop - JR .loop +.next: DJNZ .loop + CALL LP_NEXT_HL_DIR + JP .loop ;-------[TAB] ;!FIXIT заполняет пробелами .TAB: LD A,SYS_PAGE OUT (SLOT3),A @@ -1757,37 +1754,6 @@ LP_PR_LINE_DIR: 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] ; diff --git a/src/bios/exp/FUNC_SCREEN.ASM b/src/bios/exp/FUNC_SCREEN.ASM index ae44fe5..9da51e1 100644 --- a/src/bios/exp/FUNC_SCREEN.ASM +++ b/src/bios/exp/FUNC_SCREEN.ASM @@ -340,7 +340,7 @@ SET_PAL_INIT: ; Рисование линии. ; dЕ - вертикаль, HL - горизонталь ; H' - высота, C'/DE',B' - add_parameters -; A - color +; A - color ;!FIXIT заменить сразу на D? PIC_FN7: LD D,A IN A,(SLOT1) @@ -351,9 +351,9 @@ PIC_FN7: OUT (SLOT1),A BIT 0,B - LD BC,#40+#4000 + LD BC,#40+#4000 ;!HARDCODE screen JR Z,.no_2nd - LD BC,#40+320+#4000 + LD BC,#40+320+#4000 ;!HARDCODE screen .no_2nd: ADD HL,BC LD A,E @@ -408,9 +408,9 @@ PIC_FN8: OUT (SLOT1),A BIT 0,B - LD BC,#40+#4000 + LD BC,#40+#4000 ;!HARDCODE screen JR Z,.no_2nd - LD BC,#40+320+#4000 + LD BC,#40+320+#4000 ;!HARDCODE screen .no_2nd: ADD HL,BC LD A,E