                TOPPERS/JSPͥ 桼ޥ˥奢 
                            H8 åȰ¸
   
               Release 1.2бǽ: 13-Nov-2001
   
   ------------------------------------------------------------------------ 
    TOPPERS/JSP Kernel
        Toyohashi Open Platform for Embedded Real-Time Systems/
        Just Standard Profile Kernel
   
    Copyright (C) 2000,2001 by Embedded and Real-Time Systems Laboratory
                                Toyohashi Univ. of Technology, JAPAN
    Copyright (C) 2001 by Industrial Technology Institute,
                                Miyagi Prefectural Government, JAPAN
    Copyright (C) 2001 by Dep. of Computer Science and Engineering
                     Tomakomai National College of Technology, JAPAN
   
    嵭ԤϡFree Software Foundation ˤäƸɽƤ 
    GNU General Public License  Version 2 ˵ҤƤ狼
    ξΤ줫˸¤ꡤܥեȥܥեȥ
    ѤΤޤࡥʲƱˤѡʣѡۡʰʲ
    ѤȸƤ֡ˤ뤳Ȥ̵ǵ롥
    (1) ܥեȥ򥽡ɤηѤˤϡ嵭
        ɽѾ浪Ӳ̵ݾڵ꤬Τޤޤηǥ
        ˴ޤޤƤ뤳ȡ
    (2) ܥեȥѲǽʥХʥꥳɡʥ֥륪
        ȥե饤֥ʤɡˤηѤˤϡ
        ȼɥȡѼԥޥ˥奢ʤɡˤˡ嵭ɽ
        Ѿ浪Ӳ̵ݾڵǺܤ뤳ȡ
    (3) ܥեȥԲǽʥХʥꥳɤηޤϵ
        ߹ѤˤϡΤ줫ξȡ
      (a) ѤȼɥȡѼԥޥ˥奢ʤɡˤˡ嵭
          ɽѾ浪Ӳ̵ݾڵǺܤ뤳ȡ
      (b) Ѥη֤̤ˡˤäơ嵭Ԥ𤹤
          ȡ
    (4) ܥեȥѤˤľŪޤϴŪ뤤ʤ»
        ⡤嵭Ԥդ뤳ȡ
   
    ܥեȥϡ̵ݾڤ󶡤ƤΤǤ롥嵭Ԥϡ
    ܥեȥ˴ؤơŬѲǽޤơʤݾڤԤ
    ʤޤܥեȥѤˤľŪޤϴŪ
    ʤ»˴ؤƤ⡤Ǥʤ
   
    @(#) $Id: h8.txt,v 1.2 2001/11/13 07:31:48 abe Exp $
   ------------------------------------------------------------------------

1.  H8 åȰ¸γ

1. 1  åȥƥȳȯĶ

  H8 ץåΥåȥƥϡH8/3048F ܤʲΥܡ
Ǥ롣

   () Ż̾ AKI-H8/3048F

ʤ⤷ʤ 1 ĤκǾǤ⡢ ɬפ RAM ̤ H8/3048F
¢ RAM ̤ 4[Kbyte] Ķ롣Τᳰ RAM ߤɬפǡ
ɥ쥹֤ͭˤɬפ롣 ߤιǤϥ⡼ 5 ¢
ROM ͭĥ 1M Хȥ⡼ɤꤷƤ롣
  ȯĶϡWindows 2000  cygwin γȯĶѤޤ ǥХ
⡼ɤȥ꡼⡼ɤǥ⥸塼μ¹ˡۤʤäƤ롣ǥХå
⡼ɤǤ () Ż̾Υ˥ǥХå H8/3048F ¢ե
 ROM ˽񤭹ߡǥХå⥸塼 RAM ˥ɤƥǥХ
Ԥ꡼⡼ɤǤϡǥХåνλ⥸塼¢ե
 ROM ˽񤭹ळȤꤷƤ롣 ǥХå⡼ɤȥ꡼⡼
ڤؤϡ ǥ쥯ȥ $(CPU)/$(SYS) ˤ Makefile.config 
AKI_MONITOR ˤ롣

1. 2  ݡȤ뵡ǽγ

  ǽɾѥƥﻲȵǽ (vxget_tim) ϥݡȤƤ뤬 
ߥޥѹ (chg_ixx get_ixx) ߤζػߤȵ
(dis_intena_int) ϥݡȤƤʤ

1. 3  ¾ΥåȤؤΥݡƥ

  H8/300H ꡼ǤС ݡƥ󥰤ưפ˽Ȼפ뤬
H8/3048F ʳĴƤʤ

1. 4  ꥢݡ (SCI)

  H8/3048F ˤ SCI0  SCI1  2 ܤΥꥢݡȤꡢ
sys_config.h Ƥ NUM_PORT ˤ겿ܻѤ뤫Ǥ뤬
ߤμǤ 1 ܤΤ߻ѤǤ롣 JSP ͥΥѤˤ SCI1
ѤƤ롣 ꥢݡȤʲ˼ 

   ܡ쥤ȡ9600[bps]
   ǡĹ8 ӥå
   ȥåץӥåȡ1 ӥå
   ѥƥʤ

2.  H8 ץå¸εǽ

  ͥȥƥॵӥǽǡ H8 ¸ʬˤĤƲ⤹롣 

2. 1  ǡ

  int  unsigned int Υ 32 ӥåȤǤ롣

2. 2  ߴǽȳߥϥɥ

  NMI ϥͥγߤǤ롣 CCR 쥸 I ӥåȤ UI
ӥåȤ򥻥åȤ뤳ȤˤäơCPU å롼ǡ NMI
ʳγߤƶػ߲ǽǤ롣 
  H8 γߥޥϡCCR 쥸 I ӥåȤ UI ӥåȤǤ뤬
Ǥ SYSCR 쥸 UE ӥåȤ򥯥ꥢI ӥåȤ 1 ˸ꤷơ
UI ӥåȤΤγߤ椷Ƥ롣
  ¢ǥХ䳰ߤϸ̤Υ쥸ˤӥåȤΥޥȡ
ͥ쥸 (IPRA  IPRB) θ̳ߤͥ٤椷Ƥ롣
ޥʬƤΤǡ chg_ipm  IPM ǽϥݡȤƤ
ʤ

2. 3  CPU 㳰ǽ CPU 㳰ϥɥ

  ߥϥɥֹΥǡ (EXCNO)  unsigned int 
롣 H8 γߤ CPU 㳰٥ ROM ΰˤꡢưŪƤѹ
뤿ˤ̤ˡɬפǤ뤿ᡢưŪʥϥɥϿǽϤʤ
äơߥϥɥؿ define_inh CPU 㳰ϥɥ
 define_exc ϡ⤷ʤؿǤ롣

2. 4  ȥåץ⥸塼

  H8 ¸Υȥåץ⥸塼 (start.S) ϼ˼¹Ԥ
塢 ͥ (kernel_start) ư롣kernel_start 
Ƥ뤳ȤꤷƤʤ

   (1)   åݥ󥿤

   (2)   hardware_init_hook θƽФ
           hardware_init_hook  0 ǤʤСhardware_init_hook 
         Фhardware_init_hook ϥͥưˡå
         ¸ΥϡɥŪʽԤѰդƤ롣 ܼ
         Ǥϡ SYSCR 쥸 UE ӥåȤΥꥢͥ쥸
          (IPRA  IPRB) θ̳ߤͥ٤ꡢ 
         ֤ͭԤäƤ롣hardware_init_hook ̤ξ硢
         󥫥ץȤεҤˤꤳΥܥ뤬 0 롣 

   (3)   bss ν
           bss ΰ 0 ꥢ롣

   (4)   data ν
           data  RAM ž롣

   (5)   software_init_hook θƽФ
           software_init_hook  0 ǤʤСsoftware_init_hook 
         Фsoftware_init_hook ϥͥưˡեȥ
         Ķ (饤֥) ¸νԤѰդƤ롣
         㤨С饤֥νʤɤǤ롣software_init_hook 
         ̤ξ硢󥫥ץȤεҤˤꤳΥܥ뤬 0 
         롣

2. 5  ȯΥå̤ˤĤ

  ߥͥȥ٥뤬 0 ǳߤȯȡ Ωѥå
˥쥸¸塢ѥåڤؤ뤿ᡢΩ
ѥå̤ PC+CCR  ER0  ER6  32 ХȤǤ롣 SP(ER7)
ϳѤΥå¸롣 
  ߥͥȥ٥ 0 Ǥϡ Ωѥå˥쥸¸
뤿ᡢѤΥå̤ PC+CCR  ER0  ER6  32 Х
(ͥȿ-1) ȡߥͥȥ٥ 0 ¸ SP(ER7) 

   32Хȡ(ͥȿ - 1) + 4Х

Ǥ롣ǾǤϡ¿ųߤȯǥХϡޤȥꥢ
Ϥ 3 ĤʤΤǡѤΥå̤

   32Хȡ(3 - 1) + 4Х = 68 Х

Ǥ롣

3.  ƥ¸εǽ

3. 1  ƥ९åɥ饤

  ƥ९åɥ饤Ф isig_tim ƽФϡ sys_defs.h 
TIC_NUME  TIC_DENO ƤꡢǥեȤ 1[ms] Ǥ롣
ѹ뤳Ȥǡ isig_tim ƽФѹǤ롣
H8/3048F Υå 16[MHz] ξ硢 ޤ٤ 0.5[us] Τᡢ
0.5[us] ñ̤üˤʤͤꤹȡ|isig_tim θƽФ˸
ȯ롣
  ǥեȤΥåǥХ H8/3048F ¢ ITU0 ѤƤ
롣

3. 2  ǽɾѥƥﻲȵǽ

  H8 Ǥϡǽɾѥƥﻲȵǽ (vxget_tim) 򥵥ݡȤƤ
롣٤ 0.5[us] ǡSYSUTIM  UD  (64 ӥåʤ) 
롣

3. 3  ꥢ륤󥿥եɥ饤

  H8/3048F ˤ SCI0  SCI1  2 ܤΥꥢݡȤꡢ
sys_config.h Ƥ NUM_PORT ˤ겿ܻѤ뤫Ǥ뤬
ߤμǤ 1 ܤΤ߻ѤǤ롣 JSP ͥΥѤˤ SCI1
ѤƤ롣

3. 4  ޥå

  ɥ쥹֤ͭˤɬפ뤿ᡢ⡼ 5 ¢ ROM ͭ
ĥ 1M Хȥ⡼ɤꤷƤ롣

   (1)   ǥХå

            0x00000 - 0x1ffff  ¢ ROM() Ż̾Υ˥ǥХå
            0x20000 - 0x3ffff  ¢ ROM.text.rodata
            0x40000 - 0xfef0f   RAM.data.bss
            0xfef10 - 0xfefff  ¢ RAM() Ż̾Υ˥ǥХå
            0xff000 - 0xff0ff  ¢ RAM۳ߥ٥ΰ (.vectors)
            0xff100 - 0xfff0f  ¢ RAMΩѥå
            0xfff10 - 0xfff1b   RAM
            0xfff1c - 0xfffff  ¢ I/O 쥸

   (2)   ꡼

            0x00000 - 0x1ffff  ¢ ROM.vectors.text.rodata
            0x20000 - 0xfef0f   RAM.data.bss
            0xfef10 - 0xfff0f  ¢ RAMΩѥå
            0xfff10 - 0xfff1b   RAM
            0xfff1c - 0xfffff  ¢ I/O 쥸

4.  ȯ

4. 1  ȯĶι

  ȯĶϡWindows 2000  cygwin γȯĶѤ ܼ
Сʲ˼

   binutils-2.11.2
   gcc-2.95.3
   newlib-1.9.0

configure Υץ --target=h8300-hms Ǥ롣 ޤbinutils 
configure Υץˤ --disable-nls ꤹ뤳ȡ
  ޤǥХåΤᡢ () Ż̾Υ˥ǥХåѤ
롣

4. 2  Makefile 

  Makefile դ٤ʲ˼

   (1)   CYGWIN
           Cygwin ǥѥ뤹 CYGWIN = true ͭˤ롣

   (2)   all: jsp.S
           H8/3048F κǽåȤ S 쥳ɥեΤᡢ all:
         $(JSPOBJ) 򥳥ȥȤall: jsp.S ͭˤ롣

4. 3  åȤؤΥɤȼ¹

  åȤؤΥɤȼ¹Ԥˤϡ () Ż̾Υ˥
ХåѤˡľ H8/3048F Υեå ROM ˽񤭹Ǽ¹

ˡ롣

   (1)   () Ż̾Υ˥ǥХåѤˡ (ǥХå⡼
         )
           ǥ쥯ȥ $(CPU)/$(SYS) ˤ Makefile  AKI_MONITOR =
         true ͭˤ make 롣ˡH8/3048F γ RAM ؤΥ
         ͭˤʤФʤʤ RAM ιˤۤʤ뤬
         ɥ쥹Х A0  A19 ȥǡХ D8  D15 ͭˤ
         ˤϡʲ˼ݡȤ 0xff 񤭹ࡣ

            Port   Address
            P1DDR  0xfffc0
            P2DDR  0xfffc1
            P3DDR  0xfffc4
            P5DDR  0xfffc8

         ǸüեȤѤ jsp.S  H8/3048F ž¹Ԥ
         롣

   (2)   ¡եå ROM ˽񤭹Ǽ¹Ԥˡ (꡼⡼)
           ǥ쥯ȥ $(CPU)/$(SYS) ˤ Makefile.config Υǥ
         ȥ $(CPU)/$(SYS) ˤ Makefile  AKI_MONITOR = true 
         ȥȤ make 롣ˡ() Ż̾Υ
         å ROM 񤭹ߥץǡ H8/3048F Υեå ROM
         ˽񤭹ࡣ

4. 4  H8/3048F γ RAM ͭ

  ꡼⡼ɤǤϡ sys_support.S  _hardware_init_hook ǡɥ
Х A0  A19 ȥǡХ D8  D15 ͭˤ塢ͥ
¹Ԥ롣 ʳ˥ɥ쥹ХȥǡХͭˤϡ
sys_config.h ΰʲʬŬԽ롣

   /*
    *  ɥ쥹
    */
   
   #if 0
   
   #define ENABLE_LOWER_DATA
   
   #define ENABLE_P8_CS            (H8P8DDR_CS0_BIT|H8P8DDR_CS1_BIT|\
                                    H8P8DDR_CS2_BIT|H8P8DDR_CS3_BIT)
   #define ENABLE_PA_CS            (H8PADDR_CS4_BIT|H8PADDR_CS5_BIT|\
                                    H8PADDR_CS6_BIT)
   #define ENABLE_PB_CS             H8PBDDR_CS7_BIT
   
   #endif      /* of #if 0 */

