Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- kolor3 EQU 01H
- VideoB_Seg EQU 0A000h ; Określenie segmentu buforu Video
- ; segment danych, czyli deklaracja zmiennych
- segdane segment
- x0 DW ?
- y0 DW ?
- x1 DW ?
- y1 DW ?
- blad DW ?
- deltax DW ?
- deltay DW ?
- x DW ?
- y DW ?
- offsetX DW ?
- offsetY DW ?
- currkol DB ?
- kolor DB ?
- segdane ends
- ; stos
- stck segment stack
- DW 200 dup(?)
- stck ends
- ; program właściwy
- segprog segment
- assume DS: segdane, CS: segprog, SS: stck
- main proc; far
- PUSH DS
- MOV AX,segdane
- MOV DS,AX ;w DS starsza czesc adresu logicznego
- MOV AX,0012H ; 640x480 16 color graphics
- INT 10H
- MOV AX,1000H
- MOV BH,kolor3 ; kolor tła 01 niebieski
- MOV BL,00H
- INT 10H
- ;glowa
- MOV kolor,0EH
- MOV CX,400
- MOV BX,10
- PETLA:
- MOV x0,100
- MOV y0,BX
- MOV x1,500
- MOV y1,BX
- CALL rysujLinie
- INC BX
- LOOP PETLA
- ;oczy
- MOV kolor,02H
- MOV CX,60
- MOV BX,60
- PETLA1:
- MOV x0,150
- MOV y0,BX
- MOV x1,210
- MOV y1,BX
- CALL rysujLinie
- INC BX
- LOOP PETLA1
- MOV kolor,02H
- MOV CX,60
- MOV BX,60
- PETLA2:
- MOV x0,380
- MOV y0,BX
- MOV x1,440
- MOV y1,BX
- CALL rysujLinie
- INC BX
- LOOP PETLA2
- ;krzyzyki
- MOV kolor,01H
- MOV x0,150
- MOV y0,60
- MOV x1,210
- MOV y1,120
- CALL rysujLinie
- MOV x0,150
- MOV y0,120
- MOV x1,210
- MOV y1,60
- CALL rysujLinie
- MOV x0,380
- MOV y0,60
- MOV x1,440
- MOV y1,120
- CALL rysujLinie
- MOV x0,380
- MOV y0,120
- MOV x1,440
- MOV y1,60
- CALL rysujLinie
- ;nos
- MOV kolor,0CH
- MOV CX,120
- MOV BX,150
- PETLA3:
- MOV x0,240
- MOV y0,BX
- MOV x1,340
- MOV y1,BX
- CALL rysujLinie
- INC BX
- LOOP PETLA3
- ;usta
- MOV kolor,0CH
- MOV CX,30
- MOV BX,350
- PETLA4:
- MOV x0,150
- MOV y0,BX
- MOV x1,440
- MOV y1,BX
- CALL rysujLinie
- INC BX
- LOOP PETLA4
- MOV CX,30
- MOV BX,320
- PETLA8:
- MOV x0,150
- MOV y0,BX
- MOV x1,200
- MOV y1,BX
- CALL rysujLinie
- INC BX
- LOOP PETLA8
- MOV CX,30
- MOV BX,320
- PETLA9:
- MOV x0,390
- MOV y0,BX
- MOV x1,440
- MOV y1,BX
- CALL rysujLinie
- INC BX
- LOOP PETLA9
- ;uszy
- MOV kolor,0EH
- MOV CX,60
- MOV BX,150
- PETLA5:
- MOV x0,50
- MOV y0,BX
- MOV x1,100
- MOV y1,BX
- CALL rysujLinie
- INC BX
- LOOP PETLA5
- MOV kolor,0EH
- MOV CX,60
- MOV BX,150
- PETLA6:
- MOV x0,500
- MOV y0,BX
- MOV x1,550
- MOV y1,BX
- CALL rysujLinie
- INC BX
- LOOP PETLA6
- ;wlosy
- MOV kolor,06H
- MOV CX,20
- MOV BX,10
- PETLA7:
- MOV x0,100
- MOV y0,BX
- MOV x1,500
- MOV y1,BX
- CALL rysujLinie
- INC BX
- LOOP PETLA7
- MOV AH,01H ; OCZEKUJ NA PRZYCISK Z KLAWIATURY GETCH()
- INT 21H
- MOV AX,0003H ; TRYB TEKSTOWY 16 KOLOROWY
- INT 10H
- POP DS
- MOV AX,4C00H ; wyjście
- INT 21H
- RET
- main endp
- rysujLinie proc
- PUSH AX
- PUSH BX
- PUSH CX
- PUSH DX
- ; int deltaX = Abs(x1 - x0)
- ; int deltaY = Abs(y1 - y0)
- ; int x = x0
- ; int y = y0
- MOV AX,x1
- MOV BX,x0
- SUB AX,BX
- JNS dalej1
- NEG AX
- dalej1:
- MOV deltax,AX
- MOV AX,y1
- MOV BX,y0
- SUB AX,BX
- JNS dalej2
- NEG AX
- dalej2:
- MOV deltay,AX
- MOV AX,x0
- MOV BX,y0
- MOV x,AX
- MOV y,BX
- ; If (x0 > x1) Then offsetX = -1 Else offsetX = 1
- MOV AX,x0
- MOV BX,x1
- CMP AX,BX
- JNG dalej3
- MOV offsetx,-1
- JMP dalej4
- dalej3:
- MOV offsetx,1
- dalej4:
- ; If (y0 > y1) Then offsetY = -1 Else offsetY = 1
- MOV AX,y0
- MOV BX,y1
- CMP AX,BX
- JNG dalej5
- MOV offsety,-1
- JMP dalej6
- dalej5:
- MOV offsety,1
- dalej6:
- ; SetPixel(x,y)
- CALL AA
- ; If (deltaX > deltaY) Then
- MOV AX,deltax
- MOV BX,deltay
- CMP AX,BX
- JNG elsebegin
- ; int blad = deltaX / 2
- MOV AX,deltax
- SAR AX,1
- MOV blad,AX
- ; While (x != x1)
- while1begin:
- ; blad = blad - deltaY
- MOV AX,blad
- SUB AX,deltay
- MOV blad,AX
- ; If (blad < 0)
- MOV AX,blad
- CMP AX,0
- JNS dalej7
- ; y = y + offsetY
- ; blad = blad + deltaX
- MOV AX,y
- ADD AX,offsety
- MOV y,AX
- MOV AX,blad
- ADD AX,deltax
- MOV blad,AX
- ; End If
- dalej7:
- ; x = x+offsetX
- MOV AX,x
- ADD AX,offsetx
- MOV x,AX
- ; setPixel(x,y)
- CALL AA
- MOV AX,x
- MOV BX,x1
- CMP AX,BX
- JNE while1begin
- ; End While
- JMP koniecrysowania
- ; Else
- elsebegin:
- ; int blad = deltay / 2
- MOV AX,deltay
- SAR AX,1
- MOV blad,AX
- ; While (y != y1)
- while2begin:
- ; blad = blad - deltax
- MOV AX,blad
- SUB AX,deltax
- MOV blad,AX
- ; If (blad < 0)
- MOV AX,blad
- CMP AX,0
- JNS dalej8
- ; x = x + offsetx
- ; blad = blad + deltay
- MOV AX,x
- ADD AX,offsetx
- MOV x,AX
- MOV AX,blad
- ADD AX,deltay
- MOV blad,AX
- ; End If
- dalej8:
- ; y = y+offsety
- MOV AX,y
- ADD AX,offsety
- MOV y,AX
- ; setPixel(x,y)
- CALL AA
- MOV AX,y
- MOV BX,y1
- CMP AX,BX
- JNE while2begin
- ; End While
- ; End Else
- ; End If
- koniecrysowania:
- POP DX
- POP CX
- POP BX
- POP AX
- RET
- rysujLinie endp
- AA proc
- push bp
- mov ax,y
- mov bx,x
- mov cl,bl
- push dx
- mov dx,80
- mul dx
- pop dx
- shr bx,1
- shr bx,1
- shr bx,1
- add bx,ax
- mov ax,VideoB_Seg
- mov es,ax
- and cl,7;
- xor cl,7;
- mov ah,1;
- shl ah,cl;
- ; obsługa rejestrów kontrolera graficznego
- mov dx,3CEh;
- mov al,8 ;
- out dx,ax ;
- mov ax,0005h;
- out dx,ax ;
- mov ah,0 ;
- mov al,3 ;
- out dx,ax ;
- MOV AH,kolor ;kolor pixela
- MOV AL,00h
- ;mov ax,0C00h;
- out dx,ax ;
- mov ax,0F01h;
- out dx,ax ;
- ; zmiana wartości pixel'a
- or es:[bx],al;
- pop bp
- ret
- AA endp
- segprog ends
- end main
Add Comment
Please, Sign In to add comment