Программирование на Ассемблере
;выводим 1 символ
move.l dosbase(PC),A6
jsr Write(A6)
movem.l (SP)+,D0-D7/A0-A6 ;восстанавливаем регистры
rts scankey: ;проверка нажатия клавиши
move.l conhandle(PC),D1
move.l #500,D2 ;время ожидания
move.l dosbase(PC),A6
jsr WaitForChar(A6)
tst.l D0
rts readln:
movem.l D0-D7/A0-A6,-(SP) ;сохраняем регистры
lea inline+2,A2 ;буфер ввода
clr.l (A2)
inplop:
bsr getchr
cmp.b #8,D0
beq.s backspace
cmp.b #127,D0 ;\"Delete\"?
beq.s backspace
bsr pchar
cmp.b #13,D0 ;\"Enter\"?
beq.s inputx
move.b D0,(A2)+
bra.s inplop
inputx:
clr.b (A2)+
sub.l #inline,A2
move A2,inline ;длина строки плюс 1
movem.l (SP)+,D0-D7/A0-A6 ;восстанавливаем регистры
rts backspace:
cmp.l #inline,A2 ;курсор в начале строки?
beq.s inplop ;да, не удалять
move.b #8,D0
bsr pchar ;курсор - влево
move #32,D0 ;пробел
bsr pchar
move #8,D0
bsr pchar ;\"забой\"
clr.b (A2)
subq.l #1,A2
bra inplop getchr: ;ввести один символ
move.l #1,D3
move.l conhandle(PC),D1
lea inbuff(PC),A1 ;буфер ввода
move.l A1,D2
move.l dosbase(PC),A6
jsr Read(A6)
moveq #0,D0
|