Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Progr segment
- assume cs:Progr, ds:dane, ss:stosik
- ;-------------------makra------------------------------
- Clear MACRO VidAddress, ClearAtom, BufLength
- LES DI,DWORD PTR VidAddress ;wpisz adres do ES:DI
- MOV AX,ClearAtom ;do AX s�owo wpisywane do bufora
- MOV CX,BufLength ;do CX wielkosc bufora w bajtach
- SHR CX,1 ;kt�ra podzielona przez 2 daje licznik
- REP STOSW ;wype�niamy bufor
- ENDM
- Ruler MACRO VidAddress,Length,ScreenW,ScreenX,ScreenY ;ScreenW - szeroko�� ekranu 80, ScreenY - numer wiersza (0-24), ScreenX - numer kolumny (0-79)
- LOCAL DOCHAR
- LES DI,DWORD PTR VidAddress ;wpisz adres do ES:DI
- MOV AL,ScreenY ;wsp��rz�dna Y do AL
- MOV AH,ScreenW ;szeroko�� ekranu do AH
- IMUL AH ;wynik AL*AH do AX
- ADD DI,AX ;dodaj przesuni�cie Y w buforze do DI
- ADD DI,ScreenX ;dodaj przesuni�cie X w buforze do DI
- SHL DI,1 ;mno�enie przez 2 daje adres pierwszego znaku
- MOV CX,Length ;d�ugo�� linijki do CX
- MOV AH,07 ;normalny tekst - atrybut 7
- MOV AL,'1' ;pierwszy znak - cyfra 1
- DoChar: STOSW ;za�adowanie zawarto�ci AX pod adres ES:DI
- ADD AL,'1' ;dodanie kodu '1'
- AAA ;korekta dodawania BCD
- ADD AL,'0' ;zamiana BCD na ASCII
- MOV AH,07 ;atrybut 7 - zwyk�y tekst
- LOOP DoChar ;wr�� do pocz�tku p�tli je�li CX>0
- ENDM
- ;--------------------------funkcje-------------------------------
- tekstowy:
- mov dx,offset trybtekstowypowitanie
- mov ah,09h ;Zapisanie funkcji wyświetlania do rejestru ah
- int 21h
- jmp koniec
- ;----------------------------------------------------------------
- ;---------------------------program-------------------------------
- start: mov ax,dane
- mov ds,ax
- mov ax,stosik
- mov ss,ax
- mov sp,offset szczyt
- mov dx,offset kom
- mov ah,09h ;Zapisanie funkcji wyświetlania do rejestru ah
- int 21h
- mov ax, 0
- mov ah, 01h; pobranie jednego znaku z klawiatury 0-9
- int 21h
- mov bl, al ;przenieś mniejszy bajt do bl
- sub bl, 30h ; odejmij 30h aby otrzymać pożądaną liczbę
- mov [wybor],bl
- mov bx,0
- mov bl,[wybor]
- cmp bx,1
- je tekstowy ; NIE CHCE MI DZIALAC SKOK WARUNKOWY< KIJ WIE DLACZEGO
- graficzny:
- mov ax, 13h
- int 10h ; uruchom tryb graficzny 13h (320x200 256 kolor�w)
- mov ax, 0A000h ;0A000:0000 - pierwszy piksel (bajt)
- mov es, ax
- mov di, 20*320+160 ;wiersz*320 + kolumna
- mov cx, 10 ;130 calosc
- rysuj: ;linia pionowa
- mov byte ptr es:[di],2 ;czerwony
- add di, 320
- loop rysuj
- mov bx, 25*320+165
- mov dx, 5
- mov cx, 3
- choinka2:
- push cx
- mov cx, dx
- galaz2:
- mov di, bx
- push cx
- mov cx, 10
- rysuj3:
- mov byte ptr es:[di],2
- add di, 320
- loop rysuj3
- add bx, 5*320
- add bx, 5
- pop cx
- loop galaz2
- sub bx, 5*5
- add dx, 3
- pop cx
- loop choinka2
- mov bx, 25*320+155
- mov dx, 5
- mov cx, 3
- choinka:
- push cx
- mov cx, dx
- galaz:
- mov di, bx
- push cx
- mov cx, 10
- rysuj2:
- mov byte ptr es:[di],2
- add di, 320
- loop rysuj2
- add bx, 5*320
- sub bx, 5
- pop cx
- loop galaz
- add bx, 5*5
- add dx, 3
- pop cx
- loop choinka
- mov cx, 120
- add di, 10
- pozioma:
- mov byte ptr es:[di],2
- add di, 1
- loop pozioma
- mov bx,80*320+180
- mov cx,2
- LOOOOOP:
- push cx
- mov cx,2
- LOOOOP:
- push cx
- mov cx,2
- LOOOP:
- push cx
- mov dx,1
- mov cx,3
- bomba1:
- push cx
- mov byte ptr es:[di],4
- add bx,320
- dec bx
- mov di,bx
- mov cx,dx
- wiersz:
- mov byte ptr es:[di],4
- add di,1
- loop wiersz
- add dx,2
- pop cx
- loop bomba1
- mov cx,3
- bomba2:
- push cx
- mov byte ptr es:[di],4
- add bx,320
- inc bx
- mov di,bx
- sub dx,2
- mov cx,dx
- wiersz2:
- mov byte ptr es:[di],4
- add di,1
- loop wiersz2
- pop cx
- loop bomba2
- mov bx,75*320+145
- pop cx
- loop LOOOP
- mov bx,110*320+135
- pop cx
- loop LOOOOP
- mov bx,115*320+190
- pop cx
- loop LOOOOOP
- mov bx,60*320+170
- mov cx,2
- LOOOOOP2:
- push cx
- mov cx,2
- LOOOOP2:
- push cx
- mov cx,2
- LOOOP2:
- push cx
- mov dx,1
- mov cx,3
- bomba12:
- push cx
- mov byte ptr es:[di],5
- add bx,320
- dec bx
- mov di,bx
- mov cx,dx
- wiersz12:
- mov byte ptr es:[di],5
- add di,1
- loop wiersz12
- add dx,2
- pop cx
- loop bomba12
- mov cx,3
- bomba22:
- push cx
- mov byte ptr es:[di],5
- add bx,320
- inc bx
- mov di,bx
- sub dx,2
- mov cx,dx
- wiersz22:
- mov byte ptr es:[di],5
- add di,1
- loop wiersz22
- pop cx
- loop bomba22
- mov bx,45*320+145
- pop cx
- loop LOOOP2
- mov bx,85*320+165
- pop cx
- loop LOOOOP2
- mov bx,100*320+185
- pop cx
- loop LOOOOOP2
- mov bx,45*320+175
- mov cx,2
- LOOOOOP3:
- push cx
- mov cx,2
- LOOOOP3:
- push cx
- mov cx,2
- LOOOP3:
- push cx
- mov dx,1
- mov cx,3
- bomba13:
- push cx
- mov byte ptr es:[di],3
- add bx,320
- dec bx
- mov di,bx
- mov cx,dx
- wiersz13:
- mov byte ptr es:[di],3
- add di,1
- loop wiersz13
- add dx,2
- pop cx
- loop bomba13
- mov cx,3
- bomba23:
- push cx
- mov byte ptr es:[di],3
- add bx,320
- inc bx
- mov di,bx
- sub dx,2
- mov cx,dx
- wiersz33:
- mov byte ptr es:[di],3
- add di,1
- loop wiersz33
- pop cx
- loop bomba23
- mov bx,95*320+145
- pop cx
- loop LOOOP3
- mov bx,105*320+160
- pop cx
- loop LOOOOP3
- mov bx,65*320+155
- pop cx
- loop LOOOOOP3
- mov ax, 0A000h
- mov dx,offset witaj
- mov ah,09h ;Zapisanie funkcji wyświetlania do rejestru ah
- int 21h
- xor ah, ah ;oczekiwanie na naci�ni�cie klawisza
- int 16h
- mov ax, 3
- int 10h ; powr�t do trybu tekstowego
- jmp koniec
- koniec:
- mov ah,4ch
- mov al,0
- int 21h
- Progr ends
- dane segment
- witaj db 'Merry Xmas $'
- kom db 13,10, 'Witaj! 1- tryb tekstowy, 2- tryb graficzny ',13,10,'$'
- trybtekstowypowitanie db 13,10, 'to jest tryb tekstowy bozek wyczysc zmienne bo sie nie moge polapac xd ',13,10,'$'
- bufor db 2
- VidOrigin DD 0B8000000H
- wybor db 1
- dane ends
- stosik segment stack
- dw 100h dup(0)
- szczyt Label word
- stosik ends
- end start
- Czarny - 0, niebieski - 1, zielony - 2, b��kitny - 3, czerwony - 4, r��owy - 5, br�zowy - 6, jasnoszary (ten standardowy) - 7, ciemnoszary - 8, jasnoniebieski - 9, jasnozielony - 10, jasnob��kitny - 11, jasnoczerwony - 12, jasnor��owy - 13, ���ty - 14, bia�y - 15.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement