Программирование на Ассемблере
;основная программа
... error: ;завершающие действия
moveq #-1,D7 ;флаг ошибки (для SEKA)
qu:
move.l execbase,A6
lea diskio(PC),A1
move.l 32(A1),D7 ;IO_ACTUAL - в D7 (для
;тестирования)
move #9,28(A1) ;команда: управление мотором
clr.l 36(A1) ;0 = остановить вращение диска
;(floppy)
jsr sendio(A6) ;выполняем
move.l conhandle(PC),D1
move.l dosbase(PC),A6
jsr Close(A6) ;закрываем консоль
move.l dosbase(PC),D1
move.l execbase,A6
jsr CloseLib(A6) ;закрываем dos.library
lea diskio(PC),A1
jsr CloseDevice(A6) ;закрываем trackdisk.device
rts Чтобы можно было наблюдать результаты работы нашей программы, добавим
функцию getchr: getchr: ;ожидание нажатия клавиши
moveq #1,D3 ;читаем 1 символ
move.l conhandle,D1 ;идентификатор окна (консоли)
move.l #inbuff,D2 ;адрес буфера
move.l dosbase,A6
jsr read(A6) ;читаем клавиатуру
rts ;все! Завершается текст программы, как обычно, блоком переменных и констант: dosname: dc.b \'dos.library\',0
align
consolname: dc.b \'RAW:0/100/640/50/** Wait Window\',0
align
trddevice: dc.b \'trackdisk.device\',0
align
dosbase: dc.l 0 ;базовый адрес dos.library - здесь
conhandle: dc.l 0 ;идентификатор консоли
inbuff: blk.b 80,0 ;буфер клавиатуры
diskio: blk.l 20,0 ;I/O - структура
diskrep: blk.l 8,0 ;I/O - порт
diskbuff: blk.b 512*2,0 ;место для двух секторов диска Теперь приступим к написанию основной части программы, работающей с
trackdisk.device.
|