Index: include/vsdd.h
===================================================================
--- include/vsdd.h	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ include/vsdd.h	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -61,5 +61,5 @@
 			objy;	/* Object y location */
 
-	uint16_t	*obase;	/* Base of object data */
+	volatile	uint16_t	*obase;	/* Base of object data */
 
 	int8_t		opri,	/* Current object priority */
Index: misc/proto.c
===================================================================
--- misc/proto.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ misc/proto.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -3,9 +3,10 @@
 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;
+
+volatile	int16_t		timers[NTIMERS];
+volatile	uint16_t	vi_scrl;
+volatile	uint16_t	vi_sadr;
 
 int8_t			end;
@@ -176,5 +177,5 @@
 }
 
-void tsplot4(uint16_t *obase, int16_t nw, int16_t fg, int16_t row, int16_t col, int8_t *str, int16_t pitch)
+void tsplot4(volatile uint16_t *obase, int16_t nw, int16_t fg, int16_t row, int16_t col, int8_t *str, int16_t pitch)
 {
 }
@@ -189,13 +190,13 @@
 }
 
-void vclrav(uint16_t *obase, int16_t row, int16_t col, uint16_t attr, int16_t len)
-{
-}
-
-void vcputs(uint16_t *obase, int16_t nw, int16_t fg, int16_t bg, int16_t row, int16_t col, int8_t *str)
-{
-}
-
-void vcputsv(uint16_t *obase, int16_t nw, int16_t fg, int16_t bg, int16_t row, int16_t col, int8_t *str, int16_t pitch)
+void vclrav(volatile uint16_t *obase, int16_t row, int16_t col, uint16_t attr, int16_t len)
+{
+}
+
+void vcputs(volatile uint16_t *obase, int16_t nw, int16_t fg, int16_t bg, int16_t row, int16_t col, int8_t *str)
+{
+}
+
+void vcputsv(volatile uint16_t *obase, int16_t nw, int16_t fg, int16_t bg, int16_t row, int16_t col, int8_t *str, int16_t pitch)
 {
 }
@@ -209,13 +210,13 @@
 }
 
-void vputa(uint16_t *obase, int16_t row, int16_t col, uint16_t attr)
-{
-}
-
-void vputc(uint16_t *obase, int16_t row, int16_t col, int16_t c, uint16_t attr)
-{
-}
-
-void vputcv(uint16_t *obase, int16_t row, int16_t col, int16_t c, uint16_t attr, int16_t cols)
+void vputa(volatile uint16_t *obase, int16_t row, int16_t col, uint16_t attr)
+{
+}
+
+void vputc(volatile uint16_t *obase, int16_t row, int16_t col, int16_t c, uint16_t attr)
+{
+}
+
+void vputcv(volatile uint16_t *obase, int16_t row, int16_t col, int16_t c, uint16_t attr, int16_t cols)
 {
 }
@@ -225,19 +226,17 @@
 }
 
-void vsetav(uint16_t *obase, int16_t row, int16_t col, uint16_t attr, int16_t len)
-{
-}
-
-void vsetcv(uint16_t *obase, int16_t row, int16_t col, uint16_t fgbg, int16_t len)
-{
-}
-
-void vsplot4(uint16_t *obase, int16_t nw, int16_t fg, int16_t row, int16_t col, int8_t *str,
-	     int16_t pitch, int16_t ht, int16_t cgtab[][256])
-{
-}
-
-void vvputsv(uint16_t *obase, int16_t nw, int16_t fg, int16_t bg, int16_t row, int16_t col,
-	     int8_t *str, int16_t pitch, int16_t ht, int16_t cgtab[][256])
+void vsetav(volatile uint16_t *obase, int16_t row, int16_t col, uint16_t attr, int16_t len)
+{
+}
+
+void vsetcv(volatile uint16_t *obase, int16_t row, int16_t col, uint16_t fgbg, int16_t len)
+{
+}
+
+void vsplot4(volatile uint16_t *obase, int16_t nw, int16_t fg, int16_t row, int16_t col, int8_t *str, int16_t pitch, int16_t ht, int16_t cgtab[][256])
+{
+}
+
+void vvputsv(volatile uint16_t *obase, int16_t nw, int16_t fg, int16_t bg, int16_t row, int16_t col, int8_t *str, int16_t pitch, int16_t ht, int16_t cgtab[][256])
 {
 }
@@ -247,5 +246,5 @@
 }
 
-void vwputs(uint16_t *obase, int16_t nw, int16_t fg, int16_t bg, int16_t row, int16_t col, int8_t *str)
+void vwputs(volatile uint16_t *obase, int16_t nw, int16_t fg, int16_t bg, int16_t row, int16_t col, int8_t *str)
 {
 }
Index: misc/proto.x
===================================================================
--- misc/proto.x	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ misc/proto.x	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -89,20 +89,20 @@
 extern	void		trap15(void);
 extern	void		tsetup(void);
-extern	void		tsplot4(uint16_t *obase, int16_t nw, int16_t fg, int16_t row, int16_t col, int8_t *str, int16_t pitch);
+extern	void		tsplot4(volatile uint16_t *obase, int16_t nw, int16_t fg, int16_t row, int16_t col, int8_t *str, int16_t pitch);
 extern	int32_t		uldiv(int32_t divid, int32_t divis);
 extern	void		vbank(int16_t b);
-extern	void		vclrav(uint16_t *obase, int16_t row, int16_t col, uint16_t attr, int16_t len);
-extern	void		vcputs(uint16_t *obase, int16_t nw, int16_t fg, int16_t bg, int16_t row, int16_t col, int8_t *str);
-extern	void		vcputsv(uint16_t *obase, int16_t nw, int16_t fg, int16_t bg, int16_t row, int16_t col, int8_t *str, int16_t pitch);
+extern	void		vclrav(volatile uint16_t *obase, int16_t row, int16_t col, uint16_t attr, int16_t len);
+extern	void		vcputs(volatile uint16_t *obase, int16_t nw, int16_t fg, int16_t bg, int16_t row, int16_t col, int8_t *str);
+extern	void		vcputsv(volatile uint16_t *obase, int16_t nw, int16_t fg, int16_t bg, int16_t row, int16_t col, int8_t *str, int16_t pitch);
 extern	void		vfwait(void);
-extern	void		vputa(uint16_t *obase, int16_t row, int16_t col, uint16_t attr);
-extern	void		vputc(uint16_t *obase, int16_t row, int16_t col, int16_t c, uint16_t attr);
-extern	void		vputcv(uint16_t *obase, int16_t row, int16_t col, int16_t c, uint16_t attr, int16_t cols);
+extern	void		vputa(volatile uint16_t *obase, int16_t row, int16_t col, uint16_t attr);
+extern	void		vputc(volatile uint16_t *obase, int16_t row, int16_t col, int16_t c, uint16_t attr);
+extern	void		vputcv(volatile uint16_t *obase, int16_t row, int16_t col, int16_t c, uint16_t attr, int16_t cols);
 extern	void		vputp(struct octent *octad, int16_t xloc, int16_t yloc, int16_t val);
