All pastes #497442 Raw Edit

Anonymous

public text v1 · immutable
·published 2007-05-19 21:12 UTC
rendered paste body
assume cs:kod, ds:dane

dane segment
	witaj	db 10,13,"Wcicnij 'P' aby pobrac ekran, lub 'Z' aby zakonczyc. $"
	ent		db 10,13,"$"
	
	buforek	db 4000 dup(0)
	ekrsave	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
	push es
	push di
	
	mov bx, 0d000h
	mov es, bx
	
	mov di, 0
	
	mov es:[di], 10000000b		;adres nadawcy pakietu
	mov es:[di+1], 01000000b	;adres odbiorcy pakietu
	mov es:[di+2], 0
	mov es:[di+3], 5
	mov es:[di+4], "*"
	
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
	
	pop di
	pop es
	ret
endp
;===============================================================================
;===============================================================================
ODBIERZ	proc
	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:
	push si
	mov si, 5
	
	add di, 500
	
	mov ax, 0d000h
	mov ds, ax
	mov ax, dane
	mov es, ax
	push cx
	mov cx, 500
	rep movsb
	pop cx
	pop si
	ret
endp
;===============================================================================
;===============================================================================
POKA proc			;pokazuje ekran
	push ds
	mov dx, dane		;adres bloku danych
	mov es, dx
	lea di, ekrsave
	call SCRTOMEM
	
	mov dx, dane
	mov ds, dx
	lea si, buforek
	call MEMTOSCR
	
	mov ah, 08h		;przerwanie - pobiera 1 klawisz, ale nie pokazuje na ekranie tego co wciskamy
	int 21h			;czekamy na wcisniecie klawisza...

	mov dx, dane		;Adres bloku danych
	mov ds, dx		;jw.
	lea si, ekrsave	;offset do ekrsave
	call MEMTOSCR		;ladujemy stan ekranu z SCRCPY
	
	pop ds
	ret
endp
;===============================================================================
;===============================================================================
MEMTOSCR	proc			;z ds:si do pamieci ekranu
	push ds
	mov cx, 4000		;4000 Bajtow - caly ekran
	mov dx, 0b800h	;pamiec ekranu
	mov es, dx		;pamiec ekranu ekranu jako zrodlo
	mov di, 0		;offset 0
	rep movsb		;kopiujemy
	pop ds
	ret
endp
;===============================================================================
;===============================================================================
SCRTOMEM proc			;Pamiec ekranu do pamici pod adres es:di
	push ds			;zapisz adres DS
	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
	pop ds			;wczytaj adres DS
	ret
endp
;===============================================================================
;===============================================================================
	
	
GO:
	mov ah, 09h
	lea dx, witaj
	int 21h
	
	mov ah, 01h		;funkcja pobierajaca/wyswietlajaca wcisniety klawisz
	int 21h
	
	cmp al, "z"
	jz KONIEC
	cmp al, "Z"
	jz KONIEC
	cmp al, "p"
	jz POCZATEK
	cmp al, "P"
	jz POCZATEK
	
	jmp GO
	
POCZATEK:
	call USTAW
	mov cx, "*"
	call WYSLIJ
	
	push di
	
	lea di, buforek
	sub di, 500
	mov cx, 8
odb500:
	call ODBIERZ
	loop odb500
	
	pop di

	call POKA

KONIEC:
	mov ah, 09h
	lea dx, ent
	int 21h
	mov ah, 01h
	int 21h
	mov ax, 4c00h
	int 21h
	
kod ends
end start