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

             Release 1.4.1бǽ: 6-Oct-2004

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

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

 嵭Ԥϡʲ (1)(4) ξ狼Free Software Foundation 
 ˤäƸɽƤ GNU General Public License  Version 2 ˵
 ҤƤ˸¤ꡤܥեȥܥեȥ
 ѤΤޤࡥʲƱˤѡʣѡۡʰʲ
 ѤȸƤ֡ˤ뤳Ȥ̵ǵ롥
 (1) ܥեȥ򥽡ɤηѤˤϡ嵭
     ɽѾ浪Ӳ̵ݾڵ꤬Τޤޤηǥ
     ˴ޤޤƤ뤳ȡ
 (2) ܥեȥ򡤥饤֥ʤɡ¾Υեȥȯ˻
     ѤǤǺۤˤϡۤȼɥȡ
     ԥޥ˥奢ʤɡˤˡ嵭ɽѾ浪Ӳ
     ̵ݾڵǺܤ뤳ȡ
 (3) ܥեȥ򡤵Ȥ߹ʤɡ¾Υեȥȯ˻
     ѤǤʤǺۤˤϡΤ줫ξ
     ȡ
   (a) ۤȼɥȡѼԥޥ˥奢ʤɡˤˡ嵭
       ɽѾ浪Ӳ̵ݾڵǺܤ뤳ȡ
   (b) ۤη֤̤ˡˤäơTOPPERSץȤ
       𤹤뤳ȡ
 (4) ܥեȥѤˤľŪޤϴŪ뤤ʤ»
     ⡤嵭ԤTOPPERSץȤդ뤳ȡ

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

 @(#) $Id: m68k.txt,v 1.13 2004/10/06 06:51:51 honda Exp $
------------------------------------------------------------------------


M68040 åȰ¸γ

1.1 åȥƥ

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

1.2 ȯĶȼ¹ԴĶ

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

¹ԴĶȤơROM˥ѤˡGDB֤Ѥˡ򥵥ݡ
Ƥ롥GDB֤ѤˤϡMakefileǡDBGENVGDB_STUB
ʥǥեȡˡROM˥ѤˤϡDBGENVʤ

1.3 ݡȤ뵡ǽγ

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

1.4 ¾ΥåȤؤΥݡƥ

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

¾M68KΥץåؤΥݡƥ󥰤ˤĤƤϡޥå
˳ߥåM68020ʹߤΥץåؤŪưפ˥ݡƥ
ǽȻפ뤬ΥץåؤΥݡƥ󥰤Ϥݤ



M68040ץå¸εǽ

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

2.1 ǡ

signed intunsigned intsize_tΥϡ32ӥåȤǤ
롥

2.2 ߴǽȳߥϥɥ

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

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

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

ΥӥϡƥȤCPUå֤ξ
ˤΤ߸ƤӽФȤǤ롥chg_ipmˤIPM0ʳʤʤ餫
γߤػߤƤ֡ˤˤǤ⡤ǥѥå϶ػߤ줺
chg_ipmˤѹIPMͤϡǥѥåΥ˰Ѥ롥
㤨С륿IPM1ѹ塤餫γߤˤ̤Υ
ڤؤȡڤؤäΥǤIPM1ˤʤ롥IPM0 
ʳꤷƤƤ⡤¹ԤǤ륿ʤʤäˤIPMϰŪ
0ˤʤ롥ϡM68040̿᥻åȤ餯»Ǥʲ
ʤ櫓ǤϤʤˡ

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

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

(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 ͤϡǥѥ
Ѥ롥ǥѥåػߤˤϡdis_dsp ʻѤ
Ф褤

ʤΥӥѤơ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ˤϡM68040 Ǥ㳰٥
ֹɽΥǡEXCNOˤ unsigned intƤ롥
DEF_EXC ǡ㳰٥ֹȤͭǤʤͤ䡤CPU㳰бʤ
ꤷưݾڤʤ

2.4 ȥåץ⥸塼

M68040¸Υȥåץ⥸塼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_NUMETIC_DENOƤɸ 1ߥüˡ
뤳Ȥǡisig_timƤӽФѹ뤳ȤǤ롥
ޤ٤1äǤ뤿ᡤ1ñ̤üˤʤͤꤷˤϡ
isig_timθƽФ˸뤳Ȥˤʤ롥

3.2 ǽɾѥƥﻲȵǽ

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

3.3 ꥢ륤󥿥եɥ饤

DVE-68K/40¸Υꥢ륤󥿥եɥ饤ФϡDVE-68K/40 CPUܡ
ɤ2ĤΥꥢ륤󥿥ե򥵥ݡȤƤ롥ݡID=1ݡB
ݡID=2ݡAбƤ롥ݡȤγƤդˤƤΤϡ
GDB֤ޤROM˥ݡAѤ뤿Ǥ롥

3.4 ޥå

DVE-68K/40¸ǤϡCPUܡɾΥ꤬4MBξꤷ
0x100000xfffff1MBǡΰ0x1000003MB󥿥
ƥѤΥåΰ0x3fffff˳ݤƤ롥00xffff64KB 
ϡROM˥ޤGDB֤ΥꥢȤʤäƤꡤѤ뤳Ȥ
Ǥʤ


ȯĶι

ȯĶιˡˤĤƤϡGNUȯĶۥޥ˥奢򻲾Ȥ뤳ȡ

4.1 ȯĶΥС

ưǧġΥСϰʲ̤Ǥ롥

    BINUTILS : 2.13.2.1
    GCC-CORE : 2.95.3
    GDB      : 5.3
    NEWLIB   : 1.9.0

GCC 2.95.3ǤϡץꥱɸC饤֥Ѥʤʤ顤
NEWLIBɬפʤ

GCC 3.3Ѥ硤ѥ餬ɸC饤֥ؿƤӽФɤ
뤿ᡤNEWLIBɬפˤʤ롥NEWLIBɸC饤֥󥯤
ˡMakefileLIBS˰ʲΤ褦 -lc ɲäɬפ롥

    LIBS := $(LIBS) $(CXXLIBS) -lc -lgcc


¾

5.1 ǥ쥯ȥꡦե빽

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

    config/m68k/
	Makefile.config	MakefileM68040¸
	cpu_defs.h	ץå¸Υץꥱ
	cpu_config.h	ץå¸ι
	cpu_config.c	ץå¸δؿ
	cpu_support.S	ץå¸Υ֥롼
	cpu_context.h	ƥ
	cpu_rename.def	ͥ̾Υ͡
	cpu_rename.h	ͥ̾Υ͡
	cpu_unrename.h	ͥ̾Υ͡
	tool_defs.h	ȯĶ¸ΥץꥱGNUȯĶѡ
	tool_config.h	ȯĶ¸ιGNUȯĶѡ
	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	ƥ¸Υ֥롼
	sys_rename.def	ͥ̾Υ͡
	sys_rename.h	ͥ̾Υ͡
	sys_unrename.h	ͥ̾Υ͡
	hw_timer.h	롼
	hw_serial.h	SIOɥ饤
	hw_serial.cfg	SIOɥ饤ФΥե졼ե
	dve68k.h	DVE-68K/40 CPUܡɤΥϡɥ񸻤
	dve68k_dga.h	DGAΥ桼ƥƥ

    pdic/simple_sio/
	upd72001.h	PD72001 ʰSIOɥ饤дϢ
	upd72001.c	PD72001 ʰSIOɥ饤

5.2 åȤؤΥɤȼ¹

åȤؤΥɤȼ¹ԼˤĤƤϡGNUȯĶۥޥ˥
Ƥ뤬ʲǤϡM68040DVE-68K/40 CPUܡɤξ
ͭλˤĤ롥

(A) ROM˥Ѥˡ

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

    #R 10000
    \up jsp.bin

ץμ¹ԤϡgޥɤǹԤ

    #g 10000

(B) GDB֤Ѥˡ

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

ʾ
