Index: include/hwdefs.h
===================================================================
--- include/hwdefs.h	(revision c59409ecb4964b2dfc1b86fabb892798f7c896e7)
+++ include/hwdefs.h	(revision ad89950cbfd099ce8cf70cc01f6f25bd773d67f5)
@@ -56,4 +56,4 @@
 /* stuff in the depths of the bios */
 
-extern	int16_t		fc_sw;
-extern	int32_t		fc_val;
+extern	volatile int16_t	fc_sw;
+extern	volatile int32_t	fc_val;
Index: misc/proto.c
===================================================================
--- misc/proto.c	(revision c59409ecb4964b2dfc1b86fabb892798f7c896e7)
+++ misc/proto.c	(revision ad89950cbfd099ce8cf70cc01f6f25bd773d67f5)
@@ -1,93 +1,37 @@
 #include "ram.h"
 
-int8_t		ac_code;
-int16_t		errno;
-int16_t		timers[NTIMERS];
-int16_t		fp_resv[];
-int8_t		VerDate[];
-uint16_t	vi_scrl;
-uint16_t	vi_sadr;
-
-int8_t		end;
-int8_t		edata;
-int8_t		etext;
-int32_t		p_dlen;
-
-int8_t  	*S1IoRec;
-int8_t		*S2IoRec;
-int8_t		*M1IoRec;
-int8_t		*M2IoRec;
-
-void		(*foot1)(int16_t stat);
-void		(*foot2)(int16_t stat);
-void		(*pulse1)(void);
-void		(*pulse2)(void);
-
-uint32_t	crshrg[16];
-int16_t		wzcrsh;
-uint32_t	crshpc;
-uint32_t	crshsp;
-uint32_t	crshus;
-uint16_t	crshst[16];
-uint16_t	crshsr;
-int8_t		crshvc[4];
-
-int32_t		uldivr;
-
-// ---------- vvv ---------- wdfield.c
-
-#if 0
-
-void updfpu(void)
-{
-}
-
-void wsupd(void)
-{
-}
-
-void whupd(void)
-{
-}
-
-void pntsup(void)
-{
-}
-
-void wdintp(void)
-{
-}
-
-void wdykdn(void)
-{
-}
-
-void wdykup(void)
-{
-}
-
-void wdcyupd(void)
-{
-}
-
-void wdcxupd(void)
-{
-}
-
-int16_t wdnfld(int16_t k)
-{
-}
-
-void wdxkey(void)
-{
-}
-
-void wdfield(void)
-{
-}
-
-#endif
-
-// ---------- ^^^ ---------- wdfield.c
+int8_t			ac_code;
+int16_t			errno;
+int16_t			timers[NTIMERS];
+int16_t			fp_resv[];
+int8_t			VerDate[];
+volatile uint16_t	vi_scrl;
+volatile uint16_t	vi_sadr;
+
+int8_t			end;
+int8_t			edata;
+int8_t			etext;
+int32_t			p_dlen;
+
+int8_t  		*S1IoRec;
+int8_t			*S2IoRec;
+int8_t			*M1IoRec;
+int8_t			*M2IoRec;
+
+void			(*foot1)(int16_t stat);
+void			(*foot2)(int16_t stat);
+void			(*pulse1)(void);
+void			(*pulse2)(void);
+
+uint32_t		crshrg[16];
+int16_t			wzcrsh;
+uint32_t		crshpc;
+uint32_t		crshsp;
+uint32_t		crshus;
+uint16_t		crshst[16];
+uint16_t		crshsr;
+int8_t			crshvc[4];
+
+int32_t			uldivr;
 
 void clrvce(int16_t vce)
Index: misc/proto.x
===================================================================
--- misc/proto.x	(revision c59409ecb4964b2dfc1b86fabb892798f7c896e7)
+++ misc/proto.x	(revision ad89950cbfd099ce8cf70cc01f6f25bd773d67f5)
@@ -20,32 +20,32 @@
 */
 
