; ------------- Instalater driveru BLOOD segment assume cs:BLOOD , ds:BLOOD ,SS:BLOOD , ES:BLOOD org 100H P486 jumps start: jmp install pis proc near ; push ds push ax ; mov ah, 09h push cs pop ds int 21h ; pop ax pop ds ; retn ; pis endp install: ; lea dx, [copyright] call pis ; mov ah, 30h int 21h ; cmp al, 5 lea dx, [dos_ver] jc konec_s_chybou ; mov ax, 1600h int 2fh ; lea dx, [wshitz_presentz] ; test al, 07fh jnz konec_s_chybou ; push word ptr ds:[2ch] pop es mov ah, 49h int 21h ; mov ax, cs mov word ptr [rez_segment], ax add ax, 16 ; misto pro PSP mov word ptr [segment], ax ; lea ax, [konec_] shr ax, 4 inc ax ; mov cx, word ptr ds:[02h] sub cx, ax ; mov es, cx xor di, di xor si, si ; mov cx, offset konec_ - offset start + 100h ; rep movsb ; push es push offset new_segment_start ; retf ; new_segment_start: ; mov ax, cs mov ds, ax mov es, ax mov ss, ax ; mov sp, offset stack + 500h ; mov ax, word ptr [segment] ; mov word ptr [exec_par_block], ax mov word ptr [exec_par_block + 2], ax ; xor cx, cx mov si, 80h mov cl, byte ptr ds:[si] or cl, cl lea dx, [syntax] jz konec_s_chybou ; inc si inc cx ; lbl_1: ; lodsb ; cmp al, 20h jnz ok_zacatek_filu ; loop lbl_1 lea dx, [syntax] jcxz konec_s_chybou ; ok_zacatek_filu: ; dec si ; push si ; mov word ptr [packet + 12h], si mov ax, word ptr cs:[rez_segment] mov word ptr [packet + 14h], ax ; inc si ; lbl_2: ; lodsb ; cmp al, 0dh jz ok_konec_filu ; cmp al, 0ah jz ok_konec_filu ; cmp al, 20h jz ok_konec_filu ; loop lbl_2 lea dx, [syntax] jcxz konec_s_chybou ; ok_konec_filu: ; pop dx ; push word ptr [si - 1] ; mov byte ptr [si - 1], 0 ; mov ax, 4b03h lea bx, [exec_par_block] int 21h ; pop word ptr [si - 1] ; lea dx, [nenalezen] jc konec_s_chybou ; xor si, si ; lbl_next_device: ; mov byte ptr cs:[mov_fs_byte_?], 0 ; mov ds, word ptr cs:[exec_par_block] ; mov ax, 1500h xor bx, bx int 2fh ; mov byte ptr cs:[disk], bl ; mov ax, word ptr [si + 4] mov word ptr cs:[atributy], ax ; push cs pop ds ; mov ah, 52h int 21h ; mov word ptr [seznam], bx mov word ptr [seznam + 2], es ; mov al, byte ptr es:[bx + 20h] add byte ptr cs:[disk], al ; bt word ptr cs:[atributy], 15 jc preskoc_4 ; cmp al, byte ptr es:[bx + 21h] lea dx, [malo_drivu] jz konec_s_chybou ; preskoc_4: ; mov ds, word ptr cs:[exec_par_block] ; mov word ptr cs:[packet + 0eh], 0 ; nastavim konec pameti mov word ptr cs:[packet + 10h], cs ; pro driver (DOS 5.0+) ; tohle v Sysmanovi neni ! ; mov al, byte ptr cs:[disk] mov byte ptr cs:[packet + 16h], al ; mov word ptr cs:[call + 2], ds ; lea bx, [packet] push cs pop es ; mov si, word ptr cs:[mov_ax_?] ; mov ax, word ptr [si + 6] mov word ptr cs:[call], ax call dword ptr cs:[call] ; mov ax, word ptr [si + 8] mov word ptr cs:[call], ax call dword ptr cs:[call] ; mov word ptr cs:[call], si ; mov ax, word ptr cs:[packet + 3] ; bt ax, 15 lea dx, [chyba_init] jc konec_s_chybou ; mov al, byte ptr cs:[packet + 0dh] ; mov byte ptr cs:[diskz], al mov byte ptr cs:[add_byte_?], al ; les bx, dword ptr cs:[packet + 0eh] mov ax, es ; or ax, ax jz konec_s_chybou ; cmp ax, word ptr cs:[segment] jnz ok_pokracuj_ ; or bx, bx jz konec_s_chybou ; ok_pokracuj_: ; shr bx, 4 add ax, bx inc ax ; mov word ptr cs:[blok_segment], ax ; les bx, dword ptr cs:[packet + 0eh] ; mov ax, es ; bt word ptr cs:[atributy], 15 jc preskoc_5 ; mov dl, byte ptr cs:[diskz] xor dh, dh ; imul dx, 3 ; add ax, dx ; Blok popisu disku ; preskoc_5: ; movzx eax, ax movzx ebx, bx ; shl eax, 4 ; add eax, ebx xchg eax, ecx ; mov ax, word ptr cs:[rez_segment] xor bx, bx movzx eax, ax movzx ebx, bx ; shl eax, 4 ; add eax, ebx ; sub ecx, eax add ecx, 16 ; shr ecx, 4 ; mov word ptr cs:[patch_dx], cx ; bt word ptr cs:[atributy], 15 jc preskoc_ ; cmp byte ptr cs:[packet + 0dh], 0 lea dx, [chyba_init] jz konec_s_chybou ; preskoc_: ; les bx, dword ptr cs:[seznam] ; bt word ptr cs:[atributy], 15 jc preskoc_3 ; db 26h, 80h, 47h, 20h ; add byte ptr es:[bx + 20h] add_byte_? equ $ db ? ; preskoc_3: ; lfs ax, dword ptr es:[bx + 16h] mov word ptr cs:[directory], ax mov word ptr cs:[directory + 2], fs ; lfs ax, dword ptr es:[bx] mov word ptr cs:[disk_blok], ax mov word ptr cs:[disk_blok + 2], fs ; mov ax, word ptr cs:[mov_ax_?] ; bt word ptr cs:[atributy], 0 jnc check_clock ; mov word ptr es:[bx + 0ch], ax ; it'z the CON driver mov word ptr es:[bx + 0ch + 2], ds ; jmp short ok_go_on_now ; check_clock: ; bt word ptr cs:[atributy], 3 jnc ok_go_on_now ; mov word ptr es:[bx + 08h], ax ; it'z the CLOCK$ driver mov word ptr es:[bx + 08h + 2], ds ; ok_go_on_now: ; add bx, 22h ; prvni je Null ; lgs dx, dword ptr es:[bx] ; mov word ptr es:[bx], ax mov word ptr es:[bx + 2], ds ; bt word ptr cs:[atributy], 15 jnc preskoc_sft ; call change_sft ; preskoc_sft: ; xchg ax, si ; mov ax, word ptr [si] ; mov word ptr [si], dx mov word ptr [si + 2], gs ; mov word ptr cs:[mov_ax_?], ax ; bt word ptr cs:[atributy], 15 jc preskoc_2 ; lbl_disk_blockz: ; lds si, dword ptr cs:[packet + 12h] mov si, word ptr ds:[si] ; tohle taky neni v Sysmanovi ! xor bp, bp mov es, word ptr cs:[blok_segment] mov ah, 53h int 21h ; les ax, dword ptr cs:[call] mov fs, word ptr cs:[blok_segment] xor bx, bx mov word ptr fs:[bx + 13h], ax mov word ptr fs:[bx + 15h], es ; mov word ptr fs:[bx + 19h], -1 mov al, byte ptr cs:[disk] mov byte ptr fs:[bx], al ; db 064h, 0c6h, 47h, 01h mov_fs_byte_? equ $ db ? ; ;mov byte ptr fs:[bx + 1], 0 mov byte ptr fs:[bx + 18h], 2eh ; mov cx, 58h mov al, byte ptr cs:[disk] cbw mul cx ; les bx, dword ptr cs:[directory] add bx, ax ; mov word ptr es:[bx + 43h], 4000h mov word ptr es:[bx + 4fh], 02 ; mov ax, word ptr cs:[blok_segment] ; mov word ptr es:[bx + 45h], 0 mov word ptr es:[bx + 47h], ax mov word ptr es:[bx + 49h], 0ffffh ; les bx, dword ptr cs:[disk_blok] ; lbl_disk_blok: ; les bx, dword ptr es:[bx + 19h] ; mov ax, word ptr es:[bx + 19h] ; cmp ax, -1 jnz lbl_disk_blok ; mov ax, word ptr cs:[blok_segment] mov word ptr es:[bx + 19h], 0 mov word ptr es:[bx + 1bh], ax ; inc byte ptr cs:[disk] inc byte ptr cs:[mov_fs_byte_?] ; add word ptr cs:[blok_segment], 3 ; dec byte ptr cs:[diskz] jnz lbl_disk_blockz ; preskoc_2: ; db 0b8h mov_ax_? equ $ dw 0 ; cmp ax, 0ffffh jz ok_installed ; xchg ax, si ; jmp lbl_next_device ; ok_installed: ; lea dx, [installed] call pis ; mov ax, 3100h ; db 0bah ; mov dx, ? patch_dx equ $ dw ? ; int 21h ; konec: ; mov ax, 4c00h ; cs <> PSP proto ne int 20h int 21h ; ; konec_s_chybou: ; call pis ; jmp short konec ; change_sft: ; pusha ; push es push ds ; les bx, dword ptr cs:[seznam] ; add bx, 4 ; loop_find_next: ; les bx, dword ptr es:[bx] ; cmp bx, 0ffffh jz konec_change_sft ; mov di, bx ; add di, 06h ; mov dx, word ptr es:[bx + 4] ; next_file_in_sft: ; or dx, dx jz loop_find_next ; dec dx ; cmp word ptr es:[di], 0 jz add_and_go_on ; push di ; add di, 20h ; mov si, ax ; add si, 0ah ; mov cx, 8 ; rep cmpsb ; pop di ; jz ok_founded ; add_and_go_on: ; add di, 3bh ; jmp next_file_in_sft ; ok_founded: ; mov word ptr es:[di + 07h], ax mov word ptr es:[di + 07h + 2], ds ; mov word ptr es:[di + 31h], ds ; add di, 3bh ; jmp next_file_in_sft ; konec_change_sft: ; pop ds pop es ; popa ; retn ; ; copyright db 'Install_Driver v. 2.4 (C)Copyright 1998 BLOOD PMsoft (Petr Matousek)', 0ah, 0dh db '------------------------------------------------------------------------------', 0ah, 0dh, '$' syntax db 0ah, 0dh, 'Syntaxe : inst_drv.com ', 0ah, 0dh, '$' dos_ver db 0ah, 0dh, 'Tenhle program vyzaduje minimalne verzi Dosu 5.0 ...', 0ah, 0dh, '$' nenalezen db 0ah, 0dh, 'Driver nenalezen ...', 0ah, 0dh, '$' chyba_init db 0ah, 0dh, 'Chyba pri inicializaci driveru ...', 0ah, 0dh, '$' installed db 0ah, 0dh, 'Driver inicializovan a instalovan ...', 0ah, 0dh, '$' malo_drivu db 0ah, 0dh, 'Zvetsete si LastDrive v config.sys ...', 0ah, 0dh, '$' wshitz_presentz db 0ah, 0dh, 'Nemuzu instalovat driver(z) pod Woknama ...', 0ah, 0dh, '$' ; packet db offset konec_packet - offset packet ; dylka db ? db 0 dw ? db 8 dup(0) db ? dd ? dd ? db ? konec_packet label near ; exec_par_block dw ? ; segment dw ? ; relokacni faktor ; diskz db ? directory dd ? disk_blok dd ? seznam dd ? disk db ? atributy dw ? rez_segment dw ? segment dw ? blok_segment dw ? call dw ? dw ? ; stack db 500h dup(?) ; konec_ label near ; BLOOD ends end start