Мой вариант имитатора загрузчика Русской ОС
codseg segment byte
assume cs:codseg, ds:codseg, ss:codseg
org 7c00h
start: jmp short METKA2 ;переход на код программы
nop ;нет операции
a2 db 'RUSSKAOS' ;системный идентификатор
a3 dw 512 ;размер сектора в байтах
a4 db 1 ;число секторов в кластере
a5 dw 1 ;число зарезервированных секторов
a6 db 2 ;число копий фат
a7 dw 224 ;макс.число элементов
a8 dw 2880 ;число секторов на логичском диске
a9 db 0F0h ;дескриптор носителя
a10 dw 9 ;размер фат секторов
a11 dw 18 ;число секторов на дорожке
a12 dw 2 ;число рабочих поверхностей
a13 dd 0 ;число скрытых секторов
a14 dd 0 ;число секторов на логическом диске
a15 db 0 ;типогического диска
a16 db 0 ;резерв
a17 db 029h ;маркер с кодом
a18 dd 12345678h ;серийный номер тома
a19 db 'RUSSKAYA OS' ;метка тома
a20 db 'FAT12' ;имя файловой системы
METKA2: jmp short METKA3
TEXT1 DB 'RUSSKAYA OPERACIONNAYA SISTEMA$'
TEXT2 DB 'VIKL?DA(ENTER)$'
METKA3: JMP SHORT METKA4
ADRES1 DW 0000H ;
SLOVO1 DW 0001H ;
BYTE1 DB 00H ;СТРАНИЦА
BYTE2 DB 0AH ;СТРОКА 10
BYTE3 DB 10H ;СТРОКА 16
BYTE4 DB 10H ;ПОЗИЦИЯ В СТРОКЕ
BYTE5 DB 00H ;СМЕЩЕНИЕ ПОЗИЦИИ В СТРОКЕ
BYTE6 DB 00H ;КОД СИМВОЛА
BYTE7 DB 07H ;КОД ЦВЕТА
METKA4: XOR AX,AX
MOV AH,00H
MOV AL,03H
INT 10H ;РЕЖИМ
XOR AX,AX
MOV AH,05H
MOV AL,BYTE1
INT 10H ;СТРАНИЦА
XOR AX,AX
XOR CX,CX
MOV AH,01H
MOV CH,00H
MOV CL,0AH
INT 10H ;КУРСОР
XOR AX,AX
XOR BX,BX
XOR DX,DX
MOV AH,02H
MOV BH,BYTE1
MOV DH,BYTE2
MOV DL,BYTE4
INT 10H ;ПОЗИЦИЯ КУРСОРА
XOR AX,AX
MOV AL,BYTE4
MOV BYTE5,AL
XOR AX,AX
LEA AX,TEXT1
MOV [ADRES1],AX ;АДРЕС TEXT1
METKA5: XOR AX,AX
XOR BX,BX
MOV BX,ADRES1
MOV AL,[BX]
CMP AL,'$'
JE SHORT METKA6
MOV BYTE6,AL
INC BX
MOV ADRES1,BX
XOR AX,AX
XOR BX,BX
XOR CX,CX
MOV AH,09H
MOV AL,BYTE6
MOV BH,BYTE1
MOV BL,BYTE7
MOV CX,SLOVO1
INT 10H
XOR AX,AX
MOV AL,BYTE5
INC AL
MOV BYTE5,AL
XOR AX,AX
XOR BX,BX
XOR DX,DX
MOV AH,02H
MOV BH,BYTE1
MOV DH,BYTE2
MOV DL,BYTE5
INT 10H
JMP METKA5
METKA6: ;генерируем звуковой сигнал
xor ax,ax
xor cx,cx
MOV AL,10110110B
OUT 43H,AL
IN AL,61H
OR AL,3
OUT 61H,AL
MOV AX,1200
OUT 42H,AL
MOV AL,AH
OUT 42H,AL
MOV CX,0FFFFH
PAUSE:
LOOP PAUSE
xor ax,ax
IN AL,61H
AND AL,11111100B
OUT 61H,AL
;подготовка к выводу TEXT2
XOR AX,AX
XOR CX,CX
MOV AH,01H
MOV CH,00H
MOV CL,0AH
INT 10H ;КУРСОР
XOR AX,AX
XOR BX,BX
XOR DX,DX
MOV AH,02H
MOV BH,BYTE1
MOV DH,BYTE3
MOV DL,BYTE4
INT 10H ;ПОЗИЦИЯ КУРСОРА
XOR AX,AX
MOV AL,BYTE4
MOV BYTE5,AL
XOR AX,AX
LEA AX,TEXT2
MOV [ADRES1],AX ;АДРЕС TEXT2
METKA7: ;выводим сообщение на отключение компьютера
XOR AX,AX
XOR BX,BX
MOV BX,ADRES1
MOV AL,[BX]
CMP AL,'$'
JE SHORT METKA9
MOV BYTE6,AL
INC BX
MOV ADRES1,BX
XOR AX,AX
XOR BX,BX
XOR CX,CX
MOV AH,09H
MOV AL,BYTE6
MOV BH,BYTE1
MOV BL,BYTE7
MOV CX,SLOVO1
INT 10H
XOR AX,AX
MOV AL,BYTE5
INC AL
MOV BYTE5,AL
XOR AX,AX
XOR BX,BX
XOR DX,DX
MOV AH,02H
MOV BH,BYTE1
MOV DH,BYTE3
MOV DL,BYTE5
INT 10H
JMP METKA7
metka9: ;вводим подтверждение на отключение компьютера
XOR AX,AX
mov ah,00H
int 16h
cmp AH,1CH
jne metka9
metka10:;отключаем компьютер
XOR AX,AX
xor bx,bx
XOR CX,CX
mov ax,5301h
xor bx,bx
int 15h
mov ax,5308h
mov bx,1
mov cx,bx
int 15h
mov ax,530Dh
mov bx,1
mov cx,bx
int 15h
mov ax,530Fh
mov bx,1
mov cx,bx
int 15h
mov ax,530Eh
xor bx,bx
mov cx,102
int 15h
mov ax,5307h
mov bx,1
mov cx,3
int 15h
codseg ends
end start
Пояснения
. Это мой вариант имитатора загрузчика
моего релиза Русской ОС . Проверить его
можно следующим образом . Для этого
нужен TASM 5.0 , программа HEXEDIT и программа
Rawwritewin . Итак .
1. Генерируем объектный файл в tasm
командой tasm имя,,,
2. Создаем ЕХЕ файл командой tlink имя.obj ,
при этом выдается предупреждение что
нет стека , но файл будет создан .
3. Программой HEXEDIT изменяем полученный
файл путем удаления начала до строки 7Е00Н
и добавляя в конце АА55. Получаем файл
длинной 512 байт.
4. Программой Rawwritewin помещаем на чистую
отформатированную дискету полученный
файл .
5. Устанавливаем дискету в компьютер ,
делаем перегрузку и загружаемся с
дискеты и видим работу имитатора .
Продолжение следует !!!
|