Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;podzielniki czestotliwosci
- TC equ 36156;36060; 1193180Hz/33Hz
- TD equ 32248;32162; 1193180Hz/37Hz
- TE equ 29101;29024; 1193180Hz/41Hz
- TF equ 27117;27045; 1193180Hz/44Hz
- TG equ 24350;24285; 1193180Hz/49Hz
- TA equ 21694;21636; 1193180Hz/55Hz
- TH equ 19244;19193; 1193180Hz/62Hz
- TP equ 1;pauza
- ;Q koniec melodii
- Progr segment
- assume cs:Progr,ss:stosik,ds:dane;
- ;Procedury
- linijka proc
- mov ah,09h
- int 21h
- ret
- endp
- readln proc
- mov ah,0ah
- int 21h
- ret
- endp
- no_file proc
- mov dx,offset napis1
- call linijka
- jmp exit
- endp
- close_file proc
- mov ah,3Eh
- mov bx,fileHandle
- int 21h
- ret
- endp
- open_file proc
- mov dx,offset plik
- mov ah,3dh
- mov al,0
- int 21h
- jc no_file
- mov fileHandle,ax
- ret
- endp
- read_file proc
- push cx
- push dx;
- mov bx,fileHandle
- mov cx,3
- mov dx,offset bufor;
- mov ah,3Fh
- int 21h
- pop dx
- pop cx
- ret;
- endp;
- nuta proc
- push dx;
- push cx;
- mov cx,16;
- mov ah,86h;
- int 15h
- pop cx
- pop dx
- ret
- nuta endp;
- polnuta proc
- push dx;
- push cx;
- mov cx,8;
- mov ah,86h;
- int 15h
- pop cx
- pop dx
- ret
- polnuta endp;
- cwiercnuta proc
- push dx;
- push cx;
- mov cx,1;
- mov ah,86h;
- int 15h
- pop cx
- pop dx
- ret
- cwiercnuta endp;
- szest proc
- push dx
- push cx
- mov cx,0
- mov dx , 65535
- mov ah,86h;
- int 15h
- pop cx
- pop dx
- ret
- szest endp;
- speakerON proc
- mov ax,ton
- out 42h,al
- mov al,ah
- out 42h,al
- in al,61h;
- or al,00000011b;
- out 61h,al;
- ret
- endp
- speakerOFF proc
- in al,61h;
- and al,11111100b;
- out 61h,al;
- ret
- endp;
- play proc
- call speakerON
- cmp czas,1
- je cala
- cmp czas,2
- je pol
- cmp czas,4
- je cwierc
- cmp czas,6
- je szes
- jmp endplay
- cala: call nuta
- jmp endplay
- pol: call polnuta
- jmp endplay
- cwierc: call cwiercnuta
- jmp endplay
- szes: call szest
- jmp endplay
- endplay:
- call speakerOFF
- ret
- endp
- ret
- endp
- ;--------------------------------------------------------------------
- start: mov ax,dane
- mov ds,ax
- mov ax,stosik
- mov ss,ax
- mov sp,offset szczyt
- mov ah, 62h
- int 21h
- mov es,bx
- mov al,es:[0080h]
- mov cl,al
- sub cl,2
- mov si,0
- cmp al,0
- jbe brak
- przep:
- mov al,es:[0081h+si+1]
- mov bx,offset plik
- mov ds:[bx+si],al
- cmp cl,0
- je end_przep
- dec cl
- inc si
- jmp przep
- end_przep:
- mov dx,offset napis3
- call linijka
- call open_file
- melodia:
- call read_file
- mov dl,bufor(0)
- cmp dl,'Q'
- je exit1
- 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 cl,bufor(1);oktawa
- sub cl,31h
- shr ton,cl;
- graj1:
- mov cl,bufor(2);czas
- sub cl,30h
- mov czas,cl
- call play;
- mov ah,0Bh
- int 21h
- cmp al,0
- jne exit
- jmp melodia;
- brak:
- call no_file
- jmp exit
- exit1:
- jmp exit
- do: mov ton,TC
- jmp graj
- re: mov ton,TD
- jmp graj
- mi: mov ton,TE
- jmp graj
- fa: mov ton,TF
- jmp graj
- so: mov ton,TG
- jmp graj
- la: mov ton,TA
- jmp graj
- zi: mov ton,TH
- jmp graj
- pauza: mov ton,TP
- jmp graj1
- exit:
- call close_file
- call linijka
- mov ah,4ch
- mov al,00h
- int 21h;
- Progr ends;
- dane segment
- ton dw 0
- czas db 0
- plik db 0,0,0,0,0,0,0,0,0,0,0,0
- fileHandle dw 0
- bufor db 3 dup(0)
- napis3 db 'Muzyka',10,13,'$'
- napis1 db 10,13,' Plik nie istnieje !!!$';
- 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