;pcr11_97.asm

;--------------------------------

;Nastavenie polohy kurzora

;na obrazovke.

;Vstup: reg. DL=stlpec,

;reg. DH=riadok.

;--------------------------------

poloha1

proc near

 

mov bh,0

 

sub dx,0101h

 

mov ah,02

 

int 10h

 

ret

poloha1

endp

;Vypocet adresy vo videoram.

;--------------------------------------

;Vstup: AX=riadok, BX=stlpec.

;Vystup: AX obsahuje offset ;adresy.

;--------------------------------------

;Vzorec: [(80*AX)+BX]*2

;--------------------------------------

poloha2

proc near

 

mov dl,80

 

mul dl

 

add ax,bx

 

mov dx,2

 

mul dx

 

ret

poloha2

endp

;------------------------------------

;Procedura vycisti obrazovku

;a nastavi farebny textovy

;mod (cislo 3) 80x25 riadkov

;-----------------------------------

cls1

proc near

 

mov ax,0003

 

int 10h

 

ret

cls1

endp

;-------------------------------------

;Procedura zmaze obrazovku

;Vstup: reg. AL-kod znaku,

;reg. AH-farba reg. ES musi

;obsahovat segment videoram,

;t.j. hodnotu 0B800h alebo ;0B000h

;--------------------------------------

cls2

proc near

 

xor di,di

 

mov cx,80*25

 

rep stosw

 

ret

cls2

endp

;--------------------------------------

;Vypis textu na obrazovku

;Vstup: reg. AL=farba textu,

;reg. SI musi obsahovat

;offsetovu adresu pozicie

;vo videoram, reg. CX=dlzka

;textu, reg. ES musi obsahovat

;segment videoram, reg. DS ;musi

;obsahovat segmentovu adresu ;dat.

;--------------------------------------

vypis

proc near

x10:

movsb

 

stosb

 

loop x10

 

ret

vypis

endp

;--------------------------------------

;Vypne zobrazovanie kurzora

;v textovom rezime.

;--------------------------------------

kurzor_off

proc near

 

mov ah,01h

 

mov cx,20h*256+00h

 

int 10h

 

ret

kurzor_off

endp

;------------------------------------------

;Zapne zobrazovanie kurzora

;v textovom rezime.

;------------------------------------------

kurzor_on

proc near

 

mov ah,01h

 

mov cx,12h*256+14h

 

int 10h

 

ret

kurzor_on

endp

;------------------------------------------

;Nastav rezim 80x43 [ega]

;alebo 80x50 [vga]

;------------------------------------------

rezim

proc near

 

mov ax,1112h

 

xor bl,bl

 

int 10h

 

mov ah,1

 

mov cx,0607h

 

int 10h

 

ret

rezim

endp

;------------------------------------------

;Procedura sluzi na kreslenie

;ramcekov na obrazovku.

;Vstup:

AH=typ ramceka (1 az 4)

;

AL=farba (0 az 255)

;

CL=riadok, CH=stlpec

;

DL=sirka, DH=vyska

;Maximum window: <0,0> <78,23>

;Plati to pre rezim 80x25 znakov

;------------------------------------------

ramcek

proc near

 

mov x,cl

 

mov y,ch

 

mov lenght,dl

 

mov height,dh

 

mov atribut,al

 

cmp ah,1

 

jne ram1

 

mov bp,offset frame1

 

jmp short ram4

ram1:

cmp ah,2

 

jne ram2

 

mov bp,offset frame2

 

jmp short ram4

ram2:

cmp ah,3

 

jne ram3

 

mov bp,offset frame3

 

jmp short ram4

ram3:

mov bp,offset frame4

ram4:

call poloha

;Farba.

 

 

mov ah,atribut

;Segment adresy vo videoram.

 

Mov bx,0b800h

 

mov es,bx

;Offset adresy vo videoram.

 

mov bx,offadr

 

xor dl,dl

 

mov al,[bp]

 

mov word ptr es:[bx],ax

 

inc bx

 

inc bx

ram5:

mov al,[bp+1]

 

mov word ptr es:[bx],ax

 

inc bx

 

inc bx

 

inc dl

 

cmp dl,lenght

 

jl ram5

 

mov al,[bp+2]

 

mov word ptr es:[bx],ax

 

xor ch,ch

 

mov cl,height

ram6:

inc word ptr x

 

call poloha

 

mov bx,offadr

 

mov ah,atribut

 

xor dl,dl

 

mov al,[bp+3]

 

mov word ptr es:[bx],ax

 

inc bx

 

inc bx

ram7:

mov al,[bp+4]

 

mov word ptr es:[bx],ax

 

inc bx

 

inc bx

 

inc dl

 

cmp dl,lenght

 

jl ram7

 

mov al,[bp+5]

 

mov word ptr es:[bx],ax

 

inc bx

 

inc bx

 

loop ram6

 

inc word ptr x

 

call poloha

 

mov ah,atribut

 

mov bx,0b800h

 

mov es,bx

 

mov bx,offadr

 

xor dl,dl

 

mov al,[bp+6]

 

mov word ptr es:[bx],ax

 

inc bx

 

inc bx

ram8:

mov al,[bp+7]

 

mov word ptr es:[bx],ax

 

inc bx

 

inc bx

 

inc dl

 

cmp dl,lenght

 

jl ram8

 

mov al,[bp+8]

 

mov word ptr es:[bx],ax

 

ret

;Premenne.

 

offadr dw ?

 

x db ?

 

y db ?

 

lenght db ?

 

height db ?

 

atribut db ?

;Definicie jednotlivych typov

;ramcekov.

frame1 db 213,205,184,179,32

 

db 179,212,205,190

frame2 db 201,205,187,186,32

 

db 186,200,205,188

frame3 db 218,196,191,179,32

 

db 179,192,196,217

frame4 db 214,196,183,186,32

 

db 186,211,196,189

;Vypocet offsetu videoram

;zo suradnic x a y

poloha:

xor ah,ah

 

xor bh,bh

 

mov al,x

 

mov bl,y

 

mov dl,80

 

mul dl

 

add ax,bx

 

mov dx,2

 

mul dx

 

mov word ptr [offadr],ax

 

ret

ramcek

endp