fix UDS/LDS in bus error handling for 16/32-bit accesses

Tue, 28 Dec 2010 19:10:36 +0000

author
Philip Pemberton <philpem@philpem.me.uk>
date
Tue, 28 Dec 2010 19:10:36 +0000
changeset 68
58318104858b
parent 67
d6358bf2f5c2
child 69
afe655559cc0

fix UDS/LDS in bus error handling for 16/32-bit accesses

src/memory.c file | annotate | diff | revisions
     1.1 diff -r d6358bf2f5c2 -r 58318104858b src/memory.c
     1.2 --- a/src/memory.c	Tue Dec 28 18:59:15 2010 +0000
     1.3 +++ b/src/memory.c	Tue Dec 28 19:10:36 2010 +0000
     1.4 @@ -67,7 +67,7 @@
     1.5  		return MEM_KERNEL;
     1.6  
     1.7  	// Check page is write enabled
     1.8 -	if ((pagebits & 0x04) == 0)
     1.9 +	if (writing && ((pagebits & 0x04) == 0))
    1.10  		return MEM_PAGE_NO_WE;
    1.11  
    1.12  	// Page access allowed.
    1.13 @@ -112,14 +112,14 @@
    1.14  			case MEM_KERNEL:										\
    1.15  			case MEM_PAGE_NO_WE:									\
    1.16  				/* kernel access or page not write enabled */		\
    1.17 -				/* TODO: which regs need setting? */				\
    1.18 +				/* FIXME: which regs need setting? */				\
    1.19  				fault = true;										\
    1.20  				break;												\
    1.21  		}															\
    1.22  																	\
    1.23  		if (fault) {												\
    1.24  			if (bits >= 16)											\
    1.25 -				state.bsr0 = 0x7F00;								\
    1.26 +				state.bsr0 = 0x7C00;								\
    1.27  			else													\
    1.28  				state.bsr0 = (address & 1) ? 0x7D00 : 0x7E00;		\
    1.29  			state.bsr0 |= (address >> 16);							\
    1.30 @@ -162,14 +162,14 @@
    1.31  			case MEM_KERNEL:										\
    1.32  			case MEM_PAGE_NO_WE:									\
    1.33  				/* kernel access or page not write enabled */		\
    1.34 -				/* TODO: which regs need setting? */				\
    1.35 +				/* FIXME: which regs need setting? */				\
    1.36  				fault = true;										\
    1.37  				break;												\
    1.38  		}															\
    1.39  																	\
    1.40  		if (fault) {												\
    1.41  			if (bits >= 16)											\
    1.42 -				state.bsr0 = 0x7F00;								\
    1.43 +				state.bsr0 = 0x7C00;								\
    1.44  			else													\
    1.45  				state.bsr0 = (address & 1) ? 0x7D00 : 0x7E00;		\
    1.46  			state.bsr0 |= (address >> 16);							\