Index: emu/ser.c
===================================================================
--- emu/ser.c	(revision 375f7fb2b4c509558f2223f867053e394f849fa1)
+++ emu/ser.c	(revision 07265224dd5bbe93a06d38fe7c69422c349d9fdc)
@@ -22,8 +22,11 @@
 #define ver3(...) _ver(ser_verbose, 2, __VA_ARGS__)
 
+#define BEL_CYC 10000
+
 #define CON_W 80
 #define CON_H 25
 
 #define CON_BGR 0x00000000
+#define CON_BEL 0x00808080
 #define CON_CUR 0x00e87000
 #define CON_FGR ((SDL_Color){ .r = 255, .b = 255, .g = 255, .a = 255 })
@@ -59,4 +62,5 @@
 
 static int32_t cur_x = 0, cur_y = 0;
+static int32_t bel = 0;
 
 static void out(int32_t un, uint8_t c)
@@ -69,5 +73,5 @@
 static void update(void)
 {
-	if (SDL_FillRect(sur, NULL, CON_BGR) < 0) {
+	if (SDL_FillRect(sur, NULL, bel == 0 ? CON_BGR : CON_BEL) < 0) {
 		fail("SDL_FillRect() failed: %s", SDL_GetError());
 	}
@@ -179,4 +183,8 @@
 			break;
 
+		case '\a':
+			bel = BEL_CYC;
+			break;
+
 		default:
 			echo('^');
@@ -274,4 +282,13 @@
 {
 	ver3("ser exec");
+
+	if (bel > 0) {
+		--bel;
+
+		if (bel == BEL_CYC - 1 || bel == 0) {
+			update();
+		}
+	}
+
 	return state[0].irq_r || state[0].irq_t || state[1].irq_r || state[1].irq_t;
 }