-extern	int8_t		*M1IoRec;
-extern	int8_t		*M2IoRec;
-extern	int8_t		*S1IoRec;
-extern	int8_t		*S2IoRec;
-extern	int8_t		VerDate[];
-extern	int8_t		ac_code;
-extern	uint32_t	crshpc;
-extern	uint32_t	crshrg[16];
-extern	uint32_t	crshsp;
-extern	uint16_t	crshsr;
-extern	uint16_t	crshst[16];
-extern	uint32_t	crshus;
-extern	int8_t		crshvc[4];
-extern	int8_t		edata;
-extern	int8_t		end;
-extern	int16_t		errno;
-extern	int8_t		etext;
-extern	void		(*foot1)(int16_t stat);
-extern	void		(*foot2)(int16_t stat);
-extern	int16_t		fp_resv[];
-extern	int32_t		p_dlen;
-extern	void		(*pulse1)(void);
-extern	void		(*pulse2)(void);
-extern	int16_t		timers[NTIMERS];
-extern	int32_t		uldivr;
-extern	uint16_t	vi_sadr;
-extern	uint16_t	vi_scrl;
-extern	int16_t		wzcrsh;
+extern	int8_t			*M1IoRec;
+extern	int8_t			*M2IoRec;
+extern	int8_t			*S1IoRec;
+extern	int8_t			*S2IoRec;
+extern	int8_t			VerDate[];
+extern	int8_t			ac_code;
+extern	uint32_t		crshpc;
+extern	uint32_t		crshrg[16];
+extern	uint32_t		crshsp;
+extern	uint16_t		crshsr;
+extern	uint16_t		crshst[16];
+extern	uint32_t		crshus;
+extern	int8_t			crshvc[4];
+extern	int8_t			edata;
+extern	int8_t			end;
+extern	int16_t			errno;
+extern	int8_t			etext;
+extern	void			(*foot1)(int16_t stat);
+extern	void			(*foot2)(int16_t stat);
+extern	int16_t			fp_resv[];
+extern	int32_t			p_dlen;
+extern	void			(*pulse1)(void);
+extern	void			(*pulse2)(void);
+extern	int16_t			timers[NTIMERS];
+extern	int32_t			uldivr;
+extern	volatile uint16_t	vi_sadr;
+extern	volatile uint16_t	vi_scrl;
+extern	int16_t			wzcrsh;
 
 /*
Index: vlib/vobjfns.c
===================================================================
--- vlib/vobjfns.c	(revision c59409ecb4964b2dfc1b86fabb892798f7c896e7)
+++ vlib/vobjfns.c	(revision ad89950cbfd099ce8cf70cc01f6f25bd773d67f5)
@@ -45,10 +45,11 @@
 #include "ram.h"
 
-typedef		void	(**intvec)(void);
-
-int16_t		wsize;		/* object width calculated by SetObj() */
-int16_t		vi_dis;		/* disable use of VIint */
-
-uint16_t	vi_ctl;		/* object unblank control bits */
+typedef void		(*intfun)(void);
+typedef volatile intfun	*intvec;
+
+int16_t			wsize;		/* object width calculated by SetObj() */
+int16_t			vi_dis;		/* disable use of VIint */
+
+volatile uint16_t	vi_ctl;		/* object unblank control bits */
 
 /*
Index: vlib/vobjfns.x
===================================================================
--- vlib/vobjfns.x	(revision c59409ecb4964b2dfc1b86fabb892798f7c896e7)
+++ vlib/vobjfns.x	(revision ad89950cbfd099ce8cf70cc01f6f25bd773d67f5)
@@ -15,7 +15,7 @@
 */
 
-extern	uint16_t	vi_ctl;
-extern	int16_t		vi_dis;
-extern	int16_t		wsize;
+extern	volatile uint16_t	vi_ctl;
+extern	int16_t			vi_dis;
+extern	int16_t			wsize;
 
 /*
