Index: contrib/bp/srv/console/cell_mark_changed
===================================================================
--- contrib/bp/srv/console/cell_mark_changed	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
+++ contrib/bp/srv/console/cell_mark_changed	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
@@ -0,0 +1,4 @@
+(
+	[fb_pending_flush] +
+	NULL
+)
Index: contrib/bp/srv/console/clear
===================================================================
--- contrib/bp/srv/console/clear	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
+++ contrib/bp/srv/console/clear	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
@@ -0,0 +1,1 @@
+!fb.FB_CLEAR
Index: contrib/bp/srv/console/cons_read
===================================================================
--- contrib/bp/srv/console/cons_read	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
+++ contrib/bp/srv/console/cons_read	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
@@ -0,0 +1,1 @@
+?IPC_M_DATA_READ
Index: contrib/bp/srv/console/cons_write
===================================================================
--- contrib/bp/srv/console/cons_write	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
+++ contrib/bp/srv/console/cons_write	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
@@ -0,0 +1,3 @@
+?IPC_M_DATA_WRITE ;
+[write_char]* ;
+[gcons_notify_char]
Index: contrib/bp/srv/console/console.bp
===================================================================
--- contrib/bp/srv/console/console.bp	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
+++ contrib/bp/srv/console/console.bp	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
@@ -0,0 +1,101 @@
+!ns.IPC_CONNECT_ME_TO /* kbd */ ;
+!kbd.IPC_CONNECT_TO_ME ;
+!ns.IPC_CONNECT_ME_TO /* fb */ ;
+[devmap_driver_register] ;
+!fb.FB_GET_RESOLUTION ;
+(
+	[vp_create] +
+	[vp_switch]
+)* ;
+[make_pixmap]* ;
+[make_anim] ;
+[vp_switch] ;
+!fb.FB_FLUSH ;
+!fb.FB_GET_CSIZE ;
+!fb.FB_GET_COLOR_CAP ;
+!fb.IPC_M_SHARE_OUT ;
+[devmap_device_register]* ;
+[gcons_redraw_console] ;
+[set_rgb_color] ;
+[screen_clear] ;
+[curs_goto] ;
+[curs_visibility] ;
+(
+	?IPC_M_CONNECT_ME_TO ;
+	[gcons_notify_connect] ;
+	(
+		?VFS_OUT_READ {
+			[cons_read]
+		} +
+		
+		?VFS_OUT_WRITE {
+			[cons_write]
+		} +
+		
+		?VFS_OUT_SYNC {
+			[fb_pending_flush] ;
+			(
+				(
+					!fb.FB_FLUSH ;
+					[curs_goto]
+				) +
+				NULL
+			) ;
+		} +
+		
+		?CONSOLE_CLEAR {
+			!fb.FB_FLUSH +
+			NULL
+		} +
+		
+		?CONSOLE_GOTO {
+			!fb.CURS_GOTO +
+			NULL
+		} +
+		
+		?CONSOLE_GET_SIZE +
+		
+		?CONSOLE_GET_COLOR_CAP +
+		
+		?CONSOLE_SET_STYLE {
+			[fb_pending_flush] ;
+			(
+				[set_style] +
+				NULL
+			)
+		} +
+		
+		?CONSOLE_SET_COLOR {
+			[fb_pending_flush] ;
+			(
+				[set_color] +
+				NULL
+			)
+		} +
+		
+		?CONSOLE_SET_RGB_COLOR {
+			[fb_pending_flush] ;
+			(
+				[set_rgb_color] +
+				NULL
+			)
+		} +
+		
+		?CONSOLE_CURSOR_VISIBILITY {
+			[fb_pending_flush] ;
+			(
+				[curs_visibility] +
+				NULL
+			)
+		} +
+		
+		?CONSOLE_GET_EVENT +
+		
+		?CONSOLE_KCON_ENABLE
+		
+	)* ;
+	
+	?IPC_M_PHONE_HUNGUP {
+		[gcons_notify_disconnect]
+	}
+)*
Index: contrib/bp/srv/console/curs_goto
===================================================================
--- contrib/bp/srv/console/curs_goto	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
+++ contrib/bp/srv/console/curs_goto	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
@@ -0,0 +1,1 @@
+!fb.FB_CURSOR_GOTO
Index: contrib/bp/srv/console/curs_visibility
===================================================================
--- contrib/bp/srv/console/curs_visibility	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
+++ contrib/bp/srv/console/curs_visibility	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
@@ -0,0 +1,1 @@
+!fb.FB_CURSOR_VISIBILITY
Index: contrib/bp/srv/console/draw_pixmap
===================================================================
--- contrib/bp/srv/console/draw_pixmap	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
+++ contrib/bp/srv/console/draw_pixmap	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
@@ -0,0 +1,4 @@
+!fb.FB_PREPARE_SHM ;
+!fb.IPC_M_SHARE_OUT ;
+!fb.FB_DRAW_PPM ;
+!fb.FB_DROP_SHM
Index: contrib/bp/srv/console/fb_pending_flush
===================================================================
--- contrib/bp/srv/console/fb_pending_flush	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
+++ contrib/bp/srv/console/fb_pending_flush	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
@@ -0,0 +1,1 @@
+!fb.FB_DRAW_TEXT_DATA
Index: contrib/bp/srv/console/gcons_notify_connect
===================================================================
--- contrib/bp/srv/console/gcons_notify_connect	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
+++ contrib/bp/srv/console/gcons_notify_connect	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
@@ -0,0 +1,5 @@
+(
+	[redraw_state] ;
+	[vp_switch]
+) +
+NULL
Index: contrib/bp/srv/console/gcons_notify_disconnect
===================================================================
--- contrib/bp/srv/console/gcons_notify_disconnect	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
+++ contrib/bp/srv/console/gcons_notify_disconnect	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
@@ -0,0 +1,5 @@
+(
+	[redraw_state] ;
+	[vp_switch]
+) +
+NULL
Index: contrib/bp/srv/console/gcons_redraw_console
===================================================================
--- contrib/bp/srv/console/gcons_redraw_console	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
+++ contrib/bp/srv/console/gcons_redraw_console	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
@@ -0,0 +1,10 @@
+(
+	[vp_switch] ;
+	[set_rgb_color] ;
+	[clear] ;
+	[draw_pixmap] ;
+	[draw_pixmap] ;
+	[redraw_state]* ;
+	[vp_switch]
+) +
+NULL
Index: contrib/bp/srv/console/make_anim
===================================================================
--- contrib/bp/srv/console/make_anim	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
+++ contrib/bp/srv/console/make_anim	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
@@ -0,0 +1,4 @@
+!fb.FB_ANIM_CREATE ;
+[make_pixmap]* ;
+!fb.FB_ANIM_ADDPIXMAP ;
+!fb.FB_ANIM_START
Index: contrib/bp/srv/console/make_pixmap
===================================================================
--- contrib/bp/srv/console/make_pixmap	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
+++ contrib/bp/srv/console/make_pixmap	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
@@ -0,0 +1,4 @@
+!fb.FB_PREPARE_SHM ;
+!fb.IPC_M_SHARE_OUT ;
+!fb.FB_SHM2PIXMAP ;
+!fb.FB_DROP_SHM
Index: contrib/bp/srv/console/redraw_state
===================================================================
--- contrib/bp/srv/console/redraw_state	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
+++ contrib/bp/srv/console/redraw_state	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
@@ -0,0 +1,11 @@
+[vp_switch] ;
+(
+	!fb.FB_VP_DRAW_PIXMAP +
+	NULL
+) ;
+(
+	(
+		!fb.FB_PUTCHAR*
+	) +
+	NULL
+)
Index: contrib/bp/srv/console/screen_clear
===================================================================
--- contrib/bp/srv/console/screen_clear	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
+++ contrib/bp/srv/console/screen_clear	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
@@ -0,0 +1,1 @@
+!fb.FB_CLEAR
Index: contrib/bp/srv/console/set_color
===================================================================
--- contrib/bp/srv/console/set_color	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
+++ contrib/bp/srv/console/set_color	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
@@ -0,0 +1,1 @@
+!fb.FB_SET_COLOR
Index: contrib/bp/srv/console/set_rgb_color
===================================================================
--- contrib/bp/srv/console/set_rgb_color	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
+++ contrib/bp/srv/console/set_rgb_color	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
@@ -0,0 +1,1 @@
+!fb.FB_SET_RGB_COLOR
Index: contrib/bp/srv/console/set_style
===================================================================
--- contrib/bp/srv/console/set_style	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
+++ contrib/bp/srv/console/set_style	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
@@ -0,0 +1,1 @@
+!fb.FB_SET_STYLE
Index: contrib/bp/srv/console/vp_create
===================================================================
--- contrib/bp/srv/console/vp_create	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
+++ contrib/bp/srv/console/vp_create	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
@@ -0,0 +1,1 @@
+!fb.FB_VIEWPORT_CREATE
Index: contrib/bp/srv/console/vp_switch
===================================================================
--- contrib/bp/srv/console/vp_switch	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
+++ contrib/bp/srv/console/vp_switch	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
@@ -0,0 +1,1 @@
+!fb.FB_VIEWPORT_SWITCH
Index: contrib/bp/srv/console/write_char
===================================================================
--- contrib/bp/srv/console/write_char	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
+++ contrib/bp/srv/console/write_char	(revision de48286a63fd1c84637ce59dfe502d6dbcf2b331)
@@ -0,0 +1,18 @@
+(
+	[fb_pending_flush] +
+	[cell_mark_changed]
+) ;
+(
+	(
+		[fb_pending_flush] ;
+		(
+			!fb.FB_SCROLL +
+			NULL
+		)
+	) +
+	NULL
+) ;
+(
+	[curs_goto] +
+	NULL
+)
