
START:	 CALL    @#CLRSCR

	       MOV     #100,R0
	       CLR     R2
2:	     CLR     R1
1:	     EMT     24
	       EMT     16
	       INC     R1
	       CMP     #100,R1
	       BNE     1
	       INC     R2
	       CMP     #27,R2
	       BNE     2
	       WAIT
	       HALT

;Подпрограмма подгонки экранного адреса при переполнении
;Вход: R3 - адрес
;Выход: R3 - обработанный адрес
RECALC:	BIS     #40000,R3
	       BIC     #100000,R3
	       RETURN

;Подпрограмма вычисления адреса заданного знакоместа
;Вход: R1 - координата X [0-77]
;      R2 - координата Y [0-30]
;Выход: R3 - адрес
CALCXY:	MOV     R2,-(SP)
	       CALL    @#CALCHI
	       ADD     #300,R3
	       ADD     R1,R3
	       SWAB    R2
	       ROR     R2
	       ADD     R2,R3
	       ROL     R2
	       ROL     R2
	       ADD     R2,R3
	       CALL    @#RECALC
	       MOV     (SP)+,R2
	       RETURN

;Подпрограмма вычисления адреса верхнего левого угла
;Выход: R3 - адрес
CALCHI:	MOVB    @#177664,R3
	       ADD     #50,R3
	       SWAB    R3
	       CLRB    R3
	       ROR     R3
	       ROR     R3
	       ADD     #40000,R3
	       RETURN

;Подпрограмма вычисления адреса заданного символа
;Вход: R0 - символ
;Выход: R5 - адрес
CALCCH:	MOV     R0,-(SP)
	       MOV     #112276,R5
	       CMPB    #37,R0
	       BHIS    2
	       CMPB    #177,R0
	       BHIS    1
	       CMPB    #237,R0
	       BHIS    2
	       SUB     #200,R0
	       MOV     #114176,R5
1:	     SUB     #40,R0
	       ROL     R0
	       ADD     R0,R5
	       ROL     R0
	       ROL     R0
	       ADD     R0,R5
2:	     MOV     (SP)+,R0
	       RETURN

;Подпрограмма очистки экрана
CLRSCR:	MOV     R0,-(SP)
	       MOV     #40000,R0
1:	     CLR     (R0)+
	       TST     R0
	       BPL     1
	       MOV     (SP)+,R0
	       RETURN

;Подпрограмма вывода символа по координатам
;Вход: R0 - символ
;      CURX - координата X
;      CURY - координата Y
WRTCHR:	MOV     R1,-(SP)
	       MOV     R2,-(SP)
	       MOV     R3,-(SP)
	       MOV     R5,-(SP)
	       CALL    @#GETXY
	       CALL    @#CALCXY
	       CALL    @#CALCCH
	       MOV     #12,R1
1:	     MOVB    (R5)+,(R3)
	       ADD     #100,R3
	       CALL    @#RECALC
	       SOB     R1,1
	       MOV     (SP)+,R5
	       MOV     (SP)+,R3
	       MOV     (SP)+,R2
	       MOV     (SP)+,R1
	       RETURN

;Подпрограмма построения прямоугольной рамки
;Вход: R5 - адрес блока параметров

FRMCH1:	.ASCII  /┌─┐/
FRMCH2:	.ASCII  /│ │/
FRMCH3:	.ASCII  /└─┘/
FRMCH4:	.ASCII  /├─┤/

;Подпрограмма построение линии окна по шаблону
;Вход: R3 - шаблон
WFRMLN:	

	       RETURN

;Текущие координаты вывода
CURX:	  .WORD   0
CURY:	  .WORD   0

;Установка координат вывода
;Вход: R1 - координата X
;      R2 - координата Y
SETXY:	 MOV     R1,@#CURX
	       MOV     R2,@#CURY
	       RETURN

;Выдача текущих координат вывода
;Выход: R1 - координата X
;       R2 - координата Y
GETXY:	 MOV     @#CURX,R1
	       MOV     @#CURY,R2
	       RETURN

	       .END



