org       100h
segment   .text

b0	equ	030h
b1	equ	031h
b2	equ	01Fh

	xor	AL, AL
	mov	ES, AX         ; ES=0 - zacatek pameti preruseni
	mov	AX, CS
	mov	BX, myint
	call	swapvect       ; nastavim myint aby se volala pri preruseni
	push	AX             ; ulozim si starou a novou prerusovaci rutinu
	push	BX
	push	ES

	mov 	AX, 0B800h	; priprava na vykresleni tabulky
	mov	ES, AX
	xor	BX, BX
	xor	DX, DX
	mov	CL, 4

kresli:	mov AX, DX
	shr AX, CL
	add AX, tabulka
	mov DI, AX
	mov AL, [DS:DI]
	mov [ES:BX], AL		; vykresli vyssi pulbajt

	mov AX, DX
	and AX, 00001111b
	add AX, tabulka
	mov DI, AX
	mov AL, [DS:DI]
	mov [ES:BX+2], AL	; vykresli nizsi pulbajt

	mov AL, 104
	mov [ES:BX+4], AL	; vykresli 'h'

	inc DX
	add BX, 10
	cmp BX, 1280
	jnz kresli		; kresli dalsi znak...

	mov	AX, 0B800h	; zacatek graf. pameti(textovy rezim)
	mov	ES, AX
	mov	CX, 640		; budu barvit 8 radku x 80 sloupcu
	mov	BX, 0001h	; pracuju s barvou znaku, ne se znakem samotym

obarvi:	mov	[ES:BX], byte b0
	add	BX, 2
	loop	obarvi

smycka:	mov	AH, [ES:000Bh]	; test stisku ESC
	and	AH, 00110000b
	cmp	AH, 00010000b
	jnz	smycka

	pop	ES
	pop	BX		; obnovim predchozi prerusovaci rutinu a skoncim
	pop	AX

swapvect:
	cli
	xchg	[ES:36], BX	; IRQ1 - int9
	xchg	[ES:38], AX
	sti
	ret

myint:	push	AX		; ulozim si veci, se kteryma budu pracovat
	push	BX
	push	ES
	push	CX

	mov	AX, 0B800h	; pocatek videoRAM
	mov	ES, AX
	xor	AX, AX
	in	AL, 60h
	cmp	AL, 80h		; klavesa uvolnena?
	jb	stisk		; ne...
	xor	AL, 80h		; byla, zjistuju cislo klavesy
	mov	BH, b1		; modra barva
	jmp	uvolneni

stisk:	mov	BH, b2		; barva stisknute klavesy
uvolneni:
	push      BX             ; ulozim na zasobnik abych moh adresovat
	mov       CL, 10         ; vypocet poradi v poli
	mul       CL
	mov       BX, AX         ; BX <- offset adresy bajtu k obarveni
	pop       AX             ; nactu barvu kterou jsem odlozil na zasobnik
	mov       [ES:BX+1], AH  ; vlozim barvu na patricne misto videoRAM
	mov       [ES:BX+3], AH

	mov       AL, 20h        ; konec preruseni
	out       20h, AL
	pop       CX             ; obnovim co sem ulozil
	pop       ES
	pop       BX
	pop       AX
	iret

tabulka	db	'0123456789ABCDEF';
