qemu target:   sh4
author:        Samuel Tardieu <sam@rfc1149.net>
last modified: Tue Dec  6 07:22:44 CET 2005

The sh4 target is not ready at all yet for integration in qemu. This
file describes the current state of implementation.

Most places requiring attention and/or modification can be detected by
looking for "XXXXX" or "abort()".

The sh4 core is located in target/sh4/*, while the 7750 peripheral
features (IO ports for example) are located in hw/sh7750.[ch]. The
main board description is in hw/shix.c, and the NAND flash in
hw/tc58128.[ch].

All the shortcomings indicated here will eventually be resolved. This
is a work in progress. Features are added in a semi-random order: if a
point is blocking to progress on booting the Linux kernel for the shix
board, it is addressed first; if feedback is necessary and no progress
can be made on blocking points until it is received, a random feature
is worked on.

Goals
-----

The primary model being worked on is the soft MMU target to be able to
emulate the Shix 2.0 board by Alexis Polti, described at
https://web.archive.org/web/20070917001736/http://perso.enst.fr/~polti/realisations/shix20/

Ultimately, qemu will be coupled with a system C or a verilog
simulator to simulate the whole board functionalities.

A sh4 user-mode has also somewhat started but will be worked on
afterwards. The goal is to automate tests for GNAT (GNU Ada) compiler
that I ported recently to the sh4-linux target.

Registers
---------

16 general purpose registers are available at any time. The first 8
registers are banked and the non-directly visible ones can be accessed
by privileged instructions. In qemu, we define 24 general purpose
registers and the code generation use either [0-7]+[8-15] or
[16-23]+[8-15] depending on the MD and RB flags in the sr
configuration register.

Instructions
------------

Most sh4 instructions have been implemented. The missing ones at this
time are:
  - FPU related instructions
  - LDTLB to load a new MMU entry
  - SLEEP to put the processor in sleep mode

Most instructions could be optimized a lot. This will be worked on
after the current model is fully functional unless debugging
convenience requires that it is done early.

Many instructions did not have a chance to be tested yet. The plan is
to implement unit and regression testing of those in the future.

MMU
---

The MMU is implemented in the sh4 core. MMU management has not been
tested at all yet. In the sh7750, it can be manipulated through memory
mapped registers and this part has not yet been implemented.

Exceptions
----------

Exceptions are implemented as described in the sh4 reference manual
but have not been tested yet. They do not use qemu EXCP_ features
yet.

IRQ
---

IRQ are not implemented yet.

Peripheral features
-------------------

  + Serial ports

Configuration and use of the first serial port (SCI) without
interrupts is supported. Input has not yet been tested.

Configuration of the second serial port (SCIF) is supported. FIFO
handling infrastructure has been started but is not completed yet.

  + GPIO ports

GPIO ports have been implemented. A registration function allows
external modules to register interest in some port changes (see
hw/tc58128.[ch] for an example) and will be called back. Interrupt
generation is not yet supported but some infrastructure is in place
for this purpose. Note that in the current model a peripheral module
cannot directly simulate a H->L->H input port transition and have an
interrupt generated on the low level.

  + TC58128 NAND flash

TC58128 NAND flash is partially implemented through GPIO ports. It
supports reading from flash.

GDB
---

GDB remote target support has been implemented and lightly tested.

Files
-----

File names are hardcoded at this time. The bootloader must be stored in
shix_bios.bin in the current directory. The initial Linux image must
be stored in shix_linux_nand.bin in the current directory in NAND
format. Test files can be obtained from
http://perso.enst.fr/~polti/robot/ as well as the various datasheets I
use.

qemu disk parameter on the command line is unused. You can supply any
existing image and it will be ignored. As the goal is to simulate an
embedded target, it is not clear how this parameter will be handled in
the future.

To build an ELF kernel image from the NAND image, 16 bytes have to be
stripped off the end of every 528 bytes, keeping only 512 of them. The
following Python code snippet does it:

#! /usr/bin/python

def denand (infd, outfd):
    while True:
        d = infd.read (528)
        if not d: return
        outfd.write (d[:512])

if __name__ == '__main__':
    import sys
    denand (open (sys.argv[1], 'rb'),
            open (sys.argv[2], 'wb'))

Style isssues
-------------

There is currently a mix between my style (space before opening
parenthesis) and qemu style. This will be resolved before final
integration is proposed.
