📄 cpu_support.s
字号:
/* * 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 * * 惧淡螟侯涪荚は·Free Software Foundation によって给山されている * GNU General Public License の Version 2 に淡揭されている掘凤か·笆 * 布の(1)×(4)の掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェ * アを猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· * 网脱と钙ぶ∷することを痰浸で钓满するˉ * (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 * 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 * スコ〖ド面に崔まれていることˉ * (2) 塑ソフトウェアを浩网脱材墙なバイナリコ〖ド∈リロケ〖タブルオブ * ジェクトファイルやライブラリなど∷の妨で网脱する眷圭には·网脱 * に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟侯涪山绩· * この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ * (3) 塑ソフトウェアを浩网脱稍材墙なバイナリコ〖ドの妨または怠达に寥 * み哈んだ妨で网脱する眷圭には·肌のいずれかの掘凤を塔たすことˉ * (a) 网脱に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟侯 * 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ * (b) 网脱の妨轮を·侍に年める数恕によって·惧淡螟侯涪荚に鼠桂する * ことˉ * (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 * 巢からも·惧淡螟侯涪荚を倘勒することˉ * * 塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚は· * 塑ソフトウェアに簇して·その努脱材墙拉も崔めて·いかなる瘦沮も乖わ * ないˉまた·塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じたい * かなる禄巢に簇しても·その勒扦を砷わないˉ * * @(#) $Id: cpu_support.S,v 1.10 2002/04/10 11:08:18 hiro Exp $ *//* * プロセッサ巴赂モジュ〖ル アセンブリ咐胳婶∈M68040脱∷ */#define _MACRO_ONLY#include "jsp_kernel.h"#include "offset.h"/* * タスクディスパッチャ * * dispatch は·マスタモ〖ドˇ充哈み敦贿觉轮で钙び叫さなければならな * いˉexit_and_dispatch も·マスタモ〖ドˇ充哈み敦贿觉轮で钙び叫すの * が付搂であるが·カ〖ネル弹瓢箕に滦炳するため·充哈みモ〖ドで钙び叫 * した眷圭にも滦炳しているˉ */ .text .globl dispatch .globl exit_and_dispatchdispatch: movem.l %d2-%d7/%a2-%a6, -(%sp) /* レジスタを瘦赂 */ move.l runtsk, %a0 /* A0 を runtsk に */ move.l %sp, TCB_msp(%a0) /* タスクスタックを瘦赂 */ move.l #dispatch_r, TCB_pc(%a0) /* 悸乖浩倡戎孟を瘦赂 */ jbra dispatcherdispatch_r: movem.l (%sp)+, %d2-%d7/%a2-%a6 /* レジスタを牲耽 */ btst.b #TCB_enatex_bit, TCB_enatex(%a0) jbeq dispatch_r_1 /* enatex が FALSE ならリタ〖ン */ tst.l TCB_texptn(%a0) /* texptn が 0 でなければ */ jbne call_texrtn /* タスク毋嘲借妄ル〖チンの钙叫し */dispatch_r_1: rtsexit_and_dispatch: or.w #0x1000, %sr /* マスタモ〖ド */dispatcher: /* * ここではマスタモ〖ドˇ充哈み敦贿觉轮でなければならないˉ */ move.l schedtsk, %a0 move.l %a0, runtsk /* schedtsk を runtsk に */ jbeq dispatcher_1 /* runtsk があるか々 */ move.l TCB_msp(%a0), %sp /* タスクスタックを牲耽 */ move.l TCB_pc(%a0), %a1 /* 悸乖浩倡戎孟を牲耽 */ jmp (%a1)dispatcher_1: stop #0x2000 /* 充哈み略ち∈充哈みモ〖ド∷ */ /* * ここで充哈みモ〖ドに磊り垂えるのは·ここで券栏する充哈み借妄 * にどのスタックを蝗うかという啼玛の豺疯と·充哈みハンドラ柒で * のタスクディスパッチの松贿という2つの罢蹋があるˉ * この stop 炭吾は·IPM を 0 にするが·塑丸は task_intmask に * 肋年すべきであるˉM68040 では·stop 炭吾のパラメ〖タに年眶し * かとれないため·やむをえず 0 にしている∈stop 炭吾を 8つ事べ * て·task_intmask の猛で若び尸ける缄はあるが·そこまでやる罢 * 盗はないと雇えた∷ˉ */ or.w #0x1700, %sr /* マスタモ〖ドˇ充哈み敦贿 */ tst.l reqflg /* reqflg が FALSE なら */ jbeq dispatcher_1 /* dispatcher_1 へ */ clr.l reqflg /* reqflg を FALSE に */ jbra dispatcher /* * タスク弹瓢箕借妄 */ .text .globl activate_ractivate_r:#ifdef SUPPORT_CHG_IPM /* t_unlock_cpu 陵碰の借妄 */ move.w %sr, %d0 /* 充哈みマスクを task_intmask に */ and.w #~0x0700, %d0 or.w task_intmask, %d0 move.w %d0, %sr#else /* SUPPORT_CHG_IPM */ and.w #~0x0700, %sr /* 充哈み钓材 */#endif /* SUPPORT_CHG_IPM */ move.l (%sp)+, %a0 /* タスクの弹瓢戎孟を a0 に */ jmp (%a0)/* * 充哈みハンドラ】CPU毋嘲ハンドラ叫庚借妄 * * ret_int は充哈みモ〖ドˇ充哈み敦贿觉轮で·ret_exc はマスタモ〖ドˇ * 充哈み敦贿觉轮で钙び叫さなければならないˉまた ret_exc は·スクラッ * チレジスタを瘦赂した觉轮で钙び叫すことˉ */ .text .globl ret_int .globl ret_excret_int: addq.l #8, %sp /* スロ〖アウェイフレ〖ムを嘉てる */ or.w #0x1000, %sr /* マスタモ〖ド */ movem.l %d0-%d1/%a0-%a1, -(%sp) /* スクラッチレジスタを瘦赂 */ret_exc: clr.l reqflg /* reqflg を FALSE に */ move.l runtsk, %a0 /* A0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -