Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- dzC equ 36156 ;1193180/33
- dzD equ 32248 ;1193180/37
- dzE equ 29102 ;1193180/41
- dzF equ 27117 ;1193180/44
- dzG equ 24350 ;1193180/49
- dzA equ 21694 ;1193180/55
- dzH equ 19244 ;1193180/62
- dzP equ 1;pauza
- kod segment
- assume cs:kod,ss:stosik,ds:dane
- brak_pliku proc
- mov dx,offset blad
- mov ah,09h
- int 21h
- mov ah,07
- int 21h
- mov ah,4ch
- mov al,00h
- int 21h
- endp
- otwieranie_pliku proc
- mov ah,3dh ;kod przerwannia otwarcia pliku
- mov al,0 ;otwarcie tylko do odczytu
- mov dx,offset nazwa
- int 21h
- jc brak_pliku
- mov id_pliku,ax ;zapisanie id pliku
- ret
- endp
- zamykanie_pliku proc
- mov ah,3Eh ;kod przerwannia zamkniecia pliku
- mov bx,id_pliku
- int 21h
- ret
- endp
- czytanie_z_pliku proc
- push cx
- push dx
- mov ah,3Fh ;kod przerwannia czytania z pliku
- mov bx,id_pliku
- mov cx,3
- mov dx,offset bufor;
- int 21h
- pop dx
- pop cx
- ret;
- endp;
- dzwiek proc
- mov ax,nuta
- mov dx,42h
- out dx,al
- mov al,ah
- out dx,al
- in al,61h
- or al,00000011B ;ustawienie najmlodszych bitow na 1;
- out 61h,al ;wysłanie zawartości rejestru AL do portu DX
- ret
- endp
- wyl_dzwiek proc
- in al,61h ;pobranie zawartosci portu 61h do rejestru AL
- and al,11111100B ;ustawienie najmlodszych bitow na 0;
- out 61h,al;
- ret
- endp;
- czekaj proc
- cmp czas,1
- jne polnota
- mov CX,16
- xor dx,dx
- mov ah,86h
- int 15h
- jmp czekaj_koniec
- polnota: cmp czas,2
- jne cwiercnuta
- mov CX,8
- xor dx,dx
- mov ah,86h
- int 15h
- jmp czekaj_koniec
- cwiercnuta: cmp czas,3
- jne szesnastka
- mov CX,4
- xor dx,dx
- mov ah,86h
- int 15h
- jmp czekaj_koniec
- szesnastka: mov CX,0
- mov dx,65535
- mov ah,86h
- int 15h
- czekaj_koniec: ret
- endp
- odwtworz proc
- call dzwiek
- push cx;
- push dx;
- call czekaj
- pop dx;
- pop cx;
- call wyl_dzwiek
- ret
- endp
- ;poczatek programu
- start: mov ax,dane
- mov ds,ax
- mov ax,stosik
- mov ss,ax
- mov sp,offset szczyt
- mov ah,62h ;kod przerwania pozwalajacy na odczytanie zawartosci psp
- int 21h
- mov es,bx
- mov cl,es:[80h]
- mov si,0
- dec cl
- dec cl
- czytanie_nazwy:
- mov al,es:[81h+si+1]; przekazanie znakow z bufora do al
- xor ah,ah
- mov bx,offset nazwa ;wstawienie do rejestru bx adresu nazwy
- mov ds:[bx+si],al ;przekazanie znaku do zmiennej lancuchowej
- cmp cl,0
- je czytanie_nazwy_koniec
- dec cl
- inc si
- jmp czytanie_nazwy;
- czytanie_nazwy_koniec:
- call otwieranie_pliku;
- melodia: call czytanie_z_pliku
- mov bx,offset bufor
- mov dl,ds:[bx+0]
- cmp dl,'Q' ;zakonczenie melodii
- je koniec
- mov ah,0Bh ;po wciśnięciu klawisza przerywa prace
- int 21h
- cmp al,0
- jne koniec;
- jmp nuty;
- koniec:
- call zamykanie_pliku;
- mov ah,4ch
- mov al,00h
- int 21h;
- nuty: cmp dl,'C'
- je do
- cmp dl,'D'
- je re
- cmp dl,'E'
- je mi
- cmp dl,'F'
- je fa
- cmp dl,'G'
- je so
- cmp dl,'A'
- je la
- cmp dl,'H'
- je Zi
- cmp dl,'P'
- je pauza
- graj:
- mov bx,offset bufor
- mov cl,ds:[bx+1]
- sub cl,31h
- shr nuta,cl;
- lea bx,bufor
- mov cl,ds:[bx+2]
- sub cl,30h
- mov ch,0;
- mov czas,cx
- call odwtworz;
- inc si;
- jmp melodia;
- do: mov nuta,dzC
- jmp graj
- re: mov nuta,dzD
- jmp graj
- mi: mov nuta,dzE
- jmp graj
- fa: mov nuta,dzF
- jmp graj
- so: mov nuta,dzG
- jmp graj
- la: mov nuta,dzA
- jmp graj
- zi: mov nuta,dzH
- jmp graj
- pauza: mov nuta,dzP
- jmp graj
- kod ends;
- dane segment
- nuta dw 0
- czas dw 0
- id_pliku dw 0
- bufor db 3 dup(0)
- nazwa db 0,0,0,0,0,0,0,0,0,0,0,0,0 ;nazwa pliku
- blad db ' Blad! Nie odnaleziono pliku!$';
- dane ends
- stosik segment
- dw 100h dup(0)
- szczyt label word
- stosik ends
- end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement