星期五, 2月 25, 2005

CAST a number to function

(*((void(*)(void))0x0))();

星期二, 2月 22, 2005

Alice送的禮物


gift from alice

從pchome買的望遠鏡和手電筒


from pchome, 200NT each one.
手電筒函發電機,押那個把手就會亮,但是....
望遠鏡,真的是旺遠用的....因為近距離就對不到焦.
用7-11貨到付款。
約一個禮拜,或到會mail通知,可惜gmail會變成亂碼,
三天候不去拿,會寄簡訊,拿的時候要報名子。

星期一, 2月 21, 2005

Rita's brother 迎取

我負責放炮,
糟糕,
竟然點不著,燒得打火機都開始燙手了,才好像點著。
趕快去叫小朋友拿蘋果。
糟糕,
車門打不開.....

星期日, 2月 20, 2005

晶宴宴會廰上視


從小閣樓拍的

晶宴進場


拿蠟燭的是F的朋友

晶宴的閣樓

晶宴有CAMERA投射在大螢幕


頭頂有cAMERA在拍

F的捧花


媽作的

最後...


吃到小羊排,Rita's father肚子痛,到忠孝醫院。
...一樣是腸堵塞。

2/20的倒楣事

不知道為什麼....
  1. Mach排檔鎖
  2. 把Mach的鑰匙帶出去
  3. 剛做好頭髮被雨淋
  4. Sogo美食街一個位子都沒有,只好作蚵仔煎的位子,一點餐,到處都有位子。
  5. 買到腳鏈
  6. rita老爸肚子痛
  7. 忠孝醫院電腦當機
  8. 大半夜的南崁交流道塞車

星期六, 2月 19, 2005

星期五, 2月 18, 2005

動畫編年史

2003-10-23 15:51:41 中國動畫網 中國機動戰士聯盟 作者/JUSTICE

天地形成之初:清氣上升,濁氣下降。濁氣形成白面者(《潮與虎》)
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

吳博士將所有的source(原來區分為:application,RTL,Kernel)都放在一起。
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刪除)

Hotmail`變成250M了


got 250M!
follow PIL的說明,先是變成25M,17號以後就變成250M了。
應該是整批改的,因為PIL上很多人也都是在17號後變成250M。

今天收到了喔


ok i got it
喔,還有adaptor,忘了拍進去。
XP果然不用driver,不過電力不足,街上U10沒辦法啟動。

星期四, 2月 17, 2005

blogger, blogspot : problem found

前一振子blogspot的edit功能沒辦法進入,一直在"等待www.blogger.com"。
然後edit的view功能沒辦法用。
....
後來把firefox的default 語系由中文改為英文後就OK

Password Changes

為了讓Dr吳能用printer和server,將password改為charles123

uC/OS II

uC/OS是以function的集合作爲kernel,並沒有和RTXC一樣把所有的Kernel operation包裝在一個 .C檔裏,也就是說uC/OSkernal API沒有統一的entry point

uC/OS規定每一個task有一個prioritypriority不能重復,這個priority同時會拿來作task idid越小,priority越高。規定只有64task.

目前的執行的task id (priority)是放在OSPrioCurtask control block (TCB)OSTCBCur

uC/OStask switch動作在OSCtxSw裏,所有作task switchfunction最後都會執行這一段程式,OSCtxSwswitchtask idOSPrioHighRdytask,對應的TCBOSTCBHighRdy,同時upate這兩個變數,所以執行完OSCtxSw後,OSPrioHighRdy=OSPrioCutOSTCBHighRdy = OSTCBCur

所以任何有可能做task switchkernel API,都會找到ready taskpriority最高的taskupdateOSPrioHighRdyOSTCBHighRdy裏,再由OSCtxSwswitch

和其他的OS一樣,有機會作task switch的時機有1.Call kernel API. 2.Hardware interrupt

uC/OSsystem object: Message, MemoryPartition, Queue, Semaphore, Task, Timer

中斷服務常式的寫法:

1. 調整r14, 存入Stack[IRQ]

2. SPSR存入Stack[IRQ]

3. 清除中斷源

4. 切換SYS ModeDisable Interrupt

5. r0~r12, r14存入Stack[SYS]

6. 呼叫OSIntEnter ( C function )

7. 呼叫 這個中斷的C function

8. 呼叫OSIntExit ( C function )

9. r0~r12, r14Stack取出

10. 切換回IRQ Mode, Enable Interrupt

11. 回應硬體EOI (End Of Interrupt)

12. SPSRStack取出

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有256entry,代表一個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代表每一個sectionReadonly sectionData sectionZero 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 _, Rm

可以是CPSR或是SPSR

可以決定是要mov哪幾個byte(C,S,F)

例如:

MSR CPSR_f, 0x80000 ; 設定flag field

MSR CPSR_f, R0 ; 依照r0的內容update CPSRflag byte的內容

MRS將CPSR的資料般出來

MRS R0, CPSR ; CPSR的資料copyR0

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{}{B} Rd, [Rn, ]{!}

對應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] r1base address

LDR r0,[r1,#2] ; r0=mem32[r1+2] r1base 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,從rers

LDMFD rm!,{rs-re} ; 取出一個DataSP + 4,從rsre

所以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的地址內容, 指Range = 000~FFF的數值

** 因爲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 SWSTCompiler會使用r10作為stack limit variable (al),紀錄programstack limit。並在有需要使用stackfunction,在進入時比較r13(sp)r10(sl)

程式啟動的狀態

程式有兩種啟動狀況:(i)ROM Start(ii)ICE RAM Start。差異是在Remap之前或是之後。如果是ROM Start,表示Remap動作還沒作,在Remap之前要把RAMInterrupt Vector Table準備好。如果是ICE RAM Start,代表已經Remap過,就不需要準備RAMInterrupt 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 FolerStandalone/StartRemap

型態轉換

int, short,signed, unsigned之間的轉換

ADS在作一切運算時,都是以int運作。因為ARM的特殊結構,function argument的傳遞都是以intsize。所以即使argumentshort。在作passing argument時,ADS也會先將varalrithematical signed extend( lsl 16, asr 16),再傳入。

如果是signed時,會以argment size (不是真正的size)highest bitsigned

void saveshort(short);

int vara;

saveshort(vara)

mov r1,vara;

mov r0,r1,lsl,16

mov r0,r0,asr,16 //雖然argumentshort,還是以int的方式傳入

bl saveshort //但確保value範圍是short

如果是unsigned時,會將多餘的部分mark0

void saveunsigned short(unsigned short)

int vara

saveunsignedshort(vara)

mov r1,vara;

mov r0,r1,lsl,16

mov r0,r0,lsr,16 //argumrntunsigned short,所以把所有 high

bl saveunsignedshort //word都清除為0再傳傳入`

傳回值

型別轉換

網誌存檔