; Justice Unlimited Gadget Microcode
; (C) 2004 Nathan (Acorn) Pooley
;
; gsound.inc
;
;@DOC@ code make noise
;
;############################################
;############### SOUND ######################
;############################################
;
; IMPORTANT NOTE: SOUNDS MUST BE SHORTER THAN 1 SEC OR
; TIME CAN BE LOST!!!
;
; CALLING SOUND TURNS OFF SPINNER & LIGHT!!!
;
snd_begin:
call input_disable
LIGHT_OFF
call reset_sleep_time
DISABLE_INTR
return
snd_end:
SOUND_OFF
ENABLE_INTR
goto reset_sleep_time
call input_enable
; N = v_snd_val
; A = v_snd_duration1
; B = v_snd_duration2
; P = period (cycles)
; E = delay
; D = duration
;
; P = 3N + 4
; E = P(A-1)+11
; D = BE
snd_n:
rcall snd_begin ; BEGIN SOUND
snd_n_c:
movf v_snd_duration2,w ; LOOP C - v_snd_duration2
movwf v_tmp ;
snd_n_b: ;
SOUND_CLICK ; ; LOOP B - v_snd_duration1
movf v_snd_val,w ; ;
snd_n_a: ; ;
decfsz WREG,w ; ; ; LOOP A - v_snd_val
bra snd_n_a ; ; ;
decfsz v_tmp ; ; ;
bra snd_n_b ; ;
decfsz v_snd_duration1,f ;
bra snd_n_c ;
bra snd_end ; END SOUND
; P = 6
; E = P(A-1)+12
; D = BE
snd_6:
rcall snd_begin ; BEGIN SOUND
snd_6_c:
movf v_snd_duration2,w ; LOOP C - v_snd_duration2
movwf v_tmp ;
snd_6_b: ;
SOUND_CLICK ; ; LOOP B - v_snd_duration1
movf v_snd_val,w ; ;
snd_6_a: ; ;
nop
decfsz v_tmp,f ; ; ;
bra snd_6_b ; ;
nop
SOUND_CLICK
decfsz v_snd_duration1,f ;
bra snd_6_c ;
bra snd_end ; END SOUND
; P = 5
; E = P(A-1)+15
; D = BE
snd_5:
rcall snd_begin ; BEGIN SOUND
snd_5_c:
movf v_snd_duration2,w ; LOOP C - v_snd_duration2
SOUND_CLICK
movwf v_tmp ;
nop
nop
nop
snd_5_b: ;
SOUND_CLICK ; ; LOOP B - v_snd_duration1
movf v_snd_val,w ; ;
snd_5_a: ; ;
decfsz v_tmp,f ; ; ;
bra snd_5_b ; ;
nop
SOUND_CLICK
decfsz v_snd_duration1,f ;
bra snd_5_c ;
bra snd_end ; END SOUND
; P = 4
; E = P(A-1)+12
; D = BE
snd_4:
rcall snd_begin ; BEGIN SOUND
snd_4_c:
SOUND_CLICK
movf v_snd_duration2,w ; LOOP C - v_snd_duration2
movwf v_tmp ;
nop
snd_4_b: ;
SOUND_CLICK ; ; LOOP B - v_snd_duration1
snd_4_a: ; ;
decfsz v_tmp,f ; ; ;
bra snd_4_b ; ;
nop
SOUND_CLICK
decfsz v_snd_duration1,f ;
bra snd_4_c ;
bra snd_end ; END SOUND
; P = 3
; E = 6(A-1)+12
; D = BE
snd_3:
rcall snd_begin ; BEGIN SOUND
snd_3_c:
SOUND_CLICK
movf v_snd_duration2,w ; LOOP C - v_snd_duration2
movwf v_tmp ;
snd_3_b: ;
SOUND_CLICK ; ; LOOP B - v_snd_duration1
snd_3_a: ; ;
decf v_tmp,f ; ; ;
nop
SOUND_CLICK
bnz snd_3_b ; ;
decf v_snd_duration1,f ;
SOUND_CLICK
bnz snd_3_c ;
bra snd_end ; END SOUND
; P = 2
; E = 17(A-1)+25
; D = BE
snd_2:
rcall snd_begin ; BEGIN SOUND
snd_2_c:
SOUND_CLICK
movf v_snd_duration2,w ; LOOP C - v_snd_duration2
SOUND_CLICK
movwf v_tmp ;
snd_2_b: ;
SOUND_CLICK ; ; LOOP B - v_snd_duration1
nop
SOUND_CLICK
nop
SOUND_CLICK
nop
SOUND_CLICK
nop
SOUND_CLICK
nop
SOUND_CLICK
nop
SOUND_CLICK
snd_2_a: ; ;
decf v_tmp,f ; ; ;
SOUND_CLICK
bnz snd_2_b ; ;
SOUND_CLICK
decf v_snd_duration1,f ;
SOUND_CLICK
bnz snd_2_c ;
bra snd_end ; END SOUND
; P = 1
; E = 19(A-1)+55
; D = BE
snd_1:
rcall snd_begin ; BEGIN SOUND
snd_1_c:
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
movf v_snd_duration2,w ; LOOP C - v_snd_duration2
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
movwf v_tmp ;
snd_1_b: ;
SOUND_CLICK ; ; LOOP B - v_snd_duration1
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
snd_1_a: ; ;
decf v_tmp,f ; ; ;
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
bnz snd_1_b ; ;
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
decf v_snd_duration1,f ;
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
SOUND_CLICK
bnz snd_1_c ;
bra snd_end ; END SOUND
PLAY_SOUND macro val,d1,d2,sfunc
call putc_clr
movlw val
call putnum_w
movlw val
movwf v_snd_val
movlw d1
movwf v_snd_duration1
movlw d2
movwf v_snd_duration2
rcall sfunc
endm
PLAY_SOUND2 macro val,d1,d2,sfunc
movlw val
movwf v_snd_val
movlw d1
movwf v_snd_duration1
movlw d2
movwf v_snd_duration2
rcall sfunc
endm
snd_hi_l:
snd_many:
PLAY_SOUND 0x1c,0x03,0x16,snd_n
PLAY_SOUND 0x1b,0x31,0x01,snd_n
PLAY_SOUND 0x1a,0x08,0x07,snd_n
PLAY_SOUND 0x19,0x35,0x01,snd_n
PLAY_SOUND 0x18,0x05,0x0d,snd_n
PLAY_SOUND 0x17,0x39,0x01,snd_n
PLAY_SOUND 0x16,0x1e,0x02,snd_n
PLAY_SOUND 0x15,0x3e,0x01,snd_n
PLAY_SOUND 0x14,0x41,0x01,snd_n
PLAY_SOUND 0x13,0x44,0x01,snd_n
PLAY_SOUND 0x12,0x24,0x02,snd_n
PLAY_SOUND 0x11,0x26,0x02,snd_n
PLAY_SOUND 0x10,0x02,0x41,snd_n
PLAY_SOUND 0x0f,0x06,0x10,snd_n
PLAY_SOUND 0x0e,0x06,0x11,snd_n
PLAY_SOUND 0x0d,0x60,0x01,snd_n
PLAY_SOUND 0x0c,0x03,0x2d,snd_n
PLAY_SOUND 0x0b,0x0d,0x09,snd_n
PLAY_SOUND 0x0a,0x02,0x5b,snd_n
PLAY_SOUND 0x09,0x85,0x01,snd_n
PLAY_SOUND 0x08,0x02,0x69,snd_n
PLAY_SOUND 0x07,0x08,0x16,snd_n
PLAY_SOUND 0x06,0x2f,0x04,snd_n
PLAY_SOUND 0x05,0xd8,0x01,snd_n
PLAY_SOUND 0x04,0x14,0x0d,snd_n
PLAY_SOUND 0x03,0x0a,0x20,snd_n
PLAY_SOUND 0x02,0x18,0x11,snd_n
PLAY_SOUND 0x01,0x24,0x10,snd_n
PLAY_SOUND 0x00,0x3d,0x0b,snd_6
PLAY_SOUND 0x00,0x73,0x07,snd_5
PLAY_SOUND 0x00,0xfe,0x04,snd_4
PLAY_SOUND 0x00,0x3d,0x0b,snd_3
PLAY_SOUND 0x00,0x78,0x02,snd_2
PLAY_SOUND 0x00,0x34,0x04,snd_1
bra snd_done
snd_med_l:
movlw mode_snd_med_msg
call set_mode
call reset_sleep_time
movlw 32 ; approx 5 sec
movwf v_tmp2
snd_med_loop1:
btg disab_sound ; outer loop = 1280+7=1287 cycles
clrf v_tmp
snd_med_loop2:
btg disab_sound ; inner loop: 5*256 = 1280 cycles
decf v_tmp,f
btg disab_sound
bnz snd_med_loop2
btg disab_sound
decf v_tmp2
btg disab_sound
bnz snd_med_loop1
bra snd_done
snd_lo_l:
movlw mode_snd_lo_msg
call set_mode
call reset_sleep_time
movlw 27 ; approx 5 sec
movwf v_tmp2
snd_lo_loop1:
btg disab_sound ; outer loop = 1536+7=1543 cycles
clrf v_tmp
nop
nop
snd_lo_loop2:
nop
nop
btg disab_sound ; inner loop: 6*256 = 1536 cycles
decf v_tmp,f
bnz snd_lo_loop2
decf v_tmp2
bnz snd_lo_loop1
;bra snd_done
snd_done:
SOUND_OFF
call reset_sleep_time
goto pop_mode
snd_click:
movlw 20 ; duration
movwf v_tmp ;
DISABLE_INTR
snd_click_b: ;
SOUND_CLICK
snd_click_a: ; ;
decfsz v_tmp,f ; ; ;
bra snd_4_b ; ;
SOUND_OFF
ENABLE_INTR
return
snd_err1:
PLAY_SOUND2 0x11,0x26,0x01,snd_n
bra snd_done
snd_good:
PLAY_SOUND 0x00,0x73,0x04,snd_5
bra snd_done
|
This file Copyright (C) 2004 by Nathan (Acorn) Pooley
Go to DRUID Development page
Go to DRUID page
Go to JU Gadgets page
Go to Justice Unlimited homepage
Go to Acorn's personal webpage
Contact Acorn
See comments from others
Post your own comments
File created by do_doc at Wed Aug 4 17:56:21 2004