rendered paste bodyassume cs:kod, ds:dane
dane segment
buforek db 4000 dup(0)
dane ends
kod segment
START:
mov dx, dane
mov ds, dx ;adres segmentu danych do ds
jmp GO
;===============================================================================
USTAW proc
mov dx, 2e1h ;rejestr rozkazow
mov al, 00001101b ;define configuration, konfiguracja, dlugie i krotkie pakiety (000c101 - define configuration , c = dlugie i krotkie ; [jesli 1]
out dx, al
mov al, 00011110b ;clear flag, zerowanie rejestru stanu (000rp110 - zerowanie flag, r - wyzerowanie bitu POR, p - recon)
out dx, al
ret
endp
;===============================================================================
;===============================================================================
WYSLIJ proc
mov bx, 0d000h
mov es, bx
mov bx, dane
mov ds, bx
lea si, buforek
mov es:[di], 01000000b ;adres nadawcy pakietu
mov es:[di+1], 10000000b ;adres odbiorcy pakietu
mov es:[di+2], 0
mov es:[di+3], 5
mov di, 5
push cx
mov cx, 500
rep movsb
pop cx
CZEKAJ:
mov dx, 2e0h ;rej stanu
in al, dx
and al, 00000001b ;sprawdz czy TA=1 (zdolny do przeslania)
jz CZEKAJ
mov dx, 2e1h
mov al, 00000011b
out dx, al
ret
endp
;===============================================================================
;===============================================================================
ODBIERZ proc
mov dx, 2e1h
mov al, 00000100b ;Enable Receive To Page nn=00b
out dx, al
mov dx, 2e0h ;rej stanu
CZEKAJ:
in al, dx
and al, 10000000b ;spr czy RI=1 (w buforze RAM jest już przekazana paczka)
jz CZEKAJ
JUZ:
mov si, 5
lea di, buforek
mov ax, 0d000h
mov ds, ax
mov ax, dane
mov es, ax
mov cx, 500
rep movsb
ret
endp
;===============================================================================
;===============================================================================
SCRTOMEM proc ;Pamiec ekranu do pamici pod adres es:di
mov dx, dane ;adres bloku danych
mov es, dx
lea di, buforek
mov cx, 4000 ;4000 Bajtow - caly ekran
mov dx, 0b800h ;pamiec ekranu
mov ds, dx ;pamiec ekranu ekranu jako zrodlo
mov si, 0 ;offset 0
rep movsb ;kopiujemy
ret
endp
;===============================================================================
;===============================================================================
GO:
call USTAW
call ODBIERZ
mov di, 0
cmp es:[di], "*"
jz DALEJ
jmp GO
DALEJ:
call SCRTOMEM
mov cx, 8
SLIJ:
mov di, 0
call WYSLIJ
loop SLIJ
KONIEC:
mov ax, 4c00h
int 21h
kod ends
end start