Система защиты от несанкционированного копирования
2. Так как программы комплекса отмеряют величины задержек, используя встроенный интервальный таймер, он должен быть запрограммирован стандартным образом.
Фрагменты программ.
Фрагменты программ комплекса, реализующие работу с НГМД на физическом уровне.
1. Макросы, облегчающие работу с процедурами нижнего уровня, непосредственно осуществляющими управление НГМД. (Файл ngmd. mac.) ;
Передача байта в контроллер НГМД out_ngmd MACRO byte LOCAL @Ok mov AH, byte call OutFDC jnc @Ok FatalError @Ok: ENDM ;
Приём байта из контроллера НГМД in_ngmd MACRO Mem LOCAL @Ok push AX call InFDC jnc @Ok jmp @ErrFatal @Ok: IFNB <Mem> mov Mem, AL ENDIF pop AX ENDM ;
Ожидание прерывания от контроллера НГМД WaitInt MACRO LOCAL @Ok call _WaitInt jnc @Ok FatalError @Ok: ENDM ;
Критическая ошибка FatalError MACRO jmp @ErrFatal ENDM ;
Позиционирование головки дисковода ;
Вход: ;
D — номер накопителя ;
HDS — номер головки ;
NCN — номер дорожки ngmdSeek MACRO D, HDS, NCN LOCAL @Ok mov DL, D mov DH, HDS mov CH, NCN shl DH, 2 or DL, DH call _ngmdSeek jnc @Ok FatalError @Ok: ENDM ;
Чтение сектора ;
D — номер дисковода ;
HDS — номер головки (стороны) ;
NCN — номер дорожки ;
R — номер сектора;
Buf — буфер ngmdRead MACRO D, HDS, NCN, R, Buf mov DL, D mov DH, HDS mov CH, NCN mov CL, R mov AX, DS mov ES, AX lea DI, Buf call _ngmdRead ENDM ;
Запись сектора ;
D — номер дисковода ;
HDS — номер головки (стороны) ;
NCN — номер дорожки ;
R — номер сектора;
Buf — буфер ngmdWrite MACRO D, HDS, NCN, R, Buf mov DL, D mov DH, HDS mov CH, NCN mov CL, R mov AX, DS mov ES, AX lea DI, Buf call _ngmdWrite ENDM
2. Фрагмент модуля Frozen, демонстрирующий форматирование дорожки. (Файл frozen. asm.) ;
Переменная для хранения старого вектора 8h Old_8h dd 0 ;
Переменная для организации задержекRtCounter dw 0 ;
Собственный обработчик прерывания 8h (Timer); для организации задержекInt_8h PROC push AX cmp CS: RtCounter, 0 je New08IRet dec CS: RtCounter New08IRet: ;
Стандартные действия по корректировке времени push DS mov AX, 40h ;