X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=bootcensus;a=blobdiff_plain;f=src%2Ftest%2Fvbetest.c;h=ee7fb6884d9368bdd73bfed872480bd56876fb79;hp=1133decb769ddbb18a778d3c32691efc9326b295;hb=aea4c0e820b437aebb00a90b5f9fd847044f88fe;hpb=5e8cc93aaf1173688852acaa0825698c2dc0cb3f diff --git a/src/test/vbetest.c b/src/test/vbetest.c index 1133dec..ee7fb68 100644 --- a/src/test/vbetest.c +++ b/src/test/vbetest.c @@ -5,8 +5,10 @@ #include "keyb.h" #include "psaux.h" #include "contty.h" +#include "audio.h" static void draw_cursor(int x, int y, uint16_t col); +static int click_sound_callback(void *buffer, int size, void *cls); static uint16_t *framebuf; @@ -31,10 +33,16 @@ static uint16_t cursor[] = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 }; +static int click; + +/* defined in sndsamples.s */ +extern signed char snd_click[]; +extern int snd_click_size; + int vbetest(void) { int i, j, nmodes, mx, my; - unsigned int st; + unsigned int st, prev_st = 0; struct video_mode vi; uint16_t *fbptr; @@ -78,6 +86,8 @@ int vbetest(void) set_mouse_bounds(0, 0, 639, 479); + audio_set_callback(click_sound_callback, 0); + /* empty the kb queue */ while(kb_getkey() != -1); @@ -87,6 +97,19 @@ int vbetest(void) } st = mouse_state(&mx, &my); + + for(i=0; i<3; i++) { + unsigned int bit = 1 << i; + if(((st & bit) ^ (prev_st & bit)) & (st & bit)) { + click = 1; + } + } + if(click) { + audio_play(22050, 1); + } + + prev_st = st; + draw_cursor(mx, my, st & 1 ? 0xf800 : (st & 2 ? 0x7e0 : (st & 4 ? 0x00ff : 0))); halt_cpu(); @@ -147,3 +170,14 @@ static void draw_cursor(int x, int y, uint16_t col) savp += CURSOR_XSZ - w; } } + +/* snd_click_size is < 65536 so we can just throw it all at once in there */ +static int click_sound_callback(void *buffer, int size, void *cls) +{ + if(click) { + memcpy(buffer, snd_click, snd_click_size); + click = 0; + return snd_click_size; + } + return 0; +}