Мне нужно написать ассемблерный код, который, если вы щелкнете по определенному значку на экране, активируется звук. (Например: фортепиано) Как это сделать?
Я использую Assembly 86 и dosbox 0.74-3 Если это поможет.
Это код, который создает фортепиано (5 белых прямоугольников). Мне нужно, чтобы при щелчке мышью по одному из прямоугольников он создавал звук.
Я умею издавать звук, мне просто нужно, чтобы звук был слышен при нажатии значков. Примечания на иврите, потому что это мой родной язык
IDEAL
MODEL small
STACK 100h
DATASEG
; --------------------------
color db 12
Player_CoordinateIn_X dw 5
Player_CoordinateIn_Y dw 10
Player_CoordinateIn_X1 dw 40
Player_CoordinateIn_X2 dw 75
Player_CoordinateIn_X3 dw 110
Player_CoordinateIn_X4 dw 145
Player_CoordinateIn_X5 dw 180
Player_CoordinateIn_X6 dw 215
Player_CoordinateIn_X7 dw 250
include "iconbox.asm"
; --------------------------
CODESEG
; ---------------------------------------
proc printIcon
push offset iconbox ;שם האייקון
push 25d ;Width
push 150d ;Height
push 15D ;Color
push [Player_CoordinateIn_X] ; x location
push [Player_CoordinateIn_Y] ;y location
call drawIcon
ret
endp printIcon
proc drawIcon
;פרוצדורה מקבלת מיקום ותמונה
;פרוצדורה מדפיסה תמונה במיקום המבוקש
iconOffset EQU [BP+14] ;מספר האייקון
iconWidth EQU [BP+12] ;רוחב האייקון
iconHeight EQU [BP+10] ;גובה האייקון
iconColor EQU [BP+8] ;צבע האייקון
iconX EQU [BP+6] ;מיקום ציר X
iconY EQU [BP+4] ;מיקום ציר Y
add [bp],10
push bp
mov bp,sp
;PushAll
mov si,0
mov di,0
mov bx,iconOffset
mov dx,iconY
bigLoop:
cmp [byte ptr bx],0
je afterPixel
MOV AX,iconColor
MOV AH,0Ch
MOV CX,iconX
ADD CX,SI
INT 10H
afterPixel:
inc bx
inc si
cmp si,iconWidth
jne bigLoop
mov si,0
inc dx
inc di
cmp di,iconHeight
jne bigLoop
;PopAll
pop bp
ret 12
endp drawIcon
proc open_grafic
mov ax,13h
int 10h
ret
endp open_grafic
;------------------------------------
proc printIcon2
push offset iconbox ;שם האייקון
push 25d ;Width
push 150d ;Height
push 15D ;Color
push [Player_CoordinateIn_X1] ; x location
push [Player_CoordinateIn_Y] ;y location
call drawIcon
ret
endp printIcon2
;--------------------------------------
proc printIcon1
push offset iconbox ;שם האייקון
push 25d ;Width
push 150d ;Height
push 15D ;Color
push [Player_CoordinateIn_X2] ; x location
push [Player_CoordinateIn_Y] ;y location
call drawIcon
ret
endp printIcon1
;--------------------------------------
proc printIcon3
push offset iconbox ;שם האייקון
push 25d ;Width
push 150d ;Height
push 15D ;Color
push [Player_CoordinateIn_X3] ; x location
push [Player_CoordinateIn_Y] ;y location
call drawIcon
ret
endp printIcon3
;--------------------------------------
proc printIcon4
push offset iconbox ;שם האייקון
push 25d ;Width
push 150d ;Height
push 15D ;Color
push [Player_CoordinateIn_X4] ; x location
push [Player_CoordinateIn_Y] ;y location
call drawIcon
ret
endp printIcon4
;--------------------------------------
proc printIcon5
push offset iconbox ;שם האייקון
push 25d ;Width
push 150d ;Height
push 15D ;Color
push [Player_CoordinateIn_X5] ; x location
push [Player_CoordinateIn_Y] ;y location
call drawIcon
ret
endp printIcon5
;--------------------------------------
proc printIcon6
push offset iconbox ;שם האייקון
push 25d ;Width
push 150d ;Height
push 15D ;Color
push [Player_CoordinateIn_X6] ; x location
push [Player_CoordinateIn_Y] ;y location
call drawIcon
ret
endp printIcon6
;--------------------------------------
proc printIcon7
push offset iconbox ;שם האייקון
push 25d ;Width
push 150d ;Height
push 15D ;Color
push [Player_CoordinateIn_X7] ; x location
push [Player_CoordinateIn_Y] ;y location
call drawIcon
ret
endp printIcon7
;--------------------------------------
start:
mov ax, @data
mov ds, ax
; -------------------------
call open_grafic
call printIcon
call printIcon1
call printIcon2
call printIcon3
call printIcon4
call printIcon5
call printIcon6
call printIcon7
; --------------------------
mov ax,0h
int 33h
; Show mouse
mov ax,1h
int 33h
; Loop until mouse click
MouseLP :
mov ax,3h
int 33h
cmp bx, 01h ; check left mouse click
jne MouseLP
; Print dot near mouse location
shr cx,1 ; adjust cx to range 0-319, to fit screen
sub dx, 1 ; move one pixel, so the pixel will not be hidden by mouse
mov bh,0h
mov al,[color]
mov ah,0Ch
int 10h
; Press any key to continue
mov ah,00h
int 16h
; Text mode
mov ax,3h
int 10h
exit:
end start