diff --git a/DSS/API/SetVMod.asm b/DSS/API/SetVMod.asm index 1a85fa6..46b49fc 100644 --- a/DSS/API/SetVMod.asm +++ b/DSS/API/SetVMod.asm @@ -139,16 +139,22 @@ SETMODE: PUSH DE ;+6 X полож. в поле графики (в знакоместах) ;+7 Y полож. в поле графики (в знакоместах) ScreenDescriptorTable EQU $ + ; 80x32. текстовое, знакоместо 16x8, #0B - номер знакоген. TAB_80x32 DB 40,32,0,0,%0001'1011,0,0,0 ;1 + ; 40x32. текстовое, знакоместо 8x8, #0B - номер знакоген. TAB_40x32 DB 40,32,0,0,%0011'1011,0,0,0 ;2 + ; 640x256. графическое, 0-й экран TAB_640x256_0 DB 40,32,0,0,%0000'0000,0,0,0 ;3 + ; 320x256. графическое, 0-й экран TAB_320x256_0 DB 40,32,0,0,%0010'0000,0,0,0 ;4 + ; 640x256. графическое, 1-й экран TAB_640x256_1 DB 40,32,0,0,%0100'0000,0,40,0 ;5 + ; 320x256. графическое, 1-й экран TAB_320x256_1 DB 40,32,0,0,%0110'0000,0,40,0 ;6 ScreenDescriptorTable.Size EQU ($ - ScreenDescriptorTable)/6 @@ -182,7 +188,7 @@ SAVETXT: PUSH AF LD (BACKTXT.CURS),DE POP AF LD IX,#C000 - LD HL,#2050 + LD HL,#2050 ;!FIXIT если текстовое 40x32? OR A JR NZ,.SVTEXT1 LD L,#28 diff --git a/DSS/KEYINTER.ASM b/DSS/KEYINTER.ASM index ab2b08b..934dbf9 100644 --- a/DSS/KEYINTER.ASM +++ b/DSS/KEYINTER.ASM @@ -186,7 +186,7 @@ ECHOKEY: ;R01 ;------; !FIXIT брать значения для знакогенератора из биоса? -delay_curs: EQU 11 ; частота мигания курсора +delay_curs: EQU 11 ; частота мигания курсора INS_CUR_ZG: EQU #9B ; [x] 14/03/2025 был баг для графических экранов режима спектрума CURSOR_ZG: EQU #5B ; [x] 14/03/2025 был баг для графических экранов режима спектрума NORM_ZG: EQU #1B @@ -210,7 +210,7 @@ ECHOKEY: CALL Cursor_On ; AND A RET -Cursor: +Cursor: ;!TODO логичнее курсором моргать и шрифты менять из биоса же? .Flag+1: LD A,0 ; флаг курсора 00-нет/01-есть CPL LD (.Flag),A @@ -221,17 +221,26 @@ Cursor_On: LD C,BIOS.LP_GET_PLACE ; узн XOR A LD C,BIOS.WIN_GET_SYM ; получить символ RST ToBIOS + ; + LD A,%0010'0000 + AND B + LD (.char_size),A ; [ ] 24/03/2025 сохраняем тип квадратика 80/40 символов + ; LD BC,NORM_ZG*256+BIOS.WIN_PUT_SYM ; b=знакоген., с=символ на экран LD A,(Cursor.Flag) OR A - JR Z,.put_ + JR Z,.put LD B,INS_CUR_ZG ; блок LD A,(KEYFLAG) ; флаги клавы AND 1<