From 1199181d535627ed9269aa20a97d96f731cd5601 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Tue, 8 Aug 2023 23:58:38 +1000 Subject: [PATCH] =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=BC=D0=B5=D0=B6=D1=83?= =?UTF-8?q?=D1=82=D0=BE=D1=87=D0=BD=D0=BE=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Console/build.txt | 2 +- DSS/KEYINTER.ASM | 100 +++++++++++++++++++++++------------- DSS/VIDEO.ASM | 127 +++++++++++++++++++++++++--------------------- DSS/build.txt | 2 +- Shared_Includes | 2 +- 5 files changed, 138 insertions(+), 95 deletions(-) diff --git a/Console/build.txt b/Console/build.txt index b74e882..f70d7bb 100644 --- a/Console/build.txt +++ b/Console/build.txt @@ -1 +1 @@ -31 \ No newline at end of file +42 \ No newline at end of file diff --git a/DSS/KEYINTER.ASM b/DSS/KEYINTER.ASM index 8064e23..6360c36 100644 --- a/DSS/KEYINTER.ASM +++ b/DSS/KEYINTER.ASM @@ -110,37 +110,56 @@ SCANKEY LD HL,HOST ; IF CLASSIC_CURSOR ;------------------------------; -ECHOKEY: -CURCOUNT+1: LD A,#FF ;R01 - INC A ;R01 - LD (CURCOUNT),A ;R01 - AND #FF ;R01 - JR NZ,NOTUR ;R01 -CURSYM+1: LD A,#00 ;R01 - XOR #01 ;R01 - LD (CURSYM),A ;R01 - LD A," " ;R01 - JR Z,CURSKI ;R01 - LD A,"_" ;R01 -CURSKI: CALL PUTCHAR ;R01 - LD A,8 ;R01 BACKSPACE - CALL PUTCHAR ;R01 -NOTUR: CALL SCANKEY - JR Z,ECHOKEY - PUSH DE - PUSH BC - PUSH AF ;R01 - LD A," " ;R01 - CALL PUTCHAR ;R01 - LD A,8 ;R01 BACKSPACE - CALL PUTCHAR ;R01 - POP AF ;R01 - CALL PUTCHAR - POP BC - POP DE - LD A,E - AND A - RET +ECHOKEY: ;R01 +.CURCOUNT+1: LD A,#FF + INC A + LD (.CURCOUNT),A + AND #FF + JR NZ,.NOTUR +.CURSYM+1: LD A,#00 + XOR #01 + LD (.CURSYM),A + + CALL CURSOR + PUSH DE + + LD A," " + JR Z,.CURSKI + LD A,"_" +.CURSKI: CALL PUTCHAR.NO_SCROLL ;R03 + + POP DE + CALL LOCATE + ;LD A,8 ; BACKSPACE + ;CALL PUTCHAR +.NOTUR: CALL SCANKEY + JR Z,ECHOKEY + PUSH DE + PUSH BC + PUSH AF + + CALL CURSOR + PUSH DE + + LD A," " + CALL PUTCHAR.NO_SCROLL ;R03 + + ;LD A,8 ; BACKSPACE + ;CALL PUTCHAR + POP DE + POP AF + PUSH DE + ;R01 [v] + CALL PUTCHAR.NO_SCROLL + + POP DE + CALL LOCATE + + POP BC + POP DE + LD A,E + AND A + RET ELSE ;------------------------------; @@ -159,9 +178,11 @@ ECHOKEY: CALL Cursor_On ; PUSH AF CALL Cursor_Off ; выкл. курсор POP AF - OR A ; добавил + OR A ;!FIXIT scroll заменить на вывод символа биосом или WRCHAR - CALL NZ,PUTCHAR ; вывод "a" на экран + ; LD BC,1*256 + BIOS.LP_PRINT_SYM + ; RST ToBIOS + CALL NZ,PUTCHAR.NO_SCROLL ; добавил вывод "a" на экран ; POP BC POP DE @@ -186,11 +207,16 @@ Cursor_On: LD C,BIOS.LP_GET_PLACE ; узн JR Z,.put LD B,CURSOR_ZG ; черта LD A,(KEYFLAG) ; флаги клавы - BIT 1,A ; бит Ins - JR NZ,.put + ;BIT 1,A ; бит Ins + AND %0000'0010 ; бит Ins + JR NZ,.put LD B,INS_CUR_ZG ; блок .put: XOR A ; номер окна RST ToBIOS + + LD DE,(Cursor_Off.pos) + CALL LOCATE + LD A,1 LD (Cursor_Off.Flag),A LD A,delay_curs @@ -216,6 +242,10 @@ Cursor_Off: XOR A LD BC,NORM_ZG*256+BIOS.WIN_PUT_SYM ; символ на экран RST ToBIOS + + LD DE,(Cursor_Off.pos) + CALL LOCATE + RET ; Вектор обслуживания курсора diff --git a/DSS/VIDEO.ASM b/DSS/VIDEO.ASM index 8a4d3ec..c5d0136 100644 --- a/DSS/VIDEO.ASM +++ b/DSS/VIDEO.ASM @@ -20,70 +20,38 @@ CLEAR: LD C,BIOS.LP_CLS_WIN2 ; PRINT NULL-TERMINATED CHARS STRING ; HL - STRING POINTER -PCHARS: ;CALL CURSOR - ;LD A,E - ;LD (.start_x),A - +PCHARS: .loop: LD A,(HL) INC HL OR A RET Z - ;PUSH HL - ;LD C,A CALL PUTCHAR - - ;CALL CURSOR - ;LD A,(.start_x) - ;CP E - - ;POP HL + ;!TEST CR+LF+SCROLL + ;CALL CURSOR + ;LD A,D ; проверка на переход курсора + ;OR E ; в самое начало (X:Y == 0:0) + ;CALL Z,PUTCHAR.LFF + ; JP .loop -NO_NEED_SCROLL: DB 1 - -BK_: LD C,BIOS.LP_GET_PLACE ;GET CURSOR - RST ToBIOS - XOR A - CP E - JP Z,LOCATE - DEC E - JP LOCATE - -;-----[] -LF_: LD C,BIOS.LP_GET_PLACE ;GET CURSOR - RST ToBIOS - LD A,D - CP #1F - JR NC,LFF - INC D - IFN EnoughtOnly_LF - JP LOCATE - ELSE - CALL LOCATE - ; !!!! НЕ разрывать LF_ и CR_ !!!! - ENDIF -CR_: LD C,BIOS.LP_GET_PLACE ;GET CURSOR - RST ToBIOS - LD E,0 - JP LOCATE -;-----[] ; PRINT CHAR ; A - CHAR PUTCHAR: ;CP ' ' - ;JR NC,CHAR + ;JR NC,.CHAR CP #0D - JR Z,CR_ + JR Z,.CR_ CP #0A - JR Z,LF_ + JR Z,.LF_ CP #09 - JR Z,TB_ + JR Z,.TB_ CP #08 - JR Z,BK_ + JR Z,.BK_ + CP #07 + JR Z,.BELL ;SCF ;RET -CHAR: - LD BC,1*256 + BIOS.LP_PRINT_SYM +.CHAR: LD BC,1*256 + BIOS.LP_PRINT_SYM ;!TEST CR+LF+SCROLL ;JP ToBIOS RST ToBIOS @@ -93,13 +61,13 @@ CHAR: OR E RET NZ ; -LFF: PUSH HL ;!FIXIT сохранять текущие прерывания +.LFF: PUSH HL ;!FIXIT сохранять текущие прерывания ;PUSH DE LD BC,1*256 + BIOS.LP_SCROLL_UD LD DE,#0020 - EI - HALT - DI + ;EI + ;HALT + ;DI RST ToBIOS LD DE,#1F00 ;PUSH DE @@ -107,17 +75,14 @@ LFF: PUSH HL ;!FIXIT LD A,' ' LD BC,#50*256 + BIOS.LP_PRINT_SYM RST ToBIOS - EI + ;EI ;POP DE LD DE,#1F00 CALL LOCATE POP HL RET - - -TB_: LD C,BIOS.LP_GET_PLACE ;GET CURSOR +.TB_: LD C,BIOS.LP_GET_PLACE ;GET CURSOR RST ToBIOS - IF TABisSPACES LD B,E LD A,E @@ -125,8 +90,8 @@ TB_: LD C,BIOS.LP_GET_PLACE ;GET CURSOR ADD A,8 SUB B LD B,A - LD C,BIOS.LP_PRINT_SYM LD A,' ' + LD C,BIOS.LP_PRINT_SYM JP ToBIOS ELSE LD A,E @@ -135,6 +100,54 @@ TB_: LD C,BIOS.LP_GET_PLACE ;GET CURSOR LD E,A JP LOCATE ENDIF +.BK_: LD C,BIOS.LP_GET_PLACE ;GET CURSOR + RST ToBIOS + XOR A + CP E + ;!TEST + ;JP Z,LOCATE + RET Z + DEC E + JP LOCATE +.LF_: LD C,BIOS.LP_GET_PLACE ;GET CURSOR + RST ToBIOS + LD A,D + CP #1F + JR NC,.LFF ;!FIXIT срабатывает как CRLF надо скроллить с сохранением Y + INC D + IFN EnoughtOnly_LF + JP LOCATE + ELSE + CALL LOCATE + ; !!!! НЕ разрывать LF_ и CR_ !!!! + ENDIF +.CR_: LD C,BIOS.LP_GET_PLACE ;GET CURSOR + RST ToBIOS + LD E,0 + JP LOCATE +.BELL: LD DE,1200 + LD HL,4 + JP BEEP +.NO_SCROLL: + ;CP ' ' + ;JR NC,.CHAR + CP #0D + JR Z,.CR_ + CP #0A + JR Z,.LF_ + CP #09 + JR Z,.TB_ + CP #08 + JR Z,.BK_ + CP #07 + JR Z,.BELL + ;SCF + ;RET +._CHAR: LD BC,1*256 + BIOS.LP_PRINT_SYM + ;!TEST CR+LF+SCROLL + JP ToBIOS + ;RST ToBIOS +;-----[] ; ; diff --git a/DSS/build.txt b/DSS/build.txt index 5d1277e..6547e41 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -147 \ No newline at end of file +171 \ No newline at end of file diff --git a/Shared_Includes b/Shared_Includes index 0277d42..7e4985b 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 0277d424098318dc45617d6fb2c1cdf405c6d345 +Subproject commit 7e4985b40214f573ba17b707ad5191319841acdd