Port-vax archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: About support for rtVAX300
> *(int *)vax_map_physmem(0x201ffffc,1)=(int)(0xf-7)<<16;
Shouldn't that be
((int *)vax_map_physmem(0x201ffffc&~511,1))[(0x201ffffc&511)/sizeof(int)] = ...
?  Or, likely, a mask appropriate to whatever NetBSD's software
pagesize is on the VAX, rather than 511?  (I think NetBSD has used a
larger pagesize than the hardware for quite a while.)  See below.
>        0x800002bc                Xtransl_v
> ...Translation invalid or something..
Translation not valid fault, I think it is (perhaps abbreviated by the
code that prints it).
> [...] what could be wrong with that vax_map_physmem() call?
My remarks above are based on the assumption that vax_map_physmem deals
with page-aligned values, which 0x201ffffc isn't.  What I wrote above
page-aligns the argument to vax_map_physmem and then offsets from the
result appropriately.  (The division by sizeof(int) inside the
subscript is because the returned pointer is cast to int *; C
subscripting works in units of the pointed-to type.  It could also work
to do
*(int *)(((char *)vax_map_physmem(0x201ffffc&~mask,1))+(0x201ffffc&mask)) = ...
(where mask is pagesize-1) instead, that is, compute the address using
pointer-to-char and cast it to pointer-to-int only after that's done.
Which you prefer depends on how you prefer to think of it; they amount
to the same thing.  The version using subscripting does have the
arguable disadvantage that it blindly assumes 0x201ffffc is correctly
aligned for an int.  In VAX-specific code I don't see this as an issue.)
/~\ The ASCII                             Mouse
\ / Ribbon Campaign
 X  Against HTML                mouse%rodents-montreal.org@localhost
/ \ Email!           7D C8 61 52 5D E7 2D 39  4E F1 31 3E E8 B3 27 4B
Home |
Main Index |
Thread Index |
Old Index