~hangman8086-devs/hangman8086/trunk

« back to all changes in this revision

Viewing changes to playsnd.asm

  • Committer: Fabien LOISON
  • Date: 2011-05-20 09:05:38 UTC
  • mfrom: (3.1.6 hangman)
  • Revision ID: flo@flogisoft.com-20110520090538-p25achbsl88irlno
* TUI implemented
* Main menu improved
* Sound added (music/effect)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
2
;;      __   __  _______  __    _  _______  __   __  _______  __    _       ;;
 
3
;;     |  | |  ||   _   ||  |  | ||       ||  |_|  ||   _   ||  |  | |      ;;
 
4
;;     |  |_|  ||  |_|  ||   |_| ||    ___||       ||  |_|  ||   |_| |      ;;
 
5
;;     |       ||       ||       ||   | __ |       ||       ||       |      ;;
 
6
;;     |       ||       ||  _    ||   ||  ||       ||       ||  _    |      ;;
 
7
;;     |   _   ||   _   || | |   ||   |_| || ||_|| ||   _   || | |   |      ;;
 
8
;;     |__| |__||__| |__||_|  |__||_______||_|   |_||__| |__||_|  |__|      ;;
 
9
;;                                                                          ;;
 
10
;;                                                                          ;;
 
11
;;  HANGMAN - An implementation of the Hang Man game in assembly (Emu8086)  ;;
 
12
;;                                                                          ;;
 
13
;;  Copyright (C) 2011  Fabien LOISON                                       ;;
 
14
;;  Copyright (C) 2011  Mathilde BOUTIGNY                                   ;;
 
15
;;  Copyright (C) 2011  Vincent PEYROUSE                                    ;;
 
16
;;  Copyright (C) 2011  Germain CARR�                                       ;;
 
17
;;  Copyright (C) 2011  Matthis FRENAY                                      ;;
 
18
;;                                                                          ;;
 
19
;;  HangMan is free software: you can redistribute it and/or modify         ;;
 
20
;;  it under the terms of the GNU General Public License as published by    ;;
 
21
;;  the Free Software Foundation, either version 3 of the License, or       ;;
 
22
;;  (at your option) any later version.                                     ;;
 
23
;;                                                                          ;;
 
24
;;  This program is distributed in the hope that it will be useful,         ;;
 
25
;;  but WITHOUT ANY WARRANTY; without even the implied warranty of          ;;
 
26
;;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           ;;
 
27
;;  GNU General Public License for more details.                            ;;
 
28
;;                                                                          ;;
 
29
;;  You should have received a copy of the GNU General Public License       ;;
 
30
;;  along with this program.  If not, see <http://www.gnu.org/licenses/>.   ;;
 
31
;;                                                                          ;;
 
32
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
33
 
 
34
 
 
35
;;
 
36
;; Contains the function for playing sounds.
 
37
;;
 
38
;; Index:
 
39
;;     _play_sound() -- Play a sound.
 
40
;;
 
41
 
 
42
 
 
43
 
 
44
;========================================================== _play_sound() ====
 
45
;; Play a sound.
 
46
 
 
47
;; Usage:
 
48
;; mov SOUND, offset <mysound>
 
49
;; call _play_sound
 
50
 
 
51
;; Function arg:
 
52
SOUND dw 0 ;The adress of the sound to play.
 
53
 
 
54
 
 
55
_play_sound:
 
56
 
 
57
;Backup registers
 
58
push ax
 
59
push bx
 
60
push cx
 
61
push dx
 
62
 
 
63
;Turn speaker on
 
64
mov  dx, 0x61
 
65
in   al, dx
 
66
or   al, 0x03
 
67
out  dx, al
 
68
 
 
69
;Sound loop
 
70
mov bx, SOUND
 
71
mov dx, 0
 
72
 
 
73
sound_loop:
 
74
    ;Play sound
 
75
    mov ax, [bx]
 
76
    or  ax, 3
 
77
    out 0x42, al ;output low
 
78
    xchg ah, al
 
79
    out 0x42, al ;output high
 
80
 
 
81
    ;Point to the next field (duration)
 
82
    inc bx
 
83
    inc bx
 
84
 
 
85
    ;Sleep during the given duration
 
86
    push ax
 
87
    mov cx, [bx]
 
88
    mov ah, 0x86
 
89
    int 0x15
 
90
    pop ax
 
91
 
 
92
    ;Point to the next field (sound)
 
93
    inc bx
 
94
    inc bx
 
95
 
 
96
    ;Check if it is finished or not
 
97
    cmp [bx], 0
 
98
    jne sound_loop
 
99
 
 
100
;Turn speaker off
 
101
mov  dx, 0x61
 
102
in   al, dx
 
103
and  al, 0xfc
 
104
out  dx, al
 
105
 
 
106
;Restore registers
 
107
pop dx
 
108
pop cx
 
109
pop bx
 
110
pop ax
 
111
 
 
112
ret
 
113
 
 
114