; Segment type: Pure code
seg000 segment byte public 'CODE' use16
assume cs:seg000
;org 7C00h
assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing
begining: ; CODE XREF: seg000:7C74J
cli
mov ax, 60h ; '`'
mov ss, ax
assume ss:nothing
mov ds, ax
assume ds:nothing
mov es, ax
assume es:nothing
mov sp, 7600h
sti
cld
mov si, 7600h
xor di, di
mov cx, 200h
rep movsb
jmp far ptr 0:61Eh ; where is this far jmp ? ?? - самый важный вопрос, куда этот переход
; ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
mov si, 79h ; 'y'
call VIDEO_WRITE_CHARACTERs
loc_7C24: ; CODE XREF: seg000:7C39j seg000:7C3Dj
inc dl
xor dh, dh
push dx
call copy_partition_table_from_disk
pop dx
or ah, ah
jnz short loc_7C3B
call test_type_first_partition
cmp ax, 102h
jz short loc_7C67 ; if fat32 goto
jmp short loc_7C24
; ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
loc_7C3B: ; CODE XREF: seg000:7C2Fj
cmp al, 0
jnz short loc_7C24 ; until string end
mov si, 8Ah ; 'Љ'
call VIDEO_WRITE_CHARACTERs
xor ah, ah
int 1Ah ; CLOCK - GET TIME OF DAY
; Return: CX:DX = clock count
; AL = 00h if clock was read or written (via AH=0,1) since the previous
; midnight
; Otherwise, AL > 0
mov bx, dx
add bx, 3E8h ;
what is it ?loc_7C4F: ; CODE XREF: seg000:7C55j
xor ah, ah
int 1Ah ; CLOCK - GET TIME OF DAY
; Return: CX:DX = clock count
; AL = 00h if clock was read or written (via AH=0,1) since the previous
; midnight
; Otherwise, AL > 0
cmp bx, dx
jg short loc_7C4F
mov ax, 28h ;
mov ds, ax
assume ds:nothing
mov ax, 7F7Fh
mov ds:48h, ax
jmp far ptr 0FFFFh:0 ; rebooting pc 86
; ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
loc_7C67: ; CODE XREF: seg000:7C37j
xor ax, ax
mov ss, ax
assume ss:nothing
mov ds, ax
assume ds:nothing
mov es, ax
assume es:nothing
mov sp, 7D0h
mov bx, sp
jmp far ptr begining ; jmp again to this MBR
; ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
db xxh ; f
db xxh ; i
db xxh ; r
db xxh ; m
db xxh ; -
db xxh ; -
db xxh ; -
db 20h
db 4Ch ; L
db 6Fh ; o
db 61h ; a
db 64h ; d
db 65h ; e
db 72h ; r
db 0Dh
db 0Ah
db 0
db xxh ; f
db xxh ; i
db xxh ; r
db xxh ; m
db xxh ; -
db xxh ; -
db xxh ; -
db 20h
db 46h ; F
db 6Ch ; l
db 61h ; a
db 73h ; s
db 68h ; h
db 20h
db 4Eh ; N
db 6Fh ; o
db 74h ; t
db 20h
db 46h ; F
db 6Fh ; o
db 75h ; u
db 6Eh ; n
db 64h ; d
db 0
; ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ S U B R O U T I N E ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ
copy_partition_table_from_disk proc near ; CODE XREF: seg000:7C29p
mov cx, 1 ; number bytes for reading from the disk
call DISK_READ_if_it_MBR_ah_eq_FFh
mov si, 77BEh
mov di, 1BEh ; partition table address
mov cx, 40h ; number bytes for transfer (partition table lenght)
rep movsb ; copy strings
retn
copy_partition_table_from_disk endp
; ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ S U B R O U T I N E ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ
DISK_READ_if_it_MBR_ah_eq_FFh proc near ; CODE XREF: copy_partition_table_from_disk+3p
mov ax, 201h ; AH=02h: Read Sectors From Drive
mov bx, 7600h ; ES:BX Buffer Address Pointer
int 13h ; DISK - READ SECTORS INTO MEMORY
; AL = number of sectors to read, CH = track, CL = sector
; DH = head, DL = drive, ES:BX -> buffer to fill
; Return: CF set on error, AH = status, AL = number of sectors read
jb short locret_7CC8 ; if error then exit
cmp word ptr ds:77FEh, 0AA55h ; is it MBR?
jz short locret_7CC8
mov ah, 0FFh ; ret value eq FFh
locret_7CC8: ; CODE XREF: DISK_READ_if_it_MBR_ah_eq_FFh+8j
; DISK_READ_if_it_MBR_ah_eq_FFh+10j
retn
DISK_READ_if_it_MBR_ah_eq_FFh endp
; ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ S U B R O U T I N E ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ
VIDEO_WRITE_CHARACTERs proc near ; CODE XREF: seg000:7C21p seg000:7C42p ...
lodsb ; reading byte from string [DS][SI]
; input [si]=79h and 8Ah
or al, al
jz short locret_7CF7 ; retn because string end
mov ah, 0Eh ;
what is the simbol ASCII ? ??
mov bx, 7
push si
int 10h ; - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE)
; AL = character, BH = display page (alpha modes)
; BL = foreground color (graphics modes)
pop si ;
wow, but [si] is const, and non-end cicle!!! jmp short VIDEO_WRITE_CHARACTERs
; ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
mov bh, 20h ; ' '
mov [di-4], bh
mov [di-3], bh
mov [di-2], bh
mov [di-1], bh
mov ch, 0Ah
loc_7CE9: ; CODE XREF: VIDEO_WRITE_CHARACTERs+2Cj
div ch
add ah, 30h ; '0' ; -> ascii code
mov [di], ah
dec di
xor ah, ah
or al, al
jnz short loc_7CE9
locret_7CF7: ; CODE XREF: VIDEO_WRITE_CHARACTERs+3j
retn
VIDEO_WRITE_CHARACTERs endp
; ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ S U B R O U T I N E ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ
test_type_first_partition proc near ; CODE XREF: seg000:7C31p
mov bp, 1BEh ; first byte of partition table
mov cx, 4
xor ax, ax
loc_7D00: ; CODE XREF: test_type_first_partition+23j
test byte ptr [bp+0], 80h ; is it sign (is it active partition?)
jz short loc_7D08
inc ah ; ah=1h
loc_7D08: ; CODE XREF: test_type_first_partition+Cj
cmp byte ptr [bp+4], 83h ; 'ѓ' ; is it ext filesystem?
jnz short loc_7D10
inc al ; al=01h
loc_7D10: ; CODE XREF: test_type_first_partition+14j
cmp byte ptr [bp+4], 0Bh ; is it fat32?
jnz short loc_7D18
inc al ; al=02h
loc_7D18: ; CODE XREF: test_type_first_partition+1Cj
add bp, 10h
loop loc_7D00 ; search in other parts of memory
retn
test_type_first_partition endp
; ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0FFh
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 0
db 55h ; U
db 0AAh ; Є
seg000 ends
end