Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2017
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.72 KB | None | 0 0
  1. ;podzielniki czestotliwosci
  2. TC equ 34546; 1.19MHz/33Hz 1140000/33
  3. TD equ 30811; 1.19MHz/37Hz
  4. TE equ 27805; 1.19MHz/41Hz
  5. TF equ 25909; 1.19MHz/44Hz
  6. TG equ 23265; 1.19MHz/49Hz
  7. TA equ 20727; 1.19MHz/55Hz
  8. TH equ 18387; 1.19MHz/62Hz
  9. TP equ 1;pauza
  10. ;Q koniec melodii
  11.  
  12. Przerwanie21 equ 21H
  13. Przerwanie15 equ 15H
  14.  
  15. kod segment
  16. assume cs:kod,ss:stosik,ds:dane;
  17.  
  18. ;procedury
  19.  
  20. nuta proc;cx,dx czas := DX + (65536*CX) /1000000
  21. mov cx,7
  22. mov dx,65535
  23. mov ah,86h
  24. int Przerwanie15;czekaj
  25. ret
  26. nuta endp;
  27.  
  28. polnuta proc
  29. mov cx,3
  30. mov dx,65535
  31. mov ah,86h
  32. int Przerwanie15
  33. ret
  34. polnuta endp;
  35.  
  36. cwiercnuta proc
  37. mov cx,1
  38. mov dx,65535
  39. mov ah,86h
  40. int Przerwanie15
  41. ret
  42. cwiercnuta endp
  43.  
  44. osemka proc
  45. mov cx,0
  46. mov dx,32000;
  47. mov ah,86h
  48. int Przerwanie15
  49. ret
  50. osemka endp;
  51.  
  52. speakeron proc ;max podzielnik 65536 daje 18hz, 8253
  53. mov ax,frequency
  54. mov dx,42h ;numer portu
  55. out dx,al ;First operand is a port number
  56. mov al,ah
  57. out dx,al
  58. ;Wlaczenie glosnika
  59. mov dx,61h ;8255 równoległy
  60. in al,dx ;Input from port into AL or AX.
  61. or al,00000011B
  62. out dx,al
  63. ret
  64. endp
  65.  
  66. ;Wylaczenie glosnika
  67. speakeroff proc
  68. mov dx,61h
  69. in al,dx
  70. and al,11111100B
  71. out dx,al
  72. ret
  73. endp;
  74.  
  75. ;Odtwarzanie
  76. play proc
  77. call speakeron
  78. cmp czas,1
  79. je cala
  80. cmp czas,2
  81. je pol
  82. cmp czas,4
  83. je cwierc
  84. cmp czas,8
  85. je osem
  86. jmp stopplay
  87.  
  88. cala: call nuta
  89. jmp stopplay
  90.  
  91. pol: call polnuta
  92. jmp stopplay
  93.  
  94. cwierc: call cwiercnuta
  95. jmp stopplay
  96.  
  97. osem: call osemka
  98. jmp stopplay
  99.  
  100. stopplay:call speakeroff
  101. ret
  102. endp
  103.  
  104.  
  105.  
  106. start: mov ax,dane
  107. mov ds,ax
  108. mov ax,stosik
  109. mov ss,ax
  110. mov sp,offset szczyt
  111.  
  112.  
  113. mov ah,62h ;Funkcja GetPSP, parametr programu
  114. int Przerwanie21;Adres segmentu PSP w rejestrze BX (segment PSP to specjalny segment przechowujący dane na temat programu).
  115. mov es,bx
  116. mov si,80h
  117. xor ch,ch ;zeruje dla stosu
  118. mov cl,es:[si] ;W es:[80h] znajduje się długość 1BAJT podanego parametru.
  119. cmp cl,0 ;czy dlugosc =0
  120. je defaultName ;jak tak to domyslny
  121.  
  122. dec cl
  123. inc si ;81h to spacja
  124. lea di,nazwaPliku ;do di offset nazwaPliku
  125. push cx ;ch=0,cl=dlugosc
  126.  
  127. zapisz:
  128. inc si ;82h W adresach 82h-FFh znajdują się znaki ASCII parametru zakończone przez 0Dh ENTER, ENTER = 13 w ASCII
  129. mov al,es:[si]
  130. mov ds:[di],al ;zapisuje nazwe pliku w ds:[di]
  131. inc di
  132. loop zapisz ;wykona sie tyle razy ile dlugosc nazwy pliku -1
  133. pop cx ;dlugosc nazwy pliku ze stosu
  134. cmp cl,9
  135. jge defaultName ;jesli nazwa pliku >=9 to 'nuty.txt' zostalo nadpisane
  136. mov al,9
  137. sub al,cl
  138. mov cl,al
  139. xor ch,ch
  140. xor al,al
  141. uzupelnij: ;nadpisuje pozostala czesc 'nuty.txt'
  142. mov ds:[di],al
  143. inc di
  144. loop uzupelnij
  145.  
  146.  
  147. defaultName:
  148. lea dx,nazwaPliku ;offset nazwaPliku do ds
  149. mov ah,3Dh ;Otwiera plik (numer funkcji do przerwania)
  150. xor al,al ;prawa dla pliku 0 (odczyt)
  151. int Przerwanie21
  152. mov bx,ax ;ax uchwyt do pliku
  153.  
  154. jnc bezBledu ;jak nie ma przeniesienia to ok
  155. lea dx,blad
  156. mov ah,09H
  157. int Przerwanie21
  158. jmp exit
  159.  
  160.  
  161. bezBledu:
  162. xor cx,cx
  163. xor dx,dx
  164. mov ah,42h
  165. mov al,2h
  166. int Przerwanie21 ;ustaw sie na koncu pliku
  167. mov dlugosc,ax ;dlugosc pliku(pozycja liczona od poczatku pliku)
  168.  
  169. xor cx,cx
  170. xor dx,dx
  171. mov ah,42h
  172. xor al,al ;ustaw sie na poczatku pliku
  173. int Przerwanie21
  174.  
  175. mov cx,dlugosc ;ilosc bajtow do przeczytania
  176. lea dx,dzwiek ;bufor
  177. mov ah,3FH ;czytaj do bufora
  178. int Przerwanie21
  179.  
  180. mov ah,3eh ;zamknij plik
  181. int Przerwanie21
  182.  
  183. lea dx,komunikatOdtw
  184. mov ah,09H
  185. int Przerwanie21
  186.  
  187.  
  188. mov di,0
  189.  
  190. melodia: lea bx,dzwiek
  191. mov dl,ds:[bx+di]
  192. inc di
  193. cmp dl,'Q'
  194. jne czyC
  195. jmp exit
  196.  
  197. czyC: cmp dl,'C'
  198. jne czyD
  199. mov frequency,TC
  200. jmp graj
  201. czyD: cmp dl,'D'
  202. jne czyE
  203. mov frequency,TD
  204. jmp graj
  205. czyE: cmp dl,'E'
  206. jne czyF
  207. mov frequency,TE
  208. jmp graj
  209. czyF: cmp dl,'F'
  210. jne czyG
  211. mov frequency,TF
  212. jmp graj
  213. czyG: cmp dl,'G'
  214. jne czyA
  215. mov frequency,TG
  216. jmp graj
  217. czyA: cmp dl,'A'
  218. jne czyH
  219. mov frequency,TA
  220. jmp graj
  221. czyH: cmp dl,'H'
  222. jne pauza
  223. mov frequency,TH
  224. jmp graj
  225.  
  226. pauza: mov frequency,1
  227.  
  228.  
  229. graj: mov cl,ds:[bx+di]
  230. inc di
  231. sub cl,30h
  232. shr frequency,cl ;dzielenie frequencyu przez 2*oktawa
  233.  
  234. mov cl,ds:[bx+di]
  235. inc di
  236. sub cl,30h
  237. mov czas,cl
  238. call play
  239. jmp melodia
  240.  
  241. exit: mov ax,4c00h
  242. int Przerwanie21
  243.  
  244. kod ends;
  245.  
  246.  
  247. dane segment
  248.  
  249. dzwiek db 3000 dup('$')
  250.  
  251. frequency dw 0
  252. czas db 0
  253. dlugosc dw 0
  254.  
  255. komunikatOdtw db 'Odtwarzanie pliku: '
  256. nazwaPliku db 'nuty.txt'
  257. db 50 dup('$')
  258. blad db 'Brak pliku$'
  259.  
  260.  
  261. dane ends
  262.  
  263.  
  264. stosik segment stack
  265. dw 100h dup(0)
  266. szczyt label word
  267. stosik ends
  268. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement