Index: ram/addfpu.c
===================================================================
--- ram/addfpu.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
+++ ram/addfpu.c	(revision 432327d61294cce757d5a4a7aff568c99952a3b5)
@@ -18,6 +18,6 @@
 uint16_t addfpu(uint16_t t, int16_t k)
 {
-	register int16_t x, z;
-	register uint16_t y;
+	uint16_t x, y;
+	int32_t z;
 
 	x = fromfpu(t);
@@ -27,5 +27,5 @@
 
 	y = t;
-	z = x + k;
+	z = (int32_t)x + k;
 
 	if (z GE MAXSEGT)
@@ -46,6 +46,6 @@
 uint16_t subfpu(uint16_t t, int16_t k)
 {
-	register int16_t x, z;
-	register uint16_t y;
+	uint16_t x, y;
+	int32_t z;
 
 	x = fromfpu(t);
@@ -55,5 +55,5 @@
 
 	y = t;
-	z = x - k;
+	z = (int32_t)x - k;
 
 	if (z LE 1)
Index: ram/adselbx.c
===================================================================
--- ram/adselbx.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
+++ ram/adselbx.c	(revision 432327d61294cce757d5a4a7aff568c99952a3b5)
@@ -254,5 +254,5 @@
 				vbank(0);
 
-			bfs[0] = row - 5 + '2';
+			bfs[0] = (int8_t)(row - 5 + '2');
 			bfs[1] = '\0';
 
@@ -294,5 +294,5 @@
 			ins2grp[grp] ^= GTAG1;
 
-			bfs[0] = '1' + grp;
+			bfs[0] = (int8_t)('1' + grp);
 			bfs[1] = '\0';
 
@@ -317,5 +317,5 @@
 			ins2grp[grp] ^= GTAG1;
 
-			bfs[0] = grp + ((grp > 8) ? 163 : '1');
+			bfs[0] = (int8_t)(grp + ((grp > 8) ? 163 : '1'));
 			bfs[1] = '\0';
 
Index: ram/asgdsp.c
===================================================================
--- ram/asgdsp.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
+++ ram/asgdsp.c	(revision 432327d61294cce757d5a4a7aff568c99952a3b5)
@@ -238,5 +238,5 @@
 */
 
-void keycpyw(volatile uint16_t *dest, volatile uint16_t *src, int16_t len, uint16_t wk, uint16_t bk)
+void keycpyw(volatile uint16_t *dest, volatile uint16_t *src, int16_t len, int16_t wk, int16_t bk)
 {
 	uint16_t wkey, bkey, theword;
@@ -358,5 +358,5 @@
 		vbank(0);
 
-	vputp(adoct, x, y, exp_c(pen));
+	vputp(adoct, x, y, pen);
 }
 
@@ -389,5 +389,6 @@
 void adswin(int16_t n)
 {
-	register int16_t cx, i;
+	uint16_t cx;
+	int16_t i;
 	int8_t buf1[4], buf2[4];
 
@@ -512,5 +513,5 @@
 			if ((mctlnum[i] NE -1) AND (mctlnum[i] & CTAG1)) {
 
-				bfs[0] = '2' + i;
+				bfs[0] = (int8_t)('2' + i);
 				bfs[1] = '\0';
 
@@ -603,6 +604,6 @@
 	case 7:		/* port 1 key to group assignments */
 
-		lseg(  8, 153,  15, 153, exp_c(adbox[n][4]));	/* underlines */
-		lseg(496, 153, 503, 153, exp_c(adbox[n][4]));
+		lseg(  8, 153,  15, 153, adbox[n][4]);	/* underlines */
+		lseg(496, 153, 503, 153, adbox[n][4]);
 
 		asgkb();					/* icon */
@@ -719,8 +720,8 @@
 
 	*(psg + PSG_ADDR) = PSG_PRTB;		/* read current psg data */
-	psgdata = *(psg + PSG_READ) & ~AUX_BIT;
+	psgdata = (uint8_t)(*(psg + PSG_READ) & ~AUX_BIT);
 
 	*(psg + PSG_ADDR) = PSG_PRTB;		/* send out updated aux data */
-	*(psg + PSG_WRIT) = psgdata | (aux ? 0 : AUX_BIT);
+	*(psg + PSG_WRIT) = (uint8_t)(psgdata | (aux ? 0 : AUX_BIT));
 }
 
Index: ram/asgdsp.x
===================================================================
--- ram/asgdsp.x	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
+++ ram/asgdsp.x	(revision 432327d61294cce757d5a4a7aff568c99952a3b5)
@@ -43,5 +43,5 @@
 extern	void		inital(void);
 extern	void		initat(int16_t n);
-extern	void		keycpyw(volatile uint16_t *dest, volatile 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, int16_t wk, int16_t bk);
 extern	int8_t		*numblk(int8_t *buf, int16_t n);
 extern	void		putasg(int16_t n);
Index: ram/asgvce.c
===================================================================
--- ram/asgvce.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
+++ ram/asgvce.c	(revision 432327d61294cce757d5a4a7aff568c99952a3b5)
@@ -84,6 +84,6 @@
 			ep->e_time  = t_cur;
 			ep->e_type  = EV_NEND | 0x80;
-			ep->e_note  = nn;
-			ep->e_group = grp;
+			ep->e_note  = (int8_t)nn;
+			ep->e_group = (int8_t)grp;
 			ep->e_vel   = SM_SCALE(64);
 
@@ -132,6 +132,6 @@
 					ep->e_time  = t_cur;
 					ep->e_type  = EV_NEND | 0x80;
-					ep->e_note  = nn;
-					ep->e_group = grp;
+					ep->e_note  = (int8_t)nn;
+					ep->e_group = (int8_t)grp;
 					ep->e_vel   = SM_SCALE(64);
 
@@ -244,6 +244,6 @@
 			ep->e_time  = t_cur;
 			ep->e_type  = EV_NBEG | 0x80;
-			ep->e_note  = key;
-			ep->e_group = grp;
+			ep->e_note  = (int8_t)key;
+			ep->e_group = (int8_t)grp;
 			ep->e_vel   = (clksrc EQ CK_STEP) ? SM_SCALE(64) : vel;
 
Index: ram/barbadj.c
===================================================================
--- ram/barbadj.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
+++ ram/barbadj.c	(revision 432327d61294cce757d5a4a7aff568c99952a3b5)
@@ -38,5 +38,5 @@
 /* bar dot data */
 
-int16_t	BarDots[3] = { 0x1C, 0xFC, 0xE0 };
+uint8_t	BarDots[3] = { 0x1C, 0xFC, 0xE0 };
 
 #include "glcbars.h"		/* bar graph driver constant definitions */
@@ -50,6 +50,7 @@
 void BarBadj(int16_t bar, int16_t val)
 {
-	register int16_t bardot, curdif;
-	register uint16_t baradr;
+	uint8_t bardot;
+	register int16_t curdif;
+	register int16_t baradr;
 	int16_t barcol, bardif, curbar, i, newbar;
 
@@ -78,6 +79,6 @@
 
 			LCD_WC = G_CRSWR;	/* set cursor address */
-			LCD_WD = baradr & 0xFF;
-			LCD_WD = (baradr >> 8) & 0xFF;
+			LCD_WD = (uint8_t)(baradr & 0xFF);
+			LCD_WD = (uint8_t)((baradr >> 8) & 0xFF);
 
 			++baradr;		/* update GLC start address */
@@ -102,6 +103,6 @@
 
 			LCD_WC = G_CRSWR;	/* set cursor address */
-			LCD_WD = baradr & 0xFF;
-			LCD_WD = (baradr >> 8) & 0xFF;
+			LCD_WD = (uint8_t)(baradr & 0xFF);
+			LCD_WD = (uint8_t)((baradr >> 8) & 0xFF);
 
 			++baradr;		/* update GLC start address */
@@ -128,6 +129,7 @@
 void BarBset(int16_t bar, int16_t val)
 {
-	register int16_t bardot, barpos, newbar;
-	register uint16_t baradr;
+	uint8_t bardot;
+	register int16_t barpos, newbar;
+	register int16_t baradr;
 	int16_t barcol, i;
 
@@ -149,6 +151,6 @@
 
 		LCD_WC = G_CRSWR;	/* set cursor address */
-		LCD_WD = baradr & 0xFF;
-		LCD_WD = (baradr >> 8) & 0xFF;
+		LCD_WD = (uint8_t)(baradr & 0xFF);
+		LCD_WD = (uint8_t)((baradr >> 8) & 0xFF);
 
 		++baradr;		/* update GLC start address */
@@ -157,5 +159,5 @@
 
 		while (barpos++ LE newbar)	/* write new dots */
-			LCD_WD = bardot;
+			LCD_WD = (uint8_t)bardot;
 
 		while (barpos++ < BTop)		/* erase old dots */
@@ -177,6 +179,7 @@
 void BarCadj(int16_t bar, int16_t val)
 {
-	register int16_t bardot, barpos, newbar;
-	register uint16_t baradr;
+	uint8_t bardot;
+	register int16_t barpos, newbar;
+	register int16_t baradr;
 	int16_t barcol, bardif, curbar, i;
 
@@ -207,6 +210,6 @@
 
 			LCD_WC = G_CRSWR;	/* set cursor address */
-			LCD_WD = baradr & 0xFF;
-			LCD_WD = (baradr >> 8) & 0xFF;
+			LCD_WD = (uint8_t)(baradr & 0xFF);
+			LCD_WD = (uint8_t)((baradr >> 8) & 0xFF);
 
 			LCD_WC = G_MWRITE;	/* setup to write */
@@ -231,6 +234,6 @@
 
 			LCD_WC = G_CRSWR;	/* set cursor address */
-			LCD_WD = baradr & 0xFF;
-			LCD_WD = (baradr >> 8) & 0xFF;
+			LCD_WD = (uint8_t)(baradr & 0xFF);
+			LCD_WD = (uint8_t)((baradr >> 8) & 0xFF);
 
 			LCD_WC = G_MWRITE;	/* setup to write */
@@ -260,6 +263,7 @@
 void BarCset(int16_t bar, int16_t val)
 {
-	register int16_t bardot, barpos, barloc1, barloc2;
-	register uint16_t baradr;
+	uint8_t bardot;
+	register int16_t barpos, barloc1, barloc2;
+	register int16_t baradr;
 	int16_t barcol, i, newbar;
 
@@ -293,6 +297,6 @@
 
 		LCD_WC = G_CRSWR;	/* set cursor address */
-		LCD_WD = baradr & 0xFF;
-		LCD_WD = (baradr >> 8) & 0xFF;
+		LCD_WD = (uint8_t)(baradr & 0xFF);
+		LCD_WD = (uint8_t)((baradr >> 8) & 0xFF);
 
 		LCD_WC = G_MWRITE;	/* setup to write */
Index: ram/barbadj.x
===================================================================
--- ram/barbadj.x	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
+++ ram/barbadj.x	(revision 432327d61294cce757d5a4a7aff568c99952a3b5)
@@ -22,5 +22,5 @@
 extern	int16_t		BarCLn[256];
 extern	int16_t		BarCols[14];
-extern	int16_t		BarDots[3];
+extern	uint8_t		BarDots[3];
 
 /*
Index: ram/etaccn.c
===================================================================
--- ram/etaccn.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
+++ ram/etaccn.c	(revision 432327d61294cce757d5a4a7aff568c99952a3b5)
@@ -60,5 +60,5 @@
 		mctlnum[ctl] = tmpval;
 	else
-		mctlnum[ctl] = (mctlnum[ctl] & 0xFF00) | tmpval;
+		mctlnum[ctl] = (mctlnum[ctl] & (int16_t)0xFF00) | tmpval;
 
 	modasg();
@@ -99,8 +99,8 @@
 
 	n = nn & 0xFF;
-	ebuf[stccol - cfetp->flcol] = k + '0';
+	ebuf[stccol - cfetp->flcol] = (int8_t)(k + '0');
 	ebuf[2] = '\0';
 
-	dspbuf[0] = k + '0';
+	dspbuf[0] = (int8_t)(k + '0');
 	dspbuf[1] = '\0';
 
Index: ram/etadep.c
===================================================================
--- ram/etadep.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
+++ ram/etadep.c	(revision 432327d61294cce757d5a4a7aff568c99952a3b5)
@@ -83,8 +83,8 @@
 	ec = stccol - cfetp->flcol;	/* setup edit buffer column */
 
-	ebuf[ec] = k + '0';
+	ebuf[ec] = (int8_t)(k + '0');
 	ebuf[2] = '\0';
 
-	dspbuf[0] = k + '0';
+	dspbuf[0] = (int8_t)(k + '0');
 	dspbuf[1] = '\0';
 
Index: ram/etadyn.c
===================================================================
--- ram/etadyn.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
+++ ram/etadyn.c	(revision 432327d61294cce757d5a4a7aff568c99952a3b5)
@@ -20,5 +20,5 @@
 	grp = 0x00FF & (n >> 8);
 
-	ebuf[0] = grpdyn[grp] + '0';
+	ebuf[0] = (int8_t)(grpdyn[grp] + '0');
 	ebuf[1] = '\0';
 
@@ -40,5 +40,5 @@
 	struct idfnhdr *fp;
 	uint16_t fpmant, fpexp;
-	int16_t oldsr;
+	uint16_t oldsr;
 	int16_t nop;
 
@@ -47,6 +47,6 @@
 	g = grp + 1;
 
-	fpmant = (((int32_t)curintp & 0x0000FFF0L) *
-		  ((int32_t)timemlt & 0x0000FFFFL)) >> 15;
+	fpmant = (uint16_t)((((int32_t)curintp & 0x0000FFF0L) *
+		  ((int32_t)timemlt & 0x0000FFFFL)) >> 15);
 
 	fpexp = expbit[curintp & 0x000F];
@@ -70,12 +70,12 @@
 
 			if (fp->idftmd & I_VNSUBN)
-				*(fpu + (int32_t)FPU_TNV1) = val;
+				*(fpu + (int32_t)FPU_TNV1) = (uint16_t)val;
 			else
-				*(fpu + (int32_t)FPU_TNV0) = val;
+				*(fpu + (int32_t)FPU_TNV0) = (uint16_t)val;
 
 			++nop;	++nop;	++nop;
 
 			*(fpu + (int32_t)FPU_TCTL) =
-				(fp->idftmd & (I_NRATIO | I_NVBITS)) | 0x0001;
+				(uint16_t)((fp->idftmd & (I_NRATIO | I_NVBITS)) | 0x0001);
 
 			setsr(oldsr);
@@ -121,5 +121,5 @@
 	grp = 0x00FF & (nn >> 8);
 
-	dspbuf[0] = grpdyn[grp] + '0';
+	dspbuf[0] = (int8_t)(grpdyn[grp] + '0');
 	dspbuf[1] = '\0';
 
@@ -143,5 +143,5 @@
 	n = nn & 0xFF;
 
-	dspbuf[0] = ebuf[0] = k + '0';
+	dspbuf[0] = ebuf[0] = (int8_t)(k + '0');
 	dspbuf[1] = ebuf[1] = '\0';
 
Index: ram/etagch.c
===================================================================
--- ram/etagch.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
+++ ram/etagch.c	(revision 432327d61294cce757d5a4a7aff568c99952a3b5)
@@ -98,8 +98,8 @@
 
 	n = nn & 0xFF;
-	ebuf[stccol - cfetp->flcol] = k + '0';
+	ebuf[stccol - cfetp->flcol] = (int8_t)(k + '0');
 	ebuf[2] = '\0';
 
-	dspbuf[0] = k + '0';
+	dspbuf[0] = (int8_t)(k + '0');
 	dspbuf[1] = '\0';
 
Index: ram/initi.c
===================================================================
--- ram/initi.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
+++ ram/initi.c	(revision 432327d61294cce757d5a4a7aff568c99952a3b5)
@@ -32,5 +32,5 @@
 };
 
-int16_t	expbit[16] = {	/* FPU time exponent bit expansion table */
+uint16_t	expbit[16] = {	/* FPU time exponent bit expansion table */
 
 	0x0001,		/* 0 */
Index: ram/initi.x
===================================================================
--- ram/initi.x	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
+++ ram/initi.x	(revision 432327d61294cce757d5a4a7aff568c99952a3b5)
@@ -18,5 +18,5 @@
 
 extern	uint16_t	dfltins[];
-extern	int16_t		expbit[16];
+extern	uint16_t	expbit[16];
 extern	int16_t		finival[NFINST];
 extern	int16_t		ptoftab[];
Index: ram/libdsp.c
===================================================================
--- ram/libdsp.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
+++ ram/libdsp.c	(revision 432327d61294cce757d5a4a7aff568c99952a3b5)
@@ -157,11 +157,13 @@
 */
 
-uint16_t exp_c(uint16_t c)
-{
-	c &= 0x000F;		/* use low 4 bits as the basis */
-	c |= c << 4;		/* turn them into 8 bits */
-	c |= c << 8;		/* make it a full 16 bits */
-
-	return(c);
+uint16_t exp_c(int16_t c)
+{
+	uint16_t r;
+
+	r = (uint16_t)c & 0x000F;	/* use low 4 bits as the basis */
+	r |= r << 4;			/* turn them into 8 bits */
+	r |= r << 8;			/* make it a full 16 bits */
+
+	return(r);
 }
 
Index: ram/libdsp.x
===================================================================
--- ram/libdsp.x	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
+++ ram/libdsp.x	(revision 432327d61294cce757d5a4a7aff568c99952a3b5)
@@ -35,5 +35,5 @@
 extern	int16_t		clreq(int32_t bytes);
 extern	void		dslslot(int16_t slot, uint16_t fg, int16_t row);
-extern	uint16_t	exp_c(uint16_t c);
+extern	uint16_t	exp_c(int16_t c);
 extern	int16_t		fcindex(void);
 extern	void		fcreset(void);
Index: ram/m7menu.c
===================================================================
--- ram/m7menu.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
+++ ram/m7menu.c	(revision 432327d61294cce757d5a4a7aff568c99952a3b5)
@@ -270,5 +270,5 @@
 int16_t mdselbx(int16_t n)
 {
-	register uint16_t mbcv, mbak;
+	register int16_t mbcv, mbak;
 	register int16_t rc;
 
@@ -278,6 +278,6 @@
 #endif
 
-	mbcv = exp_c(MBUTTON);
-	mbak = exp_c(MBKGRND);
+	mbcv = MBUTTON;
+	mbak = MBKGRND;
 
 	rc   = SUCCESS;
@@ -384,10 +384,10 @@
 	register int16_t *mlp;
 	register int16_t i;
-	register uint16_t mlcv, mbcv, mbak;
+	register int16_t mlcv, mbcv, mbak;
 	int8_t buf[16];
 
-	mlcv = exp_c(MLINES);
-	mbcv = exp_c(MBUTTON);
-	mbak = exp_c(MBKGRND);
+	mlcv = MLINES;
+	mbcv = MBUTTON;
+	mbak = MBKGRND;
 
 	if (ml01[0] EQ 0) {
Index: ram/tundsp.c
===================================================================
--- ram/tundsp.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
+++ ram/tundsp.c	(revision 432327d61294cce757d5a4a7aff568c99952a3b5)
@@ -242,7 +242,7 @@
 void td_trcp(int16_t mode)
 {
-	register uint16_t cx;
-
-	cx = exp_c(mode ? TDSELD : tdbox[6][4]);
+	register int16_t cx;
+
+	cx = mode ? TDSELD : tdbox[6][4];
 	vbank(0);
 	vcputsv(tunob, 64, cx, tdbox[6][5],  9, 54, "Transpose", 14);
@@ -258,7 +258,7 @@
 void td_incr(int16_t mode)
 {
-	register uint16_t cx;
-
-	cx = exp_c(mode ? TDSELD : tdbox[6][4]);
+	register int16_t cx;
+
+	cx = mode ? TDSELD : tdbox[6][4];
 	vbank(0);
 	vcputsv(tunob, 64, cx, tdbox[6][5],  12, 54, "Increment", 14);
@@ -273,7 +273,7 @@
 void td_intp(int16_t mode)
 {
-	register uint16_t cx;
-
-	cx = exp_c(mode ? TDSELD : tdbox[6][4]);
+	register int16_t cx;
+
+	cx = mode ? TDSELD : tdbox[6][4];
 	vbank(0);
 	vcputsv(tunob, 64, cx, tdbox[6][5],  14, 54, "Intrpolat", 14);
@@ -334,22 +334,17 @@
 */
 
-void dsttval(int16_t row, int16_t col, int16_t val, uint16_t fg, uint16_t bg)
-{
-	register uint16_t cfg, cbg;
-
-	cfg = exp_c(fg);
-	cbg = exp_c(bg);
-
+void dsttval(int16_t row, int16_t col, int16_t val, int16_t fg, int16_t bg)
+{
 	cnvc2p(bfs, (val >> 1));
 
-	bfs[0] += '0';
-	bfs[1] += 'A';
-	bfs[2] = sfdsp[bfs[2] - 7];
-	bfs[3] += '0';
-	bfs[4] += '0';
+	bfs[0] = (int8_t)(bfs[0] + '0');
+	bfs[1] = (int8_t)(bfs[1] + 'A');
+	bfs[2] = (int8_t)(bfs[2] + sfdsp[bfs[2] - 7]);
+	bfs[3] = (int8_t)(bfs[3] + '0');
+	bfs[4] = (int8_t)(bfs[4] + '0');
 	bfs[5] = '\0';
 
 	vbank(0);
-	vcputsv(tunob, 64, cfg, cbg, row, col, bfs, 14);
+	vcputsv(tunob, 64, fg, bg, row, col, bfs, 14);
 }
 
@@ -362,5 +357,6 @@
 void tdswin(int16_t n)
 {
-	register int16_t cx, i, tv;
+	uint16_t cx;
+	int16_t i, tv;
 	int8_t ts;
 
@@ -476,5 +472,5 @@
 
 		tsplot4(tunob, 64, tdbox[n][4], 24, 54, "Table #", 14);
-		bfs[0] = curtun + '0';
+		bfs[0] = (int8_t)(curtun + '0');
 		bfs[1] = '\0';
 		tsplot4(tunob, 64, tunmod ? TDCHGD : tdbox[n][4],
Index: ram/tundsp.x
===================================================================
--- ram/tundsp.x	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
+++ ram/tundsp.x	(revision 432327d61294cce757d5a4a7aff568c99952a3b5)
@@ -26,5 +26,5 @@
 extern	void		advtcur(void);
 extern	void		bsptcur(void);
-extern	void		dsttval(int16_t row, int16_t col, int16_t val, uint16_t fg, uint16_t bg);
+extern	void		dsttval(int16_t row, int16_t col, int16_t val, int16_t fg, int16_t bg);
 extern	void		gettun(int16_t n);
 extern	void		inittl(void);
Index: ram/vtyper.c
===================================================================
--- ram/vtyper.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
+++ ram/vtyper.c	(revision 432327d61294cce757d5a4a7aff568c99952a3b5)
@@ -37,5 +37,5 @@
 */
 
-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)
+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, int16_t fg, int16_t bg)
 {
 	vtobj   = obj;		/* setup object pointer */
Index: ram/vtyper.x
===================================================================
--- ram/vtyper.x	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
+++ ram/vtyper.x	(revision 432327d61294cce757d5a4a7aff568c99952a3b5)
@@ -31,4 +31,4 @@
 extern	void		vtcyupd(void);
 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	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, int16_t fg, int16_t bg);
 extern	int16_t		vtyper(void);
Index: rom/romp.c
===================================================================
--- rom/romp.c	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
+++ rom/romp.c	(revision 432327d61294cce757d5a4a7aff568c99952a3b5)
@@ -501,11 +501,13 @@
 */
 
-uint16_t exp_c(uint16_t c)
-{
-	c &= 0x000F;
-	c |= c << 4;
-	c |= c << 8;
-
-	return(c);
+uint16_t exp_c(int16_t c)
+{
+	uint16_t r;
+
+	r = (uint16_t)c & 0x000F;
+	r |= r << 4;
+	r |= r << 8;
+
+	return(r);
 }
 
Index: rom/romp.x
===================================================================
--- rom/romp.x	(revision 8c8b4e5664e0c1a049b4575d5003752b342481d6)
+++ rom/romp.x	(revision 432327d61294cce757d5a4a7aff568c99952a3b5)
@@ -153,5 +153,5 @@
 extern	void		dosw(int16_t nb, int16_t sv);
 extern	int16_t		dtext(int8_t *loc, int8_t *lastloc, int16_t nwide, int16_t unit);
-extern	uint16_t	exp_c(uint16_t c);
+extern	uint16_t	exp_c(int16_t c);
 extern	int16_t		getarg(void);
 extern	int16_t		getcmd(void);
