;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 |