Index: ram/asgdsp.c
===================================================================
--- ram/asgdsp.c	(revision 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 16badfe1b6c70af99c55c5c3bb131d348a5a37c3)
+++ 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 */
