Skip to content

Instantly share code, notes, and snippets.

@jason2506
Created October 5, 2012 15:19
Show Gist options
  • Save jason2506/3840440 to your computer and use it in GitHub Desktop.
Save jason2506/3840440 to your computer and use it in GitHub Desktop.
APORT3 EQU 03FD0H
BPORT3 EQU 03FD2H
CPORT3 EQU 03FD4H
CNT3 EQU 03FD6H
FND EQU 03FF0H
IR_WR EQU 0FFC1H
IR_RD EQU 0FFC3H
DR_WR EQU 0FFC5H
RAME EQU 0EFFFH
FLAG EQU RAME-0FFFH
DATA79 EQU 0FFE8H
CNTR79 EQU 0FFEAH
CODE SEGMENT
ASSUME CS:CODE, DS:CODE
ORG 0
START: MOV SP, RAME ; initialize stack pointer
MOV AX, CS ; set DS = CS
MOV DS, AX
MOV CURRENT, 0 ; initialize current song
; =============== BEGIN / SONG SELECTION ===============
START_SELECTION:
MOV AL, CURRENT ; display current song in 7-segment display
MOV BX, OFFSET FONT
MOV DX, FND
XLAT
OUT DX, AL
MOV BX, OFFSET SELECT_MSG ; display music selection message
CALL DISPLAY_STATUS
CALL READY_TO_PRESS
CALL CHECK_SELECTION
CALL SOUNDLESS
JMP START_SELECTION
SELECT_NEXT:
CMP CURRENT, 9
JZ SET_ZERO
INC CURRENT
RET
SET_ZERO: MOV CURRENT, 0
RET
SELECT_PREVIOUS:
CMP CURRENT, 0
JZ SET_NINE
DEC CURRENT
RET
SET_NINE: MOV CURRENT, 9
RET
CHECK_SELECTION:
CMP AL, 0AH ; if press '0' to '9', then select song
JL SELECT_SONG
CMP AL, 0EH ; if press 'E', then exit
JZ CHANGE_TO_PIANO_MODE
CMP AL, 0FH ; if press 'F', then exit
JZ EXIT
CMP AL, 10H ; if press '.', then play selected song
JZ PLAY_SELECTED
CMP AL, 12H ; if press '-', then select previous song
JZ SELECT_PREVIOUS
CMP AL, 13H ; if press '+', then select next song
JZ SELECT_NEXT
RET ; return to song selection loop
SELECT_SONG:
MOV CURRENT, AL ; record current selected song
RET ; return to song selection loop
EXIT: MOV BX, OFFSET BYE_MSG ; display exit message
CALL LCD_OUT_LINE1
MOV AH, 4CH
INT 21H
PLAY_SELECTED:
MOV BX, OFFSET PLAY_MSG ; display playing message
CALL DISPLAY_STATUS
MOV AL, 2 ; calculate address offset of song data
MUL CURRENT
MOV BX, OFFSET SONG_RHYPHM ; assign song rhyphm
ADD BX, AX
MOV SI, FLAG
MOV BX, [BX]
MOV [SI], BX
MOV BX, OFFSET SONG_DATA ; assign address of song scale
ADD BX, AX
MOV BX, [BX]
SUB BX, BP
CALL PLAY
RET
DISPLAY_CURRENT_SONG:
MOV BX, OFFSET SONG_NAME ; display name of current song in LCD
MOV AL, 17
MUL CURRENT
ADD BX, AX
CALL NEXT_LINE
CALL STRINGL
RET
DISPLAY_STATUS:
CALL LCD_OUT_LINE1 ; output message that pointed by BX in LCD
CALL DISPLAY_CURRENT_SONG
MOV AH, 4CH
RET
; =============== SONG SELECTION / PIANO MODE ===============
CHANGE_TO_PIANO_MODE:
MOV BX, OFFSET PIANO_MSG ; display exit message
CALL LCD_OUT_LINE1
MOV AH, 4CH
JMP START_PIANO_MODE
BREAK_PIANO_MODE:
RET ; return to song selection mode
START_PIANO_MODE:
MOV DX, CNTR79
IN AL, DX
TEST AL, 7 ; if there has no key pressed, then return
JZ PIANO_MODE
MOV DX, DATA79
IN AL, DX
CMP AL, 0EH ; if press 'E', then change to song selection mode
JZ BREAK_PIANO_MODE
CMP AL, 0FH ; if press 'F', then exit
JZ EXIT
PIANO_MODE: CALL SOUNDLESS
MOV DX, APORT3
IN AL, DX
NOT AL
TEST AL, 80H ; check which button is pressed
JNZ PLAY_DO
TEST AL, 40H
JNZ PLAY_RE
TEST AL, 20H
JNZ PLAY_MI
TEST AL, 10H
JNZ PLAY_FA
TEST AL, 08H
JNZ PLAY_SOL
TEST AL, 04H
JNZ PLAY_RA
TEST AL, 02H
JNZ PLAY_SY
TEST AL, 01H
JNZ PLAY_DO_H
JMP START_PIANO_MODE
PLAY_DO: MOV BX, OFFSET DO
JMP PLAY_SCALE
PLAY_RE: MOV BX, OFFSET RE
JMP PLAY_SCALE
PLAY_MI: MOV BX, OFFSET MI
JMP PLAY_SCALE
PLAY_FA: MOV BX, OFFSET FA
JMP PLAY_SCALE
PLAY_SOL: MOV BX, OFFSET SOL
JMP PLAY_SCALE
PLAY_RA: MOV BX, OFFSET RA
JMP PLAY_SCALE
PLAY_SY: MOV BX, OFFSET SY
JMP PLAY_SCALE
PLAY_DO_H: MOV BX, OFFSET DO_H
JMP PLAY_SCALE
PLAY_SCALE: MOV SI, FLAG
MOV [SI], 400H
CALL PLAY
JMP START_PIANO_MODE
; =============== PIANO MODE / LCD DISPLAY ===============
LCD_OUT_LINE1:
CALL ALLCLR
CALL STRINGL
RET
ALLCLR: PUSH AX
MOV AH, 1
JMP LCD_OUT
NEXT_LINE: PUSH AX
MOV AH, 0C0H
JMP LCD_OUT
LCD_OUT: PUSH DX
CALL BUSY
MOV DX, IR_WR
MOV AL, AH
OUT DX, AL
POP DX
POP AX
RET
STRINGL: PUSH BP
MOV BP, BX ; transfer address point to message to BP
JMP STRINGL0
STRINGL0: CMP CS:BYTE PTR [BP], '$' ; if current character is '$', then return
JZ STRINGL1
MOV AH, CS:[BP]
CALL OUTL
INC BP ; increase BP to get the address of next character
JMP STRINGL0
STRINGL1: POP BP
RET
OUTL: PUSH DX
PUSH AX
CALL BUSY
MOV AL, AH
MOV DX, DR_WR
OUT DX, AL
POP AX
POP DX
RET
DEL2: PUSH CX
MOV CX, 0FFFH
LOOP $
POP CX
RET
BUSY: PUSH DX
PUSH AX
MOV DX, IR_RD
BUSY1: IN AL, DX
AND AL, 80H
JNZ BUSY1
POP AX
POP DX
RET
; =============== LCD DISPLAY / PRESS INTERRUPT ===============
READY_TO_PRESS:
MOV DX, CNTR79
WAITING_FOR_PRESS:
IN AL, DX ; wait until some key be pressed
TEST AL, 7
JZ WAITING_FOR_PRESS
MOV DX, DATA79
IN AL, DX
RET
; =============== PRESS INTERRUPT / PLAY SONG ===============
PLAY: CALL CHECK_INT ; check whether there has some key be pressed
MOV AL, [BX] ; transfer musical scale data to AL
PUSH AX ; turn on the LED correspond to the musical scale
CALL GET_CODE
MOV DX, BPORT3
OUT DX, AL
POP AX
INC BX
MOV CH, [BX] ; transfer rhythm data to CH
AND CH, CH ; if CH == 00H, then return
JZ RETURN
MOV CL, AL
INC AL
JZ J208
PUSH BX ; store address of assigned data
CALL J202
POP BX ; return address of assigned data
J201: INC BX
JMP PLAY
J202: MOV BX, [SI] ; transfer basic rhythm data to BX
J203: MOV AH, CL
MOV AL, 0FFH
MOV DX, CPORT3
OUT DX, AL
J204: DEC BX
MOV AL, BH
AND AL, AL
JNZ J205
MOV BX, [SI] ; transfer basic rhythm data to BX
DEC CH
JZ RETURN
J205: DEC AH
JNZ J204
MOV AH, CL
MOV AL, 00H
OUT DX, AL
DEC BX
J206: MOV AL, BH
AND AL, AL
JNZ J207
MOV BX, [SI] ; transfer basic rhythm data to BX
DEC CH
JZ RETURN
J207: DEC AH
JNZ J206
JMP J203
J208: PUSH BX ; store address of assigned data
MOV BX, [SI] ; transfer basic rhythm data to BX
J209: MOV AH, CL
J210: DEC BX
MOV AL, BH
AND AL, AL
JNZ J211
MOV BX, [SI] ; transfer basic rhythm data to BX
DEC CH
JZ J212
J211: DEC AH
JNZ J210
JMP J209
J212: POP BX ; return address of assigned data
JMP J201
SOUNDLESS: MOV DX, CPORT3
MOV AL, 00H
OUT DX, AL
RET
RETURN: RET
; =============== PLAY SONG / PLAYING CONTROL ===============
CHECK_INT: MOV DX, CNTR79
IN AL, DX
TEST AL, 7 ; if there has no key pressed, then return
JZ RETURN
MOV DX, DATA79
IN AL, DX
CMP AL, 10H ; if press '.', then pause
JZ PAUSE
CMP AL, 11H ; if press ',', then stop
JZ STOP
RET
PAUSE: CALL SOUNDLESS
PUSH BX
MOV BX, OFFSET PAUSE_MSG ; display pause message
CALL DISPLAY_STATUS
POP BX
PAUSE_LOOP: CALL READY_TO_PRESS
CMP AL, 10H ; if press '.', then continue playing
JZ CONTINUE
CMP AL, 11H ; if press ',', then stop
JZ STOP
JMP PAUSE_LOOP
CONTINUE: PUSH BX
MOV BX, OFFSET PLAY_MSG ; display playing message
CALL DISPLAY_STATUS
POP BX
RET
STOP: MOV BX, OFFSET SONG_END
RET
; =============== PLAYING CONTROL / GET LIGHT CODE ===============
GET_CODE: CMP AL, 0 ; map musical scale data to LCD light code
JZ RETURN
CMP AL, 15H
JLE RECORD_RE
CMP AL, 19H
JLE RECORD_DO
CMP AL, 1BH
JLE RECORD_SY
CMP AL, 1EH
JLE RECORD_RA
CMP AL, 22H
JLE RECORD_SOL
CMP AL, 26H
JLE RECORD_FA
CMP AL, 28H
JLE RECORD_MI
CMP AL, 2DH
JLE RECORD_RE
CMP AL, 33H
JLE RECORD_DO
CMP AL, 36H
JLE RECORD_SY
CMP AL, 3CH
JLE RECORD_RA
CMP AL, 44H
JLE RECORD_SOL
CMP AL, 4CH
JLE RECORD_FA
CMP AL, 50H
JLE RECORD_MI
CMP AL, 5AH
JLE RECORD_RE
CMP AL, 66H
JLE RECORD_DO
CMP AL, 6CH
JLE RECORD_SY
CMP AL, 78H
JLE RECORD_RA
CMP AL, 88H
JLE RECORD_SOL
RECORD_DO: MOV AL, 10000001B
RET
RECORD_RE: MOV AL, 01000000B
RET
RECORD_MI: MOV AL, 00100000B
RET
RECORD_FA: MOV AL, 00010000B
RET
RECORD_SOL: MOV AL, 00001000B
RET
RECORD_RA: MOV AL, 00000100B
RET
RECORD_SY: MOV AL, 00000010B
RET
; =============== GET LIGHT CODE / SONG DATA ===============
SONG_END DB 00H,00H
STAR DB 66H,08H,66H,08H,44H,08H,44H,08H
DB 3CH,08H,3CH,08H,44H,10H
DB 4CH,08H,4CH,08H,50H,08H,50H,08H
DB 5AH,08H,5AH,08H,66H,10H
DB 44H,08H,44H,08H,4CH,08H,4CH,08H
DB 50H,08H,50H,08H,5AH,10H
DB 44H,08H,44H,08H,4CH,08H,4CH,08H
DB 50H,08H,50H,08H,5AH,10H
DB 66H,08H,66H,08H,44H,08H,44H,08H
DB 3CH,08H,3CH,08H,44H,10H
DB 4CH,08H,4CH,08H,50H,08H,50H,08H
DB 5AH,08H,5AH,08H,66H,10H
DB 00H,00H
HANS DB 44H,08H,50H,08H,50H,10H
DB 4CH,08H,5AH,08H,5AH,10H
DB 66H,08H,5AH,08H,50H,08H,4CH,08H
DB 44H,08H,44H,08H,44H,10H
DB 44H,08H,50H,08H,50H,10H
DB 4CH,08H,5AH,08H,5AH,10H
DB 66H,08H,50H,08H,44H,08H,44H,08H
DB 50H,20H
DB 5AH,08H,5AH,08H,5AH,08H,5AH,08H
DB 5AH,08H,50H,08H,4CH,10H
DB 50H,08H,50H,08H,50H,08H,50H,08H
DB 50H,08H,4CH,08H,44H,10H
DB 44H,08H,50H,08H,50H,10H
DB 4CH,08H,5AH,08H,5AH,10H
DB 66H,08H,50H,08H,44H,08H,44H,08H
DB 66H,20H
DB 00H,00H
SUN DB 44H,06H,4CH,06H,50H,06H,5AH,0CH
DB 66H,0CH
DB 66H,06H,5AH,06H,50H,06H,66H,06H
DB 6CH,0CH,78H,13H
DB 6CH,06H,66H,06H,5AH,06H,6CH,06H
DB 78H,06H,78H,13H,6CH,06H,66H,06H
DB 5AH,06H,78H,06H,88H,06H,88H,13H
DB 44H,06H,4CH,06H,50H,06H,5AH,0CH
DB 66H,0CH
DB 66H,06H,5AH,06H,50H,06H,66H,06H
DB 6CH,0CH,78H,13H
DB 4CH,06H,50H,06H,5AH,06H,44H,06H
DB 50H,06H,5AH,06H,66H,06H,5AH,13H
DB 50H,06H,5AH,06H,66H,13H,33H,06H
DB 33H,06H,36H,06H
DB 44H,0CH,44H,13H,36H,06H,36H,06H
DB 3CH,06H,4CH,1EH,36H,06H,36H,06H
DB 3CH,06H,4CH,0CH,4CH,13H
DB 5AH,06H,50H,06H,4CH,06H,44H,1EH
DB 44H,06H,40H,1EH,4CH,06H,33H,06H
DB 40H,06H
DB 44H,0CH,44H,13H,50H,06H,5AH,06H
DB 66H,06H,44H,1EH,50H,06H,5AH,06H
DB 66H,06H,66H,20H
DB 00H,00H
BIRTHDAY DB 66H,06H,66H,06H,5AH,0CH,66H,0CH
DB 4CH,0CH,50H,18H
DB 66H,06H,66H,06H,5AH,0CH,66H,0CH
DB 44H,0CH,4CH,18H
DB 66H,06H,66H,06H,33H,0CH,3CH,0CH
DB 4CH,0CH,50H,0CH,5AH,18H
DB 39H,06H,39H,06H,3CH,0CH,4CH,0CH
DB 44H,0CH,4CH,18H
DB 00H,00H
WALTZ DB 40H,06H,44H,03H,40H,03H,33H,03H
DB 39H,03H,44H,03H,40H,03H,39H,03H
DB 40H,03H,33H,03H,39H,03H
DB 44H,03H,40H,03H,33H,03H,39H,03H
DB 44H,03H,40H,03H,33H,03H,39H,03H
DB 44H,03H,40H,03H,33H,03H,39H,03H
DB 0C0H,03H,40H,03H,33H,03H
DB 39H,03H,44H,03H,40H,03H,98H,03H
DB 39H,03H,44H,03H,40H,03H,33H,03H
DB 39H,03H,0C0H,03H,40H,03H,33H,03H
DB 39H,03H,44H,03H,40H,03H,98H,03H
DB 33H,03H,30H,03H,2AH,03H,26H,03H
DB 24H,03H,80H,03H,1CH,06H,20H,03H
DB 24H,03H,26H,03H,0ACH,03H,2AH,02H
DB 0FFH,01H,2AH,01H,26H,01H,2AH,01H
DB 2DH,03H,2AH,03H,80H,03H,1CH,06H
DB 20H,03H,24H,03H,26H,03H,80H,03H
DB 2AH,01H,26H,01H,2AH,01H,2DH,03H
DB 2AH,03H,26H,03H,39H,03H,0C0H,03H
DB 44H,03H,33H,03H,39H,03H,44H,03H
DB 40H,03H,98H,03H,39H,03H,44H,03H
DB 40H,03H,33H,03H,39H,03H,0C0H,03H
DB 40H,03H,33H,03H,39H,03H,44H,03H
DB 40H,03H,98H,03H,33H,03H,30H,03H
DB 2AH,03H,26H,03H,24H,03H,80H,03H
DB 1CH,06H,20H,03H,24H,03H,26H,03H
DB 0ACH,03H,2AH,02H,0FFH,01H,2AH,01H
DB 26H,01H,2AH,01H,2DH,03H,2AH,06H
DB 80H,03H,1CH,06H,20H,03H,24H,03H
DB 26H,03H,80H,03H,26H,03H,2AH,03H
DB 2DH,03H,2AH,03H,28H,03H
DB 0F0H,02H,24H,02H,26H,02H,28H,03H
DB 26H,03H,20H,03H,24H,03H,0E4H,03H
DB 24H,03H,26H,03H,28H,03H,26H,03H
DB 1CH,03H,0CCH,02H,1CH,02H,20H,02H
DB 22H,03H,20H,03H,19H,03H,1CH,03H
DB 0C0H,03H,1CH,03H,20H,03H,22H,03H
DB 20H,03H,18H,03H,90H,03H,1CH,03H
DB 20H,03H,24H,03H,26H,03H,2AH,03H
DB 80H,03H,33H,03H,39H,03H,40H,03H
DB 48H,03H,4CH,03H,56H,03H,60H,03H
DB 66H,03H,56H,03H,39H,03H,40H,03H
DB 0C0H,03H,40H,03H,39H,03H,33H,03H
DB 30H,03H,2AH,03H,66H,02H,24H,02H
DB 26H,02H,28H,03H,26H,03H,20H,03H
DB 24H,03H,72H,03H,24H,03H,26H,03H
DB 28H,03H,26H,03H,1CH,03H,66H,02H
DB 1CH,02H,20H,02H,22H,03H,20H,03H
DB 19H,03H,1CH,03H,60H,03H,1CH,03H
DB 20H,03H,22H,03H,20H,03H,13H,03H
DB 90H,03H,18H,03H,19H,03H,1CH,03H
DB 20H,03H,24H,03H,80H,03H,2AH,03H
DB 30H,03H,33H,03H,39H,03H,40H,03H
DB 3CH,03H,33H,03H,39H,03H,4CH,03H
DB 48H,03H,66H,03H,60H,0CH,0FFH,06H
DB 80H,03H,40H,09H,56H,06H,40H,0CH
DB 50H,06H,0C0H,03H,40H,09H,4CH,06H
DB 80H,03H,26H,08H,0FFH,01H,26H,03H
DB 0ACH,03H,26H,09H,39H,06H,80H,03H
DB 26H,09H,33H,06H,0C0H,03H,2AH,09H
DB 30H,03H,98H,02H,33H,04H,2AH,04H
DB 30H,04H,39H,04H,0CCH,03H,40H,09H
DB 56H,06H,80H,03H,40H,09H,50H,06H
DB 0C0H,03H,40H,09H,4CH,06H,0D8H,03H
DB 26H,0FH,0CCH,03H,33H,03H,36H,06H
DB 33H,06H,0CCH,03H,20H,03H,39H,06H
DB 22H,06H,98H,03H,3CH,03H,24H,06H
DB 40H,06H,26H,06H,4CH,06H,39H,06H
DB 0CCH,03H,40H,09H,56H,06H,80H,03H
DB 40H,09H,50H,06H,0C0H,03H,40H,09H
DB 4CH,06H,80H,03H,26H,08H,0FFH,01H
DB 26H,06H,0ACH,03H,26H,09H,39H,06H
DB 80H,03H,26H,09H,33H,06H,0C0H,03H
DB 2AH,03H,30H,06H,33H,06H,98H,03H
DB 2AH,03H,30H,09H,39H,03H,0CCH,03H
DB 40H,09H,56H,06H,80H,03H,40H,09H
DB 50H,06H,0D8H,03H,40H,09H,4CH,06H
DB 0E4H,03H,26H,0FH,0ACH,03H,26H,09H
DB 36H,06H,2AH,0CH,3CH,06H,0C0H,03H
DB 2AH,03H,40H,06H,2DH,06H,26H,06H
DB 2AH,06H,20H,06H
DB 40H,03H,39H,03H,40H,03H,39H,03H
DB 40H,03H,39H,03H,0FFH,12H,00H,00H
YESTERDAY DB 0FFH,08H,3CH,04H,36H,04H,30H,04H
DB 2DH,04H,28H,04H,26H,04H
DB 28H,08H,2DH,04H,2DH,14H
DB 0FFH,08H,2DH,04H,2DH,04H,33H,04H
DB 39H,04H,3CH,04H,44H,04H
DB 39H,08H,3CH,04H,3CH,0CH,44H,08H
DB 4CH,08H,3CH,04H,44H,0CH,5AH,08H
DB 4CH,08H,3CH,04H,3CH,0CH,0FFH,08H
DB 44H,04H,4CH,04H,4CH,18H
DB 0FFH,08H,3CH,04H,36H,04H,30H,04H
DB 2DH,04H,28H,04H,26H,04H
DB 28H,08H,2DH,04H,2DH,18H
DB 0FFH,08H,2DH,04H,2DH,04H,33H,04H
DB 39H,04H,3CH,04H,44H,04H
DB 39H,08H,3CH,04H,3CH,0CH,44H,08H
DB 4CH,08H,3CH,04H,44H,0CH,5AH,08H
DB 4CH,08H,3CH,04H,3CH,0CH,0FFH,08H
DB 3CH,10H,3CH,10H
DB 2DH,08H,28H,08H,26H,08H,28H,04H,2DH,04H
DB 28H,0CH,2DH,04H,33H,08H,2DH,08H
DB 3CH,18H,0FFH,08H
DB 28H,0CH,2DH,04H,33H,08H,28H,08H
DB 26H,18H,0FFH,08H
DB 44H,04H,4CH,04H,4CH,18H
DB 0FFH,08H,3CH,04H,36H,04H,30H,04H,2DH,04H
DB 28H,04H,26H,04H
DB 28H,08H,2DH,04H,2DH,18H
DB 0FFH,08H,2DH,04H,2DH,04H,33H,04H,39H,04H
DB 3CH,04H,44H,04H
DB 39H,08H,3CH,04H,3CH,0CH,44H,08H
DB 4CH,08H,3CH,04H,44H,0CH,5AH,08H
DB 4CH,08H,3CH,04H,3CH,0CH,0FFH,08H
DB 0FFH,12H,00H,00H
CLOCK DB 88H,08H,66H,08H,6CH,04H,66H,04H
DB 5AH,08H,66H,04H,5AH,04H,50H,04H
DB 50H,04H,4CH,04H,50H,04H,78H,08H
DB 5AH,04H,5AH,04H,66H,08H,66H,04H
DB 66H,04H,6CH,08H,78H,04H,6CH,04H
DB 66H,18H
DB 88H,08H,66H,08H,6CH,04H,66H,04H
DB 5AH,08H,66H,04H,5AH,04H,50H,04H
DB 50H,04H,4CH,04H,50H,04H,78H,08H
DB 5AH,04H,5AH,04H,66H,08H,66H,04H
DB 66H,04H,6CH,08H,78H,04H,6CH,04H
DB 66H,18H
DB 66H,04H,50H,04H,44H,08H,50H,04H
DB 5AH,04H,66H,08H,6CH,04H,66H,04H
DB 5AH,04H,66H,04H,6CH,04H,78H,04H
DB 88H,08H,66H,04H,50H,04H,44H,08H
DB 50H,04H,5AH,04H,66H,08H,6CH,04H
DB 66H,04H,5AH,18H
DB 88H,08H,66H,04H,66H,04H,00H,08H
DB 5AH,0CH,00H,04H,50H,04H,50H,04H
DB 4CH,04H,50H,04H,78H,08H,5AH,04H
DB 5AH,04H,66H,10H,6CH,08H,78H,04H
DB 6CH,04H,66H,18H
DB 00H,00H
DREAM_WEDDING:
DB 3CH,08H,3CH,08H,36H,08H,36H,08H
DB 33H,08H,33H,08H,36H,08H,36H,08H
DB 3CH,08H,3CH,08H,50H,08H,50H,08H
DB 66H,08H,66H,08H,78H,08H,78H,08H
DB 44H,08H,44H,08H,4CH,08H,4CH,08H
DB 50H,08H,4CH,08H,44H,08H,4CH,30H
DB 00H,08H,4CH,08H,4CH,08H,44H,08H
DB 44H,08H,3CH,08H,3CH,08H,36H,08H
DB 36H,08H,44H,08H,44H,08H,5AH,08H
DB 5AH,08H,4CH,08H,4CH,08H,50H,08H
DB 50H,08H,5AH,08H,50H,08H,4CH,08H
DB 50H,30H
DB 50H,10H,78H,08H,66H,08H,50H,08H
DB 5AH,08H,50H,10H,78H,08H,66H,08H
DB 50H,08H,5AH,08H,50H,10H,78H,08H
DB 66H,08H,4CH,08H,50H,08H,4CH,10H
DB 78H,08H,66H,08H,4CH,08H,50H,08H
DB 4CH,10H
DB 4CH,08H,50H,08H,4CH,08H,48H,08H
DB 44H,10H,44H,08H,3CH,08H,44H,08H
DB 3CH,08H,50H,30H
DB 28H,10H,3CH,08H,33H,08H,28H,08H
DB 2DH,08H,28H,10H,3CH,08H,33H,08H
DB 28H,08H,2DH,08H,28H,10H,3CH,08H
DB 33H,08H,26H,08H,28H,08H,26H,10H
DB 3CH,08H,33H,08H,26H,08H,28H,08H
DB 26H,10H
DB 26H,08H,28H,08H,26H,08H,24H,08H
DB 22H,10H,22H,08H,1EH,08H,22H,08H
DB 1EH,08H,28H,30H
DB 33H,14H,50H,08H,50H,08H,4CH,08H
DB 4CH,14H,5AH,08H,36H,08H,3CH,08H
DB 36H,14H,5AH,08H,5AH,08H,50H,08H
DB 50H,10H,66H,08H,66H,08H,3CH,08H
DB 44H,08H,3CH,14H,66H,08H,66H,08H
DB 5AH,08H,5AH,14H,6CH,08H,50H,08H
DB 5AH,08H,50H,30H
DB 33H,10H,33H,08H,33H,08H,33H,08H
DB 2DH,08H,2DH,14H,33H,08H,36H,08H
DB 3CH,08H,44H,14H,44H,08H,3CH,08H
DB 44H,08H,50H,30H
DB 33H,10H,33H,08H,33H,08H,33H,08H
DB 2DH,08H,2DH,14H,33H,08H,36H,08H
DB 3CH,08H,44H,14H,44H,08H,3CH,08H
DB 44H,08H,3CH,30H
DB 33H,10H,33H,08H,33H,08H,33H,08H
DB 2DH,08H,2DH,14H,33H,08H,36H,08H
DB 3CH,08H,44H,14H,44H,08H,3CH,08H
DB 44H,08H,50H,30H
DB 33H,10H,33H,08H,33H,08H,33H,08H
DB 2DH,08H,2DH,14H,33H,08H,36H,08H
DB 3CH,08H,44H,14H,44H,08H,3CH,08H
DB 44H,08H,3CH,50H
DB 00H,00H
BLUE_DANUBE DB 66H,08H,50H,08H,44H,08H,44H,38H
DB 00H,08H,66H,08H,66H,08H,50H,08H
DB 44H,08H,44H,38H,00H,08H
DB 6CH,08H,6CH,08H,5AH,08H,3CH,08H
DB 3CH,38H,00H,08H,6CH,08H,6CH,08H
DB 5AH,08H,3CH,08H,3CH,38H,00H,08H
DB 66H,08H,66H,08H,50H,08H,44H,08H
DB 33H,38H,00H,08H,66H,08H,50H,08H
DB 50H,08H,44H,08H,33H,38H,00H,08H
DB 5AH,08H,5AH,08H,4CH,08H,3CH,08H
DB 3CH,20H,48H,08H,44H,08H,28H,20H
DB 33H,08H,50H,08H,50H,10H,5AH,08H
DB 3CH,10H,44H,08H,66H,08H
DB 00H,00H
XMAS DB 88H,08H,50H,08H,5AH,08H,66H,08H
DB 88H,20H
DB 88H,08H,50H,08H,5AH,08H,66H,08H
DB 78H,20H
DB 78H,08H,4CH,08H,50H,08H,5AH,08H
DB 6CH,20H
DB 44H,08H,44H,08H,4CH,08H,5AH,08H
DB 50H,10H,66H,10H
DB 88H,08H,50H,08H,5AH,08H,66H,08H
DB 88H,20H
DB 88H,08H,50H,08H,5AH,08H,66H,08H
DB 78H,20H
DB 78H,08H,4CH,08H,50H,08H,5AH,08H
DB 44H,08H,44H,08H,44H,08H,44H,08H
DB 3CH,08H,44H,08H,4CH,08H,5AH,08H
DB 66H,20H
DB 50H,08H,50H,08H,50H,10H,50H,08H
DB 50H,08H,50H,10H
DB 50H,08H,44H,08H,66H,08H,5AH,08H
DB 50H,20H
DB 4CH,08H,4CH,08H,4CH,08H,4CH,08H
DB 4CH,08H,50H,08H,50H,08H,50H,08H
DB 50H,08H,5AH,08H,5AH,08H,50H,08H
DB 5AH,10H,44H,10H
DB 50H,08H,50H,08H,50H,10H,50H,08H
DB 50H,08H,50H,10H
DB 50H,08H,44H,08H,66H,08H,5AH,08H
DB 50H,20H
DB 4CH,08H,4CH,08H,4CH,08H,4CH,08H
DB 4CH,08H,50H,08H,50H,08H,50H,08H
DB 44H,08H,44H,08H,4CH,08H,5AH,08H
DB 66H,20H
DB 00H,00H
SONG_NAME DB 'Merry X`mas $' ; Song 0
DB 'Little Star $' ; Song 1
DB 'Little Hans $' ; Song 2
DB 'O Sole Mio $' ; Song 3
DB 'Happy Birthday $' ; Song 4
DB 'Waltz $' ; Song 5
DB 'Yesterday $' ; Song 6
DB 'Grandpa`s Clock $' ; Song 7
DB 'Dream Wedding $' ; Song 8
DB 'Blue Danube $' ; Song 9
SONG_RHYPHM DW 0400H ; Song 0
DW 0400H ; Song 1
DW 0400H ; Song 2
DW 0600H ; Song 3
DW 0400H ; Song 4
DW 0350H ; Song 5
DW 0590H ; Song 6
DW 0600H ; Song 7
DW 0250H ; Song 8
DW 0300H ; Song 9
SONG_DATA DW XMAS ; Song 0
DW STAR ; Song 1
DW HANS ; Song 2
DW SUN ; Song 3
DW BIRTHDAY ; Song 4
DW WALTZ ; Song 5
DW YESTERDAY ; Song 6
DW CLOCK ; Song 7
DW DREAM_WEDDING ; Song 8
DW BLUE_DANUBE ; Song 9
; =============== SONG DATA / OTHER DATA ===============
FONT DB 11000000B ; FND 0
DB 11111001B ; FND 1
DB 10100100B ; FND 2
DB 10110000B ; FND 3
DB 10011001B ; FND 4
DB 10010010B ; FND 5
DB 10000010B ; FND 6
DB 11011000B ; FND 7
DB 10000000B ; FND 8
DB 10010000B ; FND 9
DO DB 66H, 08H, 00H, 00H
RE DB 5AH, 08H, 00H, 00H
MI DB 50H, 08H, 00H, 00H
FA DB 4CH, 08H, 00H, 00H
SOL DB 44H, 08H, 00H, 00H
RA DB 3CH, 08H, 00H, 00H
SY DB 36H, 08H, 00H, 00H
DO_H DB 33H, 08H, 00H, 00H
CURRENT DB 0
SELECT_MSG DB 'Selecting Music:$'
PLAY_MSG DB 'Playing... $'
PAUSE_MSG DB 'Paused... $'
PIANO_MSG DB '>> Piano Mode <<$'
BYE_MSG DB '>>> Goodbye! <<<$'
; =============== OTHER DATA / END ===============
CODE ENDS
END START
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment