Small collection of sound effects for the AVR Butterfly using assembler. Program is approx 210 bytes.
;----------------------------------------------------------;
; SOUNDZ - SMALL COLLECTION OF SOUND EFFECTS FOR BUTTERFLY ;
; DJ DOREY (RETRODAN) 09-OCT-09 ;
;----------------------------------------------------------;
.NOLIST
.INCLUDE "M169DEF.INC" ;BUTTERFLY DEFS
.LIST
;---------------------------------:
; RENAME/DEFINE WORKING REGISTERS ;
;---------------------------------;
.DEF A = R16 ;R16:R31 CAN BE LOADED IMMEDIATE (LDI)
.DEF AH = R17
.DEF B = R18
.DEF C = R19
.DEF D = R20
.DEF I = R21
.DEF J = R22
.DEF K = R23
.DEF L = R24
.DEF N = R25
.ORG $0000
RJMP RESET
RESET: JMP INIT
MAIN:
MLUPE: RCALL CHIRP ;A BIRD CHIRP
RCALL PAUSE
RCALL WHIT ;A WHISTLE SOUND
RCALL PAUSE
RCALL DEWEDO ;A DEW-EE-DEW SOUND
RCALL PAUSE
RCALL WOLFW ;A WOLF WISTLE
RCALL PAUSE
RCALL RAY1 ;A RAYGUN SOUND
RCALL PAUSE
RCALL RAY2 ;A RAYGUN SOUND
RCALL PAUSE
RCALL ALARM ;AN ALARM SOUND
RCALL PAUSE
RCALL PAUSE
RJMP MLUPE
;================= SUBROUTINES =====================
;-----------------;
; INITIALIZATIONS ;
;-----------------;
INIT: LDI A,HIGH(RAMEND) ;SETUP THE STACK POINTER
OUT SPH,A ;AT TOP OF MEMORY AND
LDI A,LOW(RAMEND) ;GROW DOWNWARDS
OUT SPL,A
LDI A,128 ;SET CLOCK SPEED
STS CLKPR,A
LDI A,2 ;0=8MHz 1=4MHz 2=2MHz 3=1MHz
STS CLKPR,A ;BUTTERFLY RUNS AT 2MHZ OUT-OF-THE-BOX
JMP MAIN
;---------------;
; SOUND EFFECTS ;
;---------------;
ALARM: PUSH N
LDI N,16
ALARML: RCALL WEEOH
DEC N
BRNE ALARML
POP N
RET
RAY1: PUSH N
LDI N,16
RAY1L: RCALL CHIRP
DEC N
BRNE RAY1L
POP N
RET
RAY2: PUSH N
LDI N,16
RAY2L: RCALL WHIT
DEC N
BRNE RAY2L
POP N
RET
WOLFW: RCALL WEEOH
RCALL DEWIT
RET
DEWEDO: RCALL DEWIT
RCALL WEEOH
RET
WEEOH: RCALL WHIT
RCALL CHIRP
RET
DEWIT: RCALL CHIRP
RCALL WHIT
RET
;------------------------------------------------;
; NO RESTORE CHIRP ROUTINE, USES THE R0 REGISTER ;
;------------------------------------------------;
CHIRP: CLR R0
SBI DDRB,5 ;SET PORTB-BIT5 FOR OUTPUT
CLUPE: SBI PORTB,5 ;SET PORTB-BIT5
RCALL CPAUSE ;WAIT
CBI PORTB,5 ;CLEAR BORTB-BIT5
RCALL CPAUSE ;WAIT
DEC R0
BRNE CLUPE ;LOOP AROUND
RET
CPAUSE: PUSH R0 ;PAUSE TWEEN PULSES
CPLUPE: INC R0 ;IE DETERMINS FREQ
BRNE CPLUPE
POP R0
RET
;-----------------------------------------------;
; NO RESTORE WHIT ROUTINE, USES THE R0 REGISTER ;
;-----------------------------------------------;
WHIT: CLR R0
SBI DDRB,5 ;SET PORTB-BIT5 FOR OUTPUT
WHLUPE: SBI PORTB,5 ;SET PORTB-BIT5
RCALL WPAUSE ;WAIT
CBI PORTB,5 ;CLEAR BORTB-BIT5
RCALL WPAUSE ;WAIT
DEC R0
BRNE WHLUPE ;LOOP AROUND
RET
WPAUSE: PUSH R0 ;PAUSE TWEEN PULSES
WPLUPE: DEC R0 ;IE DETERMINS FREQ
BRNE WPLUPE
POP R0
RET
;-----------------------------------;
; PAUSE/DELAY ROUTINE ;
; USES R0:R1 - NOT RESTORED ;
; WARNING R0:R1 ARE NOT INITIALIZED ;
; USES A - RESTORED ;
;-----------------------------------;
PAUSE:
DELAY: CLR R0
CLR R1
PUSH A
LDI A,24
DLUPE: DEC R0
BRNE DLUPE
DEC R1
BRNE DLUPE
DEC A
BRNE DLUPE
POP A
RET