Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Progr segment
- assume cs:Progr, ds:dane, ss:stosik
- blad:
- mov dx,offset blad_odczytu
- mov ah,09h ;Zapisanie funkcji wyświetlania do rejestru ah
- int 21h
- jmp koniec
- start: mov ax,dane
- mov ds,ax
- mov ax,stosik
- mov ss,ax
- mov sp,offset szczyt
- ;--------- GET A FILE
- mov dx,offset Witaj
- mov ah,09h ;Zapisanie funkcji wyświetlania do rejestru ah
- int 21h
- mov dx,offset max_file
- mov ax,0A00h
- int 21h
- xor ax,ax
- xor dx,dx
- mov bl,length_file
- xor bh,bh
- mov string_file[bx],'0'
- mov ax,seg string_file
- mov ds,ax
- mov dx,offset string_file ;adres DS:DX zawiera nazw� pliku
- mov ax,3d02h ;Funkcja otwarcia pliku do odczytu i zapisu
- int 21h
- jc blad
- mov bx,ax ;uchwyt pliku do BX
- mov cx,0 ;pobierz d�ugo�� za pomoc� przesuwania
- mov dx,0 ;wska�nika w pliku (cx:dx to przesuni�cie od ko�ca pliku)
- mov ax,4202h ;Funkcja przesuwania wska�nika do ko�ca pliku
- int 21h
- mov Dlugosc,ax ;d�ugo�� pliku jest zapisana do rejestru AX przez DOS
- mov cx,0 ;wr�� na pocz�tek pliku
- mov dx,0
- mov ax,4200h
- int 21h
- mov dx,offset Text
- mov cx,Dlugosc
- mov ah,3fh ;odczytaj z pliku tyle bajt�w
- int 21h ;ile plik ma od d�ugo�ci
- mov ah,3eh ;zamknij plik
- int 21h
- ;-------- GET A LETTER FROM THE FILE
- mov cx,[Dlugosc]
- sprawdz:
- mov bx, [indeks]
- mov al,Text[bx]
- mov nuta[0], al
- mov dx, offset nuta
- mov ah,9h
- int 21h
- inc [indeks]
- cmp al, '-'
- je pol
- cmp al, '='
- je cala
- xor bx,bx
- mov bx, offset oktawa
- call start2
- xor al,al
- loop sprawdz
- jmp koniec
- pol:
- mov dlugosc_dzwieku, 3
- jmp sprawdz
- cala:
- mov dlugosc_dzwieku, 4
- jmp sprawdz
- start2:
- call getfreq
- cmp si, 50000
- je continue
- call noteon
- continue:
- mov ah, 86h
- mov cx, [dlugosc_dzwieku]
- mov dx, [dlugosc_dzwieku]
- int 15h
- call noteoff
- ret
- ;--------- NOTE STARTER
- noteon:
- add bx, si
- mov ax, [bx] ;frequency
- out 42h, al ;mniejszy bajt
- mov al, ah ;wiekszy bajt
- out 42h, al
- mov al, 61h ;wlacz glosnik
- mov al, 11b ;set bits 1 and 0;;tegomaniebyc
- out 61h, al ;send new value
- ret
- ;-------------------END
- ;-------------------NOTE ENDER
- noteoff:
- mov al, 61h ;turn off note
- out 61h, al ;send new value
- ret
- ;-------------------END
- getfreq:
- cmp al, 'c'
- je C
- cmp al, 'D'
- je D
- cmp al, 'E'
- je E
- cmp al, 'F'
- je F
- cmp al, 'G'
- je G
- cmp al, 'A'
- je A
- cmp al, 'H'
- je H
- cmp al, 'C'
- je BIG_C
- cmp al, '!'
- je cis
- cmp al, '@'
- je dis
- cmp al, '$'
- je eis
- cmp al, '%'
- je fis
- cmp al, '^'
- je gis
- cmp al, '&'
- je ais
- cmp al, '1'
- je first
- cmp al, '2'
- je second
- cmp al, '3'
- je third
- cmp al, '4'
- je fourth
- cmp al, '5'
- je fifth
- cmp al, '6'
- je sixth
- cmp al, '7'
- je seventh
- cmp al, ' '
- je pauza
- cmp al, 'T'
- je t
- pauza:
- mov si, 50000
- ret
- t:
- jmp koniec
- _exit:
- int 20h
- C:
- mov si,0000h
- ret
- D:
- mov si,0002h
- ret
- E:
- mov si, 0004h
- ret
- F:
- mov si, 0006h
- ret
- G:
- mov si, 0008h
- ret
- A:
- mov si, 000ah
- ret
- H:
- mov si, 000ch
- ret
- BIG_C:
- mov si,000eh
- ret
- cis:
- mov si,0010h
- ret
- dis:
- mov si, 0012h
- ret
- eis:
- mov si, 0014h
- ret
- fis:
- mov si, 0016h
- ret
- gis:
- mov si, 0018h
- ret
- ais:
- mov si, 00a0h
- first:
- mov si, 0
- mov bx, offset oktawa1
- jmp arrayop
- second:
- mov si, 0
- mov bx, offset oktawa2
- jmp arrayop
- third:
- mov si, 0
- mov bx, offset oktawa3
- jmp arrayop
- fourth:
- mov si, 0
- mov bx, offset oktawa4
- jmp arrayop
- fifth:
- mov si, 0
- mov bx, offset oktawa5
- jmp arrayop
- sixth:
- mov si, 0
- mov bx, offset oktawa6
- jmp arrayop
- seventh:
- mov si, 0
- mov bx, offset oktawa7
- jmp arrayop
- arrayop:
- petla:
- mov ax, [bx]
- mov oktawa[si], ax
- add bx, 2
- add si, 2
- cmp si, 28
- jle petla
- jmp sprawdz
- koniec:
- mov ah,4ch
- mov al,0
- int 21h
- Progr ends
- dane segment
- Witaj db 13,10, 'Witaj! Prosze podac nazwe pliku z ktorego odegrana zostanie melodia: ',13,10,'$'
- max_file db 42
- length_file db ?
- string_file db 42 dup(0)
- blad_odczytu db 10,13,"Blad odczytu!$"
- nuta db 2 dup ('$')
- dlugosc_dzwieku dw 5
- indeks dw 0
- Dlugosc dw ? ;d�ugo�� pliku jeszcze nie znana
- Text db 30000 dup ('$') ;
- ;;;;oktawy;; C D E F G A H C cis Dis Eis Fis Gis ais
- oktawa1 dw (1193000/33), (1193000/37), (1193000/41), (1193000/44), (1193000/49), (1193000/55), (1193000/62), (1193000/65), (1193000/35), (1193000/39), (1193000/42), (1193000/46), (1193000/52), (1193000/58)
- oktawa2 dw (1193000/65), (1193000/73), (1193000/82), (1193000/87), (1193000/98), (1193000/110), (1193000/123), (1193000/131), (1193000/69), (1193000/77), (1193000/84), (1193000/92), (1193000/104), (1193000/116)
- oktawa3 dw (1193000/131), (1193000/147), (1193000/165), (1193000/175), (1193000/196), (1193000/220), (1193000/247), (1193000/262), (1193000/139), (1193000/156), (1193000/170), (1193000/185), (1193000/208), (1193000/233)
- oktawa4 dw (1193000/263), (1193000/294), (1193000/330), (1193000/349), (1193000/392), (1193000/440), (1193000/494), (1193000/523), (1193000/277), (1193000/311), (1193000/339), (1193000/370), (1193000/415), (1193000/466)
- oktawa5 dw (1193000/523), (1193000/587), (1193000/659), (1193000/698), (1193000/784), (1193000/880), (1193000/988), (1193000/1047), (1193000/554), (1193000/622), (1193000/678), (1193000/740), (1193000/831), (1193000/932)
- oktawa6 dw (1193000/1047), (1193000/1175), (1193000/1319), (1193000/1397), (1193000/1568), (1193000/1760), (1193000/1976), (1193000/2093), (1193000/1109), (1193000/1245), (1193000/1357), (1193000/1480), (1193000/1661), (1193000/1865)
- oktawa7 dw (1193000/2093), (1193000/2349), (1193000/2637), (1193000/2794), (1193000/3136), (1193000/3520), (1193000/3951), (1193000/4186), (1193000/2217), (1193000/2489), (1193000/2714), (1193000/2960), (1193000/3322), (1193000/3729)
- oktawa dw (1193000/263), (1193000/294), (1193000/330), (1193000/349), (1193000/392), (1193000/440), (1193000/494), (1193000/523), (1193000/277), (1193000/311), (1193000/339), (1193000/370), (1193000/415), (1193000/466)
- ;;;;;;;;;
- 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