Advertisement
Guest User

Untitled

a guest
Jan 20th, 2020
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. dzC equ 36156   ;1193180/33
  2. dzD equ 32248   ;1193180/37
  3. dzE equ 29102   ;1193180/41
  4. dzF equ 27117   ;1193180/44
  5. dzG equ 24350   ;1193180/49
  6. dzA equ 21694   ;1193180/55
  7. dzH equ 19244   ;1193180/62
  8. dzP equ 1;pauza
  9.  
  10. kod            segment
  11.                assume cs:kod,ss:stosik,ds:dane
  12.  
  13. brak_pliku     proc
  14.                mov dx,offset blad
  15.                mov ah,09h
  16.                int 21h
  17.                
  18.                mov ah,07
  19.                int 21h
  20.                mov ah,4ch
  21.                mov al,00h
  22.                int 21h
  23.                endp
  24.  
  25. otwieranie_pliku    proc
  26.                mov ah,3dh           ;kod przerwannia otwarcia pliku
  27.                mov al,0             ;otwarcie tylko do odczytu
  28.                mov dx,offset nazwa
  29.                int 21h
  30.                jc brak_pliku
  31.                mov id_pliku,ax      ;zapisanie id pliku
  32.                ret
  33.                endp
  34.  
  35. zamykanie_pliku   proc
  36.                mov ah,3Eh           ;kod przerwannia zamkniecia pliku
  37.                mov bx,id_pliku
  38.                int 21h
  39.                ret
  40.                endp
  41.  
  42. czytanie_z_pliku proc
  43.                push cx
  44.                push dx
  45.                mov ah,3Fh           ;kod przerwannia czytania z pliku
  46.                mov bx,id_pliku
  47.                mov cx,3
  48.                mov dx,offset bufor;
  49.                int 21h
  50.                pop dx
  51.                pop cx
  52.                ret;
  53.                endp;
  54.  
  55. dzwiek          proc
  56.                 mov  ax,nuta
  57.                 mov  dx,42h
  58.                 out  dx,al
  59.                 mov  al,ah
  60.                 out  dx,al
  61.  
  62.                 in  al,61h
  63.                 or  al,00000011B    ;ustawienie najmlodszych bitow na 1;
  64.                 out 61h,al          ;wysłanie zawartości rejestru AL do portu DX
  65.                 ret
  66.                 endp
  67.  
  68. wyl_dzwiek      proc
  69.                 in  al,61h          ;pobranie zawartosci portu 61h do rejestru AL
  70.                 and al,11111100B    ;ustawienie najmlodszych bitow na 0;
  71.                 out 61h,al;
  72.  
  73.                 ret
  74.                 endp;
  75.  
  76. czekaj          proc
  77.                 cmp czas,1
  78.                 jne polnota
  79.                 mov CX,16              
  80.                 xor dx,dx
  81.                 mov ah,86h
  82.                 int 15h
  83.                 jmp czekaj_koniec
  84.     polnota:    cmp czas,2
  85.                 jne cwiercnuta
  86.                 mov CX,8               
  87.                 xor dx,dx
  88.                 mov ah,86h
  89.                 int 15h
  90.                 jmp czekaj_koniec
  91.     cwiercnuta: cmp czas,3
  92.                 jne szesnastka
  93.                 mov CX,4               
  94.                 xor dx,dx
  95.                 mov ah,86h
  96.                 int 15h
  97.                 jmp czekaj_koniec
  98.     szesnastka: mov CX,0               
  99.                 mov dx,65535
  100.                 mov ah,86h
  101.                 int 15h
  102. czekaj_koniec:  ret
  103.                 endp
  104.                
  105.  
  106. odwtworz            proc
  107.                 call dzwiek
  108.                 push cx;
  109.                 push dx;           
  110.                 call czekaj
  111.                 pop dx;
  112.                 pop cx;                
  113.                 call wyl_dzwiek
  114.                 ret
  115.                 endp
  116.  
  117. ;poczatek programu
  118.  
  119. start:        mov ax,dane
  120.               mov ds,ax
  121.               mov ax,stosik
  122.               mov ss,ax
  123.               mov sp,offset szczyt
  124.              
  125.               mov ah,62h        ;kod przerwania pozwalajacy na odczytanie zawartosci psp
  126.               int 21h
  127.               mov es,bx
  128.               mov cl,es:[80h]
  129.               mov si,0
  130.               dec cl
  131.               dec cl
  132.  
  133. czytanie_nazwy:
  134.               mov al,es:[81h+si+1];   przekazanie znakow z bufora do al
  135.  
  136.  
  137.               xor ah,ah
  138.               mov bx,offset nazwa   ;wstawienie do rejestru bx adresu nazwy
  139.               mov ds:[bx+si],al ;przekazanie znaku do zmiennej lancuchowej
  140.              
  141.               cmp cl,0
  142.               je czytanie_nazwy_koniec
  143.               dec cl
  144.               inc si
  145.               jmp czytanie_nazwy;
  146.                
  147.  
  148. czytanie_nazwy_koniec:
  149.  
  150.               call otwieranie_pliku;
  151.              
  152. melodia:      call czytanie_z_pliku
  153.               mov bx,offset bufor
  154.               mov dl,ds:[bx+0]
  155.  
  156.               cmp dl,'Q'    ;zakonczenie melodii
  157.               je koniec
  158.  
  159.               mov ah,0Bh    ;po wciśnięciu klawisza przerywa prace
  160.               int 21h
  161.               cmp al,0
  162.               jne koniec;
  163.  
  164.               jmp nuty;
  165. koniec:
  166.               call zamykanie_pliku;
  167.               mov ah,4ch
  168.               mov al,00h
  169.               int 21h;
  170.  
  171.  
  172. nuty:         cmp dl,'C'
  173.               je do
  174.               cmp dl,'D'
  175.               je re
  176.               cmp dl,'E'
  177.               je mi
  178.               cmp dl,'F'
  179.               je fa
  180.               cmp dl,'G'
  181.               je so
  182.               cmp dl,'A'
  183.               je la
  184.               cmp dl,'H'
  185.               je Zi
  186.               cmp dl,'P'
  187.               je pauza
  188.  
  189. graj:
  190.               mov bx,offset bufor
  191.               mov cl,ds:[bx+1]
  192.               sub cl,31h
  193.              
  194.               shr nuta,cl;
  195.              
  196.               lea bx,bufor
  197.               mov cl,ds:[bx+2]
  198.               sub cl,30h
  199.               mov ch,0;
  200.               mov czas,cx
  201.  
  202.  
  203.               call odwtworz;
  204.               inc si;
  205.               jmp melodia;
  206.  
  207.  
  208.  
  209. do:           mov  nuta,dzC
  210.               jmp graj
  211. re:           mov  nuta,dzD
  212.               jmp graj
  213. mi:           mov  nuta,dzE
  214.               jmp graj
  215. fa:           mov  nuta,dzF
  216.               jmp graj
  217. so:           mov  nuta,dzG
  218.               jmp graj
  219. la:           mov  nuta,dzA
  220.               jmp graj
  221. zi:           mov  nuta,dzH
  222.               jmp graj
  223. pauza:        mov  nuta,dzP
  224.               jmp graj
  225. kod           ends;
  226.  
  227.  
  228. dane            segment
  229.  
  230. nuta            dw 0
  231. czas            dw 0
  232. id_pliku        dw 0
  233.  
  234. bufor           db 3 dup(0)
  235.  
  236.  
  237. nazwa           db 0,0,0,0,0,0,0,0,0,0,0,0,0 ;nazwa pliku
  238.  
  239. blad            db ' Blad! Nie odnaleziono pliku!$';
  240.  
  241. dane            ends
  242.  
  243. stosik    segment              
  244.           dw 100h dup(0)      
  245.  
  246. szczyt    label word
  247. stosik    ends
  248.  
  249.           end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement