diff --git a/Shared_Includes b/Shared_Includes index 60b5ff6..9bfe7bd 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 60b5ff6a74b57614b1f54fbe5611585cd46582ab +Subproject commit 9bfe7bd76b9648dae6f492dcd730b9b7ed80f48d diff --git a/src/bios/exp/FONT.ASM b/src/bios/exp/FONT.ASM index 2ef9370..3ea3f24 100644 --- a/src/bios/exp/FONT.ASM +++ b/src/bios/exp/FONT.ASM @@ -167,4 +167,8 @@ end end ENDLUA -; \ No newline at end of file +; +/* +Линия 256 байтов в ОЗУ становится столбиком в видеопамяти. +Слева направо переходит сверху вниз. Первая линия - первый столбик. +*/ \ No newline at end of file diff --git a/src/bios/exp/FUNC_LOW_PRINT.ASM b/src/bios/exp/FUNC_LOW_PRINT.ASM index 29ad79c..70ac35e 100644 --- a/src/bios/exp/FUNC_LOW_PRINT.ASM +++ b/src/bios/exp/FUNC_LOW_PRINT.ASM @@ -597,12 +597,12 @@ WIN_SET_ZG: ; LP_SET_ZG: AND #0F ADD A,A OUT (PORT_Y),A - LD A,B - RRCA - RRCA - RRCA - AND #18 - OR #40 + LD A,B ; %xx00'0000 + RRCA ; %0xx0'0000 + RRCA ; %00xx'0000 + RRCA ; %000x'x000 + AND %0001'1000 + OR %0100'0000 LD H,A LD L,0 LD BC,#0800 ;!HARDCODE @@ -783,7 +783,7 @@ LP_INI_P: EXX EX AF,AF' - CALL WIN_SET_ZG.SET ;LP_SET_ZG1 + CALL WIN_SET_ZG.SET ;LP_SET_ZG1 EXX EX AF,AF' @@ -833,9 +833,6 @@ LP_OPEN_S: LD A,B LD L,A JR NC,.no_inc INC H - ; LD A,H - ; ADC A,0 - ; LD H,A .no_inc: LD A,(HL) INC HL LD H,(HL) @@ -895,6 +892,9 @@ PIC_SET_S2: ;------------------------------------------------------------------[#B0] ; HL - место на экране по знакоместам (НЕ ИСПОЛЬЗУЕТСЯ) ; IX - описатель окна +WIN_OPEN.SCR1: + LD E,1 +; E - bit0 - номер экрана WIN_OPEN: LP_OPEN_PG LD (SYS_PAGE.WIN_MAP_SC),IX ; карта окна @@ -1055,7 +1055,7 @@ LP_MODE_LINE: LP_MODE_RECURSE: LD A,D ; горизонтальное положение - AND 7FH + AND #7F SUB 80 JR C,LP_MODE_LL SUB 48 @@ -1067,7 +1067,7 @@ LP_MODE_RECURSE: LD A,E ; восстановить RRA - AND 3FH + AND #3F SUB C JR NC,LP_EXIT_MODE NEG @@ -1077,7 +1077,7 @@ LP_MODE_RECURSE: LP_MODE_LL: NEG RRA - AND 3FH + AND #3F CP C JR NC,LP_MODE_LR LD C,A @@ -1910,3 +1910,453 @@ LP_CR: LD A,SYS_PAGE JR LP_PRINT_LN_D11 ;------------------------------------------------------------------[#E0] + +;!TODO старая LP_SET_MODE - расковырять старый LP_SCR_MNU +/* + MODULE EXPERIMENT + +; byte 1 +; 0..4 - VIDEO_PAGE +; 5 - mode 42/84 ; 0 - 42,1 - 84 +; 6 - next line +; 7 - end table +; byte 2 - number of places +; byte 3..4 - adress places/ +; 4000-5FFF - Spectrum modes/ C000-FFFF - Graf mode +; + MACRO LP_S PG,XX,ADR + DB PG,XX + DW ADR + ENDM +;--------------------------------------- +GR_BIT_END EQU 7 + +S_BIT_END EQU 7 +S_BIT_LIN EQU 6 +S_BIT_MOD EQU 5 + +BIT_1440 EQU 1 +BIT_MASK_1440 EQU %00000010 + +MODE_PAGE EQU #FC +;--------------------------------------- + ;DS (($/4)*4+4-$) + ALIGN 4 + + +LP_SCR_MNU: + LP_S #40,14,#40E7 + LP_S #40,14,#4807 + LP_S #40,14,#4827 + LP_S #40,14,#4847 + LP_S #40,14,#4867 + LP_S #40,14,#4887 + LP_S #40,14,#48A7 + LP_S #40,14,#48C7 + LP_S #40,14,#48E7 + DB #FF,0,0,0 + +; LP_SCR_80: +; 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 %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 %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 %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 %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 %01100100,40,#5000 +; LP_S %01100100,40,#5028 +; +; DEFB #FF,0,0,0 +; +; LP_SCR_40: +; DB 40,32,0,0,7BH,0,0,0 +; DB 0,0,0,0,0,0,0,0 +; +; LP_S 01000100B,40,5050H +; LP_S 01000100B,40,5078H +; LP_S 01000100B,40,50A0H +; LP_S 01000100B,40,50C8H +; +; LP_S 01000110B,40,4000H +; LP_S 01000110B,40,4028H +; LP_S 01000110B,40,4050H +; LP_S 01000110B,40,4078H +; LP_S 01000110B,40,40A0H +; LP_S 01000110B,40,40C8H +; +; LP_S 01000110B,40,4800H +; LP_S 01000110B,40,4828H +; LP_S 01000110B,40,4850H +; LP_S 01000110B,40,4878H +; LP_S 01000110B,40,48A0H +; LP_S 01000110B,40,48C8H +; +; LP_S 01000110B,40,5000H +; LP_S 01000110B,40,5028H +; LP_S 01000110B,40,5050H +; LP_S 01000110B,40,5078H +; LP_S 01000110B,40,50A0H +; LP_S 01000110B,40,50C8H +; +; LP_S 01001000B,40,4000H +; LP_S 01001000B,40,4028H +; LP_S 01001000B,40,4050H +; LP_S 01001000B,40,4078H +; LP_S 01001000B,40,40A0H +; LP_S 01001000B,40,40C8H +; +; LP_S 01001000B,40,4800H +; LP_S 01001000B,40,4828H +; LP_S 01001000B,40,4850H +; LP_S 01001000B,40,4878H +; +; DEFB 0FFh,0,0,0 +; +; LP_SCR_32: +; DB 32,24,4,4,30H,1,0,0 +; DB 0,0,0,0,0,0,0,0 +; +; LP_S 040h,32,04000H +; LP_S 040h,32,04020H +; LP_S 040h,32,04040H +; LP_S 040h,32,04060H +; LP_S 040h,32,04080H +; LP_S 040h,32,040A0H +; LP_S 040h,32,040C0H +; LP_S 040h,32,040E0H +; +; LP_S 040h,32,04800H +; LP_S 040h,32,04820H +; LP_S 040h,32,04840H +; LP_S 040h,32,04860H +; LP_S 040h,32,04880H +; LP_S 040h,32,048A0H +; LP_S 040h,32,048C0H +; LP_S 040h,32,048E0H +; +; LP_S 040h,32,05000H +; LP_S 040h,32,05020H +; LP_S 040h,32,05040H +; LP_S 040h,32,05060H +; LP_S 040h,32,05080H +; LP_S 040h,32,050A0H +; LP_S 040h,32,050C0H +; LP_S 040h,32,050E0H +; +; LP_S 0FFh,0,0 +; +; LP_SCR_64: +; DB 32,24,4,4,9BH,0,0,0 +; DB 0,0,0,0,0,0,0,0 +; +; LP_S 06Ah,32,04000H +; LP_S 06Ah,32,04020H +; LP_S 06Ah,32,04040H +; LP_S 06Ah,32,04060H +; LP_S 06Ah,32,04080H +; LP_S 06Ah,32,040A0H +; LP_S 06Ah,32,040C0H +; LP_S 06Ah,32,040E0H +; +; LP_S 06Ah,32,04800H +; LP_S 06Ah,32,04820H +; LP_S 06Ah,32,04840H +; LP_S 06Ah,32,04860H +; LP_S 06Ah,32,04880H +; LP_S 06Ah,32,048A0H +; LP_S 06Ah,32,048C0H +; LP_S 06Ah,32,048E0H +; +; LP_S 06Ah,32,05000H +; LP_S 06Ah,32,05020H +; LP_S 06Ah,32,05040H +; LP_S 06Ah,32,05060H +; LP_S 06Ah,32,05080H +; LP_S 06Ah,32,050A0H +; LP_S 06Ah,32,050C0H +; LP_S 06Ah,32,050E0H +; +; LP_S 0FFh,0,0 + + +LP_SET_MNU: + LD IX,LP_SCR_MNU + JR LP_SET_MODE + + +; HL - смещение от начала экрана +; = hor_sh + vert_sh * 64 + 4000H +; IX - экранная таблица +LP_SET_MODE: LP_OPEN_PG + LD (SYS_PAGE.WIN_MAP_SC),IX + LD (SYS_PAGE.WIN_MODE_SH),HL + LD (SYS_PAGE.WIN_MODE_SC),DE + LD HL,(SYS_PAGE.WIN_MAP_SC) + LD DE,SYS_PAGE.WIN_MAP_IX +.LP_SET_COPY: LD BC,4 + LDIR + BIT S_BIT_END,(HL) + JR Z,.LP_SET_COPY + LD BC,4 + LDIR + LD HL,SYS_PAGE.WIN_MAP_IX + LD (SYS_PAGE.WIN_MAP_SC),HL +.LP_SET_MODE_INT: + LD IX,(SYS_PAGE.WIN_MAP_SC) + LD HL,(SYS_PAGE.WIN_MODE_SH) + CALL LP_SET_MODE1 + LD DE,(SYS_PAGE.WIN_MODE_SC) + LP_CLOSE_PG + PUSH DE + CALL LP_INI_P + POP DE + LD A,E + OUT (RGMOD),A + CALL LP_SIZE + RET + +LP_SET_MODE1: AND A + BIT S_BIT_END,(IX) ; проверка конца данных + RET NZ + + PUSH HL + + IN A,(RGADR) + PUSH AF + + LD A,H + CP #48 + CCF + LD A,#16 + ADC A,0 + OUT (RGADR),A + +.LP_SET_LOOP: CALL LP_MODE_LINE + + INC IX + INC IX + INC IX + INC IX + BIT S_BIT_LIN,(IX) + JR Z,.LP_SET_LOOP + + POP AF + OUT (RGADR),A + + POP HL + + LD BC,#40 + ADD HL,BC + JR LP_SET_MODE1 + +;******************************************************** +; Вычисление значения MODE из экранной таблицы. +; IX - текущее положение в таблице. +LP_MODE_LINE: BIT 3,H + RET NZ + + IN A,(SLOT1) + LD (SYS_PAGE.SYS_WORK1),A + + IN A,(RGADR) + AND 1 + OR MODE_PAGE + OUT (SLOT1),A + + LD A,(IX) + LD B,A + RRCA + AND #0F + LD C,A + LD A,B + AND #20 + XOR #30 + OR C + LD C,A + LD A,(IX+3) + RLC A + RLC A + RLC A + AND #C0 + OR C + LD D,A ; Первый байт MODE + LD E,(IX+2) ; Второй байт.. + + LD B,(IX+1) ; число знакомест + + LD A,L + AND #3F + SUB 40 + JR NC,.LP_NO_SET_MD + NEG + CP B + JR NC,.LP_MD_NO_B + LD B,A +.LP_MD_NO_B: + +.LP_MD_LOOP: SET 4,H + LD (HL),E + RES 4,H + LD (HL),D + + INC E + INC L + DJNZ .LP_MD_LOOP + +.LP_MD_END: LD A,(SYS_PAGE.SYS_WORK1) + OUT (SLOT1),A + RET + +.LP_NO_SET_MD: LD A,C + +.LP_MD_LOOP2: INC E + INC L + BIT 5,H + JR Z,.LP_MD_LOOP + DJNZ .LP_MD_LOOP2 + JR .LP_MD_END + + +; вычисление нового места +LP_TAB_HL: LD HL,(SYS_PAGE.WIN_TAB_SC) ; загрузить текущее положение в таблице SCR + LD A,(HL) ; загрузить флаги таблицы + BIT S_BIT_END,A ; флаг конца + JR Z,LP_TAB_H1 ; если 0 - не конец +LP_TAB_H2: LD HL,(SYS_PAGE.WIN_MAP_SC) ; загрузить начальное положение в таблице SCR +LP_TAB_H3: LD A,(HL) ; и новые флаги +LP_TAB_H1: CALL .LP_PG1 ; переключить страницу + INC HL ; (HL) - новое число символов + BIT S_BIT_MOD,A ; бит 42/84 + LD A,(HL) ; загрузить число символов + JR Z,.LP_NO_MUL ; если 84, то не нужно умножение на 2 + ADD A,A ; A=A*2 +.LP_NO_MUL: LD B,A ; число символов в B + INC HL ; загрузка нового HL + LD A,(HL) + INC HL + INC HL + LD (SYS_PAGE.WIN_TAB_SC),HL ; с сохранением следующего положения в таблице SCR + DEC HL + LD H,(HL) ; положение на экране + LD L,A + + LD A,H + RRCA ; вычислить положение + RRCA ; аттрибута + RRCA + AND 3 + OR H + OR #18 + LD C,A + RET + +.LP_PG1: AND #1F ; переключать только страницы ОЗУ Spectrum mode + OUT (RGADR),A + LD E,(HL) ; значение битов и флагов + + BIT S_BIT_MOD,E ; бит 42/84 + JR Z,.LP_N_84 ; если 42 то не устанавливать CF + SCF ; 84 mode +.LP_N_84: EX AF,AF' ; спрятать флаги и значение для вывода в порт + LD A,E ; в A должен быть байт с флагами + RET + +; program init registers +; for low printer & save +LP_INI_P: EXX + LP_OPEN_PG + LD DE,(SYS_PAGE.WIN_ZG) + LD B,0 + CALL LP_TAB_H2 + EXX +; program save registers +; for low printer +LP_END_P: EX AF,AF' + EXX + RLA + LD E,A + LD (SYS_PAGE.WIN_SAV_HL),HL + LD (SYS_PAGE.WIN_SAV_DE),DE + LD (SYS_PAGE.WIN_SAV_BC),BC + LP_CLOSE_PG + EXX + EX AF,AF' + RET + + +; определение size +LP_SIZE: LP_OPEN_PG + EXX + XOR A + LD HL,(SYS_PAGE.WIN_MAP_SC) ; начало карты scr + CALL .LP_LN2 ; сканировать до + EXX ; конца + NEG ; получить число + LD D,A ; строк в D + LD E,0 + EXX + ;LD A,3 ; число символов + LD HL,(SYS_PAGE.WIN_MAP_SC) ; по 3-йе строке + ;CALL LP_LN2 ; настройка +.LOOP: CALL LP_TAB_H3 ; данные + LD A,B + EXX + ADD A,E + LD E,A + EXX + LD HL,(SYS_PAGE.WIN_TAB_SC) ; данные экрана + BIT S_BIT_LIN,(HL) + JR Z,.LOOP + ;BIT S_BIT_MOD,(HL) + EXX + ;XOR A + ;OUT (RGADR),A + LP_CLOSE_PG + RET + ; +.LP_LN0: DEC A + RET Z +.LP_LN1: INC HL + INC HL + INC HL + INC HL +.LP_LN2: BIT S_BIT_LIN,(HL) + JR Z,.LP_LN1 + BIT S_BIT_END,(HL) + JR Z,.LP_LN0 + RET + + ENDMODULE +*/ diff --git a/src/bios/rom/SETUP/MAIN.asm b/src/bios/rom/SETUP/MAIN.asm index b9c7910..bbbec36 100644 --- a/src/bios/rom/SETUP/MAIN.asm +++ b/src/bios/rom/SETUP/MAIN.asm @@ -496,9 +496,7 @@ INSTALL: XOR A OUT (BorderColor),A LD IX,win_descriptor.tab80x32 - ;LD HL,#0000 - LD E,1 - CALL WIN_OPEN + CALL WIN_OPEN.SCR1 LD DE,0 LD HL,#2050 diff --git a/src/bios/rom/SETUP/SETTINGS.asm b/src/bios/rom/SETUP/SETTINGS.asm index a08ea4c..e436937 100644 --- a/src/bios/rom/SETUP/SETTINGS.asm +++ b/src/bios/rom/SETUP/SETTINGS.asm @@ -858,9 +858,7 @@ setInt: ld a,CMOS_CELL.ScreenSET .set: CALL FN_SYNC LD IX,win_descriptor.tab80x32 - ;LD HL,#0000 - LD E,1 - CALL WIN_OPEN + CALL WIN_OPEN.SCR1 ld a,(ITEM) ld (ITEM_Restore),a diff --git a/src/bios/rom/SETUP/VIDEO_IO.asm b/src/bios/rom/SETUP/VIDEO_IO.asm index d12c672..be66ec6 100644 --- a/src/bios/rom/SETUP/VIDEO_IO.asm +++ b/src/bios/rom/SETUP/VIDEO_IO.asm @@ -316,12 +316,12 @@ LOGOTYPE: CALL SHOW_LOGO ; ; .ERASE_LOGO: LD IX,win_descriptor.tab80x32 ;LD HL,#0000 - LD E,1 + ;LD E,1 ; EI HALT DI - CALL WIN_OPEN + CALL WIN_OPEN.SCR1 ; LD DE,0 LD HL,#0920 ;!HARDCODE LOGOTYPE SIZE @@ -338,9 +338,7 @@ LOGOTYPE: CALL SHOW_LOGO ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SHOW_LOGO: LD IX,win_descriptor.tab320x256 - ;LD HL,#0000 - LD E,1 - CALL WIN_OPEN + CALL WIN_OPEN.SCR1 SAFE_PORTY @@ -449,9 +447,7 @@ go_setup: ; !FIXIT jr nz,go_setup LD IX,win_descriptor.tab80x32 - ;LD HL,#0000 - LD E,1 - CALL WIN_OPEN + CALL WIN_OPEN.SCR1 JP ENTER_SETUP .to_EXIT_SETUP: diff --git a/src/bios/shared/RECOVERY.IMG b/src/bios/shared/RECOVERY.IMG index 28b92a0..b01f68c 100755 Binary files a/src/bios/shared/RECOVERY.IMG and b/src/bios/shared/RECOVERY.IMG differ