5.  ե빽

5. 1  ǥ쥯ȥꡦե빽

   (1)   config/h8/

            Makefile.config  Makefile  H8 ¸
            cpu_config.c     H8 ץå¸ C ؿ
            cpu_config.h     H8 ץå¸ι
            cpu_context.h    H8 ץå¸Υƥ
            cpu_defs.h       H8 ץå¸Υץꥱ
            cpu_insn.h       H8 ץåΥ֥ inline ؿ
            cpu_support.S    H8 ץåΥ֥ؿ
            hw_serial.h      SCI 
            hw_timer.h       ITU 
            makeoffset.c     offset.h ݡȴؿ
            start.S          ȥåץ⥸塼

   (2)   config/h8/akih8_3048f/
           () Ż̾ AKI-H8/3048F ܡɤΰ¸ʬ

            Makefile.config  Makefile  AKI-H8/3048F ܡɰ¸
            h8_3048f.h       H8/3048F ץå
            debug.ld         ǥХåѥ󥫥ץ
            release.ld       ꡼ѥ󥫥ץ
            sys_config.c     AKI-H8/3048F ܡɰ¸ C ؿ
            sys_config.h     AKI-H8/3048F ܡɰ¸ι
            sys_defs.h       AKI-H8/3048F ܡɰ¸Υץꥱ
            sys_support.S    AKI-H8/3048F ܡɰ¸Υ֥ؿ