-extern	void		vsetav(uint16_t *obase, int16_t row, int16_t col, uint16_t attr, int16_t len);
-extern	void		vsetcv(uint16_t *obase, int16_t row, int16_t col, uint16_t fgbg, int16_t len);
-extern	void		vsplot4(uint16_t *obase, int16_t nw, int16_t fg, int16_t row, int16_t col, int8_t *str, int16_t pitch, int16_t ht, int16_t cgtab[][256]);
-extern	void		vvputsv(uint16_t *obase, int16_t nw, int16_t fg, int16_t bg, int16_t row, int16_t col, int8_t *str, int16_t pitch, int16_t ht, int16_t cgtab[][256]);
+extern	void		vsetav(volatile uint16_t *obase, int16_t row, int16_t col, uint16_t attr, int16_t len);
+extern	void		vsetcv(volatile uint16_t *obase, int16_t row, int16_t col, uint16_t fgbg, int16_t len);
+extern	void		vsplot4(volatile uint16_t *obase, int16_t nw, int16_t fg, int16_t row, int16_t col, int8_t *str, int16_t pitch, int16_t ht, int16_t cgtab[][256]);
+extern	void		vvputsv(volatile uint16_t *obase, int16_t nw, int16_t fg, int16_t bg, int16_t row, int16_t col, int8_t *str, int16_t pitch, int16_t ht, int16_t cgtab[][256]);
 extern	void		vwputp(struct octent *octad, int16_t xloc, int16_t yloc, int16_t val);
-extern	void		vwputs(uint16_t *obase, int16_t nw, int16_t fg, int16_t bg, int16_t row, int16_t col, int8_t *str);
+extern	void		vwputs(volatile uint16_t *obase, int16_t nw, int16_t fg, int16_t bg, int16_t row, int16_t col, int8_t *str);
 extern	void		xtrap15(void);
Index: ram/asgdsp.c
===================================================================
--- ram/asgdsp.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/asgdsp.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -238,8 +238,8 @@
 */
 
