Программирование на Ассемблере
Приведем законченную программу, работающую с окном ввода/вывода. В этой
программе мы используем макросы INIT_AMIGA и EXIT_AMIGA, предоставляемые
системой AssemPro для выполнения входной и выходной инициализации; если Вы
используете другую систему (например, SEKA), изучите соответствующую
документацию. ;***** 6.3.2 S.D. ***** ;* Функции Exec: OpenLib = -552
CloseLib = -414
;ExecBase = 4 ;описано в AssemPro ;* Функции AmigaDos: Open = -30
Close = -36
IoErr = -132 ;получение дополнительной
;информации об ошибке
mode_old = 1005 ILABEL Assempro:includes/Amiga.l ;только для AssemPro! INIT_AMIGA ;только для AssemPro run:
bsr.s init ;инициализация (создание окна)
bra.s qu ;выход
init:
move.l ExecBase,A6 ;базовый адрес EXEC lea dosname(PC),A1 ;\'dos.library\'
moveq #0,D0 ;годится любая версия
jsr OpenLib(A6) ;открываем dos.library
move.l D0,dosbase
beq.s error1 ;ошибка lea consolname(PC),A1 ;описание окна
move.l #mode_old,D0
bsr.s openfile ;открываем консоль
beq.s error ;ошибка
move.l D0,conhandle rts error: move.l dosbase,A6 ;обработчик ошибок DOS
jsr IoErr(A6)
error1:
move.l D0,D5 ;нужно для EXIT_AMIGA move.l #-1,D7 ;нужно для EXIT_AMIGA
qu:
move.l conhandle(PC),D1
move.l dosbase(PC),A6
jsr Close(A6) ;закрываем консоль
move.l dosbase(PC),A1
move.l ExecBase,A6
jsr CloseLib(A6) ;закрываем dos.library EXIT_AMIGA ;только для AssemPro! openfile: ;открыть канал ввода/вывода
move.l A1,D1 ;имя файла - в D1
move.l D0,D2 ;режим - в D2
move.l dosbase(PC),A6
jsr Open(A6) ;открываем файл (консоль)
tst.l D0 ;ошибка?
rts dosname: dc.b \'dos.library\',0
align.w dosbase: dc.l 0 consolname: dc.b \'CON:0/100/640/100/** CLI-Test **\',0
align.w conhandle: dc.l 0 end Есть еще один способ открыть окно ввода/вывода, а именно, вместо CON: можно
использовать RAW:.
|