h8300 sim: what is "eightbit" memory ?

ISHIKAWA,chiaki ishikawa@yk.rim.or.jp
Wed Aug 17 05:18:00 GMT 2016


Hi,

Sorry for top-posting, but doesn't this "eightbit mem" refer to area
that is accessible with 8-bit offset?
I think I worked with H8/240H or some such CPU and not sure if H8/300H
has similar architecture.

(And my expperience is 10-year old one, ...)

On 2016/08/17 11:26, Mike Frysinger wrote:
> the h8300 sim has its own implementation for memory handling that i'd
> like to replace with the common sim memory code.  however, it's got a
> weird bit of code it calls "eightbit mem" that makes this not as easy
> as it would otherwise be.  the code has this comment:
> /* These define the size of main memory for the simulator.
>
>    Note the size of main memory for the H8/300H is only 256k.  Keeping it
>    small makes the simulator run much faster and consume less memory.
>
>    The linker knows about the limited size of the simulator's main memory
>    on the H8/300H (via the h8300h.sc linker script).  So if you change
>    H8300H_MSIZE, be sure to fix the linker script too.
>
>    Also note that there's a separate "eightbit" area aside from main
>    memory.  For simplicity, the simulator assumes any data memory reference
>    outside of main memory refers to the eightbit area (in theory, this
>    can only happen when simulating H8/300H programs).  We make no attempt
>    to catch overlapping addresses, wrapped addresses, etc etc.  */
>
> i've read the H8/300 Programming Manual and the H8/300H Software Manual
> and can't find documentation on it.  the closest i can find is the bits
> about the exception vectors, but that sounds like a convention where the
> first 256 bytes of memory are used for a special purpose.  the sim will
> actually allocate a sep memory buffer of 256 bytes and you address it by
> accessing anywhere outside of main memory.  e.g. i would expect code to
> access it like:
> 	uint32_t *data = (void *)0;
> 	data[0] = reset_exception_vector;
> not like the sim expects like:
> 	uint8_t *data = (void *)0x1000000;
> 	data[0] = ...;
>
> the gcc manual doesn't have a lot to say:
> Use this attribute on the H8/300, H8/300H, and H8S to indicate that the
> specified variable should be placed into the eight-bit data section. The
> compiler generates more efficient code for certain operations on data in
> the eight-bit data area. Note the eight-bit data area is limited to 256
> bytes of data.
>
> and the gcc code implies that it's accessed via special addressing:
>    eightbit_data: This variable lives in the 8-bit data area and can
>    be referenced with 8-bit absolute memory addresses.
>
> but the sim doesn't access its eightbit memory based on specific insns,
> it does it purely on the addresses requested.
>
> unfortunately, much of this code was authored by Michael Snyder, so i
> can't ask him :(.  does anyone familiar with the H8/300 have a clue as
> to what's going on with this code ?
> -mike
>



More information about the Gdb mailing list