
	     TOPPERS/JSPͥ 桼ޥ˥奢 
		    68040 åȰ¸

	    Release 1.0бǽ: 15-Nov-2000

------------------------------------------------------------------------ 
 TOPPERS/JSP Kernel
     Toyohashi Open Platform for Embedded Real-Time Systems/
     Just Standard Profile Kernel

 Copyright (C) 2000 by Embedded and Real-Time Systems Laboratory
                             Toyohashi Univ. of Technology, JAPAN

 嵭Ԥϡʲξ˸¤ꡤܥեȥܥ
 եȥѤΤޤࡥʲƱˤѡʣѡ
 ۡʰʲѤȸƤ֡ˤ뤳Ȥ̵ǵ롥
 (1) ܥեȥ򥽡ɤηѤˤϡ嵭
     ɽѾ浪Ӳ̵ݾڵ꤬Τޤޤηǥ
     ˴ޤޤƤ뤳ȡ
 (2) ܥեȥХʥꥳɤηޤϵȤ߹
     ѤˤϡΤ줫ξȡ
   (a) ѤȼɥȡѼԥޥ˥奢ʤɡˤˡ嵭
       ɽѾ浪Ӳ̵ݾڵǺܤ뤳ȡ
   (b) Ѥη֤̤ˡˤäơ嵭Ԥ𤹤
       ȡ
 (3) ܥեȥѤˤľŪޤϴŪ뤤ʤ»
     ⡤嵭Ԥդ뤳ȡ

 ܥեȥϡ̵ݾڤ󶡤ƤΤǤ롥嵭Ԥϡ
 ܥեȥ˴ؤơŬѲǽޤơʤݾڤԤ
 ʤޤܥեȥѤˤľŪޤϴŪ
 ʤ»˴ؤƤ⡤Ǥʤ

 @(#) $Id: m68k.txt,v 1.2 2000/11/14 15:48:31 hiro Exp $
------------------------------------------------------------------------


68040 åȰ¸γ

1.1 åȥƥȳȯĶ

68040ץåΥåȥƥȤƤϡ()Ż DVE-68K/40
CPUܡɡCPU: 68LC040ˤΤߤ򥵥ݡȤƤ롥

ȯĶˤϡGCC ʤɤ GNUȯĶѤ֥ȥեե
ޥåȤ ELF ɸȤ롥

1.2 ݡȤ뵡ǽγ

68040¸εǽȤơߥޥѹȡchg_ixxget_ixxˤ
ݡȤƤ롥ޤDVE-68K/40 CPUܡɰ¸εǽȤơǽɾ
ѥƥﻲȵǽvxget_timˤ򥵥ݡȤƤ롥ߤζػߤ
ġdis_intena_intˤϥݡȤƤʤ

1.3 ¾ΥåȤؤΥݡƥ

СǤϡFPU ʤ 68LC040 Τߤ򥵥ݡȤƤ롥FPU 
ѤʤˤϡFPU¢ 68040 ˤŬѲǽʤϤǤ롥FPU
Ѥˤϡǥѥå FPU쥸¸ɬפ
ʤɡ㴳β¤ɬפǤ롥

¾ m68k ΥץåؤΥݡƥ󥰤ˤĤƤϡޥå
̤˳ߥå 68020 ʹߤΥץåؤŪưפ˥ݡ
ƥ󥰲ǽȻפ뤬ΥץåؤΥݡƥ󥰤
Ǥͽۤ롥


68040 ץå¸εǽ

Ǥϡͥ뤪ӥƥॵӥεǽǡ68040¸
ʬˤĤƲ⤹롥

2.1 ǡ

signed int unsigned intΥ 32ӥåȤǤ롥

2.2 ߴǽȳߥϥɥ

ͥγߤ NMI ΤߤǤ롥äơCPUå֤
롼ǤϡNMI ʳγߤϤ٤ƶػߤƤ롥Ūˤϡ
IPMInterrupt Priority Maskˤ 7 ꤵ롥

DEF_INH ǻꤹߥϥɥֹinhnoˤϡ68040 Ǥ㳰٥
ֹɽΥǡINHNOˤ unsigned intƤ롥
DEF_INH ǡ㳰٥ֹȤͭǤʤͤ䡤ߤбʤ
ֹꤷưݾڤʤ

68040¸εǽȤơSRStatus Register IPMInterrupt
Priority Maskˤͤѹ뤿Υӥ chg_ipm ȡȤ
Υӥ get_ipm 򥵥ݡȤƤ롥ʤIPM ͤɽ
ǡ IPM ϡunsigned intƤ롥

ΥӥϡƥȤ CPUå֤ξ
ˤΤ߸ƤӽФȤǤ롥chg_ipm ˤ IPM  0 ʳʤʤ
餫γߤػߤƤ֡ˤˤǤ⡤ǥѥå϶ػߤ
줺chg_ipm ˤѹ IPM ͤϡǥѥåΥ˰
Ѥ롥㤨С륿 IPM  1 ѹ塤餫γߤ
̤ΥڤؤȡڤؤäΥǤ IPM  1 ˤ
롥

chg_ipm 򥵥ݡȤ뤿ˡߥϥɥνʤɤ˥Хإ
ɤƤ롥ǡSUPPORT_CHG_IPM ȤޥˤꡤΥ
ӥ򥵥ݡȤ뤫ɤڤؤ褦ˤƤ롥
SUPPORT_CHG_IPM ϡcpu_config.h  #define Ƥ롥

68040¸γߥޥѹȤΤΥӥλͤϼ
̤ꡥ

(1) chg_ipm			ߥޥѹ

CAPI
	ER ercd = chg_ipm(IPM ipm);

ڥѥ᡼
	IPM	ipm		ꤹ٤ IPM 

ڥ꥿ѥ᡼
	ER	ercd		顼

ڥ顼ɡ
	E_CTX		ƥȥ顼
	E_PAR		ѥ᡼顼ipm 

ڵǽ

IPMInterrupt Priority Maskˤ ipm ǻꤵ줿ͤꤹ롥ꤷ
ͤ 06 ʳξ硤E_PAR顼Ȥʤ롥IPM  16 ꤷ
Ǥ⡤ǥѥå϶ػߤʤޤꤷ IPM ͤϡǥѥ
ػ߸Ѥ롥

ʤΥӥѤơIPM  7 ʤ٤Ƥγߤػߡˤ
ꤹ뤳ȤϤǤʤIPM  7 ˤˤϡloc_cpu Ȥ٤
Ǥ롥

ΥӥϡƥȤ CPUåֲλΤ߸
ӽФȤǤ롥󥿥ƥȤ CPUå֤ǸƤӽФ
ˤϡE_CTX顼Ȥʤ롥

(2) get_ipm			ߥޥλ

CAPI
	ER ercd = get_ipm(IPM *p_ipm);

ڥѥ᡼
	ʤ

ڥ꥿ѥ᡼
	ER	ercd		顼
	IPM	ipm		ߤ IPM 

ڥ顼ɡ
	E_CTX		ƥȥ顼

ڵǽ

ߤ IPMInterrupt Priority Maskˤͤɤ߽Фipm ֤

ΥӥϡƥȤ CPUåֲλΤ߸
ӽФȤǤ롥󥿥ƥȤ CPUå֤ǸƤӽФ
ˤϡE_CTX顼Ȥʤ롥

2.3 CPU㳰ǽCPU㳰ϥɥ

DEF_EXC ǻꤹߥϥɥֹexcnoˤϡ68040 Ǥ㳰٥
ֹɽΥǡEXCNOˤ unsigned intƤ롥
DEF_EXC ǡ㳰٥ֹȤͭǤʤͤ䡤CPU㳰бʤ
ꤷưݾڤʤ

2.4 ȥåץ⥸塼

68040¸Υȥåץ⥸塼start.SˤǤϡν


(A) ץå⡼ɤνȥåݥ󥿤ν

ǽˡ٤ƤΥå̵塤ɥåȥǡ
򶦤ͭˤ롥ޤץåΥ⡼ɤ򡤥ѥХ⡼ɡ
ߥ⡼ɤꤷNMI ʳΤ٤Ƥγߤػߤ롥ȥ
ץ⥸塼ϡѥХ⡼ɤǵưʤФʤʤΤǡ
ѥХ⡼ɤꤹΤϡϥǤ롥

ˡߥåݥ󥿡SPIˤ STACKTOP ꤹ롥ǳ
ߥåݥ󥿤ꤵ줿åΰϡͥ뵯ư󥿥
ƥѤΥåΰȤƻȤ롥STACKTOP ϡsys_config.h 
뤳ȤꤷƤ롥ޤե졼ݥ󥿤 0 ˽
롥

(B) hardware_init_hook θƽФ

hardware_init_hook  0 Ǥʤˤϡhardware_init_hook ƤӽФ
hardware_init_hook ϡͥ뤬ư˹Ԥɬפ륿
Ȱ¸νԤѰդƤ롥hardware_init_hook ɤǤ
Ƥʤ硤󥫤ǤΥܥ 0 ʥ󥫥
ץ˵Ҥˡ

(C) bss dataν

bss򥼥ꥢ롥ޤdata롥

(D) software_init_hook θƽФ

software_init_hook  0 Ǥʤˤϡsoftware_init_hook ƤӽФ
software_init_hook ϡͥ뤬ư˹Ԥɬפ륽եȥ
ĶʶŪˤϡ饤֥˰¸νԤѰդƤ롥
software_init_hook ɤǤƤʤ硤󥫤ǤΥ
 0 ʥ󥫥ץ˵Ҥˡ

(E) ͥεư

kernel_start ʬͥư롥kernel_start ꥿
Ƥ뤳ȤꤷƤʤ


DVE-68K/40 ƥ¸εǽ

3.1 ƥ९åɥ饤

ƥ९åɥ饤Ф isig_tim ƤӽФϡsys_defs.h  
TIC_NUME  TIC_DENO Ƥɸ 1ߥüˡ
ѹ뤳Ȥǡisig_tim ƤӽФѹ뤳ȤǤ롥
ޤ٤ 1äǤ뤿ᡤ1ñ̤üˤʤͤꤷ
ˤϡisig_tim θƽФ˸뤳Ȥˤʤ롥

3.2 ǽɾѥƥﻲȵǽ

DVE-68K/40¸Ǥϡǽɾѥƥﻲȵǽvxget_timˤ
ݡȤƤ롥ǽɾѥƥ٤ 1ñ̤Ǥ뤬
ޤθͤɤ߽Ф˰Ū˥ޤߤɬפ뤿ᡤ
vxget_tim Ƥ٤˥ƥ९åŤ٤뤳Ȥˤʤ롥ʤ
SYSUTIM UD64ӥåȤ̵ˤƤ롥

3.3 ꥢ륤󥿥եɥ饤

DVE-68K/40¸Υꥢ륤󥿥եɥ饤ФϡDVE-68K/40 CPUܡ
ɤ2ĤΥꥢ륤󥿥ե򥵥ݡȤƤ롥ݡID=1 ݡ
AݡID=2 ݡB бƤ롥ǥեȤΥꥢݡȤϡ
ݡB ꤷƤʥݡA ϥ֤ޤ ROM˥ǻѤ뤿ˡ

3.4 ޥå

DVE-68K/40¸ǤϡCPUܡɾΥ꤬ 4MB ξꤷ
ΰ 0x100000xfffff 1MBǡΰ 0x100000 3MB
ƥѤΥåΰ 0x3fffff ˳ݤƤ롥0
0xffff  64KB ϡROM˥ޤϥ֤ΥꥢȤʤäƤꡤ
Ѥ뤳ȤǤʤ


ȯĶι

4.1 ȯĶγ

ͥ򥤥󥹥ȡ뤹ˤϡJSPͥۥåȤ˴ޤޤʳ
ˡʲΥġ뤪ӥ饤֥꤬ɬפǤ롥

    GNUȯĶ
	GCC-CORECѥ顥ưǧ 2.95.2
	BINUTILSʥ֥顤󥫤ʤɡưǧ 2.10
	NEWLIBɸC饤֥ꡥưǧ 1.8.1
    perlưǧ 5.005
    GNU Makeưǧ 3.77

ץꥱɸC饤֥Ѥʤˤ NEWLIB ̵
褤GCC 򥤥󥹥ȡ뤹ݤ NEWLIB äԹ礬褤ᡤ
NEWLIB ޤƥ󥹥ȡ뤹ˡɸȤ롥

4.2 ȯĶιˡ

嵭γȯĶϡ٤ƥե꡼Υɤ鹽ۤ뤳ȤǤ롥
ǤϡUNIXޥưǧ Linux˾ǳȯĶۤ
롥

(1) 

ȤȤơۥȾɬפʥġ򥤥󥹥ȡ뤹롥Ūˤϡ
perl  GNU MakeʰʲǤ makeޥɤ GNU Make ǤΤ
ˤΥ󥹥ȡ뤬ɬפǤ롥ˡȯĶιۤ˻Ȥˡ
ۥȾˤǿ GCC 򥤥󥹥ȡ뤷ƤȤ˾ޤ

ʤJSPͥۥåȤ˴ޤޤ perlץȤϡperl Υץ
ब /usr/bin/perl ˤΤȲꤷƵҤƤ롥perl Υץ
ΥѥȰۤʤϡ perlץȤƬ perl 
ѥɬפ롥

(2) ǥ쥯ȥη

ȯĶۤ뤿ˡʲΥǥ쥯ȥѰդ롥

    <PREFIX>		ȯĶ򥤥󥹥ȡ뤹ǥ쥯ȥ
    <BINUTILS-SRCDIR>	BINUTILS ΥŸǥ쥯ȥ
    <BINUTILS-OBJDIR>	BITUTILS Υ֥Ȥǥ쥯ȥ
    <GCC-SRCDIR>	GCC-CORE ΥŸǥ쥯ȥ
    <GCC-OBJDIR>	GCC-CORE Υ֥Ȥǥ쥯ȥ
    <NEWLIB-SRCDIR>	NEWLIB ΥŸǥ쥯ȥ
    <NEWLIB-OBJDIR>	NEWLIB Υ֥Ȥǥ쥯ȥ

(3) BINUTILS Υ󥹥ȡ2.10

μ˽äơBINUTILS 򥤥󥹥ȡ뤹롥

    % cd <BINUTILS-OBJDIR>
    % <BINUTILS-SRCDIR>/configure \
		--target=m68k-unknown-elf \
		--prefix=<PREFIX>
    % make
    % make install

(4) GCC-CORE Υ󥹥ȡ2.95.2

μ˽äơGCC-CORE 򥤥󥹥ȡ뤹롥

    % mkdir <GCC-OBJDIR>
    % cd <GCC-OBJDIR>
    % <GCC-SRCDIR>/configure \
		--target=m68k-unknown-elf \
		--prefix=<PREFIX> \
		--with-gnu-as --with-gnu-ld --with-newlib \
		--with-headers=<NEWLIB-SRCDIR>/newlib/libc/include
    % make
    % make install

(5) NEWLIB Υ󥹥ȡ1.8.1

μ˽äơNEWLIB 򥤥󥹥ȡ뤹롥

    % mkdir <NEWLIB-OBJDIR>
    % cd <NEWLIB-OBJDIR>
    % <NEWLIB-SRCDIR>/configure \
		--target=m68k-unknown-elf \
		--prefix=<PREFIX>
    % make
    % make install

4.3 WindowsǤγȯĶ

Cygwin Ѥ뤳Ȥǡ嵭γȯĶ Windows˥󥹥ȡ뤹뤳
ȤǤ롥ŪˤϡBINUTILSGCC-CORENEWLIB 򥤥󥹥ȡ뤹
ˡCygwin 򥤥󥹥ȡ뤹롥Cygwin  perl Υ󥹥ȡ
ϼ̤ꡥ

(1) CygwinΥ󥹥ȡ1.1.4

Cygwin ϡhttp://sourceware.cygnus.com  Ring Server
http://www.ring.gr.jpˤʤɤɤ뤳ȤǤ롥Cygwin
򥤥󥹥ȡ뤷顤ʲΥޥɤ¹Ԥơꥢ륤󥿥ե
 RAWǥХȤƻȤ褦ˤ롥

    % mkdir /dev	
    % mount \\.\com1 /dev/com1
    % mount \\.\com2 /dev/com2

(2) perl Υ󥹥ȡ5.6.0

CygwinĶѤ perl http://cygutils.netpedia.net/V1.1 
perl-5.6.0.cygwin1.1.tar.bz2 ˤ롥ɤʲμ
ǥ󥹥ȡ뤹롥

    % cd /
    % bunzip2 perl-5.6.0.cygwin1.1.tar.bz2
    % tar xvf perl-5.6.0.cygwin1.1.tar
    % ln -s /usr/local/bin/perl /usr/bin/perl


¾

5.1 ǥ쥯ȥꡦե빽

68040 åȰ¸γƥեγפϼ̤ꡥ

    config/m68k/
	Makefile.config	Makefile68040¸
	cpu_defs.h	ץå¸Υץꥱ
	cpu_config.h	ץå¸ι
	cpu_config.c	ץå¸δؿ
	cpu_support.S	ץå¸Υ֥롼
	cpu_context.h	ƥ
	makeoffset.c	offset.h ݡȥץ
	cpu_insn.h	٥Υץå롼
	start.S		ȥåץ⥸塼
	m68kelf.ld	󥫥ץ

    config/m68k/dve68k/
	Makefile.config	MakefileDVE-68K/40¸
	sys_defs.h	ƥ¸Υץꥱ
	sys_config.h	ƥ¸ι
	sys_config.c	ƥ¸δؿ
	sys_support.S	ƥ¸Υ֥롼
	hw_timer.h	롼
	hw_serial.h	ꥢ륤󥿥եǥХ롼
	dve68k.h	DVE-68K/40 ϡɥ

5.2 åȤؤΥɤȼ¹

桼ޥ˥奢μˤäơJSPͥ뤪ӥץꥱ
ץबۤǤȡåȥƥإɤƼ¹Ԥ
ɬפ롥ɤȼ¹ԤˡˤϡROM˥Ѥˡȡ
gdbܥ֤Ѥˡ롥

(A) ROM˥Ѥˡ

åȥƥब ROM˥äƤˤϡХʥޤ
ȥ SΥեROM˥ΥɥޥɤȤä
ɤ¹ԥޥɤȤäƥɤϤ¹Ԥ
褤

DVE-68K/40 CPUܡɤξ硤 ROM˥Ȥбü
ȤѤȡR ޥɤǥХʥΥեɤ뤳
Ǥ롥

    #R 10000
    \up jsp.bin

ץμ¹Ԥϡg ޥɤǹԤ

    #g 10000

(B) ֤Ѥˡ

JSPͥȰ˻Ȥ褦˲¤֤ΥϡJSPͥ
֥Ȥɤ뤳ȤǤ롥֤ɤ
顤READMEե˽äƥ֤ۤROM ޤϥեå
񤭹ࡥ

gdbܥ֤Ѥƥץɡ¹Ԥϼ̤ꡥ

    % m68k-unknown-elf-gdb jsp
    GNU gdb 4.18
    Copyright 1998 Free Software Foundation, Inc.
    .......... ʲå³ ..........
    (gdb) 

gdb ư顤Υޥɤ¹Ԥơåȥƥ³롥

    (gdb) set remotebaud 38400
    (gdb) target remote /dev/ttyXX

/dev/ttyXX ˤϡåȥƥ³Ƥ륷ꥢݡȤΥǥ
̾ꤹ롥ˡload ޥɤˤꡤץ
롥

    (gdb) load

ץμ¹Ԥϡcontinue ޥɤǹԤ

    (gdb) continue

ץ¹ NMI 򤫤DVE-68K/40 CPUܡɤǤϡABORT
򲡤ˤȤǡץߤơgdb ᤹ȤǤ롥

ʾ