-void keycpyw(uint16_t *dest, uint16_t *src, int16_t len, uint16_t wk, uint16_t bk)
-{
-	register uint16_t wkey, bkey, theword;
-	register int16_t i;
+void keycpyw(volatile uint16_t *dest, volatile uint16_t *src, int16_t len, uint16_t wk, uint16_t bk)
+{
+	uint16_t wkey, bkey, theword;
+	int16_t i;
 
 	wkey = exp_c(wk);
@@ -261,7 +261,7 @@
 void asgkb(void)
 {
-	register uint16_t *p;
-	register uint16_t akline;
-	register int16_t i, j;
+	volatile uint16_t *p;
+	uint16_t akline;
+	int16_t i, j;
 
 	akline = exp_c(AK_LINE);
@@ -306,10 +306,10 @@
 void drawk2g(int16_t grp)
 {
-	register int16_t i;
-	register int16_t n;
-	register int16_t key;
-	register int16_t line;
-	register int8_t *bfsp;
-	register uint16_t *lp;
+	int16_t i;
+	int16_t n;
+	int16_t key;
+	int16_t line;
+	int8_t *bfsp;
+	volatile uint16_t *lp;
 
 	n = 7;		/* key to group window */
@@ -709,6 +709,6 @@
 void setaux(int16_t aux)
 {
-	register int16_t psgdata;
-	register int8_t *psg;
+	uint8_t psgdata;
+	volatile uint8_t *psg;
 
 	auxctl = aux;
Index: ram/asgdsp.x
===================================================================
--- ram/asgdsp.x	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/asgdsp.x	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -43,5 +43,5 @@
 extern	void		inital(void);
 extern	void		initat(int16_t n);
-extern	void		keycpyw(uint16_t *dest, uint16_t *src, int16_t len, uint16_t wk, uint16_t bk);
+extern	void		keycpyw(volatile uint16_t *dest, volatile uint16_t *src, int16_t len, uint16_t wk, uint16_t bk);
 extern	int8_t		*numblk(int8_t *buf, int16_t n);
 extern	void		putasg(int16_t n);
Index: ram/delpnts.c
===================================================================
--- ram/delpnts.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/delpnts.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -27,10 +27,10 @@
 int16_t delpnts(void)
 {
-	register struct instpnt *pp;
-	register int8_t *pp1, *pp2;
-	register int16_t np, pt1, i, pif, cf;
+	struct instpnt *pp;
+	int8_t *pp1, *pp2;
+	int16_t np, pt1, i, pif, cf;
 	struct idfnhdr *fp;
 	struct instdef *vp;
-	uint16_t *fpu;
+	volatile uint16_t *fpu;
 	int16_t pt2, nmv, oldi;
 
Index: ram/dopatch.c
===================================================================
--- ram/dopatch.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/dopatch.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -72,5 +72,5 @@
 void pdows(int16_t slot, int16_t voice, int16_t wsn)
 {
-	uint16_t *fpuws;
+	volatile uint16_t *fpuws;
 
 	if (slot) {		/* waveshape slot B */
@@ -113,5 +113,5 @@
 void pfpufn(uint16_t voice, uint16_t par, uint16_t dat1, uint16_t dat2)
 {
-	register uint16_t *fpu;
+	volatile uint16_t *fpu;
 	int16_t delay;
 
@@ -175,7 +175,8 @@
 void dopatch(struct patch *pp)
 {
-	register uint16_t suba, dat1, dat2;
-	register int16_t i, temp;
-	register int8_t *ser, *iorec;
+	uint16_t suba, dat1, dat2;
+	int16_t i, temp;
+	volatile uint8_t *ser;
+	int8_t *iorec;
 	uint16_t chan, oldsr, osc, port, spec, sat,trig, vgr, vgn, vgt;
 	int16_t baseled, curled, ledctl;
Index: ram/etadyn.c
===================================================================
--- ram/etadyn.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/etadyn.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -36,7 +36,7 @@
 void setdyn(int16_t grp, int16_t dyn)
 {
-	register int16_t g, i, val;
-	register uint16_t *fpu;
-	register struct idfnhdr *fp;
+	int16_t g, i, val;
+	volatile uint16_t *fpu;
+	struct idfnhdr *fp;
 	uint16_t fpmant, fpexp;
 	int16_t oldsr;
Index: ram/etiwsn.c
===================================================================
--- ram/etiwsn.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/etiwsn.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -35,6 +35,6 @@
 int16_t ef_iwsn(int16_t nn)
 {
-	register int16_t i, tmpval, m;
-	register int16_t *fpuws;
+	int16_t i, tmpval, m;
+	volatile uint16_t *fpuws;
 
 	m = nn >> 8;
Index: ram/etloc.c
===================================================================
--- ram/etloc.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/etloc.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -30,7 +30,7 @@
 void setloc(int16_t grp, int16_t loc)
 {
-	register int16_t g, i, val;
-	register uint16_t *fpu;
-	register struct idfnhdr *fp;
+	int16_t g, i, val;
+	volatile uint16_t *fpu;
+	struct idfnhdr *fp;
 	uint16_t fpmant, fpexp;
 	int16_t oldsr;
Index: ram/etmcfn.c
===================================================================
--- ram/etmcfn.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/etmcfn.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -128,6 +128,6 @@
 int16_t ef_mwsn(int16_t nn)
 {
-	register int16_t tmpval;
-	register int16_t *fpuws;
+	int16_t tmpval;
+	volatile uint16_t *fpuws;
 
 	wmcsel = (nn & 0xFF00) ? 1 : 0;
Index: ram/gcurpos.c
===================================================================
--- ram/gcurpos.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/gcurpos.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -190,5 +190,5 @@
 };
 
-static	int16_t	*arrows[] = {	/* arrow pointer table */
+static	volatile	uint16_t	*arrows[] = {	/* arrow pointer table */
 
 	v_curs0,	/* 0 - upper left, even pixel */
@@ -262,5 +262,5 @@
 */
 
-void andcopy(uint16_t *to, uint16_t *from, uint16_t with, int16_t len)
+void andcopy(volatile uint16_t *to, volatile uint16_t *from, uint16_t with, int16_t len)
 {
 	register int16_t i;
Index: ram/gcurpos.x
===================================================================
--- ram/gcurpos.x	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/gcurpos.x	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -15,5 +15,5 @@
 */
 
-extern	void		andcopy(uint16_t *to, uint16_t *from, uint16_t with, int16_t len);
+extern	void		andcopy(volatile uint16_t *to, volatile uint16_t *from, uint16_t with, int16_t len);
 extern	void		arcurs(uint16_t icolor);
 extern	int16_t		gcurpos(int16_t xloc, int16_t yloc);
Index: ram/im700.c
===================================================================
--- ram/im700.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/im700.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -334,32 +334,32 @@
 struct	s_entry *seclist[N_SCORES][N_SECTS];	/* Section pointer table */
 
-uint16_t	*asgob;		/* assignment display object pointer */
-uint16_t	*consl;		/* constant slice pointer */
-uint16_t	*cursl;		/* current (center) slice pointer */
-uint16_t	*instob;	/* instrument object pointer */
-uint16_t	*librob;	/* librarian display object pointer */
-uint16_t	*menuob;	/* menu display object pointer */
-uint16_t	*nxtsl;		/* next (right edge) slice pointer */
-uint16_t	*obj0;		/* object  0 VSDD RAM pointer */
-uint16_t	*obj1;		/* object  1 VSDD RAM pointer */
-uint16_t	*obj2;		/* object  2 VSDD RAM pointer */
-uint16_t	*obj3;		/* object  3 VSDD RAM pointer */
-uint16_t	*obj4;		/* object  4 VSDD RAM pointer */
-uint16_t	*obj5;		/* object  5 VSDD RAM pointer */
-uint16_t	*obj6;		/* object  6 VSDD RAM pointer */
-uint16_t	*obj7;		/* object  7 VSDD RAM pointer */
-uint16_t	*obj8;		/* object  8 VSDD RAM pointer */
-uint16_t	*obj9;		/* object  9 VSDD RAM pointer */
-uint16_t	*obj10;		/* object 10 VSDD RAM pointer */
-uint16_t	*obj11;		/* object 11 VSDD RAM pointer */
-uint16_t	*obj12;		/* object 12 VSDD RAM pointer */
-uint16_t	*obj13;		/* object 13 VSDD RAM pointer */
-uint16_t	*obj14;		/* object 14 VSDD RAM pointer */
-uint16_t	*obj15;		/* object 15 VSDD RAM pointer */
-uint16_t	*prvsl;		/* previous (left edge) slice pointer */
-uint16_t	*saddr;		/* score VSDD RAM base pointer */
-uint16_t	*tunob;		/* tuning table display object pointer */
-uint16_t	*vtobj;		/* virtual typewriter display object pointer */
-uint16_t	*waveob;	/* waveshape display object pointer */
+volatile	uint16_t	*asgob;		/* assignment display object pointer */
+volatile	uint16_t	*consl;		/* constant slice pointer */
+volatile	uint16_t	*cursl;		/* current (center) slice pointer */
+volatile	uint16_t	*instob;	/* instrument object pointer */
+volatile	uint16_t	*librob;	/* librarian display object pointer */
+volatile	uint16_t	*menuob;	/* menu display object pointer */
+volatile	uint16_t	*nxtsl;		/* next (right edge) slice pointer */
+volatile	uint16_t	*obj0;		/* object  0 VSDD RAM pointer */
+volatile	uint16_t	*obj1;		/* object  1 VSDD RAM pointer */
+volatile	uint16_t	*obj2;		/* object  2 VSDD RAM pointer */
+volatile	uint16_t	*obj3;		/* object  3 VSDD RAM pointer */
+volatile	uint16_t	*obj4;		/* object  4 VSDD RAM pointer */
+volatile	uint16_t	*obj5;		/* object  5 VSDD RAM pointer */
+volatile	uint16_t	*obj6;		/* object  6 VSDD RAM pointer */
+volatile	uint16_t	*obj7;		/* object  7 VSDD RAM pointer */
+volatile	uint16_t	*obj8;		/* object  8 VSDD RAM pointer */
+volatile	uint16_t	*obj9;		/* object  9 VSDD RAM pointer */
+volatile	uint16_t	*obj10;		/* object 10 VSDD RAM pointer */
+volatile	uint16_t	*obj11;		/* object 11 VSDD RAM pointer */
+volatile	uint16_t	*obj12;		/* object 12 VSDD RAM pointer */
+volatile	uint16_t	*obj13;		/* object 13 VSDD RAM pointer */
+volatile	uint16_t	*obj14;		/* object 14 VSDD RAM pointer */
+volatile	uint16_t	*obj15;		/* object 15 VSDD RAM pointer */
+volatile	uint16_t	*prvsl;		/* previous (left edge) slice pointer */
+volatile	uint16_t	*saddr;		/* score VSDD RAM base pointer */
+volatile	uint16_t	*tunob;		/* tuning table display object pointer */
+volatile	uint16_t	*vtobj;		/* virtual typewriter display object pointer */
+volatile	uint16_t	*waveob;	/* waveshape display object pointer */
 
 uint16_t	curintp;	/* current interpolate time (FPU format) */
@@ -580,5 +580,5 @@
 {
 	register int16_t i, j, k;
-	register int8_t *ioadr;
+	volatile uint8_t *ioadr;
 	register struct instdef *ip;
 
Index: ram/im700.x
===================================================================
--- ram/im700.x	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/im700.x	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -26,4 +26,33 @@
 */
 
+extern	volatile	uint16_t	*asgob;
+extern	volatile	uint16_t	*consl;
+extern	volatile	uint16_t	*cursl;
+extern	volatile	uint16_t	*instob;
+extern	volatile	uint16_t	*librob;
+extern	volatile	uint16_t	*menuob;
+extern	volatile	uint16_t	*nxtsl;
+extern	volatile	uint16_t	*obj0;
+extern	volatile	uint16_t	*obj1;
+extern	volatile	uint16_t	*obj2;
+extern	volatile	uint16_t	*obj3;
+extern	volatile	uint16_t	*obj4;
+extern	volatile	uint16_t	*obj5;
+extern	volatile	uint16_t	*obj6;
+extern	volatile	uint16_t	*obj7;
+extern	volatile	uint16_t	*obj8;
+extern	volatile	uint16_t	*obj9;
+extern	volatile	uint16_t	*obj10;
+extern	volatile	uint16_t	*obj11;
+extern	volatile	uint16_t	*obj12;
+extern	volatile	uint16_t	*obj13;
+extern	volatile	uint16_t	*obj14;
+extern	volatile	uint16_t	*obj15;
+extern	volatile	uint16_t	*prvsl;
+extern	volatile	uint16_t	*saddr;
+extern	volatile	uint16_t	*tunob;
+extern	volatile	uint16_t	*vtobj;
+extern	volatile	uint16_t	*waveob;
+
 extern	int16_t		admctl;
 extern	int16_t		adnamsw;
@@ -38,5 +67,4 @@
 extern	int16_t		asghit;
 extern	int16_t		asgmod;
-extern	uint16_t	*asgob;
 extern	struct	asgent	asgtab[NASGS];
 extern	int16_t		asig;
@@ -58,5 +86,4 @@
 extern	int16_t		cmtype;
 extern	int16_t		cnote;
-extern	uint16_t	*consl;
 extern	int16_t		crate0[];
 extern	int16_t		crate1[];
@@ -78,5 +105,4 @@
 extern	int16_t		curscor;
 extern	int16_t		cursect;
-extern	uint16_t	*cursl;
 extern	int16_t		curslim;
 extern	int16_t		curtun;
@@ -141,5 +167,4 @@
 extern	int16_t		initcfg;
 extern	int16_t		insmode;
-extern	uint16_t	*instob;
 extern	int16_t		ismode;
 extern	int16_t		lampio;
@@ -157,5 +182,4 @@
 extern	int16_t		ldslot;
 extern	int16_t		legato;
-extern	uint16_t	*librob;
 extern	struct	s_entry	*libsp;
 extern	int16_t		lksel;
@@ -187,5 +211,4 @@
 extern	int16_t		mdb2;
 extern	struct	octent	*mdoct;
-extern	uint16_t	*menuob;
 extern	int16_t		michan;
 extern	int16_t		midiclk;
@@ -207,21 +230,4 @@
 extern	int16_t		npts;
 extern	int16_t		nxtflag;
-extern	uint16_t	*nxtsl;
-extern	uint16_t	*obj0;
-extern	uint16_t	*obj1;
-extern	uint16_t	*obj10;
-extern	uint16_t	*obj11;
-extern	uint16_t	*obj12;
-extern	uint16_t	*obj13;
-extern	uint16_t	*obj14;
-extern	uint16_t	*obj15;
-extern	uint16_t	*obj2;
-extern	uint16_t	*obj3;
-extern	uint16_t	*obj4;
-extern	uint16_t	*obj5;
-extern	uint16_t	*obj6;
-extern	uint16_t	*obj7;
-extern	uint16_t	*obj8;
-extern	uint16_t	*obj9;
 extern	int16_t		oldltag;
 extern	int16_t		oldpk;
@@ -249,5 +255,4 @@
 extern	int16_t		pntsv;
 extern	int16_t		prgchan;
-extern	uint16_t	*prvsl;
 extern	int16_t		ps_dpth;
 extern	int16_t		ps_intn;
@@ -256,5 +261,4 @@
 extern	int16_t		recsw;
 extern	int16_t		runit;
-extern	uint16_t	*saddr;
 extern	int16_t		sbase;
 extern	int16_t		scmctl;
@@ -335,5 +339,4 @@
 extern	int16_t		tunlib[NTUNS][128];
 extern	int16_t		tunmod;
-extern	uint16_t	*tunob;
 extern	int16_t		tunval;
 extern	int16_t		tvcwval;
@@ -369,5 +372,4 @@
 extern	int16_t		vtdecol;
 extern	uint16_t	vtfgval;
-extern	uint16_t	*vtobj;
 extern	int16_t		vtpcol;
 extern	int16_t		vtprow;
@@ -376,5 +378,4 @@
 extern	int16_t		vtxval;
 extern	int16_t		vtyval;
-extern	uint16_t	*waveob;
 extern	int16_t		wcflag;
 extern	int16_t		wcmcol;
Index: ram/lcdlbls.c
===================================================================
--- ram/lcdlbls.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/lcdlbls.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -1162,9 +1162,9 @@
 void newpps(int16_t trg, int16_t grp, int16_t src, int16_t ival)
 {
-	register struct sment *smf, *smp;
-	register uint16_t *fpu;
-	register int32_t ltmp;
-	register int16_t val;
-	register int16_t vce;
+	struct sment *smf, *smp;
+	volatile uint16_t *fpu;
+	int32_t ltmp;
+	int16_t val;
+	int16_t vce;
 	int16_t gs, oldi;
 
@@ -1230,10 +1230,10 @@
 int16_t newsv(int16_t grp, int16_t src, int16_t ival)
 {
-	register struct sment *smf, *smp;
-	register uint16_t *fpu;
-	register int32_t ltmp;
-	register int16_t val;
-	register int16_t gs;
-	register int16_t oldi;
+	struct sment *smf, *smp;
+	volatile uint16_t *fpu;
+	int32_t ltmp;
+	int16_t val;
+	int16_t gs;
+	int16_t oldi;
 	int16_t vmask, var;
 
@@ -1315,10 +1315,10 @@
 void setsv(int16_t grp, int16_t src, int16_t ival)
 {
-	register struct sment *smf, *smp;
-	register uint16_t *fpu;
-	register int32_t ltmp;
-	register int16_t val;
-	register int16_t gs;
-	register int16_t oldi;
+	struct sment *smf, *smp;
+	volatile uint16_t *fpu;
+	int32_t ltmp;
+	int16_t val;
+	int16_t gs;
+	int16_t oldi;
 
 	gs  = (grp << 4) | src;			/* calculate grp/src index */
@@ -1416,6 +1416,6 @@
 void l_voice(int16_t stat, int16_t vce)
 {
-	register int16_t ap, j, par;
-	register uint16_t *fpu;
+	int16_t ap, j, par;
+	volatile uint16_t *fpu;
 
 	int8_t buf[8];
@@ -1541,6 +1541,6 @@
 void l_init(int16_t stat, int16_t _2)
 {
-	register uint16_t *fpu;
-	register int16_t barval, i, j;
+	volatile uint16_t *fpu;
+	int16_t barval, i, j;
 
 	(void)_2;
@@ -1618,6 +1618,6 @@
 void sendart(int16_t vce, int16_t par, int16_t ival)
 {
-	register uint16_t *fpu;
-	register int16_t val, oldi, mult;
+	volatile uint16_t *fpu;
+	int16_t val, oldi, mult;
 	int16_t nop;
 
@@ -1802,7 +1802,7 @@
 void settune(void)
 {
-	register int16_t oldi, i, grp;
-	register uint16_t *fpu;
-	register int32_t trval, trmax;
+	int16_t oldi, i, grp;
+	volatile uint16_t *fpu;
+	int32_t trval, trmax;
 	int16_t nop;
 
Index: ram/msl.c
===================================================================
--- ram/msl.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/msl.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -54,7 +54,7 @@
 void msl(void)
 {
-	register int8_t *ioadr;
-	register struct s_entry *ep;
-	register int16_t i, ti, val;
+	volatile uint8_t *ioadr;
+	struct s_entry *ep;
+	int16_t i, ti, val;
 	uint16_t chan, crel, oldsr, port, trg, trig, vel;
 	int16_t esi, newsig, oldclk, oldrec;
Index: ram/puteq.c
===================================================================
--- ram/puteq.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/puteq.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -60,7 +60,7 @@
 void puteq(int8_t byte)
 {
-	register int16_t i;
-	register int8_t *psg;
-	register int8_t eqdata;
+	int16_t i;
+	volatile uint8_t *psg;
+	int8_t eqdata;
 
 	psg = &io_tone;
Index: ram/scadv.c
===================================================================
--- ram/scadv.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/scadv.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -40,9 +40,9 @@
 void sc_adv(void)
 {
-	register int16_t masksl, maskpx, i;
-	register uint16_t sword;
-	register int32_t tl;
-	register uint16_t *optr, *pptr, *fsl;
-	uint16_t *qptr;
+	int16_t masksl, maskpx, i;
+	uint16_t sword;
+	int32_t tl;
+	volatile uint16_t *optr, *pptr, *fsl;
+	volatile uint16_t *qptr;
 	uint16_t pscrl;
 
@@ -221,8 +221,8 @@
 void scupd(void)
 {
-	register int16_t masksl, maskpx, i;
-	register uint16_t sword;
-	register int32_t tl;
-	register uint16_t *optr, *qptr, *fsl;
+	int16_t masksl, maskpx, i;
+	uint16_t sword;
+	int32_t tl;
+	volatile uint16_t *optr, *qptr, *fsl;
 	int16_t soff;
 
Index: ram/scope.c
===================================================================
--- ram/scope.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/scope.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -17,7 +17,7 @@
 uint16_t	scopev;			/* last scope value */
 
-uint16_t	*scopeob;		/* scope display object */
+int8_t		scopebf[65];		/* scope display buffer */
 
-int8_t		scopebf[65];		/* scope display buffer */
+volatile	uint16_t	*scopeob;		/* scope display object */
 
 struct curpak dt_flds = {
Index: ram/scope.x
===================================================================
--- ram/scope.x	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/scope.x	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -21,7 +21,8 @@
 extern	int16_t		scopec;
 extern	int16_t		scopef;
-extern	uint16_t	*scopeob;
 extern	int16_t		scoper;
 extern	uint16_t	scopev;
+
+extern	volatile	uint16_t	*scopeob;
 
 /*
Index: ram/scordsp.c
===================================================================
--- ram/scordsp.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/scordsp.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -102,7 +102,7 @@
 void makeln(uint16_t lnc, uint16_t lew)
 {
-	register uint16_t *lp, *cp;
-	register int16_t i;
-	register uint16_t lbg;
+	volatile uint16_t *lp, *cp;
+	int16_t i;
+	uint16_t lbg;
 
 	lp = obj15;			/* setup line object pointer */
Index: ram/sendval.c
===================================================================
--- ram/sendval.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/sendval.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -16,7 +16,7 @@
 void sendval(int16_t voice, int16_t par, int16_t ival)
 {
-	register uint16_t *fpu;
-	register int16_t oldi, val;
-	register int32_t ltmp;
+	volatile uint16_t *fpu;
+	int16_t oldi, val;
+	int32_t ltmp;
 	int16_t nop;
 
@@ -84,7 +84,7 @@
 void clearer(int16_t stat)
 {
-	register uint16_t *fpu;
-	register uint16_t fpexp, fpmant, fptime;
-	register int16_t oldi, i;
+	volatile uint16_t *fpu;
+	uint16_t fpexp, fpmant, fptime;
+	int16_t oldi, i;
 	int16_t nop, olds;
 
Index: ram/smscrl.c
===================================================================
--- ram/smscrl.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/smscrl.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -34,7 +34,7 @@
 uint16_t	LineAtr;		/* attribute for the new line */
 
-uint16_t	*LineBuf;		/* current display memory pointer */
-uint16_t	*OldLine;		/* old display memory pointer */
-uint16_t	*ScObAdr;		/* display memory base pointer */
+volatile	uint16_t	*LineBuf;	/* current display memory pointer */
+volatile	uint16_t	*OldLine;	/* old display memory pointer */
+volatile	uint16_t	*ScObAdr;	/* display memory base pointer */
 
 int16_t	LineCon = SS_LEN * 3;		/* line offset constant */
Index: ram/smscrl.x
===================================================================
--- ram/smscrl.x	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/smscrl.x	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -15,4 +15,8 @@
 */
 
+extern	volatile	uint16_t	*LineBuf;
+extern	volatile	uint16_t	*OldLine;
+extern	volatile	uint16_t	*ScObAdr;
+
 extern	int8_t		*(*BakLine)(void);
 extern	int16_t		CurLine;
@@ -21,12 +25,9 @@
 extern	int8_t		*(*FwdLine)(void);
 extern	uint16_t	LineAtr;
-extern	uint16_t	*LineBuf;
 extern	int16_t		LineCon;
 extern	int16_t		LineLen;
 extern	int8_t		*LinePtr;
-extern	uint16_t	*OldLine;
 extern	int16_t		PdScDnF;
 extern	int16_t		PdScUpF;
-extern	uint16_t	*ScObAdr;
 extern	int16_t		ScrlObj;
 extern	int16_t		SmScLim;
Index: ram/stcpos.c
===================================================================
--- ram/stcpos.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/stcpos.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -143,7 +143,7 @@
 void stcclr(void)
 {
-	register uint16_t *obj;
-	register int16_t i, j;
-	register uint16_t k;
+	volatile uint16_t *obj;
+	int16_t i, j;
+	uint16_t k;
 
 	if ((v_regs[5] & 0x0180) NE 0x0100)
@@ -183,6 +183,7 @@
 void stcoff(void)
 {
-	register uint16_t ccv, *tcp;
-	register int16_t tcrow;
+	uint16_t ccv;
+	volatile uint16_t *tcp;
+	int16_t tcrow;
 
 	tcrow = stcrow ? (stcrow - 16) : 0;	/* get old object row */
@@ -209,7 +210,7 @@
 void stcpos(int16_t row, int16_t col)
 {
-	register uint16_t *ccp, *tcp;
-	register uint16_t curson, ccv;
-	register int16_t ncrow, tcrow;
+	volatile uint16_t *ccp, *tcp;
+	uint16_t curson, ccv;
+	int16_t ncrow, tcrow;
 
 	tcrow = stcrow ? (stcrow - 16) : 0;	/* get old object row */
Index: ram/ucslice.c
===================================================================
--- ram/ucslice.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/ucslice.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -27,8 +27,9 @@
 void ucslice(void)
 {
-	register uint16_t *pxptr, *slptr;
-	register struct gdsel *gdsep;
-	register int32_t lc;
-	register uint16_t i, ncolor, mask1, mask2;
+	uint16_t *pxptr;
+	volatile uint16_t *slptr;
+	struct gdsel *gdsep;
+	int32_t lc;
+	uint16_t i, ncolor, mask1, mask2;
 	uint16_t *ncptr, *nctabp;
 	struct gdsel **gdstp, *gdprv, *gdnxt;
Index: ram/uslice.c
===================================================================
--- ram/uslice.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/uslice.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -129,9 +129,10 @@
 */
 
-int16_t uslice(uint16_t *slice, uint16_t mask1, uint16_t mask2, struct gdsel *gdstb[])
+int16_t uslice(volatile uint16_t *slice, uint16_t mask1, uint16_t mask2, struct gdsel *gdstb[])
 {
-	register uint16_t *pxptr, *slptr;
-	register struct gdsel *gdsep;
-	register uint16_t i, ncolor, w;
+	uint16_t *pxptr;
+	volatile uint16_t *slptr;
+	struct gdsel *gdsep;
+	uint16_t i, ncolor, w;
 	uint16_t *ncptr, *nctabp;
 	struct gdsel **gdstp, *gdprv, *gdnxt;
@@ -425,9 +426,10 @@
 */
 
-int16_t cslice(uint16_t *slice, uint16_t mask1, uint16_t mask2, struct gdsel *gdstb[])
+int16_t cslice(volatile uint16_t *slice, uint16_t mask1, uint16_t mask2, struct gdsel *gdstb[])
 {
-	register uint16_t *pxptr, *slptr;
-	register struct gdsel *gdsep;
-	register uint16_t i, ncolor, w;
+	uint16_t *pxptr;
+	volatile uint16_t *slptr;
+	struct gdsel *gdsep;
+	uint16_t i, ncolor, w;
 	uint16_t *ncptr;
 	struct gdsel **gdstp, *gdprv, *gdnxt;
@@ -637,6 +639,6 @@
 
 	{
-		register uint16_t *p1, *p2, *p3, sword;
-		uint16_t *p4;
+		volatile uint16_t *p1, *p2, *p3, *p4;
+		uint16_t sword;
 
 		p1 = consl;			/* clear slices */
Index: ram/uslice.x
===================================================================
--- ram/uslice.x	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/uslice.x	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -30,5 +30,5 @@
 
 extern	void		clrsctl(void);
-extern	int16_t		cslice(uint16_t *slice, uint16_t mask1, uint16_t mask2, struct gdsel *gdstb[]);
+extern	int16_t		cslice(volatile uint16_t *slice, uint16_t mask1, uint16_t mask2, struct gdsel *gdstb[]);
 extern	void		rslice(struct gdsel *gdstb[]);
-extern	int16_t		uslice(uint16_t *slice, uint16_t mask1, uint16_t mask2, struct gdsel *gdstb[]);
+extern	int16_t		uslice(volatile uint16_t *slice, uint16_t mask1, uint16_t mask2, struct gdsel *gdstb[]);
Index: ram/vtyper.c
===================================================================
--- ram/vtyper.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/vtyper.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -37,5 +37,5 @@
 */
 
-void vtsetup(uint16_t *obj, vtchar dsp, int16_t col, int8_t *ptr, int16_t tr, int16_t tc, vtcurs adv, vtcurs bsp, vtcurs cup, vtcurs cdn, vtcurs stop, uint16_t fg, uint16_t bg)
+void vtsetup(volatile uint16_t *obj, vtchar dsp, int16_t col, int8_t *ptr, int16_t tr, int16_t tc, vtcurs adv, vtcurs bsp, vtcurs cup, vtcurs cdn, vtcurs stop, uint16_t fg, uint16_t bg)
 {
 	vtobj   = obj;		/* setup object pointer */
@@ -109,5 +109,5 @@
 */
 
-void vtdisp(uint16_t *obj, uint16_t fg, uint16_t bg, int16_t row, int16_t col, int8_t *buf)
+void vtdisp(volatile uint16_t *obj, uint16_t fg, uint16_t bg, int16_t row, int16_t col, int8_t *buf)
 {
 
Index: ram/vtyper.x
===================================================================
--- ram/vtyper.x	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/vtyper.x	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -9,5 +9,5 @@
 #include "stdint.h"
 
-typedef	void		(*vtchar)(uint16_t *obj, uint16_t fg, uint16_t bg, int16_t row, int16_t col, int8_t *buf);
+typedef	void		(*vtchar)(volatile uint16_t *obj, uint16_t fg, uint16_t bg, int16_t row, int16_t col, int8_t *buf);
 typedef	void		(*vtcurs)(void);
 
@@ -30,5 +30,5 @@
 extern	void		vtcxupd(void);
 extern	void		vtcyupd(void);
-extern	void		vtdisp(uint16_t *obj, uint16_t fg, uint16_t bg, int16_t row, int16_t col, int8_t *buf);
-extern	void		vtsetup(uint16_t *obj, vtchar dsp, int16_t col, int8_t *ptr, int16_t tr, int16_t tc, vtcurs adv, vtcurs bsp, vtcurs cup, vtcurs cdn, vtcurs stop, uint16_t fg, uint16_t bg);
+extern	void		vtdisp(volatile uint16_t *obj, uint16_t fg, uint16_t bg, int16_t row, int16_t col, int8_t *buf);
+extern	void		vtsetup(volatile uint16_t *obj, vtchar dsp, int16_t col, int8_t *ptr, int16_t tr, int16_t tc, vtcurs adv, vtcurs bsp, vtcurs cup, vtcurs cdn, vtcurs stop, uint16_t fg, uint16_t bg);
 extern	int16_t		vtyper(void);
Index: ram/wdfield.c
===================================================================
--- ram/wdfield.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ ram/wdfield.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -100,5 +100,6 @@
 void updfpu(void)
 {
-	register int16_t *wsp1, *wsp2;
+	volatile uint16_t *wsp1;
+	int16_t *wsp2;
 
 	/* calculate instrument source and FPU destination pointers */
Index: rom/romp.c
===================================================================
--- rom/romp.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ rom/romp.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -261,6 +261,7 @@
 		baroff,		/* bar 'off' color */
 		swon,		/* switch 'on' color */
-		swoff,		/* switch 'off' color */
-		*obj0;		/* object pointer */
+		swoff;		/* switch 'off' color */
+
+volatile 	uint16_t	*obj0;	/* object pointer */
 #endif
 
@@ -436,6 +437,6 @@
 void dobar(int16_t nb, int16_t bv)
 {
-	register uint16_t *bp;
-	register int16_t i;
+	volatile uint16_t *bp;
+	int16_t i;
 
 	if ((nb LT 1) OR (nb GT 82))
@@ -472,6 +473,7 @@
 void dosw(int16_t nb, int16_t sv)
 {
-	register uint16_t *bp, j;
-	register int16_t i;
+	volatile uint16_t *bp;
+	uint16_t j;
+	int16_t i;
 
 	if ((nb LT 1) OR (nb GT 82))
@@ -516,8 +518,8 @@
 int16_t cx_adsp(void)
 {
-	register int16_t xasig, xastat, xaval;
-	register int32_t xafi;
-	register int32_t lc;
-	register uint16_t *bp;
+	int16_t xasig, xastat, xaval;
+	int32_t xafi;
+	int32_t lc;
+	volatile uint16_t *bp;
 	int16_t	i, j, k;
 	int16_t	oldi;
@@ -529,5 +531,5 @@
 	vsndpal(dfltpal);
 
-	obj0 = (uint16_t *)0x200400L;
+	obj0 = (volatile uint16_t *)0x200400L;
 
 	SetObj(0, 0, 0, obj0, 512, 350, 0, 0, (V_RES3 | V_TDE), -1);
Index: rom/romp.x
===================================================================
--- rom/romp.x	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ rom/romp.x	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -24,4 +24,6 @@
    =============================================================================
 */
+
+extern	volatile	uint16_t	*obj0;
 
 extern	int32_t		afi;
@@ -59,5 +61,4 @@
 extern	int8_t		*monptr;
 extern	int16_t		monsw;
-extern	uint16_t	*obj0;
 extern	uint16_t	*p_ba0;
 extern	uint16_t	*p_ba1;
Index: vlib/vbfill4.c
===================================================================
--- vlib/vbfill4.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ vlib/vbfill4.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -27,12 +27,12 @@
 };
 
-void vbfill4(uint16_t *obj, int16_t obwidth, int16_t xmin, int16_t ymin, int16_t xmax, int16_t ymax, uint16_t color)
+void vbfill4(volatile uint16_t *obj, int16_t obwidth, int16_t xmin, int16_t ymin, int16_t xmax, int16_t ymax, uint16_t color)
 {
 	int16_t mw, nl, width;
 
-	register uint16_t *fwp, *wp;
-
-	register uint16_t lmask, rmask;
-	register int16_t i, j;
+	volatile uint16_t *fwp, *wp;
+
+	uint16_t lmask, rmask;
+	int16_t i, j;
 
 	fwp = obj + (int32_t)(xmin >> 2) + ((int32_t)ymin * obwidth);
Index: vlib/vbfill4.x
===================================================================
--- vlib/vbfill4.x	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ vlib/vbfill4.x	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -15,3 +15,3 @@
 */
 
-extern	void		vbfill4(uint16_t *obj, int16_t obwidth, int16_t xmin, int16_t ymin, int16_t xmax, int16_t ymax, uint16_t color);
+extern	void		vbfill4(volatile uint16_t *obj, int16_t obwidth, int16_t xmin, int16_t ymin, int16_t xmax, int16_t ymax, uint16_t color);
Index: vlib/vclrs.c
===================================================================
--- vlib/vclrs.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ vlib/vclrs.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -22,5 +22,5 @@
 */
 
-void vclrs(uint16_t *obase, int16_t row, int16_t col, int16_t nc, int16_t ch, uint16_t attr)
+void vclrs(volatile uint16_t *obase, int16_t row, int16_t col, int16_t nc, int16_t ch, uint16_t attr)
 {
 	while (nc--)
Index: vlib/vclrs.x
===================================================================
--- vlib/vclrs.x	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ vlib/vclrs.x	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -15,3 +15,3 @@
 */
 
-extern	void		vclrs(uint16_t *obase, int16_t row, int16_t col, int16_t nc, int16_t ch, uint16_t attr);
+extern	void		vclrs(volatile uint16_t *obase, int16_t row, int16_t col, int16_t nc, int16_t ch, uint16_t attr);
Index: vlib/vmput.c
===================================================================
--- vlib/vmput.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ vlib/vmput.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -16,5 +16,5 @@
 */
 
-void vmput(uint16_t *obase, int16_t row, int16_t col, int8_t *ms[], uint16_t ma)
+void vmput(volatile uint16_t *obase, int16_t row, int16_t col, int8_t *ms[], uint16_t ma)
 {
 	register int16_t c, tc, tr;
@@ -41,5 +41,5 @@
 */
 
-void vmputa(uint16_t *obase, int16_t row, int16_t col, int8_t *ms[], uint16_t *ma[])
+void vmputa(volatile uint16_t *obase, int16_t row, int16_t col, int8_t *ms[], uint16_t *ma[])
 {
 	register int16_t c, tc, tr;
Index: vlib/vmput.x
===================================================================
--- vlib/vmput.x	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ vlib/vmput.x	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -15,4 +15,4 @@
 */
 
-extern	void		vmput(uint16_t *obase, int16_t row, int16_t col, int8_t *ms[], uint16_t ma);
-extern	void		vmputa(uint16_t *obase, int16_t row, int16_t col, int8_t *ms[], uint16_t *ma[]);
+extern	void		vmput(volatile uint16_t *obase, int16_t row, int16_t col, int8_t *ms[], uint16_t ma);
+extern	void		vmputa(volatile uint16_t *obase, int16_t row, int16_t col, int8_t *ms[], uint16_t *ma[]);
Index: vlib/vobjfns.c
===================================================================
--- vlib/vobjfns.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ vlib/vobjfns.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -121,5 +121,5 @@
 */
 
-void SetObj(int16_t obj, int16_t type, int16_t bank, uint16_t *base, int16_t xpix, int16_t ypix, int16_t x0, int16_t y0, uint16_t flags, int16_t pri)
+void SetObj(int16_t obj, int16_t type, int16_t bank, volatile uint16_t *base, int16_t xpix, int16_t ypix, int16_t x0, int16_t y0, uint16_t flags, int16_t pri)
 {
 	register struct octent *op;
@@ -216,8 +216,8 @@
 */
 
-void CpyObj(uint16_t *from, uint16_t *to, int16_t w, int16_t h, int16_t sw)
-{
-	register uint16_t *tp;
-	register int16_t i, j;
+void CpyObj(volatile uint16_t *from, volatile uint16_t *to, int16_t w, int16_t h, int16_t sw)
+{
+	volatile uint16_t *tp;
+	int16_t i, j;
 
 	for (i = h; i--; ) {
Index: vlib/vobjfns.x
===================================================================
--- vlib/vobjfns.x	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ vlib/vobjfns.x	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -25,6 +25,6 @@
 */
 
-extern	void		CpyObj(uint16_t *from, uint16_t *to, int16_t w, int16_t h, int16_t sw);
+extern	void		CpyObj(volatile uint16_t *from, volatile uint16_t *to, int16_t w, int16_t h, int16_t sw);
 extern	void		SelObj(int16_t obj);
-extern	void		SetObj(int16_t obj, int16_t type, int16_t bank, uint16_t *base, int16_t xpix, int16_t ypix, int16_t x0, int16_t y0, uint16_t flags, int16_t pri);
+extern	void		SetObj(int16_t obj, int16_t type, int16_t bank, volatile uint16_t *base, int16_t xpix, int16_t ypix, int16_t x0, int16_t y0, uint16_t flags, int16_t pri);
 extern	void		SetPri(int16_t obj, int16_t pri);
Index: vlib/vputs.c
===================================================================
--- vlib/vputs.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ vlib/vputs.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -23,5 +23,5 @@
 */
 
-void vputs(uint16_t *obase, int16_t row, int16_t col, int8_t *str, uint16_t attr)
+void vputs(volatile uint16_t *obase, int16_t row, int16_t col, int8_t *str, uint16_t attr)
 {
 	int16_t	c;
@@ -50,5 +50,5 @@
 */
 
-void vputsa(uint16_t *obase, int16_t row, int16_t col, int8_t *str, uint16_t *attr)
+void vputsa(volatile uint16_t *obase, int16_t row, int16_t col, int8_t *str, uint16_t *attr)
 {
 	int16_t	c;
Index: vlib/vputs.x
===================================================================
--- vlib/vputs.x	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ vlib/vputs.x	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -15,4 +15,4 @@
 */
 
-extern	void		vputs(uint16_t *obase, int16_t row, int16_t col, int8_t *str, uint16_t attr);
-extern	void		vputsa(uint16_t *obase, int16_t row, int16_t col, int8_t *str, uint16_t *attr);
+extern	void		vputs(volatile uint16_t *obase, int16_t row, int16_t col, int8_t *str, uint16_t attr);
+extern	void		vputsa(volatile uint16_t *obase, int16_t row, int16_t col, int8_t *str, uint16_t *attr);
Index: vlib/vputsv.c
===================================================================
--- vlib/vputsv.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ vlib/vputsv.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -23,5 +23,5 @@
 */
 
-void vputsv(uint16_t *obase, int16_t row, int16_t col, int8_t *str, uint16_t attr, int16_t len)
+void vputsv(volatile uint16_t *obase, int16_t row, int16_t col, int8_t *str, uint16_t attr, int16_t len)
 {
 	int16_t	c;
@@ -51,5 +51,5 @@
 */
 
-void vputsav(uint16_t *obase, int16_t row, int16_t col, int8_t *str, uint16_t *attr, int16_t len)
+void vputsav(volatile uint16_t *obase, int16_t row, int16_t col, int8_t *str, uint16_t *attr, int16_t len)
 {
 	int16_t	c;
Index: vlib/vputsv.x
===================================================================
--- vlib/vputsv.x	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ vlib/vputsv.x	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -15,4 +15,4 @@
 */
 
-extern	void		vputsav(uint16_t *obase, int16_t row, int16_t col, int8_t *str, uint16_t *attr, int16_t len);
-extern	void		vputsv(uint16_t *obase, int16_t row, int16_t col, int8_t *str, uint16_t attr, int16_t len);
+extern	void		vputsav(volatile uint16_t *obase, int16_t row, int16_t col, int8_t *str, uint16_t *attr, int16_t len);
+extern	void		vputsv(volatile uint16_t *obase, int16_t row, int16_t col, int8_t *str, uint16_t attr, int16_t len);
Index: vlib/vspray4.c
===================================================================
--- vlib/vspray4.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ vlib/vspray4.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -25,5 +25,5 @@
 */
 
-void vspray4(uint16_t *vobj, int16_t vwid, int16_t fg, int8_t *ml[], int16_t vb, int16_t pitch)
+void vspray4(volatile uint16_t *vobj, int16_t vwid, int16_t fg, int8_t *ml[], int16_t vb, int16_t pitch)
 {
 	register int8_t *cp, *lp, c;
Index: vlib/vspray4.x
===================================================================
--- vlib/vspray4.x	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ vlib/vspray4.x	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -15,3 +15,3 @@
 */
 
-extern	void		vspray4(uint16_t *vobj, int16_t vwid, int16_t fg, int8_t *ml[], int16_t vb, int16_t pitch);
+extern	void		vspray4(volatile uint16_t *vobj, int16_t vwid, int16_t fg, int8_t *ml[], int16_t vb, int16_t pitch);
Index: vlib/vtext.c
===================================================================
--- vlib/vtext.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ vlib/vtext.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -12,7 +12,7 @@
 static uint16_t	msk[] = { 0xFF00, 0x00FF };
 
-void vtext(uint16_t *obj, int16_t nc, int16_t row, int16_t col, int8_t *ip)
+void vtext(volatile uint16_t *obj, int16_t nc, int16_t row, int16_t col, int8_t *ip)
 {
-	register uint16_t *op;
+	volatile uint16_t *op;
 
 	while (*ip) {
Index: vlib/vtext.x
===================================================================
--- vlib/vtext.x	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ vlib/vtext.x	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -15,3 +15,3 @@
 */
 
-extern	void		vtext(uint16_t *obj, int16_t nc, int16_t row, int16_t col, int8_t *ip);
+extern	void		vtext(volatile uint16_t *obj, int16_t nc, int16_t row, int16_t col, int8_t *ip);
Index: vlib/vwputm.c
===================================================================
--- vlib/vwputm.c	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ vlib/vwputm.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -24,5 +24,5 @@
 */
 
-void vwputm(uint16_t *obase, int16_t nw, int16_t fg, int16_t bg, int16_t row, int16_t col, int8_t *ml[])
+void vwputm(volatile uint16_t *obase, int16_t nw, int16_t fg, int16_t bg, int16_t row, int16_t col, int8_t *ml[])
 {
 	while (*ml) {
Index: vlib/vwputm.x
===================================================================
--- vlib/vwputm.x	(revision 5c4721bf781b9a72025faf76b11122259e1bc0a4)
+++ vlib/vwputm.x	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
@@ -15,3 +15,3 @@
 */
 
-extern	void		vwputm(uint16_t *obase, int16_t nw, int16_t fg, int16_t bg, int16_t row, int16_t col, int8_t *ml[]);
+extern	void		vwputm(volatile uint16_t *obase, int16_t nw, int16_t fg, int16_t bg, int16_t row, int16_t col, int8_t *ml[]);
