;/////////////////////////////////////////////////////////////////////// ; Функция #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 ; LD BC,1*256 + BIOS.LP_PRINT_SYM ; JP ToBIOS ;/////////////////////////////////////////////////////////////////////// ;/////////////////////////////////////////////////////////////////////// PUTCHAR: PUSH HL ; LD L,A XOR A ; no attr-mode LD H,A PUSH HL ; кладём на стек печатаемый символ LD L,A ADD HL,SP ; LD A,(CLEAR.shell_color) LD B,A EX AF,AF' XOR A ; no XY-mode LD C,BIOS.LP_PR_LINE_DIR LD IY,0 ; YH = YL = B RST ToBIOS POP HL ; восстанавливаем стек ; POP HL RET ; .NO_SCROLL: ; .CHAR: DZ "X" ;///////////////////////////////////////////////////////////////////////