2 #include <ext/libmad/mad.h>
4 #define mp3_data_size (16*1024)
6 #define COMMON_ABOUT_HELP_STR "MP3 player v1.0 for DOS\n\n(C) 2008-2011 Jonathan Campbell\nALL RIGHTS RESERVED\n" \
7 "32-bit protected mode version\n" \
9 "Uses libmad MP3 decoder library\n" \
10 "(C) 2000-2004 Underbit Technologies, Inc."
12 extern char temp_str[512];
13 extern unsigned char animator;
15 extern char mp3_file[130];
16 extern unsigned char mp3_stereo,mp3_16bit,mp3_bytes_per_sample;
17 extern unsigned long mp3_data_offset,mp3_data_length,mp3_sample_rate;
18 extern unsigned long mp3_sample_rate_by_timer_ticks;
19 extern unsigned long mp3_sample_rate_by_timer;
20 extern unsigned char mp3_flipsign;
21 extern unsigned char mp3_playing;
23 /* libmad decoding state */
24 extern unsigned char mad_init;
25 extern struct mad_stream mad_stream;
26 extern struct mad_frame mad_frame;
27 extern struct mad_synth mad_synth;
28 extern unsigned char mad_synth_ready;
29 extern unsigned int mad_synth_readofs;
30 extern unsigned char mp3_data[mp3_data_size],*mp3_data_read,*mp3_data_write;
31 extern volatile unsigned char sb_irq_count;
32 extern volatile unsigned char IRQ_anim;
33 extern uint32_t irq_0_count;
34 extern uint32_t irq_0_adv;
35 extern uint32_t irq_0_max;
36 extern uint8_t irq_0_sent_command;
37 extern unsigned char irq_0_had_warned;
38 extern volatile uint32_t irq_0_watchdog;
39 extern uint32_t last_dma_position;
40 extern int change_param_idx;
41 #define PARAM_PRESET_RATES 17
42 extern const unsigned short param_preset_rates[PARAM_PRESET_RATES];
43 extern const char* dos32_irq_0_warning;
45 extern const struct vga_menu_item menu_separator;
46 extern const struct vga_menu_item main_menu_file_set;
47 extern const struct vga_menu_item main_menu_file_quit;
48 extern const struct vga_menu_item main_menu_playback_play;
49 extern const struct vga_menu_item main_menu_playback_stop;
50 extern const struct vga_menu_item main_menu_playback_params;
51 extern const struct vga_menu_item main_menu_help_about;
53 void mp3_data_clear();
54 void mp3_data_refill();
55 void mp3_data_flush(unsigned char force);
57 unsigned char init_libmad();
58 void draw_irq_indicator();
59 void mad_reset_decoder();
60 void irq_0_watchdog_do();
61 void irq_0_watchdog_ack();
62 void irq_0_watchdog_reset();
63 void vga_write_until(unsigned int x);
64 void prompt_play_mp3(unsigned char rec);
70 extern void (interrupt *old_irq_0)();
72 static inline unsigned char xdigit2int(char c) {
73 if (c >= '0' && c <= '9')
74 return (unsigned char)(c - '0');
75 else if (c >= 'a' && c <= 'f')
76 return (unsigned char)(c - 'a' + 10);
77 else if (c >= 'A' && c <= 'F')
78 return (unsigned char)(c - 'A' + 10);
82 /* provided by the calling program */
83 void ui_anim(int force);