Re: h8300 sim: what is "eightbit" memory ?

ISHIKAWA,chiaki
2016-08-17T05:18:27Z

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
>