;/////////////////////////////////////////////////////////////////////// ; Функция #5B. Вывод символа на экран в тек. позиции. ; ; вход: A - символ ; выход: нет ;/////////////////////////////////////////////////////////////////////// PUTCHAR: ;CALL .NO_SCROLL CP #0E JR C,.control_characters ; LD BC,1*256 + BIOS.LP_PRINT_SYM ;[x] CR+LF+SCROLL RST ToBIOS ; ; проверка на переход курсора в самое начало (X:Y == 0:0) CALL CURSOR LD A,D OR E RET NZ ; .LFF: PUSH HL LD BC,1*256 + BIOS.LP_SCROLL_UD LD DE,#0020 RST ToBIOS LD DE,#1F00 CALL LOCATE LD A,' ' LD BC,#50*256 + BIOS.LP_PRINT_SYM RST ToBIOS LD DE,#1F00 CALL LOCATE POP HL RET .TB_: CALL CURSOR IF TABisSPACES LD B,E LD A,E AND #F8 ADD A,8 SUB B LD B,A LD A,' ' LD C,BIOS.LP_PRINT_SYM JP ToBIOS ELSE LD A,E ADD A,8 AND #78 ;????? глянуть, что будет если координаты курсора в конце строки почти LD E,A JP LOCATE ENDIF .BK_: CALL CURSOR XOR A CP E RET Z DEC E JP LOCATE ; .LF_: CALL CURSOR LD A,D CP #1F JR NC,.LFF INC D IFN EnoughtOnly_LF JP LOCATE ELSE CALL LOCATE ; !!!! НЕ разрывать LF_ и CR_ !!!! ENDIF .CR_: CALL CURSOR LD E,0 JP LOCATE ; .control_characters: CP "\r" JR Z,.CR_ CP "\n" JR Z,.LF_ CP "\t" ; tab JR Z,.TB_ CP "\b" ; backspace JR Z,.BK_ CP "\a" ; [x] Beep in PChars/PUTCHAR RET NZ ; [x] Beep in PChars/PUTCHAR .BELL: LD DE,1200 PUSH HL LD HL,4 CALL BEEP POP HL RET ; ; [x] -bug with Vasil's version of cursor .NO_SCROLL: CP #0E JR C,.control_characters ._CHAR: LD BC,1*256 + BIOS.LP_PRINT_SYM JP ToBIOS ;///////////////////////////////////////////////////////////////////////