IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

> Мелодия системного динамика, Все о системном динамике
КМА
сообщение 4.03.2007 0:38
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 69
Пол: Мужской

Репутация: -  3  +


Здравствуйте, уважаемые.

Есть задача:

Написать программу исполняющую на системном динамике песню про веселых гусей.

К сожалению, я пока не обладаю соответствующими навыками в программировании на ассемблере, но был бы очень признателен людям, которые откликнулись бы на эту тему и написали все что знаю о системном динамике, как к нему обращаться и работать. Как завершение этой темы, общими усилиями, хотелось бы написать процедуру биликанья динамика, т. е. в соответствии от введенной цифры он биликал бы соответствующую ноту. Вот.

Заранее благодарен тем, кто откликнется.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
xds
сообщение 4.03.2007 8:17
Сообщение #2


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


Для начала - одна нота:
.8086
.model tiny
locals

; Темп (в ударах в минуту)
tempo equ 120

; Таблица соответствия номеров полутонов обозначениям нот
; (в буквенной нотации), S - диез
C equ 0 ;"до"
D equ 2 ;"ре"
E equ 4 ;"ми"
F equ 5 ;"фа"
G equ 7 ;"соль"
A equ 9 ;"ля"
B equ 11 ;"си"
S equ 1 ;#

;---------------------------------------------------------------
; play - воспроизведение ноты
; note = номер полутона
; octave = номер октавы
; len = длительность для размера 4/4 и заданного темпа

play macro note,octave,len
mov ax,octave shl 8 + note ;начинаем играть ноту
call play_note
mov cx,4370/(tempo*len) ;задержка
call delay
call stop_note ;выключаем динамик
endm

.code
.startup
;воспроизведение ноты "ля" первой октавы
play A,3,4

;выход
mov ax,4C00h
int 21h

;---------------------------------------------------------------
; play_note - начинает воспроизведение ноты
; вход:
; al = номер полутона внутри октавы (0..11)
; ah = номер октавы (3 = первая фортепианная)
; выход:
; нет

play_note proc
mov cl,ah ;cl = номер октавы
cbw ;ax = номер полутона * 2
shl ax,1
lea bx,notes ;bx = @notes[номер полутона]
add bx,ax
mov al,0B6h ;загрузка упраляющего слова таймера
out 43h,al ;(меандер на 3-м канале)
mov ax,[bx] ;ax = notes[номер полутона] * 2^номер октавы
shr ax,cl
out 42h,al ;загрузка коэффициента деления в 3-й канал таймера
mov al,ah
out 42h,al
in al,61h ;включение динамика
or al,3
out 61h,al
ret
endp

;---------------------------------------------------------------
; stop_note - выключает динамик
; вход:
; нет
; выход:
; нет

stop_note proc
in al,61h
and al,not 1
out 61h,al
ret
endp

;---------------------------------------------------------------
; delay - задержка
; вход:
; cx = длительность задержки в 1/18 с (точнее - в 65536/1193180 с)
; выход:
; нет

delay proc
xor ax,ax
mov es,ax
@@1:
mov ax,es:[46Ch]
@@2:
hlt
cmp ax,es:[46Ch]
je @@2
loop @@1
ret
endp

.const

; notes - таблица коэффициентов деления для октавы 0 (контроктавы)
; Коэффициенты деления для более высоких октав получаются
; путём умножения значений из таблицы на 2^(номер октавы)

notes:
dw 36488 ;C
dw 34445 ;C#
dw 32511 ;D
dw 30673 ;D#
dw 28960 ;E
dw 27328 ;F
dw 25804 ;F#
dw 24350 ;G
dw 22981 ;G#
dw 21694 ;A
dw 20473 ;A#
dw 19325 ;B

end


Добавлено через 12 мин.
http://podgoretsky.com/ftp/Docs/Asm/AsmBradly/8/8-2.html
http://www.cyberguru.ru/programming/assemb...mers-sound.html


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 9.07.2025 21:04
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"