星期五, 2月 25, 2005
從pchome買的望遠鏡和手電筒
星期一, 2月 21, 2005
星期六, 2月 19, 2005
星期五, 2月 18, 2005
動畫編年史
天地形成之初:清氣上升,濁氣下降。濁氣形成白面者(《潮與虎》)
150億年前:五面怪創造機械生命體(《變形金剛》)
120億年前:宇宙大帝反叛(《變形金剛》)
46億年前:亞斯創造地球(《熔岩大使》)
10億年前:亞斯創造生命(《熔岩大使》)
10億年前:幻魔大王開始破壞宇宙(《幻魔大戰》)
6億年前:潘該亞大陸上出現高度文明(《超力戰隊》)
3億5千萬年前:怪獸巴尼拉和阿波拉斯出現,同時代存在高度文明(《奧特曼》)
3億年前:降臨者來到地球(《?殖裝甲》)
2億年前:拉貢支配地球(《奧特曼Q》)
1億7千萬年前:從恐龍進化來的古代文明繁榮(《恐龍戰隊》)
1億5千萬年前:哥斯拉族繁榮(《哥斯拉逆襲》)
1億5千萬年前:哥莫拉族繁榮(《奧特曼》)
1億3千萬年前:三頭龍基多拉吃掉了上萬頭恐龍(《魔斯拉3·基多拉來襲》)
1億年前:克塞隊與哥德米斯人戰鬥(《恐龍特急克塞》)
6500萬年前:蓋塔?照射地球,恐龍滅絕。殘存的爬蟲人類逃往地下(《蓋塔機器人》)
6500萬年前:超龍神與隕石墜落,恐龍滅絕(《勇者王》)
6500萬年前:雷杰特寄生在恐龍身上,恐龍滅絕(《奧特曼蓋亞》)
6500萬年前:迪斯基多拉破壞環境,恐龍滅絕(《魔斯拉 96年版》)
6500萬年前:降臨者丟下隕石,恐龍滅絕(《?殖裝甲》)
6500萬年前:鬼火隕石令空氣中氧氣含量?少,恐龍滅絕(《恐龍特急克塞》)
1000萬年前:塞伯特恩星的奴隸機器人反叛,塞伯特恩迎來黃金時代(《變形金剛》)
900萬年前:塞伯特恩黃金時代終結,擎天柱誕生。汽車人和霸天虎開始戰爭。(《變形
金剛》)
400萬年前:塞伯特恩的能源枯竭,汽車人和霸天虎在尋找新能源的過程中,因戰鬥而墜
落在北美。兩軍機能停止(《變形金剛》)
300萬年前:雷姆利亞大陸沈沒(《哥斯拉對麥加羅》)
240萬年前:亞特蘭蒂斯人從M78星雲來到地球(《不思議之海的娜迪亞》)
200萬年前:哥斯拉族繁榮(《哥斯拉》)人類登場以前:諾馬魯特人支配地球(《奧特
曼7號》)
100萬年前:猿猴觸摸黑石板,人類誕生(《2001太空奧德賽》)
100萬年前:23世紀人超越時間,成?人類的祖先(《改造人009》)
100萬年前:降臨者創造人類(《?殖裝甲》)太古時代:亞班大陸沈沒(《火焰人》)
50萬年前:埃爾蒂大陸沈沒(《海底人8823》)
50萬年前:史前文明滅絕(《MACROSS》)
26萬年前:奧特曼星的太陽爆發(《奧特曼》)
16萬年前:奧特曼之父誕生(《奧特曼》)
14萬年前:奧特曼之母誕生(《奧特曼》)
10萬年前:游星米斯特羅伊德被核戰爭滅亡(《地球防衛軍》)
10萬年前:UFO墜落南極(《THE THING》)
5萬年前:暗黑結社格爾戈姆支配人類(《假面騎士BLACK》)冰河期以前:地底人?了逃
避地殼變動?入地下(《奧特曼》)
3萬年前:奧特曼之父與奧特曼之母結婚(《奧特曼》)
3萬年前:索隆王國被因貝姆滅亡(《冰河戰士》)
3萬年前:博魯星人令地球陷入冰河期(《奧特曼7號》)
3萬年前:?了逃避冰河期,惡魔一族進入冬眠(《惡魔人》)
3萬年前:降臨者離開地球,阿卡菲爾進入休眠(《?殖裝甲》)
3萬年前:藍色諾亞著陸(《不思議之海的娜迪亞》)
2萬年前:奧特曼誕生(《奧特曼》)
2萬年前:坎貝爾星人來到地球,進入休眠期(《超電磁機器人孔巴特拉V》)
1萬5千年前:超古代文明製造了加美拉和凱奧斯(《加美拉·大怪獸空中?戰》)
1萬4千年前:穆帝國被幽禁在撒哈拉沙漠(《鐵人老虎7號》)
1萬2千年前:穆帝國被戰士塞達消滅(《宇宙刑事塞達》)
1萬2千年前:穆帝國遺留下萊丁,沈沒(《勇者萊丁》)
1萬2千年前:穆帝國因被詛咒的命運而沈沒(《海底軍艦》)
1萬2千年前:亞特蘭帝斯大陸被穆打敗,逃亡至宇宙。穆大陸沈沒(《大白鯨》)
1萬1千年前:亞特蘭帝斯大陸因民族紛爭而沈沒(《小飛龍》)
1萬年前:雷電假面來到地球,進入休眠(《雷電假面》)
8千年前:北極海的亞特蘭帝斯大陸沈沒,加美拉冬眠(《大怪獸加美拉》)
7千年前:木乃伊人類進入休眠(《奧特曼》)
西元前3388年:天照·迪斯·格蘭德·古利斯·VIII-IV世誕生(《五星物語》)
6千年前:貝獸哥加毀滅阿蘭卡帝國(《奧特曼Q》)
5千年前:三頭龍基多拉毀滅金星文明(《三大怪獸·地球最大的?戰》)
5千年前:奧特曼的前輩蓋亞守衛巴拉吉城(《奧特曼》)
5千年前:巴比倫1世漂流到地球,建設巴比倫之塔(《巴比倫2世》)
5千年前:魎呼和魎皇鬼誕生(《天地無用!》)
3千年前:貝達一族毀滅電子星(《電子戰隊》)
西元前10世紀:亞舍塔羅開始著手準備收集靈魂計劃(《GS美神》)
西元前1050年:白面者滅殷(《潮與虎》)
西元前770年:白面者滅周。(《潮與虎》)
西元前500年:白面者獲得形體(《潮與虎》)
西元前400年:白面者滅馬達卡。(《潮與虎》)
西元前290年:獸矛誕生(《潮與虎》)
西元前215年:阿基米德的學生(?)達密拉斯利用聚焦原理,在西納庫斯大破羅馬艦隊
(《神鬼戰略》)
2千年前:邪馬台王國滅亡,女王卑彌乎帶領少數部下逃入地下(《鋼鐵JEEG》)
2千年前:迪斯馬爾克大元帥進入休眠(《大戰隊》)
2千年前:大和政府流放不知火一族(《鐵王》)
2千年前:秘寶箱飛到地球(《世界忍者戰》)
2千年前:北斗神拳建立(《北斗神拳》)
1千年前:古代邁錫尼帝國滅亡(《大魔神(GREAT MAZINGER)》)
65年:雷穆斯作?尼祿替身死亡,尼祿失?(《尼祿》)
207年:天地志狼和泉真澄在新野出現(《龍狼傳》 )
7世紀前半:聖德太子建造巨大機器人(《世界忍者戰》)
8世紀後半:竹取公主到達地球(《竹取物語》)
894年:白麵者乘坐遣唐使的返航船前往日本(《潮與虎》)
902年:菅原道真死亡,其怨靈成?亞舍塔羅的部下(《GS美神》)
905年,哥菲斯特誕生,後改名?葛之葉(《GS美神》)
939年:來自1500年後的女孩阿時與平民有路邂逅(《火鳥·羽衣篇》)
999年:千年女王交替(《千年女王》)
1156年:安倍泰親擊敗玉藻前,將其封入殺生石(《GS美神》)
1159年:義經誕生,源家被貶(《修羅之刻》)
1160年:日本人類和妖怪聯手擊退白麵者(《潮與虎》)
1171年:巴在寺院遇到老虎(《潮與虎》)
1174年:武藏坊弁慶拜義經?主公(《修羅之刻》)
1184年1月21日:木曾義仲戰死,巴夫人殉情(《修羅之刻》)
1184年1月21日:木曾義仲戰死,巴夫人斬下追擊者的頭顱?義仲送行後,飄然而去(《潮
與虎外傳·雷之舞》)。
1189年4月30日:奧州衣川合戰,弁慶護主身亡,陸奧鬼一以義經替身身份死亡。(《修
羅之刻》)
1189年4月30日:奧州衣川合戰,弁太(弁慶)打死義經,和阿丙一同逃亡(《火鳥》)
1189年4月30日:奧州衣川合戰,義經自殺前被克拉瑪星公主救走(《福星小子》)
1189年4月30日:奧州衣川合戰,義經與弁慶逃到蒙古(《王狼》)
1190年:義經成?成吉思汗(《王狼》)
1205年:源氏幕府滅亡(《安東》)
1212年:京子因時空轉移到達西夏,伊波健吾見到成吉思汗(《王狼》)
西元15世紀:亞舍塔羅蘇醒,開始尋找美神。(《GS美神》)
西元15世紀:長飛丸被蒼月草太郎封印。(《潮與虎》)
1468年:八伏左京介成?八百比丘尼(《火鳥·輪回篇》)
1498年:八伏左京介殺死八百比丘尼(《火鳥·輪回篇》)
1500年前後:快杰獅子丸活躍(《快杰獅子丸》)
1510年:風雲獅子丸活躍(《風雲獅子丸》)
1518年:大魔神在丹波地區出現(《大魔神》)
1532年:大魔神2號在八雲地區出現(《憤怒的大魔神》)
1543年:大魔神3號在飛蟬地區出現(《大魔神逆襲》)
1548年:信長與日吉相遇,日吉之後成?信長行?總監(《瀛男》)
1571年:赤影接受織田信長的命令開始活動(《假面忍者赤影》)
1582年6月2日:本能寺之變,?彥繼承陸奧之名。(《修羅之刻》)
1582年6月2日:本能寺之變,日吉與日影將織田信長從本能寺帶往蒙古(《瀛男》)
1582年6月2日:本能寺之變,明智光秀消滅化身?信長的吸血鬼(《GS美神》)
1583年:改造戰士維加開始與幻魔大王戰鬥(《幻魔大戰》)
1584年:新免武藏出生(《浪客行》)
1588年:前田慶次獲獵奇禦免(《花之慶次》)
1600年9月15日:關原合戰,德川家康被甲斐六郎所殺,影武者世良田二郎三郎元信頂替
成?關原戰指揮(《影武者德川家康》)
1600年9月15日:關原合戰,狂一人屠滅數千德川軍(《鬼眼狂刀》)
1600年9月15日:關原合戰,新免武藏與本位田又八從戰場生還(《浪客行》)
1603年前後:武藏與多拉A夢相遇,得到電光寶劍(《多拉A夢》)
1603年前後:本位田又八改名佐佐木小次郎(《浪客行》)
1612年:武藏在嚴流島?戰前,被阿拉蕾帶到1980年(《阿拉蕾》)
1645年前後:德川幕府打敗清朝侵略(《妖怪武藝帳》)
1650年前後:德川幕府打敗歐洲妖怪侵略(《變身忍者嵐》)17世紀後半:德川光芳周游
日本(《水戶黃門》)
1728年:德川幕府打敗天蝎座的侵略(《魔人獵人觀鶴來》)
1730年:大岡越前守宰相指揮武裝同心隊(《白獅子假面》)
1755年:奧斯卡爾誕生(《凡爾賽的玫瑰》)
1772年:白銀、白金從中國出發,8年後抵達布拉格,開始學習煉金術(《魔偶馬戲團》
)
1782年:白銀和弗蘭西奴結婚,同樣愛上弗蘭西奴的白金將她擄走,白銀踏上追?復仇之
旅。(《魔偶馬戲團》)
1776年:平賀源內被SHADOW誘拐(《奇凱達01》)
1789年:法國大革命。7月13日,安德烈去世;次日,奧斯卡在巴士底獄攻堅戰中陣亡(
《凡爾賽的玫瑰》)
1791年:白銀抵達格羅克村,重病的弗蘭西奴舉火自盡(《魔偶馬戲團》)
1806年:確認在歐洲出現名叫“SAYA”的黑髮少女(《BLOOD?最後的吸血鬼》)
1814年:傀儡弗蘭西奴以及最古老的四人誕生,白金血洗格羅克村。(《魔偶馬戲團》)
1820年:白銀來到格羅克村,用生命之水拯救了部分患ZONAPHA症的村民,最初的“白銀
”誕生(《魔偶馬戲團》)
1849年6月20日:緋村心太誕生(《浪客劍心》)
1858年:阪本龍馬和陸奧出海相遇(《修羅之刻》)
1859年:緋村心太成?飛天禦劍流傳人,改名劍心(《浪客劍心》)
1864年:皮埃爾·阿羅納克斯博士與鸚鵡螺號接觸(《海底兩萬里》)
1864年6月:池田屋事件(新撰組相關作品種種)
1864年12月:緋村劍心誤殺雪代巴,左臉留下十字傷痕(《浪客劍心》)
1865年:在古代遺?發現异星文明(《星方武俠》系列)
1867年:阪本龍馬被伊東甲子太郎襲擊,傷重逝世。之後,陸奧出海擊斃伊東。(《修羅
之刻》)
1868年:鳥羽,伏見一戰後。緋村劍心接受新井赤空的逆刃刀,成?浪客(《浪客劍心》
)
1869年:德國開始研究能?到達大氣層外的超級炮彈“齊格佛?德計劃”(《星方武俠》
系列)
1872年:菲利亞斯·福克爵士在80天內環繞地球一周(《80天環游地球》)
1878年5月14日:大久保利通被瀨田宗次郎暗殺(《浪客劍心》)
1880年:喬斯達爵士收養迪奧(《JOJO奇妙冒險》)
1888年:迪奧成?吸血鬼,導致倫敦南部風騎士鎮517人失?(《JOJO奇妙冒險》)
1889年:新亞特蘭帝斯發表全人類降伏勸告(《不思議之海的娜迪亞》)
1889年:加納周助和風間一太郎逃獄(《王道之犬》)
1892年:在法國貴族中確認小夜的存在,同年,取得小夜的血液樣本(《BLOOD?最後的
吸血鬼》)
1899年:3個義大利人登陸月球(《月球探險》)
1900年:廣東惠州起義,加納周助擔任指揮官(《王道之狗》)
1902年:火星人入侵地球,由于傳染病而失敗(《大戰火星人》)
1908年:神秘隕石?帶超能源比姆拉在通古斯墜落(《戰國魔神》)
1910年前後:夢邪鬼令幼年希特勒夢見征服世界(《福星小子》)
1911年:與火星文明接觸(《星方武俠》系列)
1912年:英國皇家科學協會遠征隊在非洲發現“失落的世界”(《失落的世界》)
1914年:第一次世界大戰前,竹子開花(《奧特曼Q》)
1923年:翼手秘密?入日本(《BLOOD?最後的吸血鬼》)
1923年9月1日:關東大地震,著名影星藤原千代子出生(《千年女優》)
1930年:杰頓星人開始對地球偵查(《奧特曼》)
1935年:嬰兒超人墜落地球(《超人》)
1937年:侵華日軍在中國大陸遭到异形生物襲擊(《機神兵團》)
1938年:藤原千代子出道(《千年女優》)
1939年:惡魔人偶操縱希特勒,第二次世界大戰勃發(《改造人009》)
1939年:馬莫操縱希特勒,第二次世界大戰勃發(《魯邦三世》)
1944年:透明人組成的特攻部隊在賽班島全滅(《透明人》)
1944年:哥斯拉在拉格斯島上擊退美軍(《哥斯拉VS三頭龍基多拉》)
1944年:德國進行BIG-X計劃(《BIG-X》)
1944年:德國開始研究水栖改造人(《馬迪杰克》)
1944年:德國開始研究將動植物的生體組織移植給人類(《假面騎士》)
1944年:日本開始開發萬能戰艦轟天號(《海底軍艦》)
1944年:日本開始開發鐵人28號(《鐵人28號》)
1944年:日本開始開發傳送兵器(《電送人》)
1944年:日本開始開發人造人兵器(《超人機》)
1944年:日本開始開發改造人(《改造人》)
1945年4月:拉克西絲在柏林出現(《五星物語》)
1945年:廣島原子彈爆炸,不死人的心臟遺失(《弗蘭肯對海底怪獸》)
1945年:日軍科學家天回通過琵琶湖底的時空隧道回到戰國時代(《瀛男》)
1945年:埃?奧斯星滅亡,王子逃亡到地球(《未來機器人達爾達尼亞斯》)
1946年:對地底魔人兵器哥達姆製造(《哥達姆5》)
1946年:日本發生獵奇殺人事件,確認類似翼手的生物(《BLOOD?最後的吸血鬼》)
1952年:在巴德斯島遺?調查團發現古代邁錫尼帝國的機械巨人(《魔神Z》)
1954年:哥斯拉在東京登陸(《哥斯拉》)
1955年:哥斯拉和安吉拉斯在大阪登陸(《哥斯拉的逆襲》)
1956年:拉頓破壞九州(《空中大怪獸拉頓》)
1957年:米斯特利安侵略地球,地球防衛軍組建(《地球防衛軍》)
1957年:恐龍栖息的火山島在太平洋上隆起(《怪獸王子》)
1957年:頭頂高50英尺的鋼鐵機器人在美國墜落(《鐵巨人》)
1958年:液體人叢氫彈爆炸試驗中誕生(《美女與液體人》)
1960年:人類賈米拉誕生,後來成?宇航員(《奧特曼》)
1960年:發生氣體人犯罪(《氣體人1號》)
1961年:魔斯拉出現,在東京塔上作繭(《魔斯拉》)
1962年:第三次世界大戰爆發(《世界大戰爭》)
1962年:大金剛試圖搬運日本(《大金剛對哥斯拉》)
1963年:魔神Z設計開始(《魔神Z》)
1963年:穆帝國要求全世界歸還殖民地(《海底軍艦》)
1963年:神宮寺諒一乘坐的飛機在中美洲上空失事,諒一失去記憶,被海原神收養,改名
寒羽良(《城市獵人》)
1964年:哥斯拉破壞名古屋(《魔斯拉對哥斯拉》)
1964年:三頭龍基多拉第一次襲來(《三大怪獸·地球最大的?戰》)
1965年:加美拉飛到東京(《大怪獸加美拉》)
1965年:人類初次登上月球,目的是與异星人戰爭(《宇宙大戰爭》)
1965年:多拉A夢來到野比家(《多拉A夢》)
1966年:日本科學家飛鳥健在月球背面失?(《蒼藍流星》)
1966年:宇宙帝王哥爾開始侵略地球(《熔岩大使》)
1966年:奧特曼登場(《奧特曼》)
1966年:彗星席風接近地球(《奧特曼》)
1966年:大阪城被怪獸巴魯剛冷凍(《大怪獸?鬥·加美拉對巴魯剛》)
1966年:大阪城被怪獸哥莫拉破壞(《奧特曼》)
1966年:哥斯拉破壞東海核電站(《哥斯拉VS機械奇拉斯》)
1966年:橫田基地內,小夜與翼手戰鬥(《BLOOD?最後的吸血鬼》)
1967年:名古屋被凱奧斯破壞(《大怪獸空中戰·加美拉對凱奧斯》)
1967年:BF團開始征服世界計劃(《鋼鐵巨人》)
1967年:秘密結社Q開始征服世界計劃(《馬迪杰克》)
1967年:奧特曼7號被任命到地球防衛(《奧特曼7號》)
1968年:超能力者平博士將戰艦長門號浮上(《改造人009》)
1969年:遠藤賢知寫下“預言之書”;定清與“朋友”成?朋友(《20世紀少年》)
1969年:神一族到達地球(《月神3》)1969年:阿童木與斯卡拉在東京街頭出現(《鐵
臂阿童木》)
1969年:浮矢瞬擔任GATE KEEPERS隊長(《GATE KEEPERS》)
196X年:X星人開始侵略地球(《怪獸大戰爭》)
1970年:大阪舉辦萬博會(《20世紀少年》)
1970年:怪獸杰卡襲擊建設中的大阪萬博會場(《加美拉對大魔獸杰卡》)
1971年:赫多拉因公害出現(《哥斯拉對許德拉》)
1971年:修卡的日本征服計劃開始(《假面騎士》)
1971年:宇宙猿人哥利利用公害展開侵略作戰(《宇宙猿人哥利》)
1971年:因維達開始侵略地球(《木乃伊人》)
1972年:阿童木在越南出現(《鐵臂阿童木》)
1972年:死死團的日本人抹殺計劃開始(《彩虹人》)
1972年:邪惡多爾凱開始侵略地球(《超人巴羅姆·1》)
1972年:春日兄弟出發前往安德洛美達(《白銀假面》)
1972年:魔神Z建造完成(《魔神Z》)
1972年:光速宇宙船向獵戶座出發(《人猿星球》)
1972年:空條承太郎出生(《JOJO奇妙冒險》)
1973年:東京大地震,死者3600萬人(《日本沈沒》)
1973年:犯罪組織“SHADOW”出現,與奇凱達兄弟戰鬥(《人造人奇凱達》)
1973年:兜甲兒與不動明相遇,擊退地獄博士與惡魔族聯盟(《魔神Z對惡魔人》)
1974年:日本沈沒(《日本沈沒·電影版》)
1974年:杰夫·特雷西登上月球(《雷鳥》)
1974年:霍雷彗星接近地球(《新造人加塞恩》)
1974年9月1日:邁錫尼帝國開始對地上的侵略(《大魔神(GREAT MAZINGER)》)
1974年9月1日:城戶沙織出生(《聖鬥士星矢》)
1975年:寒羽良回到日本(《城市獵人》)
1975年:日本再次沈沒(《日本沈沒·電視劇》)
1975年:維加星聯合軍侵略地球(《UFO機器人古蘭泰沙》)
1976年:黑十字軍滅壞(《秘密戰隊》)
1977年:坎貝爾星人蘇醒,開始侵略地球(《超電磁機器人孔巴特拉V》)
1977年:蓋佐克侵略地球(《月神3》)
1978年:高橋留美子目睹美神美智惠驅魔的場景得到?發,創造出拉姆的形象(《GS美神
》)
1979年:則卷千兵衛製造出阿拉蕾(《阿拉蕾》)
1980年:奧特曼80來到地球(《奧特曼80》)
1982年:?了躲避妖星格拉斯,地球移動(《妖星格拉斯》)
1982年:久保成?OTAKU(《OTAKU的錄影帶》)
1982年:奧拉戰爭爆發(《聖戰士》)
1982年:在南極發現10萬年前墜落的UFO(《THE THING》)
1982年:新式炸彈在日本關東地區引爆。九個小時以後,第三次世界大戰爆發(《AKIRA
》)
1984年:T-800從2029年來到現代(《終結者》)
1984年:上杉和也死于交通事故(《TOUCH》)
1984年:若松真人與若松美雪結婚(《美雪·美雪》)
1985年:哥斯拉在伊豆群島一代復活(《哥斯拉 85年版》)
1985年:星星普羅美迪接近地球(《惑星機器人丹卡德A》)
1985年:久保發表“OTAKING宣言”(《OTAKU的錄影帶》)
1985年:浮矢瞬回歸GATE KEEPERS(《GATE KEEPERS 1985》)
1985年:禎村幸人死亡,寒羽良、禎村香組合成立(《城市獵人》)
1985年:布朗博士發明時間機器(《回到未來》)
1985年:裝著迪奧的棺材在大西洋被打撈上來(《JOJO的奇妙冒險》)
1986年:明青學園取得甲子園優勝(《TOUCH》)
1986年:天馬賢三醫生救活了由東德逃亡至西德的李貝特夫婦的養子約翰,隨後艾斯勒醫
院發生院長死亡事件(《MONSTER》)
1986年:銀河戰爭開始(《聖鬥士星矢》)
1987年:游戲GI發售,市價58億元(《獵人》)
1987年:迪奧力量蘇醒,導致喬斯達家族的替身力量被喚醒(《JOJO的奇妙冒險》)
1988年:泰坦與機械化人類的戰爭開始(《泰坦3》)
1988年:空條承太郎消滅迪奧(《JOJO奇妙冒險》)
1989年:五代裕作與音無響子結婚(《相聚一刻》)
198X年:世界大戰從蘇聯與德國開始(《198X》)
1990年前後:久保進入ANIMAGE編輯部(《OTAKU的錄影帶》)
1990年:第三次世界大戰爆發,同日結束(《OZ》)
1990年:無人木星探查船天鵝號秘密發射(《勇者王》)
1991年:人猿叛亂(《人猿星球》)
1992年:HAL9000?動(《2001太空奧德賽》)
1992年:LABOR普及開始(《機動警察》)
1992年:天地與阿重霞、砂沙美、魎呼等相遇(《天地無用》)
1993年:宇宙飛行員賈米拉成?怪獸回到地球。(《奧特曼》)
1993年:林明美出生(《MACROSS》)
1994年:T-800及T-1000來到現代(《終結者2》)
1995年:哥斯拉因核心融化而死(《哥斯拉對迪斯特雷亞》)
1995年:天馬與成年後的約翰與妮娜分別相遇。天馬被通緝?逃亡(《MONSTER》)
1995年:首都警解散(《犬狼》系列)
1996年:巴比倫計劃開始(《機動警察》)
1996年:古拉多斯人利用冷戰侵略地球(《蒼藍流星SPT雷茲納》)
1996年:斯科特·特雷西誕生(《雷鳥》)
1996年:日本從美國買下夏威夷,改名?“羽合縣”(《飛越巔峰》)
1996年:三重連太陽系被機界升華,守護神加利昂帶著嬰兒拉迪奧逃出(《勇者王》)
1996年:橫島忠夫與美神令子消滅亞舍塔羅(《GS美神》)
1997年:天海夫婦撿到拉迪奧,??其改名?天海護(《勇者王》)
1997年:洛杉磯、倫敦、大阪連續被細菌武器攻擊;“朋友”的組織浮出水面;賢知找回
“預言之書”(《20世紀少年》)
1997年:美國總統專用機墜落在紐約監獄(《紐約1997》)
1997年:F縣F市的秘密結社阿庫洛斯開始征服世界計劃,但因資金不足進度遲緩(《EXCE
L SAGA》)
1997年:AV97“蟒蛇”裝備特車二課第一小隊。(《機動警察》)
1998年:天馬的罪名洗清,約翰被逮捕,後從醫院逃脫(《MONSTER》)
1998年:AV-98出廠,警視廳特車2課追設第二小隊(《機動警察》)
1998年:木星5號出發前往木星(《勇者王》)
1998年:蒲腐博士在F縣F市設立“城市環境安全保障局”(《EXCEL SAGA》)
1998年:奧斯特蘭島在南太平洋上出現(《巨神高克》)
1999年:地球聯邦政府成立,公布宇宙移民計劃(《機動戰士高達》)
1999年:人類最初的光速宇宙船魯克西昂,瓦普航行成功(《飛越巔峰》)
1999年:异震星開始侵略地球(《六神合體》)
1999年:拉美達爾星開始地球移民計劃(《千年女王》)
1999年:异星人巨大宇宙船ASS-1墜落(《MACROSS》)
1999年:在月球上發現黑石板;宇宙船“探索號”前往木星(《2001太空奧德賽》)
1999年:黑色LABOR出現(《機動警察》)1999年:幻魔出現(《幻魔大戰》)
1999年:亞特蘭蒂斯侵略地球(《大白鯨》)
1999年:?了地球的命運,天龍與地龍在東京街頭鬥毆(《X》)
1999年:小杰通過獵人考試(《獵人》)
1999年前後:友民党在日本大選中獲勝(《20世紀少年》)
199X年:第三次世界大戰爆發,世界被核子火焰籠罩(《北斗神拳》)
90年代末:日本通過B.R法(《大逃殺》)
2000年:古拉多斯的刻印發動,宇宙歪曲(《蒼藍流星》)
2000年:第二次衝擊(《EVA》)
2000年:美國西海岸發生9.6級大地震(《逃出L.A》)
2000年:白銀和自動傀儡們在真夜中的馬戲團大本營?戰(《魔偶馬戲團》)
2000年:血腥的除夕夜,東京15萬人因細菌武器而死亡(《20世紀少年》)
2000年:手冢治蟲被火鳥帶走(《手冢消失:20世紀最後之謎》)
2001年:春日兄弟到達安德羅美達(《白銀假面》)
2001年:統合戰爭開始(《MACROSS》)
2001年:與探索號失去聯絡(《2001太空奧德賽》)
2002年:世界網路組織WNC誕生(《.hack》)
2002年:第二次衝擊調查團前往南極(《EVA》)
2002年:拓植行人政變,東京戰爭爆發(《機動警察》)
2003年:阿童木誕生(《鐵臂阿童木》)
2003年:EI-01墜落地球,GGG建立(《勇者王》)
2003年:北京大學楊莉博士成功製造出縮退物質ICE SECOND結晶(《飛越巔峰》)
2003年:一顆隕石撞上金星的黃道面,金星自傳周期改變(《金星戰記》)
2003年:T-X及T-800來到現代,機械叛亂開始(《終結者3》)
2004年:超AI GBR2(冰龍)、GBR3(炎龍)完成(《勇者王》)
2005年:日本開始第三新東京遷都計劃(《EVA》)
2005年:宇宙大帝接近塞伯特恩(《變形金剛》)
2005年:GGG遠征木星(《勇者王》)
2005年:“PLUTO KISS”事件,全世界網路停止(《.hack》)
2006年3月:變形戰鬥機甲的原型VF-X由王牌飛行員羅伊·福克上尉進行試飛(《MACROSS
》)
2007年:人類登上金星(《金星戰記》)
2008年:第三次世界大戰爆發,別名“大變動”。全世界的一半被超磁力兵器毀滅(《未
來少年柯南》)
2008年:日美開戰(《飛越巔峰》)
2008年:統合軍與反統合軍在南太平洋瑪泱島交戰,雙方初次投入可變戰鬥機(《MACROS
S ZERO》)
2008年:GGG遠征三重連太陽系(《勇者王》)
2009年:地球聯邦軍成立(《高達》)
2009年:MACROSS改造完成,舉行進宙儀式;第一次宇宙戰爭爆發(《MACROSS》)
2010年:聯合國直屬特務機關NERV成立(《EVA》)
2010年:木星縮退,成?第二個太陽(《2010》)
2010年:第一次宇宙戰爭結束,新地球聯合政府成立(《MACROSS》)
2012年:謎之入侵者MU出現(《翼神傳說》)
2012年:人類開始移民金星(《金星戰記》)
2012年:第一次超長距離移民團Megaroad-01出航(《MACROSS》)
2013年:發現可移民行星“伊甸”(《MACROSS》)
2013年:國防部在仙台使用戰術融合彈,仙台毀滅。東京被MU製造的絕對障壁覆蓋,形成
東京JUPITER(《翼神傳說》)
2013年:地球帝國建立(《飛越巔峰》)
2013年:核戰後的美國大陸上出現了自稱“郵差”的男人(《郵差》)
2013年:USNA資本復興,太陽系再開發(《星方武俠》)
2014年:將軍逃獄,神乃團結東京的中國及泰國黑幫,組成新的反“朋友”勢力(《20世
紀少年》)
2014年:?了解?地球的人口、環境、能源問題,聯合國發表“軌道電梯構想”議案(《Z
O.E》)
2015年:使徒,襲來(《EVA》)
2015年:發現宇宙怪獸(《飛越巔峰》)
2015年:香港赤柱監獄發展重建完成,成?南中國最大的最重犯和死囚監禁基地,拘禁極
級重犯一萬三千人(《赤柱飯堂》)
2023年:美國以?保護臺灣獨立?由出兵南中國海,中美戰爭爆發(《赤柱飯堂》)
2023年春:美國進攻香港。香港政府?用救急措施,以赤柱監獄?的重犯對抗美軍(《赤
柱飯堂》)
2016年:人類補完計劃完成,全人類LCL化(《EVA》)
2016年:超光速航法試驗成功(《銀河漂流》)
2019年:AKIRA發動(《AKIRA》)
2019年:在伊普薩隆太陽系發現適合人類居住的星球(《銀河漂流》)
2020年:人造人逃亡到地球(《銀翼殺手》)
2022年:宇宙怪獸的攻擊開始(《飛越巔峰》)
2022年:“位相差空間通路”完成,使得星球間的航行時間急劇縮短、自由往來太陽系的
時代來臨(《COWBOY BEBOP》)
2026年:國際救助隊活動開始(《雷鳥》)
2027年:外太陽系移民計劃開始(《星方武俠》)
2027年:軌道電梯建設正式開始(《Z.O.E》)
2027年:美國攻港軍被一萬三千超級重犯組成的游擊隊擊退。成?國家英雄的重犯野心膨
脹,欲控制香港(《赤柱飯堂》)
2028年:中央重視在港重犯作亂問題,派出中國五?領導排名第三的烈陽將軍到港處理相
關事務(《赤柱飯堂》)
2028年:東京JUPITER消滅,同時世界各地出現MU的空中都市。真聖RahXephon與真聖BelX
ephon將世界重新調律(《翼神傳說》)
2029年:草剃素子少校被配屬到公安9課(《攻殼機動隊》)
2029年:天網將T-800送回1984年(《終結者》)
2030年:紀念第一次宇宙戰爭結束20周年的電影《可曾記得愛》公映(《MACROSS》)
2030年,希望結束戰事的美國發動核彈攻擊,中國發動核反擊(《赤柱飯堂》)
2031年:第一次開拓移民團派遣(《銀河漂流》)
2032年:太陽系遭受宇宙怪獸總攻擊,太陽系外側4顆行星被黑洞炸彈毀滅(《飛越巔峰
》)
2032年:貝爾維克星移民團與地球移民團接觸,進入戰鬥狀態(《銀河漂流》)
2033年,十年中美戰爭以美國撤軍結束,中國于世界的地位,從此不在美國之下(《赤柱
飯堂》)
2034年,烈陽將軍辭去軍職,成?改建成飯堂的赤柱老闆和總?(《赤柱飯堂》)
2035年:第二次開拓移民團派遣(《銀河漂流》)
2038年:以MACROSS-7?核心的第7次超長距離移民船團出發(《MACROSS 7》)
203X年:伊甸發動,宇宙毀滅(《傳說巨神伊甸》)
2040年:統合政府成立30周年慶典,發生沙朗·艾普暴走事件(《MACROSS PLUS》)
2040年:無人探查機在木星的衛星卡?斯多(????)上發現了謎之平地(《Z.O.E》)
2045年:軌道電梯俊工,人類正式進入宇宙時代。同年,第一代LEV、NUT投入使用(《Z
O.E》)
2067年:在卡?斯多上發現了Metatron的礦?(《Z.O.E》)
2089年:火星移民開始(《Z.O.E》)
2045年:宇宙殖民地1號完成,改元宇宙世紀(《高達》)
2045年:MACROSS 7船團與原始惡魔接觸(《MACROSS 7》)
2046年:長峰美加子隨遠征隊離開地球(《星之聲》)
2047年:聯合軍在8.6光年外的天狼星α、β星系與塔爾希安血戰,“利希迪亞”號生還
(《星之聲》)
2048年:黑洞炸彈將銀河系的一半消滅(《飛越巔峰》)
2050年:因維德侵略地球,人類轉移到火星(《機甲創世紀》)
2050年:2300年的埃爾達星人攻擊地球(《宇宙大帝》)
2056年3月25日:寺尾升收到長峰美加子8年前的郵件。(《星之聲》)
2058年:杰納斯號脫出(《銀河漂流》)
2062年:時空振動彈使地球的時間與空間完全混亂(《超時空世紀》)
2063年:人類最初的瓦普試驗成功(《星艦迷航記》)
2069年:維薩動力艇尼布賈尼撒在美國完工(《MATRIX》)
2071年:最初的永久月面都市完工(《高達》)
2083年:因維德完全占領地球(《機甲創世紀》)
2083年:金星戰爭爆發(《金星戰記》)
2086年:發現米諾夫斯基粒子的不明粒子(《高達》)
2087年:統一帝國基卡諾斯向地球聯邦宣戰(《機甲戰記》)
2089年:月神2號固定(《高達》)
2090年:馬爾杜克軍襲擊地球(《MACROSS 2》)
2099年:諾比亞教徒爆破木星,形成了大約50個新行星(《銀河旋風》)
2100年:魔動王復活(《魔動王》)
2102年:吉恩共和國建國(《高達》)
2111年:宇宙戰隊J9結成(《銀河旋風》)
2112年:?型機器人投?(《多拉A夢》)
2113年:吉恩·戴肯被暗殺,吉恩公國建國(《高達》)
2115年:火星獨立武裝結社巴普拉姆建成(《Z.O.E》)
2117年:最初的MS完成(《高達》)
2123年:一年戰爭爆發,殖民衛星墜落悉尼(《高達》)
2127年:聯邦軍閱兵式遭到核打擊,殖民衛星墜落北美(《高達0083》)
2131年:古利普斯戰爭,殖民衛星墜落月球(《Z高達》)
2137年:第一次新吉恩戰爭,殖民衛星墜落都柏林(《高達ZZ》)
2137年:第二次新吉恩戰爭,月神5號墜落拉薩(《逆襲的夏亞》)
2137年:太陽系异變,地球南半球被稱?“凱德爾特之海”的能量海淹沒(《無限的未知
》)
2140年:黑洞接近地球(《再見木星》)
2145年:OF研究開始(《Z.O.E》)
2167年:泰莫斯事件(《Z.O.E》)
2168年:死亡先鋒攻擊邊境SIDE,邊境1號居民被完全屠殺(《高達F91》)
2171年:JEHUTY?奪戰(《Z.O.E》)
2172年:環行軌道降下戰(《Z.O.E》)
2174年:阿曼戰役,在半年的僵持後巴普拉姆基本壞滅(《Z.O.E》)
2178年:木星帝國進攻地球(《海盜高達》)
2178年:發現火星遺?(《機動戰艦》)
2186年:古代進誕生(《宇宙戰艦大和》)
2186年:火星政變(《機動戰艦》)
2187年:拉克西絲醒來,前往宇宙(《五星物語》)
2195年:第一次火星會戰(《機動戰艦》)
2195年:地球遭到游星炸彈攻擊(《宇宙戰艦大和》)
2198年:木連爆發“熱血革命”,之後與地球停戰(《機動戰艦》)
2198年:贊斯卡洛帝國與地球開戰(《V高達》)
2199年:火星後繼者政變(《機動戰艦》)
2199年:NEO從MATRIX中醒來(《MATRIX》)
2199年:大和號發進(《宇宙戰艦大和》)
2200年:大和號回到地球(《宇宙戰艦大和》)
2200年:地球、薩拉星、米拉星聯軍與加爾貝斯頓帝國開戰(《機甲艦隊》)
2201年:白色彗星帝國侵略地球(《宇宙戰艦大和》)
2201年:安德洛梅達號完工(《宇宙戰艦大和》)
2202年:加米拉斯星崩壞(《宇宙戰艦大和》)
2202年:大和號前往暗黑星雲(《宇宙戰艦大和》)
2203年:大和號沈沒(《宇宙戰艦大和》)
2205年:大和號?了尋找適合人類居住的行星出發(《宇宙戰艦大和》)
2221年:星野鐵郎乘坐銀河列車999出發(《銀河列車999》)
2225年:地球與火星之間的空間站三角號發生事故,沈沒(《無限的未知》)
2232年:銀河中心攻擊艦隊歸還(《飛越巔峰》)
2243年:百年戰爭(第三次銀河戰爭)爆發(《裝甲騎兵》)
2245年:銀河聯邦成立(《飛越巔峰》)
2268年:第三次世界大戰爆發,殘存下來的人回到過去(《再造人009》)
2286年:企業號A試航(《星艦迷航記》)
2293年:企業號B試航(《星艦迷航記》)
2318年:機械騎兵MT研究開始(《裝甲騎兵》)
2337年:特殊?化部隊(赤肩)結成(《裝甲騎兵》)
2343年:百年戰爭終結(《裝甲騎兵》)
2354年:太陽系聯邦建立(《GAIA GEAR》)
2363年:企業號D試航(《星艦迷航記》)
2365年:企業號D與波格人接觸(《星艦迷航記》)
2367年:波格人侵略地球(《星艦迷航記》)
2373年:波格人第二次侵略地球(《星艦迷航記》)
2399年:泛銀河帝國建立(《GAIA GEAR》)
2514年:銀河政府建立(《宇宙戰艦山本洋子》)
2520年:收到第17代大和號發出的信號(《YAMATO 2520》)
2801年:銀河聯邦成立(《銀河英雄傳說》)
2874年:魯邦13世被魔毛一族消滅(《魯邦3世》)
2883年:人猿百年戰爭爆發(《猿之軍團》)
2977年:馬增侵略地球(《宇宙海盜哈洛克》)
2982年:伊米爾達斯征服地球,哈洛克與同志們在宇宙要塞SSX展開抵抗活動(《我青春
的黃金鄉·無限軌道SSX》)
2983年:人猿百年戰爭以猿猴的勝利結束(《猿之軍團》)
3093年:類人猿聯合政府成立(《猿之軍團》)
3098年:魯道夫就任銀河聯邦元首(《銀河英雄傳說》)
3110年:銀河帝國·高登巴姆王朝建立(《銀河英雄傳說》)
3273年:被放逐的共和主義者從流放地逃亡(《銀河英雄傳說》)
3327年:自由行星同盟建立(《銀河英雄傳說》)
3441年:自由行星同盟與銀河帝國軍初次接觸,帝國軍慘敗(《銀河英雄傳說》)
3596年:第7次伊謝爾倫攻防戰(《銀河英雄傳說》)
3599年:高登巴姆王朝滅亡,羅嚴克拉姆王朝建立(《銀河英雄傳說》)
3600年:楊威利被暗殺(《銀河英雄傳說》)
3713年:地球上只剩下最後一個人類(《猿之軍團》)
10191年:亞崔迪家族移住入沙漠行星阿拉吉斯(《沙丘》)
14292年:高屋典子與天野霞回到地球(《飛越巔峰》)
以後:人類和宇宙依舊存在
Reorgnize project source
build發生error : binding.S的variable沒有定義。
查binding.S並不直接link,而是由rtxcopts.h include進來,所以不必加入project source中。
發生unsolved external : ComConb
查原來的project並沒有用到所有有用ComConb的rtl function。
所以將那些rtl刪除後OK。
同時發生semihosting 問題:
mulitple define : stdio
semihosting_guard
也ok
發生cannot call ARM code on THUMB section.
將compiler option加上interwork後OK
(並且將predefine的NOINTER刪除)
星期四, 2月 17, 2005
blogger, blogspot : problem found
然後edit的view功能沒辦法用。
....
後來把firefox的default 語系由中文改為英文後就OK
uC/OS II
uC/OS是以function的集合作爲kernel,並沒有和RTXC一樣把所有的Kernel operation包裝在一個 .C檔裏,也就是說uC/OS的kernal API沒有統一的entry point。
uC/OS規定每一個task有一個priority,priority不能重復,這個priority同時會拿來作task id。id越小,priority越高。規定只有64個task.
目前的執行的task id (priority)是放在OSPrioCur,task control block (TCB)是OSTCBCur。
uC/OS的task switch動作在OSCtxSw裏,所有作task switch的function最後都會執行這一段程式,OSCtxSw會switch到task id是OSPrioHighRdy的task,對應的TCB是OSTCBHighRdy,同時upate這兩個變數,所以執行完OSCtxSw後,OSPrioHighRdy=OSPrioCut,OSTCBHighRdy = OSTCBCur。
所以任何有可能做task switch的kernel API,都會找到ready task中priority最高的task,update到OSPrioHighRdy和OSTCBHighRdy裏,再由OSCtxSw作switch。
和其他的OS一樣,有機會作task switch的時機有1.Call kernel API. 2.Hardware interrupt,
uC/OS的system object有: Message, MemoryPartition, Queue, Semaphore, Task, Timer。
中斷服務常式的寫法:
1. 調整r14, 存入Stack[IRQ]
2. 將SPSR存入Stack[IRQ]
3. 清除中斷源
4. 切換SYS Mode,Disable Interrupt
5. 將r0~r12, r14存入Stack[SYS]
6. 呼叫OSIntEnter ( C function )
7. 呼叫 這個中斷的C function
8. 呼叫OSIntExit ( C function )
9. 將r0~r12, r14從Stack取出
10. 切換回IRQ Mode, Enable Interrupt
11. 回應硬體EOI (End Of Interrupt)
12. 將SPSR從Stack取出
13. ldmfd sp!, {pc}^
Timer Interrupt Service Routine
scratch reg: r12
IRQ Mode
1. IRQ 先存 Stack[IRQ]={ lr-4,SPSR,r12 }
2. IRQ 讀取AIC_IVR和TC0_Base[20]
3. IRQ Enable IRQ, Switch to SYS Mode
4. SYS 將所有reg存 Stack[SYS] = {r0~r12, r14}
5. SYS 呼叫 OSIntEnter, OSTimeTick
6. SYS 呼叫OSIntExit: -------------- 如果有需要,切回IRQ Mode,作Context Switch
7. SYS 取回r0 ~ r12, r14 Stack[SYS] = { }
8. SYS Disable IRQ, Switch to IRQ Mode
9. IRQ 讀取AIC_EOICR
10. IRQ 取回r12, r14(SPSR) Stack[IRQ]= {lr-4}
11. IRQ restore SPSR from r14
12. IRQ ldmfd sp!, {pc}^ 回到被中斷程式
OSIntExit
C function,所有Interrupt Service routine都要呼叫這個C function before ending, function主要工作是找出目前Priority最高的Ready Task,並且作Task Switch,會呼叫OSIntCtxSw (Assembly Code)作Context Switch
OSIntCtxSw
Assembly Code,主要工作是Content Switch,程式中負責Task Switch的有兩個,這是其中之一,另一個是OS_TASK_SW,不同的地方是OSIntCtxSw是在Interrupt Service Routine中作Task Switch, OS_TASK_SW是在呼叫System API時作Task Switch使用的。
1. 調整sp,sp = sp - 4
2. switch to IRQ Mode
3. 拿出所所有進入IRQ時Save的Stack, (3個register)
4. 通知EOI
5. Switch to SYS Mode
6. 到OSCtxSw執行
OS_TASK_SW
都是在SYS Mode
1. 存r0~r12, r14 Stack[SYS] = { r0~r12, r14 }
2. ---- OSCtxSw ---- label,以下和OSIntCtxSw共用
3. 存CPSR, SPSR Stack[SYS] = { r0~r12, r14, CPSR, SPSR }
4. OSPrioCur = OSPrioHighRdy
5. 將目前sp保存在tack的TCB結構 OSTCBCur.sp = SP
6. 切換目前的sp到新的task SP = OSTCBHighRdy.sp
7. OSTCBCur = OSTCBHighRdy
8. 從Stack中取回SPSR Stack[SYS] = { r0~r12, r14, CPSR }
9. 從Stack中取回CPSR Stack[SYS] = { r0~r12, r14 }
10. 取回r0~r12, r14 Stack[SYS] = { }
11. bx r14
uCOS_II用一個特殊的方法來找出目前ReadyList中priority最高的Task. 系統最多容許64個task,所以一個task用一個bit來代表,需要8個byte來代表所有Task。
8 bit OSRdyTbl[8] : bit=1代表Ready Task
8 bit OSRdyGrp. : bit=1代表OSRdyGrp的Entry不是0
當要從OSRdyTble[]找到最高priority的bit時(也就是bit order最小的task時)
uCOS_II利用一個Table
INT8U const OSUnMapTbl[] = {
0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0
};
Table有256個entry,代表一個OSRdyTbl Entry (8 bit)的所有組合。這個Table就是”最小bit”的查表,舉例來說13的最bit是
OSUnMap[13]=0 /* 13 = 10011,最小是bit 0 */
所以先從
OSRdyGrp中找到最小不等於0的OSRdyTbl Entry
y = OSUnMapTbl [ OSRdyGrp ]
再由OSRdyTbl找到最小不為0的bit
x = OSUnMapTbl [ OSRdyTbl [ y ] ]
x + ( y <<>
ADS Developer Guid:
Procedure Call Standard
由於ARM不像x86有一個指令支援CALL, RET的自動Save/Restore Register動作,所以Save Restore的動作是由Program來作的。
startup
Linker發現link obj中有main()時,會自動link C initial code,這時如果沒有在指定Entry Lable ( Target Setting -- Linker -- ARM Linker -- Layout : Object/Symbol填入**.o , Section填入AREA Name),ADS會使用自己提供的C Library Code的__main作爲entry point, __main將需要初始化的參數(Data,Code)由ROM Copy到RAM,將需要Reset爲0的變數Reset,呼叫rt_entry( )設定stack base(r13)和heap base,再跳到user的main( )執行。啟動的執行順序是:
__main : copy RW, ZI to RAM
__rt_entry : setup stack and heap base
main : user program
其中__rt_entry設定的stack是執行__main時的CPU Mode的stack。(__main和__rt_entry都沒有更改CPU Mode)
更詳細的:
_move_region
_zero_region
_rt_entry
_rt_stackheap_init
_usr_libspace
_usr_init_stackheap
_rt_lib_init
_fp_init
_rt_fp_status_addr
_usr_libspace
__fplib_config_pureend_doubles
main
ADS Linker的Default Memory Map是:
Program (RO+RW) : 0x008000
RW
ZI
-------Image$$ZI$$Limit Mark
Heap
|
Stack : 0x8000000
其中Heap是由Image$$ZI$$LimitMark開始,和Stack共用到最後0x800_0000
Stack Limit 0x800_0000是ARMulator的default值
如果是自己設計的板子就要自己定義$top_of_memory變數
Scatter Loading
scater loading是用一個loading script (*.scf) 來指定各程式,變數的放置位置,在script中要說明ROM的位置,和執行時的位置,arm linker很聰明,其實只要將執行時的image宣告出來,外面再用ROM { }刮起來,linker就會自動將image中需要放在ROM裡的部分安排好,放在ROM{ }這個image裡(自動將需要initial的RW變數的初值,copy一份到ROM裡,如果有在RAM裡的function,也會將CODE Copy一份到ROM裡)。
範例:
先將執行時的image宣告出來
FLASH 0x01000000 0x01000000
{
__main.o (+RO)
}
RAM 0x02000000
{
ramfun.o
}
HEAP +0
{
heap.o (+RW,+ZI)
}
STACK +0x02000
{
stack.o (+ZI)
}
指定Memory Mapping
Example:
指定Load的Address Region (Start:0x24000000, Size:0x40000000)
Flash 0x24000000 0x40000000
預計需要5個區域:
Flash : Flash的位置
32bitRAM : ARM內建的32bitRAM
HEAP : 配合heap.s的內容,可以決定heap的起始位置
STACK : 配合stack.s的內容,可以決定stack的最高地址
UART0 : memory-mapped I/O
所以先宣告出下面的幾項,在每個區域名稱後的是地址和長度(可省略)位元位址部分若是數位代表絕對位址,+0代表目前地址+0 UNINIT代表不需要作初始化設定。
{
Flash 0x24000000 0x40000000
{
}
32bitRAM 0x0000
{
}
HEAP +0 UNINT
{
}
STACKS 0x40000 UNINIT
{
}
UART0 0x16000000 UNINIT
{
}
}
接下來爲每個區域作細部的宣告(安排每個source code, data region所屬的區域),先看FLASH區段:
說明init.s要先Link,init.s的Init AREA要放在這個區域的開頭(因爲Init AREA是程式的entry point)。接下來是其他的READONLY程式。在init.S的開頭有AREA Init, CODE, READONLY宣告,指明有Init AREA, 是READONLY.
FLASH
{
init.o (Init, +First)
* (+RO)
}
接下來指定32bitRAM:
說明32bitRAM要從0x000開始,並且先放vector.s ,並且將vect.s中的AREA Vect放在最開頭,接下來是所有READWRITE資料
32bitRAM 0x0000
{
vector.o (Vect, +First)
* (+RW, +ZI)
}
說明在放完32bitRAM後接著放HEAP, HEAP中只有heap.s。
HEAP + 0 UNINIT
{
heap.o (+ZI)
}
從heap.s Source Code來看:
只有宣告一個變數bottom_of_heap,這樣其他程式由bottom_of_heap的值就可以知道heap區的起始地址。一般heap和stack會共用一段區域(一個往下長,一個往上長)。所以在relocate script中,HEAP和STACK要連在一起。共用空間則是由STACK +XXXXX來決定的。
heap.S不用宣告出heap的空間。
AREA Heap, DATA, NOINIT
EXPORT bottom_of_heap
bottom_of_heap SPACE 1
END
STACK的部分,loading-script:
STACKS 0x40000 UNINIT
{
stack.o (+ZI)
}
Stack.s和HEAP一樣,只有宣告一個variable
AREA STACK, DATA, NOINIT
EXPORT top_of_stacks
top_of_stacks SPACE 1
END
因爲STACKS由0x40000開始,所以top_of_stack會被放在0x40000,所以利用這個variable就可以得到stack的top address。
最後是memory-mapped I/O
UART0 0x16000000 UNINT
{
uart.o (+ZI)
}
uart.c裏宣告了一個structure變數struct uart uart0;
struct uart的宣告在uart.h裏:
struct uart
{
volatile unsigned dr; // @0x0
volatile unsigned ecr; // @0x4
volatile unsigned lcrh; // @0x8
volatile unsigned lcrm; // @0x0c
volatile unsigned lcrl; // @0x10
volatile unsigned cr; // @0x14
volatile unsigned fr; // @0x18
volatile unsigned iir; // @0x1C
};
*這部分要配合ARM的evaluation board來看,並不是用ATMEL的CPU.
Section-related symbols
Linker會產生一些symbols代表每一個section(Readonly section,Data section,Zero inititialize section),供program取用。以下是symbols列表:
Symbols
|Image$$RO$$Base| READONLY (RO) section的啟動位址
|Image$$RO$$Limit| READONLY (RO) section的結束位址
|Image$$RW$$Base| RW section的開始位址
|Image$$RW$$Limit| RW section的結束位址
|Image$$ZI$$Base| Zero Initialize section的開始位址
|Image$$ZI$$Limit| Zero Initialize section的結束位址
|SectionName$$Base| SectionName Section的開始位址
|SectionName$$Limit| SectionName Section的結束位址
在Assembly code中,可以直接使用這些名稱,就像已經宣告過的一樣。
ADS Assembly:
Register:
有17個, r0 ~ r15+CPSR+SPSR.r0~r15裏三個是特殊用途
r15 : PC (program counter)
r14 : lr (link register)
r13 : sp (stack pointer)
其他都是general purpose register.
CPSR : Current Program Status Register目前Mode的status。
SPSR : Save Program Status Register,當CPU Mode轉換時的CPSR會被save在這裏。
CPU Mode
ARM有七種privilege mode,由CPSR (Current Program Status Register)中的bit[0~4]決定。
User : 一般的執行
FIQ : 當進入Fast Interrupt
IRQ : 當進入一般的Interrupt
SVC : 當進入Software Interrupt (SWI)
Abort : 當發生Memory faults: data access fault或是instruction prefetch fault (進入Prefetch Abort Interrupt)
Undef : 當發生Undefined Instruction (進入Undef Instruction Interrupt_
System : 和User Mode相同,但是有修改CPSR的能力
除了User Mode外,CPU在其他的Mode時,都可以藉由改變CPSR的bit[0-4]來改變目前的Mode。在User Mode要變更爲其他的Mode只有經過Interrupt (Hardware或Software)。
ARM Reset後是在SVC Mode,所以通常在InitCode會切換到各Mode把SP Initial好之後再切到User Mode,最後設定User Mode的SP後才開始執行main。
Mode的狀態和register的access有關,每個mode都有自己的SP(r13), lr(r14)。
在User Mode要改變成其他Mode的方法:先抽換掉SWI的Vector Address,改為一行指令:mov pc,lr (直接返回),之後再把原Vector放回去
mov r0,#8 ; SWI vector address
ldr r1,=mv_pc_lr;
swp r1,r1,[r0]
swi 8 ; The ‘8’ is an dummy operand,
; because our handler won’t use it.
; Because the SWI handler is a “mov pc, lr”
; instruction,
; so it will fall back here.
str r1,[r0] ; Restore the origional vector
; Now it’s in SVC Mode, can modify the CPSR
:
;
mv_pc_lr ; This is our vector used to replace the
; origional SWI vector
mov pc, lr
r14的功能
r14通常用在儲存return address,有兩種狀況會用到return address: call subroutine和Interrupt.
1. Call subroutine : 使用Branch with Link(BL)時,return address會被放在r14裏,然後跳到目的地去執行
2. Interrupt : Interrupt會改變CPU Operation Mode, 在interrupt時, return address會被放在新的mode的r14裏,所以原Mode的r14的值不會被overwrite掉。
Flag
狀態旗標在CPSR裏
N:Negative
Z:Zero
C:Carry
V:oVerflow
Q : Satuation (沒用)
所有的運算與移動指令加上S後會依照運算內容update這四個旗標。
NZCV剛好是CPSR的最高四個bit
N:0x80000000
Z:0x40000000
C:0x20000000
V:0x10000000
條件執行 :
所有的指令都可以依照CPSR旗標的內容決定要不要執行,只要在指令後加上
EQ : Equal (N=1)
NE : Not Equal (N=0)
CS/HS : Carry Set / Unsigned High or Same (C=1)
CC/LO : Carry Clear / Unsigned Lower (C=0)
MI : Minus / Negative (N=1)
PL : Plus / positive or zero (N=0)
VS : Overflow (V=1)
VC : No overflow (V=0)
HI : Unsigned higher (C=1 and Z=0)
LS : Unsigned lower or the same (C=0 or Z=1)
GE : Signed greater than or equal (N=V)
LT : Signed less than (N!=V)
GT : Signed greater than (Z=0 and N=V)
LE : Signed less than or equal (Z=1 or N!=V)
AL : Always
CPSR:
CPSR的內容可分爲四部分(byte):
C : Control Field,就是Mode
S : Status Field
F : Flags Field
有三個Flag:
I : Interrupt Disabled
F: Fast Interrupt Disabled
T: Now Exceuting Thumb Instructions
CPSR和一般的Register不同,所以對CPSR動作時,要用特殊的指令MSR,MRS
MSR將資料搬到CPSR裏:
格式 MSR
例如:
MSR CPSR_f, 0x80000 ; 設定flag field的
MSR CPSR_f, R0 ; 依照r0的內容update CPSR的flag byte的內容
MRS將CPSR的資料般出來
MRS R0, CPSR ; 把CPSR的資料copy到R0
PC (runing time和assembly time)
Runtime Program Counter:ARM7是3 Stage的machine,所以PC的值會是目前執行位置+2 Instruction (8 bytes)
Assemblytime Program Counter:和執行時的PC無關,是一個assemler的reserved mark,用一個逗點( . )代表目前地址。
LDR Rd,=const
‘=’這個符號是pseudo-instruction.因爲ARM instruction只能放8 bit的const.
所以這個pseudo code會依照後面const的大小把這個指令轉爲
MOV Rd,=const (const <=255)
或是
LDR Rd,[pc,#offset_to_literal_pool] (const > 255)
** LDR這個指令後方的target address是relative的(相對於目前pc值),所以不管這段程式碼relocate到哪一個地方,都不會影響到結果。但是由於AXD的disassembler會自動把pc-relative address轉爲實際位址,所以在AXD的disassembly窗口中看到的好象是絕對位址。
LOAD ( LDR,LDM ):
LDR|STR{
對應Binary的格式是
P : pre/post index
U : up/down
B : unsigned byte/ word
W : write-back (update)
L : load/ store
Rn : base register
Rd : source/destination
從格式中可以知道一定要指定base register(Rn), 當不指定Rn時,表示用pc作Rn.
LDR:SingleLoad 右到左
LDR r0,[r1] ; r0=mem32[r1] r1是base address
LDR r0,[r1,#2] ; r0=mem32[r1+2] r1是base address
LDR r0,AddressData ; 沒有寫出base register
; 會用pc作爲base address
; 轉換的動作在compile時會作
LDM:MultiLoad 左到右
LDMIA r1,{r0,r2,r5} ; r0=mem32[r1],
; r2=mem32[r1+4],
; r5=mem32[r1+8]
STORE ( STR,STM )
STR:Single Store左到右
STR r0,[r1] ; mem32[r1]=r0
STM:MultiStore右到左
STMIA r1,{r0,r2,r5} ; mem32[r1]=r0,
; mem32[r1+4]=r2,
; mem32[r1+8]=r5
其他相關事項
1. 實際上LDM, STM屬於multiple register transfer instructions,格式都是Rm,{Reg-list},雖然Rm沒有寫成[Rm],但是在 multiple_register_transfer_instruction裏規定Rm是indirect addressing。
2. Load/Store時,所reference的Register存放的內容是絕對位址(不是相對於pc),和MOV命令,LDR命令不一樣。
Multi Register Transfer instruction
Machine Code的旗標有
P : pre/post index
U : up/down
S : restore PSR and force user bit
W : write back (update index register)
L : load/store
針對是memory block和stack操作,同樣的動作有兩個不同的名稱。
Memory block : Load Store都依照operation的定義
I : Increase
D : Decrease
A : After
B : Before
Stack operation : Load Store依照stack的定義
F : Full SP目前指向有資料的位址
E : Empty SP目前指向空的地址
A : Ascending Stack是向高位指增加
D : Decenging Stack是向低地址增加
對Stack動作時相同的操作定義對SP的動作會不一樣
STMFD sp!,{rs-re} ; sp-4,存一個Register,從re到rs
LDMFD rm!,{rs-re} ; 取出一個Data,SP + 4,從rs到re
所以Stack操作時只要LDMXX和STMXX交換,其他rm, rs, re(可能要換成pc)都不用變就可以完成了。
ARM的基本型別大小
char 1 byte 叫Byte
short 2 byte 叫Halfword
int 4 byte 叫Word
對應這三種型別的load, store指令也不同
LDR Word
LDRH Halfword
LDRB Byte
Branch
跳躍是經由修改pc來達成的,可以用
BX|BL Rm
跳到Rm所指內容來執行
Offset Addressing
[ Rm, #+/-
這是代表以Rm爲Base+/-immed_12的地址內容,
** 因爲12 bit的限制,有時把正數轉爲負數使用,例如要取得pc+FFFFF0E0的內容,由於FFFFF0E0 > FFF,所以用pc-F20來代替
literal_pool
一個在Code區域的資料區段,用來放const.這個節區的位置和使用
pool裏資料的命令,距離(offset)不得超過4k (Thumb=1k).
奇怪的符號
1. #<+/->數字,代表constant。 如#123, #-123,如果要表示16進制,用#0x123,#-0x123或是#&123, #-&123, 也就是說#後的&符號可以用來代表16進制符號。
2. 小逗點‘ . ’和其他的assembly一樣,一個小點‘ . ’代表compile時的“目前地址”,可以用來作運算。
3. ‘ [ ’ 代表IF ,‘ | ’ 代表ELSE, ‘ ] ’ 代表ENDIF。
4. ‘ ! ’ 代表INFO
5. RN是用來將register重新命名用, sqr RN r6 意指 :sqr就是r6
6. A,L,S字尾分別代表arithmetic,logical,string。如SETA,SETL,SETS分別代表設定arighmetic, logical, string變數。
7. ADS的Assembler的Operator都是以‘ : ’作開頭和結尾,像 :MOD:代表Mode,:AND:代表AND,:CC:代表Concatenate,其他Operator說明在3-24。
8. ‘ % ’ 代表SPACE。如data1 % 255代表在data1開始預留255個byte的空間並把資料清爲0。
9. ‘ ^ ’代表MAP
10. ‘ # ’ 代表FIELD
11. ‘ = ’代表DCB 。 c_string DCB “C_string”,0
12. ‘ & ’代表DCD
13. ‘ * ’代表EQU
14. a1-a4 (argument) = r0-r3
15. v1-v8 (variable) = r4-r11
16. sb (static base) = r9
17. sl (stack limit) = r10
18. fp (frame pointer) = r11
19. ip (inter-procedure-call scratch register) = r12
Remap的動作
ARM CPU的ROM/RAM CS都有Remap的功能。這個功能要加上pipeline的特性才能正常動作。作Remap時,先把CS的map設好,接下來一定要接著作branch 的動作。因為有pipeline的關係,所以在把CS設新的值時,不會馬上就access到新的memory region,因為pipeline中還有一些命令還沒執行。做完remap後要馬上作branch,這樣cpu會將pipeline清空,再由新的位址 填入指令pipeline,這時候就會將新的memory region的instruction填入。
Software Stack Check
當Compiler Enable SWST,Compiler會使用r10作為stack limit variable (al),紀錄program的stack limit。並在有需要使用stack的function,在進入時比較r13(sp)和r10(sl)。
程式啟動的狀態
程式有兩種啟動狀況:(i)ROM Start。(ii)ICE RAM Start。差異是在Remap之前或是之後。如果是ROM Start,表示Remap動作還沒作,在Remap之前要把RAM的Interrupt Vector Table準備好。如果是ICE RAM Start,代表已經Remap過,就不需要準備RAM的Interrupt Vector Table。啟動程式(init.s)說明:
Vector_Table
Check Execution Address (ROM or RAM)
ROM : Copy Vector_Table to RAM
Remap
Setup Mode Stacks
Jump __main
l Project Foler:Standalone/StartRemap
型態轉換
int, short,signed, unsigned之間的轉換
ADS在作一切運算時,都是以int運作。因為ARM的特殊結構,function argument的傳遞都是以int為size。所以即使argument是short。在作passing argument時,ADS也會先將var作alrithematical signed extend( lsl 16, asr 16),再傳入。
如果是signed時,會以argment size (不是真正的size)的highest bit為signed。
void saveshort(short);
int vara;
saveshort(vara)
mov r1,vara;
mov r0,r1,lsl,16
mov r0,r0,asr,16 //雖然argument是short,還是以int的方式傳入
bl saveshort //但確保value範圍是short
如果是unsigned時,會將多餘的部分mark為0
void saveunsigned short(unsigned short)
int vara
saveunsignedshort(vara)
mov r1,vara;
mov r0,r1,lsl,16
mov r0,r0,lsr,16 //argumrnt是unsigned short,所以把所有 high
bl saveunsignedshort //word都清除為0再傳傳入`
傳回值
型別轉換