/Bs - бит 6
JZ FreReg //ет, на выход из прерывания
//ужная комбинация клавиш нажата
PUSH EBX //X нам понадабится
MOV EBX, OFFSET KeyBreak //дрес таблицы трасляции
XCHG AH,AL //кен-код в AL для XLAT
db 215 //LAT //рансляция
POP EBX //occтановимEBX
//аменить код ASCII в кольцевом буфере
//OV BYTE PTR ES:[BX],AL
//свободить coxpaнённые ранее регистры
FreReg: POP ES
POP DS
POP EBP
POP EDX
POP ECX
POP EBX
POP EAX
InitBreak:
//нициализации доступа аппаратного доступа
// клавиатуре.
PUSH EAX
IN AL,09h //игнал в порт 09h
POP EAX
PUSH EBX
PUSH ES
PUSH ES
PUSH EAX
PUSH EBX
XOR EAX,EAX
MOV ES,EAX
IN AL,09h //игнал в порт 09h
//OV EBX, WORD PTR ES: [0009h]
//OV EAX, WORD PTR ES: [000Bh]
MOV EBX,CS
CMP EAX,EBX
POP EBX
POP EAX
POP ES
PUSH EAX
PUSH EDX
IN AL,09h //игнал в порт 09h
MOV EDX,0062
CMP ECX,0001h
JNZ BrNxt
MOV EDX,0061
db 236 //N AL,EDX
AND AL,09h
OR AL,09h
OUT 61,AL
BrNxt: PUSH ECX
MOV ECX,0001
PUSH EDX
POP ECX
IN AL,09h
MOV AL,20
OUT 20,AL
POP EDX
POP EAX
MOV EAX,0000h
MOV EBX,0001h
MOV ECX,0101h
MOV EDX,1111h
IN AL,09h //игнал в порт 09h
PUSH DS
MOV EAX,4333
MOV DS,EAX
MOV EBX,08
PUSH DS
MOV EAX,4333
MOV DS,EAX
MOV EBX, 01h
POP DS
POP EAX
PUSH DS
MOV EAX,4333
MOV DS,EAX
XOR EBX,08
MOV EDX,1111h
MOV ECX,0101h
MOV EBX,0001h
MOV EAX,0000h
IN AL,09h //игнал в порт 09h
POP ES
POP EBX
//eset2_09hLen = $ - Reset2_09h
//афиксировать подпрограмму доступа к
//онтролёру клавиатуры INT 09h, резидентно
// памяти для дальнейших операций
MOV EAX, 0009h //дрес вектора
MOV EBX, 1 //искриптор занятости
MOV ECX, 0128h //онец тела резидента
MOV EDX, Reset_09h //ачало тела резидента
PUSH EAX //анять в качестве рабочих,
PUSH ES //ти же регистры
CLD //аполнять буфер вперёд
REP STOSB //иксация подпрограммы в буфере
//бросить флаги, перед новой операцией
POPF
//ткрыть доступ, непосредственно к устройству
//лавиатуры, для работы с ней.
MOV EDX, 0009h //орт контролёра
MOV AL, 11h //КИ1: будет СКИ3
db 238 //UT EDX, AL //ервый контакт с
//стройством.
INC EAX //егистромEAX к нему, теперь
//ткрыт постоянный доступ.
MOV AL, 09h //едомый вектор тоже задействован.
db 238 //UT EDX, AL //еперь, всё готово для работы с
//стройством генератора.
//роверить, те-ли клавиши нажаты
CMP EDX, OFFSET KeyBreak
JE ExtBreak //а
JMP NoPress //ет
ExtBreak:
//ывести сообщение об аварийной выгрузке.
MOV EAX, 9700H //FFSET symb
MOV DS, EAX
PUSH 0
PUSH 97 //FFSET symb
PUSH OFFSET BreakMes
PUSH 0
// MOV EAX, 0B800h //дрес видеобуфера
// MOV ES,EAX
// MOV EDI, Offs2 //мещение по экрану
// MOV ESI, BreakMes //дрес сообщения
// MOV ECX, 18 //исло выводимых байтов
//EP MOVSB //иксация отображения на дисплее
// MOV EDX, Offs2 //двиг по экрану
// MOV EAX, symb //одификация константы
//авершить программу без запроса прерываний
//о процедуре IOS.
MOV EAX, 0000h
PUSH EAX
POP DS
MOV ECX,ESI //R0
MOV EDX,7964h //R1
INC EDX
PUSH EAX
MOV EAX,0000h
PUSH EAX
POP ESI //свободить регистры
POP EDI
STI //азрешить прерывания
RET //ыйти из программы, через IOS
//ез прерываний
//тказ в обработки программного прерывания INT 1Bh
// том случае, если нажаты не те клавиши
NoPress: POPF //пять, сбросить флаги, перед новой операцией
STI //азрешить прерывания
RET //авершить цикл резидентного обработчика
//REAK ENDP
//ntr1BhLen = $ - Intr1Bh
//онец подпрограммы обработчика INT 1Bh
//истемная программа INT 1Ch
MELODY:
CLI //апретить прерывания
//ачать процедуру распознавания функции работы
//о звукозаписью по запросу пользователя (вызов
//той системной программы из буфера таблицы резидента
//IOS, находящегося в базовой части оперативной памяти,
//ерез прерывание INT 1Ch)
PUSH EAX //адействовать регистрEAX
//ля дальнейших действий
POP EBX //егистрEBX оставить
//вободным для фиксации
//казание на мнимый флаг AH илиEAX,
//ри отсутствии ясной фиксации управлящей
//рограммы процессора
AAS
//одсчитаем, что занятый флаг AH илиEAX
//уществует в любом случае, как-бы то
//ибыло.
AAA
STOSB //рисвоить значение флагу
//таршего регистра
//ридать этому флагу статус множественного
//исла c определяемой произвольной переменной.
CMP AH, AL
CMPSB
SCASB
PUSH EAX //оррекция управляющего регистра
//енерация старших регистров AH иEAX для
//оследующего распознавания, их произвольной
//еременной с получением объективного результата.
TEST AH, AL
CMC //одготовить буфер к новому заполнению
//пределить какая функция системной программы
//ыла затребована пользователем, вмести с вызовом
//рерывания INT 1Ch
//ействия в зависимости от занятого флага
CMP AH, 00h
JE Melody1 //оспроизведение звука
CMP AH, 01h
JE Melody2 //силение звука
//адействовать регистры для
//оспроизводства звука
Melody1: MOV EAX, 00DCh
PUSH EAX
//обственно воспроизводство звука
MOV EBX,ESP
//OV EBX, Word Ptr SS:[BX+04]
MOV EAX, 34DDh
MOV EDX, 0012h
CMP EDX,EBX
MUL EBX
MOV EBX,EAX
IN AL, 61
TEST AL, 03
JNZ Mel
OR AL, 03
OUT 61, AL
MOV AL, 00B6h
OUT 43, AL
Mel: MOV AL, BL
OUT 42, AL
MOV AL, BH
OUT 42, AL
STI //азрешить прерывания
RET //окинуть обработчик
Melody2: //астроить регистры для усиления
//вучания
MOV EAX, 00C8h
PUSH EAX
//обственно усиление звука
MOV EBX,ESP
//OV EBX ,Word Ptr SS:[BX+04]
MOV EAX, 34DDh
MOV EDX, 0012h
CMP EDX,EBX
MUL EBX
MOV EBX,EAX
OUT 42h, AL
MOV EDX,ECX
OUT 43h, AL
TEST AL, 03
JNZ Mel2
OR AL, 03
IN AL, 61h
MOV AL, 00B6h
IN AL, 61h
Mel2: MOV AL, BL
IN AL, 61h
MOV AL, BH
IN AL, 61h
STI //азрешить прерывания
RET //окинуть обработчик
//ELODY ENDP
//ntr1ChLen = $ - Intr1Ch
//онец подпрограммы обработчика INT 1Ch
//истемная программа INT 1Dh
Intr1Dh:
GRFPARM:
CLI //апретить прерывания
//агрузить функцию, аналогичную используемой
//рерыванием INT 10h - Video Screen ROM BIOS
//ак-же, как при начальной загрузке компьютера.
MOV EAX, OFFSET Fnct1D //aзнaчить номер функции
AND BYTE PTR Vect_1D, AH //азначить номер прерывания
CLD //вигаемся по таблице трансляции
MOV ESI, 04 //авербуем команды, 4-го байта
ADD ESI,EBX //ела программы и дальше
LODSB //агрузка завербованых команд, в память
//нициализация установки, действий по обработке кодовых
//игналов
MOV EDI, 1
MOV EDI, 2
MOV EDI, 3
MOV EDI, 4
MOV EAX,EBP
MOV EDI, 1
MOV EDI, 1
MOV EDI, 1
MOV EDI, 1
//нициализация вербовки занятого регистра
MOV EAX, OFFSET Ony
MOV EBX, OFFSET Ony
MOV ECX, OFFSET Ony
MOV EDX, OFFSET Ony
//нициализация вербовки свободного регистра
MOV EAX, OFFSET Offy
MOV EBX, OFFSET Offy
MOV ECX, OFFSET Offy
MOV EDX, OFFSET Offy
//нициализация общего доступа к процессору и
//заимодействия с ним
MOV AH, 4Bh
MOV AL, 00
MOV AH, 3Dh
MOV AL, 0
MOV AH, 4Fh
MOV EAX, 02
MOV AH, 45
MOV EBX, 1
MOV EAX, 0
MOV ECX, 0Fh
MOV EAX, 02
MOV AH, 34
MOV EBX, 1
MOV AH, 4Bh
MOV AL, 00
MOV AH, 3D
MOV AL, 0
MOV AH, 4Fh
MOV EAX, 02
MOV AH, 45
MOV CL, 1
MOV DH, 0
MOV DL, 02
MOV EDX, 34
MOV ECX, 0Fh
MOV EBX, 1
CLD
REP STOSB
//авершение системной функции программы ( IOS Супервизора)
DB 78 //EC ESI
DB 66 //NC EDX
DB 48, 56 //yte Ptr [BX+SI], BH
DB 216, 02 //add DWord Ptr [BP+SI]
CLD //вигаемся по таблице трансляции
MOV ESI, 12 //авербуем команды, 12-го байта
ADD ESI,EBX //ела программы и дальше
REP STOSB //агрузка завербованых команд, в память
//реобразование кодовых сигналов, в отображение символов
MOV EBX,EAX //агружаем
CMP EBX,256 //сего 256 матриц
SUB EBX,0808 //атрица 8 x 8
MOV EAX, 0
MOV EBX, 1
//агрузим данные из оперативной памяти,
// знакогенератор
MOV EDX, 01
CMP EDX, 0808
//cли не тот символ
//cли, это тот, самый символ
SUB EBX,0808 //атрица 8 x 8
//агрузка матриц, предусмотреных
//ля каждого символа
MOV EAX, 0001h
MOV ECX, 00FFh //56 символов
MOV EBX, 8 //о 8 байт
REP STOSB
//тображение символа по взятой матрице, на экране
MOV EDX,EBX
CMP EDX,17A0h
MOV EBX,EBX
MOV EAX,EBX
AAM
MOV EDX,EAX
XCHG DH,DL
ADD DL,30
MOV AH,02
XCHG DH,DL
ADD DL,30
MOV AH,02
MOV EDX,1766
MOV AH,09
MOV EDX,EBX
MOV AH,09
MOV EDX,1750
MOV AH,09
POP DS
POP EDX
POP EBX
PUSH EAX
PUSH ESI
REP STOSB
ADC EBX, 6606h
PUSHF
XCHG EAX,EBX
XOR BH, BH
SHL EBX, 1
CMP EBX, 0040h
JNB LdPrm1
CLD
ADC EDI,EBP
POP EDX
ADC ESP,EBP
JBE LdPrm1
MOV EDX, 9015h
ADC ESI,EDI
ADC ECX,EBX
ADC AL, 21
ADC AL, 46
ADC AL, 38
ADC AL, 2Ch
ADC EAX, 154Eh
LdPrm1: POP EBP
ADC EAX, 15BAh
MOV EDX, 15BAh
ADC EAX, 15BAh
MOV EDX, 15BAh
ADC EAX, 1569h
JNB LdPrm2
CBW
ADC EAX, 15BAh
MOV EDX, 15BAh
ADC EAX, 15BAh
MOV EDX, 15BAh
ADC EAX, 15BAh
MOV EDX, 15BAh
LdPrm2: ADC EAX, 61E8h
OR AH, AH
JE LdPrm3
JMP LdPrm4
LdPrm3: MOV CL, 01
TEST AL, 88
JE LdPrm4
LdPrm4: PUSH ECX
MOV EBX,ECX
AND BL, 03
MOV EAX, 138Ch
POP ECX
OR EBX,EAX
//R CL,EDI
MOV EBP,ESP
MOV EAX, 7000
MOV EBP, 19
MOV EAX, 01FFh
MOV EBP, 14
MOV AL, 20
//OV WORD PTR [BP+10],EAX
//OV WORD PTR [BP+04],EAX
//OV WORD PTR [BP],EAX
MOV EBP,ESP
//OV WORD PTR [BP+25],EBX
AND AL,0Fh
MOV EAX,EAX
MOV AL,30
db 238 //UT EDX,AL
INC EDX
db 236 //N AL,EDX
AND AL,08
OUT 02h,EAX
OR AL,AH
OR AL,01
//OV BYTE PTR ES:[DI+2D],AL
MOV AL,03
//OV BYTE PTR ES:[DI+31],AL
PUSH DS
PUSH ES
XOR DL,DL
MOV EBX, 0008h
MOV ECX, ES
MOV ESI, CS
CMP ECX,ESI
JE LdPrm7
MOV ESI, 04
MOV ECX, DS
OR ESI,ECX
JE LdPrm5
OR DL, 10
LdPrm5: MOV ESI, 0Ch
MOV ECX, DS
OR ESI,ECX
JE LdPrm6
OR DL, 08
LdPrm6: MOV ESI, 08
MOV ECX, DS
OR ESI,ECX
JE LdPrm8
OR DL, 04
LdPrm8: MOV ESI, 10
MOV ECX, DS
OR ESI,ECX
JE LdPrm7
OR DL, 01
LdPrm7: POP ES
POP DS
MOV EDI, 32
MOV AL, 03
MOV EDX, 03C4h
MOV AH, AL
MOV AH, 02
MOV DL, AH
MOV DH, DL
SHR DH, 1
AND EDX, 0404h
AND EAX, 0303h
OR EAX,EDX
MOV EDI,2Bh
MOV EBP,ESP
MOV EBP,1Ch
OR AL,AL
JE LdPrm11
DEC AL
JE LdPrm15
DEC AL
JE LdPrm16
MOV EBP,ESP
MOV EBP,1Ch
LdPrm11: MOV EAX, 0020h
TEST CL, 01
JE LdPrm12
ADD EAX, 60
LdPrm12: TEST CL, 02
JE LdPrm13
ADD EAX,3Ah
LdPrm13: TEST CL,04
JE LdPrm14
ADD EAX,0303
LdPrm14: SUB ESI,7404
MOV BH,03
MOV BH,00
MOV AL,0Bh
POP EBX
POP ECX
LdPrm15: POP EDX
MOV EAX,004Fh
CMP EDI,00
JZ LdPrm17
NOP
//CHG EBP,52
DEC EDI
LdPrm17: POP DS
PUSH ECX
OUT 10h,EAX
PUSH EDX
CLD
PUSH EBX
MOV AL,52
LAHF
PUSH ESP
MOV EDX, 00FFh
PUSH EBP
POP DS
PUSH ESI
PUSH EDI
POP ES
LdPrm16: DB 155, 220, 86, 228 //COM QWORD PTR [BP-1Ch]
POP ECX
IN AL, 59h
IN AL, 59h
IN AL, 59h
IN AL, 59h
TEST EAX, 58
POP ECX
IN AL, 59h
IN AL, 59h
IN AL, 59h
CLD
REP MOVSB
OR EBX,75
DB 155, 221, 194 //ADD DWORD PTR [BP+SI]
NOP
PUSH EAX
DEC EBP
DEC ECX
INC ESP
STOSW
PUSH DS
ADD EBX,ESI
MOV AL, 000Bh
//DD BYTE PTR [BX+SI-4000],BH
//DD BYTE PTR [BX+SI],AL
MOV ECX, 000Fh
MOV EDX, 9999h
IN AL, 59h
IN AL, 59h
IN AL, 59h
IN AL, 59h
REP MOVSB
PUSH EAX
PUSH EDX
//OV DS, CS: [59F8h]
MOV EAX, DS
//OV WORD PTR [BP+36],EAX
//OV WORD PTR [BP+46],EAX
//OV WORD PTR [BP+58],EAX
//OV DS, CS: [59F0h]
//OV WORD PTR [BP+04],EAX
POP DS
POP EAX
PUSH EDX
db 238 //UT EDX,AL
POP ES
POP EDX
db 238 //UT EDX,EAX
POP EDX
PUSH EDX
db 236 //N AL,EDX
POP EDX
PUSH EDX
db 236 //N EAX,EDX
POP EDX
PUSHF
PUSH EDI
XOR DH,DH
MOV EDI,EDX
ADD EDX,EDI
POP EDI
POPF
MOV EDX, 013Eh
OR EDX,EDX
POPF
PUSH EAX
PUSH EBX
MOV EBX, 013Ah
LdPrm20: XOR EDX,EBX
CMP EAX, 0188
JNZ LdPrm21
MOV DL,14
MOV DH,AH
LdPrm21: ADD EBX,08
CMP BH,09
JB LdPrm20
MOV EDX, 013Eh
XOR DL, AL
POP EBX
POP EAX
PUSH EDX
PUSH EBX
MOV EBX, 013Ah
XOR EDX,EBX
CMP EAX, 0188
JNZ LdPrm23
MOV DL,04
AND AL,03
XOR AL,03
MOV DL,AL
OR DL,DL
JNZ LdPrm23
MOV DL,14
MOV DH,AH
LdPrm23: ADD EBX,08
CMP BH,09
JB LdPrm20
MOV EDX, 013Eh
XOR DL,AL
POP EBX
POP EAX
MOV AL, BH
MOV EAX, 10
MOV AH, BL
MOV AL, DL
PUSHF
CLI
MOV EDX, 0CF8h
db 238 //UT EDX,EAX
MOV EDX, 0CFCh
db 236 //N EAX,EDX
POPF
PUSH ECX
POP EDX
XOR CL, DL
PUSH EDX
LdPrm10: MOV CL, 01
PUSH ECX
MOV CL, 02
POP ECX
MOV CL, 03
PUSH EDX
PUSH EAX
PUSH EDI
MOV DL, 00
db 236 //N EAX,EDX
MOV EDI,EAX
XOR EAX,EDX
MOV EBX,EDI
MOV ECX,EDX
CLD
REP CMPSB
POP EDX
POP EAX
POP EDI
STI //aзpeшить пpepвaния
RET //окинуть обработчик
//RFPARM ENDP
//ntr1DhLen = $ - Intr1Dh
//онец подпрограммы обработчика INT 1Dh
//истемная программа INT 1Eh
FLOPPY2:
CLI //апросы процессора на IF = 0
MOV EBP,EAX
MOV EAX, ES
//пределение параметров гибкого диска
//а 160 Кб.
Flpp0: MOV AL, 00h //ункция запроса - 00h
MOV ECX, 6 //казатель параметра.
MOV EBX, Fat0 //агрузка обозначения.
MOV DH, 01h //амый первый сектор носителя.
MOV CH, 38 //оличество дорожек - 38
MOV ECX, 1280 //оличество секторов - 1280
MOV CL, 128 //оличество байт в одном секторе
MOV EDX, Sect //агрузить сектор для измерения
//ойти в сектор, как в тело исполняемой программы
// дать процессору испольнить каждый байт читаемого
//ектора, как холостую (бездейственную) команду.
Sect db 128 Dup (?)
//ectLen = $ - Sect
REP CMPSB //равнивание загруженных сведений
JMP Flpp1
Fat0 db "FAT 10"
//пределение параметров гибкого диска
//а 360 Кб, на дисководе без фоматирования
//а 1,2 Мб.
Flpp1: MOV AL, 01h //ункция запроса - 01h
MOV ECX, 6 //казатель параметра.
MOV EBX, OFFSET Fat0 //агрузка обозначения.
MOV DH, 01h //амый первый сектор носителя.
MOV CH, 76 //оличество дорожек - 76
MOV ECX, 2560 //оличество секторов - 2560
MOV CL, 128 //оличество байт в одном секторе
MOV EDX, OFFSET Sect1 //агрузить сектор для измерения
//ойти в сектор, как в тело исполняемой программы
// дать процессору испольнить каждый байт читаемого
//ектора, как холостую (бездейственную) команду.
Sect1 db 128 Dup (?)
REP CMPSB //равнивание загруженных сведений
//пределение параметров гибкого диска
//а 360 Кб, на дисководе с фоматированием
//а 1,2 Мб.
Flpp2: MOV AL, 02h //ункция запроса - 02h
MOV ECX, 6 //казатель параметра.
MOV EBX, OFFSET Fat1 //агрузка обозначения.
MOV DH, 01h //амый первый сектор носителя.
MOV CH, 38 //оличество дорожек - 38
MOV ECX, 1280 //оличество секторов - 1280
MOV CL, 00FFh //оличество байт в одном секторе - 256
MOV EDX, Sect2 //агрузить сектор для измерения
//ойти в сектор, как в тело исполняемой программы
// дать процессору испольнить каждый байт читаемого
//ектора, как холостую (бездейственную) команду.
Sect2 db 256 Dup (?)
REP CMPSB //равнивание загруженных сведений
JMP Flpp3
Fat1 db "FAT 12"
//пределение параметров гибкого диска
//а 1,2 Мб, на дисководе с фоматированием
//а 1,2 Мб.
Flpp3: MOV AL, 03h //ункция запроса - 03h
MOV ECX, 6 //казатель параметра.
MOV EBX, OFFSET Fat1 //агрузка обозначения.
MOV DH, 01h //амый первый сектор носителя.
MOV CH, 76 //оличество дорожек - 76
MOV ECX, 2560 //оличество секторов - 2560
MOV CL, 1 // - значение у нас уже завиксировано.
MOV ECX, 01FFh //оличество байт в одном секторе - 512
MOV EDX, OFFSET Sect3 //агрузить сектор для измерения
//ойти в сектор, как в тело исполняемой программы
// дать процессору испольнить каждый байт читаемого
//ектора, как холостую (бездейственную) команду.
Sect3 db 512 Dup (?)
REP CMPSB //равнивание загруженных сведений
JMP Flpp4
Fat2 db "FAT 12"
//пределение параметров гибкого диска
//а 720 Кб. на дисководе без форматирования
//а 1,44 Мб.
Flpp4: MOV AL, 04h //ункция запроса - 04h
MOV ECX, 6 //казатель параметра.
MOV EBX, OFFSET Fat1 //агрузка обозначения.
MOV DH, 01h //амый первый сектор носителя.
MOV CH, 40 //оличество дорожек - 40
MOV ECX, 1423 //оличество секторов - 1423
MOV CL, 1 // - значение у нас уже завиксировано.
MOV ECX, 01FFh //оличество байт в одном секторе - 512
MOV EDX, Sect4 //агрузить сектор для измерения
//ойти в сектор, как в тело исполняемой программы
// дать процессору испольнить каждый байт читаемого
//ектора, как холостую (бездейственную) команду.
Sect4 db 512 Dup (?)
REP CMPSB //равнивание загруженных сведений
//пределение параметров гибкого диска
//а 720 Кб. на дисководе c форматированием
//а 1,44 Мб.
Flpp5: MOV AL, 05h //ункция запроса - 05h
MOV ECX, 6 //казатель параметра.
MOV EBX, OFFSET Fat1 //агрузка обозначения.
MOV DH, 01h //амый первый сектор носителя.
MOV CH, 40 //оличество дорожек - 40
MOV ECX, 1423 //оличество секторов - 1423
MOV CL, 1 // - значение у нас уже завиксировано.
MOV ECX, 01FFh //оличество байт в одном секторе - 512
MOV EDX, OFFSET Sect5 //агрузить сектор для измерения
//ойти в сектор, как в тело исполняемой программы
// дать процессору испольнить каждый байт читаемого
//ектора, как холостую (бездейственную) команду.
Sect5 db 512 Dup (?)
REP CMPSB //равнивание загруженных сведений
JMP Flpp6
Fat3 db "FAT 12"
//пределение параметров гибкого диска
//а стандартный размер 1,44 Mб.
Flpp6: MOV AL, 06h //ункция запроса - 06h
MOV ECX, 6 //казатель параметра.
MOV EBX, OFFSET Fat3 //агрузка обозначения.
MOV DH, 01h //амый первый сектор носителя.
MOV CH, 80 //оличество дорожек - 80
MOV ECX, 2847 //оличество секторов - 2847
MOV CL, 1 // - значение у нас уже завиксировано.
MOV ECX, 01FFh //оличество байт в одном секторе - 512
MOV EDX, OFFSET Sect6 //агрузить сектор для измерения
//ойти в сектор, как в тело исполняемой программы
// дать процессору испольнить каждый байт читаемого
//ектора, как холостую (бездейственную) команду.
Sect6 db 512 Dup (?)
REP CMPSB //равнивание загруженных сведений
//пределение параметров гибкого диска
//а максимальный размер 2,88 Mб.
Flpp7: MOV AL, 07h //ункция запроса - 07h
MOV ECX, 6 //казатель параметра.
MOV EBX, OFFSET Fat3 //агрузка обозначения.
MOV DH, 01h //амый первый сектор носителя.
MOV CH, 00A0h //оличество дорожек - 160
MOV ECX, 5694 //оличество секторов - 5694
MOV CL, 1 // - значение у нас уже завиксировано.
MOV ECX, 01FFh //оличество байт в одном секторе - 512
MOV EDX, OFFSET Sect7 //агрузить сектор для измерения
//ойти в сектор, как в тело исполняемой программы
// дать процессору испольнить каждый байт читаемого
//ектора, как холостую (бездейственную) команду.
Sect7 db 512 Dup (?)
REP CMPSB //равнивание загруженных сведений
JMP Flpp8
Fat4 db "FAT 12"
//пределение параметров ленточного накопителя,
//ля дисководов ленточных дискет, с форматированием
//а 126 Кб.
Flpp8: MOV AL, 08h //ункция запроса - 08h
MOV ECX, 6 //казатель параметра.
MOV EBX, Fat5 //агрузка обозначения.
MOV DH, 01h //амый первый сектор носителя.
MOV CH, 10 //оличество дорожек - 10
MOV ECX, 0999 //оличество секторов - 0999
MOV CL, 128 //оличество байт в одном секторе - 128
MOV EDX, Sect8 //агрузить сектор для измерения
//ойти в сектор, как в тело исполняемой программы
// дать процессору испольнить каждый байт читаемого
//ектора, как холостую (бездейственную) команду.
Sect8 db 128 Dup (?)
//ect8Len = $ - Sect8
REP CMPSB //равнивание загруженных сведений
JMP Flpp9
Fat5 db "FAT 10"
//пределение параметров стандартного
//птического CD-диска, на ёмкость в 650 Мб.
Flpp9: MOV AL, 09h //ункция запроса - 09h
MOV ECX, 6 //казатель параметра.
MOV EBX, Fat6 //агрузка обозначения.
MOV DH, 01h //амый первый сектор носителя.
MOV ECX, 90FFh //оличество дорожек - 400
MOV CL, 3 // коде числа должно быть 3 байта.
MOV CH, 1 // - значение у нас уже завиксировано.
MOV ECX, SectCD //оличество секторов - 142350
MOV CH, 2 // - значения у нас уже завиксированы.
MOV ECX, 00FFh //оличество байт в одном секторе - 512
MOV EDX, Sect9 //агрузить сектор для измерения
//ойти в сектор, как в тело исполняемой программы
// дать процессору испольнить каждый байт читаемого
//ектора, как холостую (бездейственную) команду.
Sect9 db 512 Dup (?)
//ect9Len = $ - Sect9
REP CMPSB //равнение загруженных сведений
//роверить флаг, занятого заглавного
//егистра AL
CMP AL, 0Ah
JE FlppExt //сли, занят вектор
//ункции 0Ah, то выходим
//з обработчика...
//.. а если 09h, то продолжим работу с
//рограммой
JMP Flpp10
//оля данных или сложных параметров
Fat6 db "FAT 15"
SectCD db 02, 44, 14 //од количества секторов
// переводе на систему ASCII: 02, 2C, 0E
//пределение параметров Flash - микросхемы
//ысокой плотности, ёмкостью не менее 10 Мб.
//ля програматоров типа Cart Riader.
Flpp10: MOV AL, 0Ah //ункция запроса - 0Ah
MOV ECX, 6 //казатель параметра.
MOV EBX, OFFSET Fat6 //агрузка обозначения.
MOV DH, 01h //амый первый сектор носителя.
MOV ECX, 90FFh //оличество дорожек - 400
MOV CL, 3 // коде числа должно быть 3 байта.
MOV CH, 1 // - значение у нас уже завиксировано.
MOV ECX, OFFSET SectCD //оличество секторов - 142350
MOV CH, 2 // - значения у нас уже завиксированы.
MOV ECX, 00FFh //оличество байт в одном секторе - 512
MOV EDX, OFFSET Sect9 //агрузить сектор для измерения
//ойти в сектор, как в тело исполняемой программы
// дать процессору испольнить каждый байт читаемого
//ектора, как холостую (бездейственную) команду.
REP CMPSB //равнение загруженных сведений
//свободить регистры перед выходом
FlppExt: POP EAX
POP EBX
POP ECX
POP EDX
STI //апросы процессора на IF = 1
RET //окинуть обработчик
//LOPPY2 ENDP
//ntr1EhLen = $ - Intr1Eh
//онец подпрограммы обработчика INT 1Eh
//истемная программа INT 1Fh
SCREEN2:
//астроить сегментный регистр на область
//дресации табличных данных.
MOV EBP,EAX
MOV EAX, ES
CLI //апретить прерывания
//люс ко всему, также настроим сегментный
//егистр ES на видеобуфер
MOV EAX, 0B800h
MOV DS,EAX
//ункция 00h - Текстовой режим 40 x 25 символов, 2 цвета
MOV AL, 00h
//адействовать регистры
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
MOV EBX, 02 //оличество цветов в палитре.
//редварительно, задействовать длину рабочего
//ела подпрограммы читаемых параметров.
MOV ECX, 0040h
//агрузить в буфер памяти рабочий код
//иксируемых данных.
MOV EDX, Scrn0
Scrn0:
//еперь исполнить его, как обычные машинные
//оманды.
MOV DH, 1 //ачальный номер текстовой строки.
ADD DH, 25 //обавить конечное значение позиции строки.
INC DH //афиксировать установку параметра.
NOT DH //нверсировать его адресное значение.
MOV DL, 1 //ачальный номер текстового столбца.
ADD DL, 40 //обавить значение конечной позиции столбца.
INC DL //афиксировать установку параметра.
NOT DL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
AAA
//еперь также, установить параметры шрифта битовой
//атрицы, отображения символа на дисплее.
MOV BH, 0 //олевое значение исходного параметра.
ADD BH, 16 //обавить конечное значение позиции бита.
INC BH //афиксировать установку параметра.
NOT BH //нверсировать его адресное значение.
MOV BL, 0 //олевое значение исходного параметра.
ADD BL, 16 //обавить значение конечной позиции бита.
INC BL //афиксировать установку параметра.
NOT BL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
DAA
//crn0Len = $ - Scrn0
CLD //иксировать вперёд.
REP STOSB //афиксировать нужные параметры
// буфере оперативной памяти.
//редварительно, освободить регистры,
//еред началом новой операции.
POP EAX
POP EBX
POP ECX
POP EDX
//ункция 01h - Текстовой режим 80 x 50 символов, 16 цветов
MOV AL, 01h
//адействовать регистры
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
MOV EBX, 0Fh //оличество цветов в палитре - 16.
//редварительно, задействовать длину рабочего
//ела подпрограммы читаемых параметров.
MOV ECX, 0040h
//агрузить в буфер памяти рабочий код
//иксируемых данных.
MOV EDX, Scrn1
Scrn1:
//еперь исполнить его, как обычные машинные
//оманды.
MOV DH, 1 //ачальный номер текстовой строки.
ADD DH, 50 //обавить конечное значение позиции строки.
INC DH //афиксировать установку параметра.
NOT DH //нверсировать его адресное значение.
MOV DL, 1 //ачальный номер текстового столбца.
ADD DL, 80 //обавить значение конечной позиции столбца.
INC DL //афиксировать установку параметра.
NOT DL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
AAA
//еперь также, установить параметры шрифта битовой
//атрицы, отображения символа на дисплее.
MOV BH, 0 //олевое значение исходного параметра.
ADD BH, 8 //обавить конечное значение позиции бита.
INC BH //афиксировать установку параметра.
NOT BH //нверсировать его адресное значение.
MOV BL, 0 //олевое значение исходного параметра.
ADD BL, 8 //обавить значение конечной позиции бита.
INC BL //афиксировать установку параметра.
NOT BL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
DAA
//crn1Len = $ - Scrn1
CLD //иксировать вперёд.
REP STOSB //афиксировать нужные параметры
// буфере оперативной памяти.
//редварительно, освободить регистры,
//еред началом новой операции.
POP EAX
POP EBX
POP ECX
POP EDX
//ункция 02h - Текстовой режим 80 x 25 символов, 2 цветa
MOV AL, 02h
//адействовать регистры
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
MOV EBX, 02 //оличество цветов в палитре.
//редварительно, задействовать длину рабочего
//ела подпрограммы читаемых параметров.
MOV ECX, 0040h
//агрузить в буфер памяти рабочий код
//иксируемых данных.
MOV EDX, Scrn2
Scrn2:
//еперь исполнить его, как обычные машинные
//оманды.
MOV DH, 1 //ачальный номер текстовой строки.
ADD DH, 25 //обавить конечное значение позиции строки.
INC DH //афиксировать установку параметра.
NOT DH //нверсировать его адресное значение.
MOV DL, 1 //ачальный номер текстового столбца.
ADD DL, 80 //обавить значение конечной позиции столбца.
INC DL //афиксировать установку параметра.
NOT DL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
AAA
//еперь также, установить параметры шрифта битовой
//атрицы, отображения символа на дисплее.
MOV BH, 0 //олевое значение исходного параметра.
ADD BH, 8 //обавить конечное значение позиции бита.
INC BH //афиксировать установку параметра.
NOT BH //нверсировать его адресное значение.
MOV BL, 0 //олевое значение исходного параметра.
ADD BL, 16 //обавить значение конечной позиции бита
INC BL //афиксировать установку параметра.
NOT BL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
DAA
//crn2Len = $ - Scrn2
CLD //иксировать вперёд.
REP STOSB //афиксировать нужные параметры
// буфере оперативной памяти.
//редварительно, освободить регистры,
//еред началом новой операции.
POP EAX
POP EBX
POP ECX
POP EDX
//ункция 03h - Текстовой режим 80 x 25 символов, 16 цветов
MOV AL, 03h
//адействовать регистры
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
MOV EBX, 0Fh //оличество цветов в палитре - 16
//редварительно, задействовать длину рабочего
//ела подпрограммы читаемых параметров.
MOV ECX, 0040h
//агрузить в буфер памяти рабочий код
//иксируемых данных.
MOV EDX, Scrn3
Scrn3:
//еперь исполнить его, как обычные машинные
//оманды.
MOV DH, 1 //ачальный номер текстовой строки.
ADD DH, 25 //обавить конечное значение позиции строки.
INC DH //афиксировать установку параметра.
NOT DH //нверсировать его адресное значение.
MOV DL, 1 //ачальный номер текстового столбца.
ADD DL, 80 //обавить значение конечной позиции столбца.
INC DL //афиксировать установку параметра.
NOT DL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
AAA
//еперь также, установить параметры шрифта битовой
//атрицы, отображения символа на дисплее.
MOV BH, 0 //олевое значение исходного параметра.
ADD BH, 8 //обавить конечное значение позиции бита.
INC BH //афиксировать установку параметра.
NOT BH //нверсировать его адресное значение.
MOV BL, 0 //олевое значение исходного параметра.
ADD BL, 16 //обавить значение конечной позиции бита
INC BL //афиксировать установку параметра.
NOT BL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
DAA
//crn3Len = $ - Scrn3
CLD //иксировать вперёд.
REP STOSB //афиксировать нужные параметры
// буфере оперативной памяти.
//редварительно, освободить регистры,
//еред началом новой операции.
POP EAX
POP EBX
POP ECX
POP EDX
//ункция 04h - Графический режим 320 x 200 точек, 4 цвета
MOV AL, 04h
//адействовать регистры
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
MOV EBX, 04 //оличество цветов в палитре - 04
//редварительно, задействовать длину рабочего
//ела подпрограммы читаемых параметров.
MOV ECX, 0040h
//агрузить в буфер памяти рабочий код
//иксируемых данных.
MOV EDX, Scrn4
Scrn4:
//еперь исполнить его, как обычные машинные
//оманды.
MOV DH, 1 //ачальный номер текстовой строки.
ADD EDX, 200 //обавить конечное значение позиции строки.
INC EDX //афиксировать установку параметра.
NOT DH //нверсировать его адресное значение.
MOV DL, 1 //ачальный номер текстового столбца.
ADD EDX, 320 //обавить значение конечной позиции столбца.
INC EDX //афиксировать установку параметра.
NOT DL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
AAA
//еперь также, установить параметры шрифта битовой
//атрицы, отображения элемента изображения - пиксела
// графическом режиме.
MOV BH, 0 //олевое значение исходного параметра.
ADD BH, 2 //обавить конечное значение позиции бита.
INC BH //афиксировать установку параметра.
NOT BH //нверсировать его адресное значение.
MOV BL, 0 //олевое значение исходного параметра.
ADD BL, 2 //обавить значение конечной позиции бита
INC BL //афиксировать установку параметра.
NOT BL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
DAA
//crn4Len = $ - Scrn4
CLD //иксировать вперёд.
REP STOSB //афиксировать нужные параметры
// буфере оперативной памяти.
//редварительно, освободить регистры,
//еред началом новой операции.
POP EAX
POP EBX
POP ECX
POP EDX
//ункция 05h - Графический режим 320 x 200 точек, 2 цвета
MOV AL, 05h
//адействовать регистры
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
MOV EBX, 02 //оличество цветов в палитре - 02
//редварительно, задействовать длину рабочего
//ела подпрограммы читаемых параметров.
MOV ECX, 0040h
//агрузить в буфер памяти рабочий код
//иксируемых данных.
MOV EDX, Scrn5
Scrn5:
//еперь исполнить его, как обычные машинные
//оманды.
MOV DH, 1 //ачальный номер текстовой строки.
ADD EDX, 200 //обавить конечное значение позиции строки.
INC EDX //афиксировать установку параметра.
NOT DH //нверсировать его адресное значение.
MOV DL, 1 //ачальный номер текстового столбца.
ADD EDX, 320 //обавить значение конечной позиции столбца.
INC EDX //афиксировать установку параметра.
NOT DL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
AAA
//еперь также, установить параметры шрифта битовой
//атрицы, отображения элемента изображения - пиксела
// графическом режиме.
MOV BH, 0 //олевое значение исходного параметра.
ADD BH, 2 //обавить конечное значение позиции бита.
INC BH //афиксировать установку параметра.
NOT BH //нверсировать его адресное значение.
MOV BL, 0 //олевое значение исходного параметра.
ADD BL, 2 //обавить значение конечной позиции бита
INC BL //афиксировать установку параметра.
NOT BL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
DAA
//crn5Len = $ - Scrn5
CLD //иксировать вперёд.
REP STOSB //афиксировать нужные параметры
// буфере оперативной памяти.
//редварительно, освободить регистры,
//еред началом новой операции.
POP EAX
POP EBX
POP ECX
POP EDX
//ункция 06h - Графический режим 640 x 200 точек, 2 цвета
MOV AL, 06h
//адействовать регистры
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
MOV EBX, 02 //оличество цветов в палитре - 02
//редварительно, задействовать длину рабочего
//ела подпрограммы читаемых параметров.
MOV ECX, 0040h
//агрузить в буфер памяти рабочий код
//иксируемых данных.
MOV EDX, Scrn6
Scrn6:
//еперь исполнить его, как обычные машинные
//оманды.
MOV DH, 1 //ачальный номер текстовой строки.
ADD EDX, 200 //обавить конечное значение позиции строки.
INC EDX //афиксировать установку параметра.
NOT DH //нверсировать его адресное значение.
MOV DL, 1 //ачальный номер текстового столбца.
ADD EDX, 640 //обавить значение конечной позиции столбца.
INC EDX //афиксировать установку параметра.
NOT DL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
AAA
//еперь также, установить параметры шрифта битовой
//атрицы, отображения элемента изображения - пиксела
// графическом режиме.
MOV BH, 0 //олевое значение исходного параметра.
ADD BH, 1 //обавить конечное значение позиции бита.
INC BH //афиксировать установку параметра.
NOT BH //нверсировать его адресное значение.
MOV BL, 0 //олевое значение исходного параметра.
ADD BL, 2 //обавить значение конечной позиции бита
INC BL //афиксировать установку параметра.
NOT BL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
DAA
//crn6Len = $ - Scrn6
CLD //иксировать вперёд.
REP STOSB //афиксировать нужные параметры
// буфере оперативной памяти.
//редварительно, освободить регистры,
//еред началом новой операции.
POP EAX
POP EBX
POP ECX
POP EDX
//ункция 07h - Текстовой режим 80 x 25 символов, 2 цветa
MOV AL, 07h
//адействовать регистры
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
MOV EBX, 02h //оличество цветов в палитре - 2.
//редварительно, задействовать длину рабочего
//ела подпрограммы читаемых параметров.
MOV ECX, 0040h
//агрузить в буфер памяти рабочий код
//иксируемых данных.
MOV EDX, Scrn7
Scrn7:
//еперь исполнить его, как обычные машинные
//оманды.
MOV DH, 1 //ачальный номер текстовой строки.
ADD DH, 25 //обавить конечное значение позиции строки.
INC DH //афиксировать установку параметра.
NOT DH //нверсировать его адресное значение.
MOV DL, 1 //ачальный номер текстового столбца.
ADD DL, 80 //обавить значение конечной позиции столбца.
INC DL //афиксировать установку параметра.
NOT DL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
AAA
//еперь также, установить параметры шрифта битовой
//атрицы, отображения символа на дисплее.
MOV BH, 0 //олевое значение исходного параметра.
ADD BH, 8 //обавить конечное значение позиции бита.
INC BH //афиксировать установку параметра.
NOT BH //нверсировать его адресное значение.
MOV BL, 0 //олевое значение исходного параметра.
ADD BL, 16 //обавить значение конечной позиции бита
INC BL //афиксировать установку параметра.
NOT BL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
DAA
//crn7Len = $ - Scrn7
CLD //иксировать вперёд.
REP STOSB //афиксировать нужные параметры
// буфере оперативной памяти.
//редварительно, освободить регистры,
//еред началом новой операции.
POP EAX
POP EBX
POP ECX
POP EDX
//ункция 09h - Графический режим 320 x 200 точек, 16 цветов.
MOV AL, 09h
//адействовать регистры
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
MOV EBX, 0Fh //оличество цветов в палитре - 16.
//редварительно, задействовать длину рабочего
//ела подпрограммы читаемых параметров.
MOV ECX, 0040h
//агрузить в буфер памяти рабочий код
//иксируемых данных.
MOV EDX, Scrn9
Scrn9:
//еперь исполнить его, как обычные машинные
//оманды.
MOV DH, 1 //ачальный номер текстовой строки.
ADD EDX, 200 //обавить конечное значение позиции строки.
INC EDX //афиксировать установку параметра.
NOT DH //нверсировать его адресное значение.
MOV DL, 1 //ачальный номер текстового столбца.
ADD EDX, 320 //обавить значение конечной позиции столбца.
INC EDX //афиксировать установку параметра.
NOT DL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
AAA
//еперь также, установить параметры шрифта битовой
//атрицы, отображения элемента изображения - пиксела
// графическом режиме.
MOV BH, 0 //олевое значение исходного параметра.
ADD BH, 2 //обавить конечное значение позиции бита.
INC BH //афиксировать установку параметра.
NOT BH //нверсировать его адресное значение.
MOV BL, 0 //олевое значение исходного параметра.
ADD BL, 2 //обавить значение конечной позиции бита
INC BL //афиксировать установку параметра.
NOT BL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
DAA
//crn9Len = $ - Scrn9
CLD //иксировать вперёд.
REP STOSB //афиксировать нужные параметры
// буфере оперативной памяти.
//редварительно, освободить регистры,
//еред началом новой операции.
POP EAX
POP EBX
POP ECX
POP EDX
//ункция 0Ah - Графический режим 640 x 200 точек, 4 цвета
MOV AL, 0Ah
//адействовать регистры
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
MOV EBX, 04h //оличество цветов в палитре - 4.
//редварительно, задействовать длину рабочего
//ела подпрограммы читаемых параметров.
MOV ECX, 0040h
//агрузить в буфер памяти рабочий код
//иксируемых данных.
MOV EDX, Scrn10
Scrn10:
//еперь исполнить его, как обычные машинные
//оманды.
MOV DH, 1 //ачальный номер текстовой строки.
ADD EDX, 200 //обавить конечное значение позиции строки.
INC EDX //афиксировать установку параметра.
NOT DH //нверсировать его адресное значение.
MOV DL, 1 //ачальный номер текстового столбца.
ADD EDX, 640 //обавить значение конечной позиции столбца.
INC EDX //афиксировать установку параметра.
NOT DL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
AAA
//еперь также, установить параметры шрифта битовой
//атрицы, отображения элемента изображения - пиксела
// графическом режиме.
MOV BH, 0 //олевое значение исходного параметра.
ADD BH, 1 //обавить конечное значение позиции бита.
INC BH //афиксировать установку параметра.
NOT BH //нверсировать его адресное значение.
MOV BL, 0 //олевое значение исходного параметра.
ADD BL, 2 //обавить значение конечной позиции бита
INC BL //афиксировать установку параметра.
NOT BL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
DAA
//crn10Len = $ - Scrn10
CLD //иксировать вперёд.
REP STOSB //афиксировать нужные параметры
// буфере оперативной памяти.
//редварительно, освободить регистры,
//еред началом новой операции.
POP EAX
POP EBX
POP ECX
POP EDX
//ункция 0Dh - Графический режим 320 x 200 точек, 16 цветов.
MOV AL, 0Dh
//адействовать регистры
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
MOV EBX, 0Fh //оличество цветов в палитре - 16.
//редварительно, задействовать длину рабочего
//ела подпрограммы читаемых параметров.
MOV ECX, 0040h
//агрузить в буфер памяти рабочий код
//иксируемых данных.
MOV EDX, Scrn11
Scrn11:
//еперь исполнить его, как обычные машинные
//оманды.
MOV DH, 1 //ачальный номер текстовой строки.
ADD EDX, 200 //обавить конечное значение позиции строки.
INC EDX //афиксировать установку параметра.
NOT DH //нверсировать его адресное значение.
MOV DL, 1 //ачальный номер текстового столбца.
ADD EDX, 320 //обавить значение конечной позиции столбца.
INC EDX //афиксировать установку параметра.
NOT DL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
AAA
//еперь также, установить параметры шрифта битовой
//атрицы, отображения элемента изображения - пиксела
// графическом режиме.
MOV BH, 0 //олевое значение исходного параметра.
ADD BH, 2 //обавить конечное значение позиции бита.
INC BH //афиксировать установку параметра.
NOT BH //нверсировать его адресное значение.
MOV BL, 0 //олевое значение исходного параметра.
ADD BL, 2 //обавить значение конечной позиции бита
INC BL //афиксировать установку параметра.
NOT BL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
DAA
//crn11Len = $ - Scrn11
CLD //иксировать вперёд.
REP STOSB //афиксировать нужные параметры
// буфере оперативной памяти.
//редварительно, освободить регистры,
//еред началом новой операции.
POP EAX
POP EBX
POP ECX
POP EDX
//ункция 0Eh - Графический режим 640 x 200 точек, 16 цветов.
MOV AL, 0Eh
//адействовать регистры
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
MOV EBX, 0Fh //оличество цветов в палитре - 16.
//редварительно, задействовать длину рабочего
//ела подпрограммы читаемых параметров.
MOV ECX, 0040h
//агрузить в буфер памяти рабочий код
//иксируемых данных.
MOV EDX, Scrn12
Scrn12:
//еперь исполнить его, как обычные машинные
//оманды.
MOV DH, 1 //ачальный номер текстовой строки.
ADD EDX, 200 //обавить конечное значение позиции строки.
INC EDX //афиксировать установку параметра.
NOT DH //нверсировать его адресное значение.
MOV DL, 1 //ачальный номер текстового столбца.
ADD EDX, 640 //обавить значение конечной позиции столбца.
INC EDX //афиксировать установку параметра.
NOT DL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
AAA
//еперь также, установить параметры шрифта битовой
//атрицы, отображения элемента изображения - пиксела
// графическом режиме.
MOV BH, 0 //олевое значение исходного параметра.
ADD BH, 1 //обавить конечное значение позиции бита.
INC BH //афиксировать установку параметра.
NOT BH //нверсировать его адресное значение.
MOV BL, 0 //олевое значение исходного параметра.
ADD BL, 2 //обавить значение конечной позиции бита
INC BL //афиксировать установку параметра.
NOT BL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
DAA
//crn12Len = $ - Scrn12
CLD //иксировать вперёд.
REP STOSB //афиксировать нужные параметры
// буфере оперативной памяти.
//редварительно, освободить регистры,
//еред началом новой операции.
POP EAX
POP EBX
POP ECX
POP EDX
//ункция 0Fh - Графический режим 640 x 350 точек, 2 цвета
MOV AL, 0Fh
//адействовать регистры
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
MOV EBX, 02h //оличество цветов в палитре - 2
//редварительно, задействовать длину рабочего
//ела подпрограммы читаемых параметров.
MOV ECX, 0040h
//агрузить в буфер памяти рабочий код
//иксируемых данных.
MOV EDX, Scrn13
Scrn13:
//еперь исполнить его, как обычные машинные
//оманды.
MOV DH, 1 //ачальный номер текстовой строки.
ADD EDX, 350 //обавить конечное значение позиции строки.
INC EDX //афиксировать установку параметра.
NOT DH //нверсировать его адресное значение.
MOV DL, 1 //ачальный номер текстового столбца.
ADD EDX, 640 //обавить значение конечной позиции столбца.
INC EDX //афиксировать установку параметра.
NOT DL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
AAA
//еперь также, установить параметры шрифта битовой
//атрицы, отображения элемента изображения - пиксела
// графическом режиме.
MOV BH, 0 //олевое значение исходного параметра.
ADD BH, 1 //обавить конечное значение позиции бита.
INC BH //афиксировать установку параметра.
NOT BH //нверсировать его адресное значение.
MOV BL, 0 //олевое значение исходного параметра.
ADD BL, 1 //обавить значение конечной позиции бита
INC BL //афиксировать установку параметра.
NOT BL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
DAA
//crn13Len = $ - Scrn13
CLD //иксировать вперёд.
REP STOSB //афиксировать нужные параметры
// буфере оперативной памяти.
//редварительно, освободить регистры,
//еред началом новой операции.
POP EAX
POP EBX
POP ECX
POP EDX
//ункция 10h - Графический режим 640 x 350 точек, 16 цветов.
MOV AL, 10h
//адействовать регистры
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
MOV EBX, 0Fh //оличество цветов в палитре - 16
//редварительно, задействовать длину рабочего
//ела подпрограммы читаемых параметров.
MOV ECX, 0040h
//агрузить в буфер памяти рабочий код
//иксируемых данных.
MOV EDX, Scrn14
Scrn14:
//еперь исполнить его, как обычные машинные
//оманды.
MOV DH, 1 //ачальный номер текстовой строки.
ADD EDX, 350 //обавить конечное значение позиции строки.
INC EDX //афиксировать установку параметра.
NOT DH //нверсировать его адресное значение.
MOV DL, 1 //ачальный номер текстового столбца.
ADD EDX, 640 //обавить значение конечной позиции столбца.
INC EDX //афиксировать установку параметра.
NOT DL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
AAA
//еперь также, установить параметры шрифта битовой
//атрицы, отображения элемента изображения - пиксела
// графическом режиме.
MOV BH, 0 //олевое значение исходного параметра.
ADD BH, 1 //обавить конечное значение позиции бита.
INC BH //афиксировать установку параметра.
NOT BH //нверсировать его адресное значение.
MOV BL, 0 //олевое значение исходного параметра.
ADD BL, 1 //обавить значение конечной позиции бита
INC BL //афиксировать установку параметра.
NOT BL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
DAA
//crn14Len = $ - Scrn14
CLD //иксировать вперёд.
REP STOSB //афиксировать нужные параметры
// буфере оперативной памяти.
//редварительно, освободить регистры,
//еред началом новой операции.
POP EAX
POP EBX
POP ECX
POP EDX
//ункция 11h - Графический режим 640 x 480 точек, 2 цвета
MOV AL, 11h
//адействовать регистры
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
MOV EBX, 02h //оличество цветов в палитре - 2
//редварительно, задействовать длину рабочего
//ела подпрограммы читаемых параметров.
MOV ECX, 0040h
//агрузить в буфер памяти рабочий код
//иксируемых данных.
MOV EDX, Scrn15
Scrn15:
//еперь исполнить его, как обычные машинные
//оманды.
MOV DH, 1 //ачальный номер текстовой строки.
ADD EDX, 480 //обавить конечное значение позиции строки.
INC EDX //афиксировать установку параметра.
NOT DH //нверсировать его адресное значение.
MOV DL, 1 //ачальный номер текстового столбца.
ADD EDX, 640 //обавить значение конечной позиции столбца.
INC EDX //афиксировать установку параметра.
NOT DL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
AAA
//еперь также, установить параметры шрифта битовой
//атрицы, отображения элемента изображения - пиксела
// графическом режиме.
MOV BH, 0 //олевое значение исходного параметра.
ADD BH, 1 //обавить конечное значение позиции бита.
INC BH //афиксировать установку параметра.
NOT BH //нверсировать его адресное значение.
MOV BL, 0 //олевое значение исходного параметра.
ADD BL, 1 //обавить значение конечной позиции бита
INC BL //афиксировать установку параметра.
NOT BL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
DAA
//crn15Len = $ - Scrn15
CLD //иксировать вперёд.
REP STOSB //афиксировать нужные параметры
// буфере оперативной памяти.
//редварительно, освободить регистры,
//еред началом новой операции.
POP EAX
POP EBX
POP ECX
POP EDX
//ункция 12h - Графический режим 640 x 480 точек, 16 цветов
MOV AL, 12h
//адействовать регистры
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
MOV EBX, 0Fh //оличество цветов в палитре - 16
//редварительно, задействовать длину рабочего
//ела подпрограммы читаемых параметров.
MOV ECX, 0040h
//агрузить в буфер памяти рабочий код
//иксируемых данных.
MOV EDX, Scrn16
Scrn16:
//еперь исполнить его, как обычные машинные
//оманды.
MOV DH, 1 //ачальный номер текстовой строки.
ADD EDX, 480 //обавить конечное значение позиции строки.
INC EDX //афиксировать установку параметра.
NOT DH //нверсировать его адресное значение.
MOV DL, 1 //ачальный номер текстового столбца.
ADD EDX, 640 //обавить значение конечной позиции столбца.
INC EDX //афиксировать установку параметра.
NOT DL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
AAA
//еперь также, установить параметры шрифта битовой
//атрицы, отображения элемента изображения - пиксела
// графическом режиме.
MOV BH, 0 //олевое значение исходного параметра.
ADD BH, 1 //обавить конечное значение позиции бита.
INC BH //афиксировать установку параметра.
NOT BH //нверсировать его адресное значение.
MOV BL, 0 //олевое значение исходного параметра.
ADD BL, 1 //обавить значение конечной позиции бита
INC BL //афиксировать установку параметра.
NOT BL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
DAA
//crn16Len = $ - Scrn16
CLD //иксировать вперёд.
REP STOSB //афиксировать нужные параметры
// буфере оперативной памяти.
//редварительно, освободить регистры,
//еред началом новой операции.
POP EAX
POP EBX
POP ECX
POP EDX
//ункция 13h - Графический режим 320 x 200 точек, 256 цветов
MOV AL, 13h
//адействовать регистры
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
MOV EBX, 00FFh //оличество цветов в палитре - 256.
//редварительно, задействовать длину рабочего
//ела подпрограммы читаемых параметров.
MOV ECX, 0040h
//агрузить в буфер памяти рабочий код
//иксируемых данных.
MOV EDX, Scrn17
Scrn17:
//еперь исполнить его, как обычные машинные
//оманды.
MOV DH, 1 //ачальный номер текстовой строки.
ADD EDX, 200 //обавить конечное значение позиции строки.
INC EDX //афиксировать установку параметра.
NOT DH //нверсировать его адресное значение.
MOV DL, 1 //ачальный номер текстового столбца.
ADD EDX, 320 //обавить значение конечной позиции столбца.
INC EDX //афиксировать установку параметра.
NOT DL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
AAA
//еперь также, установить параметры шрифта битовой
//атрицы, отображения элемента изображения - пиксела
// графическом режиме.
MOV BH, 0 //олевое значение исходного параметра.
ADD BH, 2 //обавить конечное значение позиции бита.
INC BH //афиксировать установку параметра.
NOT BH //нверсировать его адресное значение.
MOV BL, 0 //олевое значение исходного параметра.
ADD BL, 2 //обавить значение конечной позиции бита
INC BL //афиксировать установку параметра.
NOT BL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
DAA
//crn17Len = $ - Scrn17
CLD //иксировать вперёд.
REP STOSB //афиксировать нужные параметры
// буфере оперативной памяти.
//редварительно, освободить регистры,
//еред началом новой операции.
POP EAX
POP EBX
POP ECX
POP EDX
//ункция 43h - Текстовой режим 40 x 25 символов, 16 цветов.
MOV AL, 43h
//адействовать регистры
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
MOV EBX, 0Fh //оличество цветов в палитре - 16.
//редварительно, задействовать длину рабочего
//ела подпрограммы читаемых параметров.
MOV ECX, 0040h
//агрузить в буфер памяти рабочий код
//иксируемых данных.
MOV EDX, Scrn43
Scrn43:
//еперь исполнить его, как обычные машинные
//оманды.
MOV DH, 1 //ачальный номер текстовой строки.
ADD DH, 25 //обавить конечное значение позиции строки.
INC DH //афиксировать установку параметра.
NOT DH //нверсировать его адресное значение.
MOV DL, 1 //ачальный номер текстового столбца.
ADD DL, 40 //обавить значение конечной позиции столбца.
INC DL //афиксировать установку параметра.
NOT DL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
AAA
//еперь также, установить параметры шрифта битовой
//атрицы, отображения символа на дисплее.
MOV BH, 0 //олевое значение исходного параметра.
ADD BH, 16 //обавить конечное значение позиции бита.
INC BH //афиксировать установку параметра.
NOT BH //нверсировать его адресное значение.
MOV BL, 0 //олевое значение исходного параметра.
ADD BL, 16 //обавить значение конечной позиции бита.
INC BL //афиксировать установку параметра.
NOT BL //нверсировать его адресное значение.
//есятичная коррекция произвольного значения числа байтов,
//ри их объединении.
DAA
//crn43Len = $ - Scrn43
CLD //иксировать вперёд.
REP STOSB //афиксировать нужные параметры
// буфере оперативной памяти.
//редварительно, освободить регистры,
//еред началом новой операции.
POP EAX
POP EBX
POP ECX
POP EDX
STI //азрешить прерывания
RET //окинуть обработчик
//CREEN2 ENDP
//ntr1FhLen = $ - Intr1Fh
//онец подпрограммы обработчика INT 1Fh
//истемная программа INT 20h
QUITS:
CLI //апретить прерывания
//оманды кода завершения
MOV EAX, 0000h
PUSH EAX
POP DS
//рочие команды
MOV ECX,ESI //R0
MOV EDX,7964h //R1
//NC Word Ptr ES:[02B4h]
PUSH EAX
MOV EAX,0000h
PUSH EAX
//свободить регистры
POP ESI
POP EDI
STI //азрешить прерывания
//ET //ыйти из программы, через IOS
//ез прерываний
//ополнительные параметры, которые могут
//ыть затребованы системой, при вызове
//ункции INT 20h
//em ENTER 12, 46
PUSH EDI
MOV EDI,04
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
//USH Word Ptr [BX+078Eh]
NOP
PUSH CS
ADD ESP,06
PUSH EDX
PUSH EAX
MOV EBP,0Ch
MOV EBP,0Ah
ADD ESP,-01
PUSH EBP
PUSH EBX
PUSH ECX
ADD ESP,0Ch
PUSH EBP
PUSH ESP
NOP
PUSH CS
DB 155, 220, 194 //ADD QWord Ptr [BP+DI+04C4h]
PUSH DS
PUSH EDX
PUSH EAX
PUSH EBP
PUSH ESP
ADD ESP,-01
//USH Word Ptr [BP-0Ch]
PUSH DS
PUSH EDI
ADD ESP,04
INC EAX
PUSH EAX
PUSH ESI
PUSH DS
PUSH EDI
ADD ESP,0Ch
//USH Word Ptr [BP-0Ah]
PUSH EBP
ADD ESP,04
POP EDI
RET
PUSH EBP
MOV EBP,ESP
PUSH EDI
PUSH ESI
MOV EDI,EBP
PUSH DS
PUSH EDI
ADD ESP,04
MOV ESI,EAX
ADD ESI,EDI
INC ESI
MOV EAX,ESI
DEC ESI
PUSH DS
PUSH EDI
ADD ESP,08
PUSH DS
PUSH EBP
PUSH DS
PUSH EDI
ADD ESP,08
ADD EBX,ESI
STI //азрешить прерывания
RET //ыйти из обработчика
//UITS ENDP
//ntr20hLen = $ - Intr20h
//онец подпрограммы обработчика INT 20h
Bufin db 512 dup (?) //уфер ввода и нижний стёк программы,
//дновременно, с этим.
Str2 db 27 //бозначение конца тела исполняемой
//рограммы символом ESC для контроля.
//TEXT ENDS
//END AUTO_IOS
}
}
-->
<% end template %>
<%= Programma AUTOINT for DOS and WINDOWS execute.... %>
<%= Program the execute okey! - ON %>
Programma AUTOINT for DOS and WINDOWS execute....
_______________________________________________________________________
╧ЁюуЁрььр ртЄюьрЄшўхёъюую Ёхцшьр, т√яюыэхэш ёшёЄхьющ Ёрсюўшї ЇєэъЎшщ.
╨хцшь ЁрсюЄ√ - яюёЄю ээ√щ.
┬хЁёш фрээющ яЁюуЁрьь√ фы ёЁхф√ яЁюуЁрььшЁютрэш MASM32 (Macro Assembler
for X32-dimamic the operatyve system Windows.)
╧ЁюуЁрььр AUTO_IOS яЁхфэрчэрўхэр фы ртЄюьрЄшўхёъюую Ўшъыр
ЁрсюЄ√ ёшёЄхь√, схч эхяюёЁхфёЄтхээюую єўрёЄш ўхыютхър.
┼╕ яЁшэЎшя ЁрсюЄ√ ёюёЄюшЄ т ёыхфє■∙хь:
┬ эрўрых яЁюуЁрььр ёючфр╕Є чряшё√трхЄ фтюшўэ√х фрээ√х ёыєўрщэюую
їрЁръЄхЁр яЁюшчтюы№эюую фюёЄєяр эр ы■сющ Їшчшўхёъшщ фшёъ
т 40-щ ёхъЄюЁ 1-щ ъырёЄхЁ (═хщЄЁры№эр юсырёЄ№ эх чрэшьрхьр , эш
BOOT-яЁюуЁрььющ, эш FAT-ЄрсышЎхщ, эш юЄфхы№э√ьш Їрщырьш).
╟рЄхь, юэр чръЁ√трхЄ ¤Єє юяхЁрЎш■. ╧юёых, ўхую юЄъЁ√трхЄ ёэютр,
¤ЄюЄ-цх ъырёЄхЁ эр фшёъх, ЄхяхЁ№ єцх эх фы чряшёш, р фы ўЄхэш .
─рыхх юэр, ўшЄрхЄ шч эхую фтюшўэ√щ ъюф ш т чртшьюёЄш, юЄ Єюую ъръшх
фрээ√х чряшёрэ√ т ¤Єюь Їрщых, Єръшх ш т√яюыэ хЄ фхщёЄтш .
╥ръшь юсЁрчюь, ё яюью∙ш яюфюсэющ яЁюуЁрьь√ ьюцэю ъюья№■ЄхЁ, чрёЄртшЄ№
ёрь т√яюыэ Є№ Ёрчышўэ√х фхщёЄтш , схч эхяюёЁхфёЄтхээюую
єўрёЄш ўхыютхър. ╧Ёш ¤Єюь, ъюуфр чряєёърхЄё яЁюуЁрььр AUTO_IOS
Єю т 40-щ ёхъЄюЁ, 1-щ ъырёЄхЁ эр фшёъхЄх ърцф√щ Ёрч, чряшё√тр■Єё эют√х
фрээ√х, ш ърцф√щ Ёрч ¤Єр яЁюуЁрььр ьюцхЄ ёютхЁ°рЄ№ Ёрчэ√х фхщёЄтш ,
ёютёхь эх Єх, ўЄю т яЁхф√фє∙шщ Ёрч.
┼ёыш фрээр яЁюуЁрььр, шьххЄ чрьъэєЄ√щ Ўшъы ЁрсюЄ√, Єю эр яЁръЄшъх
юэр яючтюышЄ ёфхырЄ№ шч яхЁёюэры№эюую ъюья№■ЄхЁр, яюфюсшх
ртЄюьрЄшўхёъюую ЁюсюЄр. ┬ яхЁёяхъЄштх, ¤Єю ьюцхЄ яючтюышЄ№ чрьхэшЄ№,
х■ ёє∙хёЄтє■∙х■ ЄЁрфшЎшюээє■ яЁюуЁрььє ъюььрэфэюую яЁюЎхёёюЁр, яю
цхырэш■ яюы№чютрЄхы .
╬Єышўшх фрээющ яЁюуЁрьь√ AUTO_IOS юЄ рэрыюушўэ√ї тхЁёшщ, Єшяр AUTOINT,
AUTO3DOS ш яЁюўшї, ёюёЄюшЄ т Єюь, ўЄю яЁш ЁрчЁрсюЄъх фрээющ яЁюуЁрьь√,
юяЁюсютрэ Єръющ ьхЄюф: фы т√яюыэхэш Ёрчышўэ√ї ЇєэъЎшщ, шёяюы№чє■Єё
эх ёшёЄхьэ√х ш ряярЁрЄэ√х яЁхЁ√трэш , р яюфяЁюуЁрьь√ рэрыюушўэ√х
ёшёЄхьэ√ї яЁюуЁрььрь BIOS, ъюЄюЁ√х чряЁр°штр■Єё эр т√яюыэхэш
яЁюуЁрььэ√ьш яЁхЁ√трэш ьш (INT n). ▌Єш яюфяЁюуЁрьь√ ЁрсюЄр■Є,
шёъы■ўшЄхы№эю яю яЁюЎхфєЁх IOS, Є.х. схч чряЁюёр ёшёЄхьэ√ї ш ряярЁрЄэ√ї
яЁхЁ√трэшщ. ═р яЁръЄшъх, ¤Єю фр╕Є тючьюцэюёЄ№ яЁюуЁрььх ЁрсюЄрЄ№ ш
т√яюыэ Є№ эєцэ√х ЇєэъЎшш эхчртшёшью юЄ ъръющ, ышсю юяхЁрЎшюээющ ёшёЄхь√.
╥ръющ ьхЄюф, ты хЄё тхё№ьр яхЁёяхъЄштэ√ь ш эрф╕цэ√ь, яЁш ЁрчЁрсюЄъх
ёшёЄхьэ√ї фЁрщтхЁют ш эютюую яЁюуЁрььэюую юсхёяхўхэш .
╧хЁхўхэ№ ъюфют т√чютр ш эрчэрўхэшщ яюфяЁюуЁрьь ьырф°хщ ўрёЄш ЄрсышЎ√
яЁхЁ√трэшщ. ╥рсышЎр яЁхЁ√трэшщ ёшёЄхьэ√ї яюфяЁюуЁрьь ROM BIOS.
╩юф√ т√чютр INT 01h - 07h ш 10h - 20h (ъЁюьх ряярЁрЄэ√ї,
ё ъюфрьш т√чютр INT 08h - 0Fh) ш ёююЄтхЄёЄтє■∙шї шь рэрыюушўэ√ї
яюфяЁюуЁрьь, шёяюы№чєхь√ї т фрээющ яЁюуЁрььх ўхЁхч ъюьрэфє CALL n,
тьхёЄю яЁшьхэхэш ъюьрэф√ т√чютр ёшёЄхьэ√ї ш ряярЁрЄэ√ї
яЁхЁ√трэшщ INT n.