WFU

[ 精選文章 ]

自行車 入門 Escape 3 , Snap 21 , Revel

最近周末想運動 , 平日想通勤 , 想買台自行車 , 把自己找的資料跟大家分享 , 如果你是玩家級的 就不用看了 這是給跟我一樣的新新新手 參考的 騎車半年後的補充: 如果你有把握你是真的有時間有興趣會一直騎,建議還是存點錢買好一點的彎把公路車, 或是可以考慮買2手的自...

2015年12月28日 星期一

更改 Microsoft EDGE 的 Cache

跟 Chrome 的方式差不多 , 使用 MKLINK 來連結

mklink /d "c:\Users\%USERNAME%\AppData\Local\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\AC" "%Destination%"


2015年12月16日 星期三

AMI PXE Rom

LEGACY

ELINK
Name  = "OPROM(20,10EC,8168,OEMEM\\rtegpxe.lom)"
Parent  = "CSM_OPROM_LIST"
InvokeOrder = AfterParent
End


EFI
PCIDEVICE
    Title  = "PciExSlot20 x32"
    Parent  = "PCIE Root Port #1"
    Attribute  = "0x0"
    Dev_type  = "PciDevice"
    Dev  = 00h
    Slot  = 020h
    Fun  = 0ffh
    SleepNum  = 09h
    ROMFile  = "OEMEM\EfiRom_x32.efi"
    IntA =  LNKA; 16
    IntB =  LNKB; 17
    IntC =  LNKC; 18
    IntD =  LNKD; 19
    DeviceType = Slot
    PCIBusSize = 32bit
    OptionROM = Yes
    UefiRom = Yes
    ROMMain = No
    FFSFileName  = "ROM Storage"
    ROMSectionGuid  = "66fff888-bbb8-4ddd-9aaa-9527aaaaaaaa"
End

2015年11月23日 星期一

2015年11月21日 星期六

Microsoft Visual C++ 可轉散發套件全系列

Microsoft Visual C++ 可轉散發套件(Microsoft Visual C++ Redistributable Package),此程式會安裝Microsoft Visual C++程式執行時的必要元件,讓沒有安裝Microsoft Visual C++的電腦也能夠執行使用Microsoft Visual C++所開發的程式,如何判斷所需版本?依照所要安裝的程式所提供的資訊,使用符合的版本即可。

官方網站:Microsoft
軟體性質:免費軟體
介面語言:繁體中文(含多國語系)
系統需求:Windows 8/7/Vista/XP(32及64位元)
關鍵字:vcredist_x86

The Microsoft Visual C++ Redistributable Package (vcredist) installs runtime components of Visual C++ Libraries required to run applications developed with Visual C++ on a computer that does not have Visual C++ installed.

32位元版官方下載連結→
[2005 SP1] [2005 SP1ATL] [2005 SP1MFC] [2008 SP1] [2008 SP1ATL] [2010 SP1] [2010 SP1MFC] [2012 Update3] [2012 Update4] [2013]

64位元版官方下載連結→
[2005 SP1] [2005 SP1ATL] [2005 SP1MFC] [2008 SP1] [2008 SP1ATL] [2010 SP1] [2010 SP1MFC] [2012 Update3] [2012 Update4] [2013]

ref: http://www.azo51.com/2015/03/microsoft-visual-c.html

Youtube 直播

https://plus.google.com/hangouts/onair

目前這功能還是僅限於電腦上使用,發起直播的人必須使用電腦做轉播(收看的直播的人可以是手機、平板或電腦),目前還不支援直接用智慧型手機或平板電腦做 YouTube 直播,雖然已經可以用 Hangouts 應用程式跟朋友視訊通話。

2015年11月20日 星期五

Win10 遠端桌面 無法連線

檢查   控制台\網路和網際網路\網路和共用中心 如果為公開網路 會不能遠端桌面

修改方式 點選左下的 Home Group , 會顯示沒有公開網路不能加入 家用網路

修改成私人網路 (專用網路)

2015年11月12日 星期四

Windows 亮度調整 ACPI

如果 BCL 沒被跑到 , 先檢查 VBIOS Seting 
-> Panel #x -> BackLight Control Parameters->Inverter Type 必須選為 None/External

 WDDM 的架構上是 monitor.sys會去問 WDDM video driver, 如果不 support 的話就會走標準的 ACPI standard: _BCM, _BCL, _BQC. 

在 XP或Linux等其他沒有 WDDM video driver 就會走 ACPI 標準 interface

Brightness Control in WDDM
https://msdn.microsoft.com/en-us/library/windows/hardware/Dn653987.aspx

Figure 1. WDDM Brightness Control Architecture in Windows Vista

2015年11月4日 星期三

王漢宗免費字型 48套


王漢宗免費字型

王漢宗老師48套免費字型--歡迎下載使用

由中原大學數學系王漢宗教授所研發、捐贈,採用GPL授權,
免費使用。各位老師及網友,可以推廣使用。

下載 : 王漢宗免費字型1.zip , 王漢宗免費字型2.zip




Ref: http://lms.ltu.edu.tw/course_open.php?courseID=12961&f=open_doc&cid=684505

2015年11月3日 星期二

硝化作用、脫氮作用、固氮作用

硝化作用、脫氮作用、固氮作用
有老手說根本不用買菌,只接用豆漿or死掉的魚蝦來培養,這應該是一種錯誤的觀念,因為會不確定到底長出什麼菌種出來(難道用那些東西只會長出硝化菌嗎?,別養了一堆腐生菌就慘了)。
硝化作用 Nitrofication
主要經由兩群微生物來進行:
(1)亞硝酸菌屬(nitrosomonas)能將氨氧化為亞硝酸。2NH4+ + 3O2 → 2NO2- + 4H+ + 2H2O + 168Kcal
(2)硝酸菌屬(nitrobacter)能將亞硝酸氧化為硝酸。2NO2- + O2 → 2NO3- + 35.6Kcal
硝化作用所得的反應熱,僅有少部份,約5~14%被硝化細菌所利用,其餘以熱量方式散發至水體中。硝化作用的效率會因為環境因子,如溶氧、pH值、溫度等,而受到影響。
這些硝化細菌需附著於固體表面,形成一種生物薄膜,水族箱內使用底石(各式濾材)即為增加硝化細菌的附著面積,以便容許更多的硝化細菌生存,以進行硝化作用。
為一般所稱的好氧菌

脫氮作用(denitrification)
脫氮作用為一種異化作用(dissimilation),可將氨、亞硝酸及硝酸等含氮物質經脫氮細菌的作用,最後轉換為氮或氮氧化物,回歸於自然界中。
為一般所稱的厭氧菌(底沙還原)

固氮作用(nitrogen fixation)
水生植物可吸收水中動物的代謝產物,如硝酸態氮、亞硝酸態氮與尿素等,合成蛋白質等為自身組織,為一種同化作用(assimilation),具改善水質的功效。

一般人對水族硝化系統的認知是:NH3-----> NO2- ---->NO3-
但是在一般的淡水水族箱(PH小於等於7)中NH3會被轉換為NH4+
NH3對水中生物有劇毒的原因在於它不像NH4+ NO2- NO3-有帶
電荷 所以它可以輕易的進入魚隻的細胞中 而以前文章提到的
積塵影響中的硫化氫也是因為不帶電荷所以帶有劇毒

只是在淡水水族箱中,PH值為七的狀況下NH3和NH4+的比值是99.7%NH4和0.3% NH3
而在PH值為五以下的狀況下更可以到達接近100:0的比值 相較於
PH值為8.4時的84.7% NH4+和15.3% NH3,NH3的含量的確是低了許多

再來就會有人問,那淡水的魚缸中不就完全不用擔心污染的問題
了嗎?反正氨化作用放出了再多的NH3都會被氫離子結合變成NH4+,
怎麼樣都死不了魚

但實際上NH4+仍然會轉換為NO2-的,如下:
NH4+ + 0.103CO2 + 1.86O2 → 0.0182C2H5NO2(亞硝酸菌) + 0.00245C2H7NO2(硝
酸菌) + 0.979NO3- + 1.98H+ + 0.938H2O

注意到了嗎?只要有碳源的存在,離子狀態的NH4+仍會被轉換
為亞硝酸,所以毒性這時又會增強,所以說僅管是淡水缸仍然
不能忽略硝化系統的存在

再來是一般人最困惑的沉水植物吸收NH4+的問題,NH4+的確是
植物氮源吸收的最主要形式,但是植物吸收NH4+跟轉換成NO2-
後足以讓水中生物中毒的NH4+濃度為兩碼子事

當水中的NH4+濃度低到一定濃度以下時 沉水植物會優先吸收硝酸態
的氮,而僅管濃度低 這個量所轉換成的亞硝酸鹽已經足以讓魚隻
中毒 關於這一點PALO大在網誌中也稍微帶到了一些,也因此過濾系統
穩定與否在草缸扮演著非常重要的地位,不是一句植物會吸收毒物就能
帶過的

而做以上實驗的樣本植物乃是一些生命力極強的草種,因此對於我們一
般所種植的較嬌貴之草種,這個NH4+吸收最低濃度只會更高,所以更不
要指望他們來代替過濾系統做水質處理的工作

這時就會有人問了,那既然NH4+濃度低到一定程度植物便會開始吸收亞
硝酸及硝酸,那只要我們不加氮肥就可以強迫它們吸收毒物了呀!事實
上植物吸收NO2-及NO3-後仍然要花費能量將其轉換為NH4+才得以利用儲存
所以使用這種方法或許有可能讓植物存活,不過草況就會變得非常的差,
甚至造成一些較嬌貴水草之死亡(水草也是會被過高的NO2-及NH3毒死的,
這也是很多人說硬水難種草的原因!因為硬水PH較高水中NH3的量便增高,
而水草如果要吸收NH3仍然要耗費能量將其轉換為NH4+,而NH3對於一些
較敏感的草種也具有毒性,太陽類水草在硬水裡種不好跟這也有些關係)

再來我們不能忘記我們面對的是水生
植物,水質狀況也就是水中NO2-及其他毒物的量也會影響水草的生長及
光合作用,而水草要正常吸收養份的話一定要搭配正常的光合作用

所以水質狀況影響水草,水草也影響水質狀況,這個從大量冒泡往往需要
良好及穩定的水質以及NO2-含量一高太陽草類生長便受壓抑及小紅莓等的
掉葉、紅蝴蝶葉形之變差、新百葉整體頭形縮小等等的狀況便可以看出,
也因此水草跟水質的交互作用就變得更為難解

所以依靠水草作為水中無機廢物代謝工廠是不可行的,除非以極
低密度進行養殖,因為它的不穩定性實在太高了,現在就會有人
問:那應該怎麼辦呢? 答案很簡單--->以良好完整的過濾系統配
合換水來控制水質,仍然給予水草足夠的氮源,多餘被轉換成
NO2-的量再由過濾系統的硝化菌來處理,如此即可維持草缸的
生態平衡

再來便是硝化系統的問題了,常有人說要養硝化菌一定要先
放魚或污染物以製造汙染才培養的起來,實際上這是錯誤的
觀念,如果抱著只要初期讓NH3/NH4+濃度大量上升便可快速培
養硝化菌而丟入魚屍 飼料或放入生物製造汙染的話,反而會讓
氨化作用的異營菌(生殖速度為硝化菌的數百倍)消耗過多氧氣
,霸佔濾材孔隙,酸化環境,而NH3/NH4+及NO2如果濃度過高時
也是會毒死硝化菌的,一切的一切都使得硝化菌的生成受到更嚴苛的考
驗,這也是有些人設缸太快放魚導致系統一蹶不振再也爬不起來
的原因

所以不管裸缸草缸 沒有必要為了養水而製造額外的污染,空氣
中和自來水中早已充滿各式微生物,他們的屍體及代謝物已足以
提供硝化菌生成的氮源及碳源,只有在不壓迫硝化菌的情況下
他們才能自然生成建立一個良好穩定的系統,而草缸就更不用
擔心了!水草的殘枝爛葉及底土和肥料的成份一定足夠硝化菌培養

另外關於草缸多換水有助於穩定和草類生長這點,因為水草本身會分泌
酚類,這種東西對硝化菌一樣具有毒性,因此需要靠換水或是物理
吸附來將之去除,因此草缸多換水除了幫助植物新陳代謝及去除
廢物外 還能夠幫助硝化系統的建立及穩定

再來是草缸水質不如裸缸穩定的老問題,講到這裡也可以順便
拿出來解釋,草缸水質不穩除了以前提過的植物新陳代謝問題外,
還有就是我們所加的液肥,它提供的氮源在水中會以NH4+或NO3-的狀
態存在,也因此它不僅僅是水草的氮源,也是硝化菌轉換亞硝
酸的氮源,而一些草缸常用的黑土品牌如亞馬遜二代黑土,它
老實說有點不應該的加入了一些(NH4)2SO4的成份,這東西是
什麼呢?絕對不是土裡固有的,而是一般我們農業上使用的酸
性肥料的成份!也因此很多人在初使用時便因為沒有大量換水
只有讓水養個幾天便放魚,造成魚隻進入後暴斃的情況,而
五味跟ADA便少有此種情形,老實說加入這種不該加入的東西
其廠商應該有告知及警告的動作,不過這個在以前文章提過
在此便不多做論述

因此在全草缸要將NO2-歸零比起裸缸其環境因子要複雜的多
裸缸只要配合夠力的硝化系統及換水要維持水質穩定輕而
易舉,但草缸其不確定因子實在太多

再來是有人提過的全草缸過濾主力不是在過濾器而是在底
砂的問題,沒有浪板的底砂基本上其過濾效能是不高的,
因為其水於上下層的流動性太低,這也是許多有鋪底砂沒
使用浪板的半草缸易出問題的原因,所以以前DUPLA才為
了模仿自然界河川底土溫度高水中溫度低造成對流的
過濾情況而做出了底部加溫線這種東西,但在臺灣這種
四季溫度平均都二三十度的地方這種低溫加溫線根本毫無
用處,也因此脫離極低密度飼養以後全草缸底砂過濾效能
不足的窘境便會發生,藻類問題.草況問題.水質問題便會
接種而來!所以有著完整的過濾設備對草缸是非常重要的

最後做個總結:

1 淡水中的氨幾乎都以NH4+的情況下存在 而這情況對魚隻
毒性甚低 只是硝化菌仍然會將其轉換為對魚隻仍具毒性的
NO2- 而水草吸收的NH4+濃度跟對於具毒性的NH4+濃度範圍
是分開的

2 為了水草的正常生長我們有時會在肥料內額外添加氮源,使得
水中NH4+的量不會缺乏,但也因此造成了NO2-的不斷產生
所以需要過濾系統將其轉換為毒性較低之NO3-

3 培養硝化菌不需要額外添加魚屍 飼料等污染物還有生物
加了反而有可能讓異營菌快速增殖壓迫硝化菌的生長空間

4 草缸多換水除了幫助水草新陳代謝 正常生長外,也能幫助
一些對硝化菌有毒性的酚類之排除 使系統更加穩定

5 適當的過濾系統配置是很重要的 過濾的細節我在以前文章
已提過 等我做了更好的統整以後可能會再發一篇過濾篇

6 一些除了青苔外藻類問題的大量發生 是水中整體營養循環
有問題的警訊,水中藻類孢子是無時不存在的,只是要看這
環境適不適合他們大量增殖,所以有藻類發生代表過濾系統
或是管理方式出了問題,需要找出問題來解決而不是想一些
用雙氧水或除藻劑等治標不治本的方法將之去除,要把他們
當作是一個水質的指標

2015年11月2日 星期一

HTC E9+

HTC Desire -> HTC J -> HTC One -> HTC Desire 820 -> HTC E9Plus

用了一堆 HTC 手機 , 也算習慣了 , 但是 ROOT , RUU 搞得越來越麻煩是哪招 !?

一拿到就先連續 OTA 到最新5.02

官解 , Root , 刷 Recovery , 刷 SU ... 幾乎變成例行公事了

5.0 後 ROOT 會更動 System 區 , 需要 RUU 才能 OTA 唷

台版的 RUU (網路有不過需要帳號

2015年10月30日 星期五

昏迷指數

格拉斯哥昏迷指數的評估有三個方面,三個方面的分數加總即為昏迷指數。記述以E、V、M三方面:

睜眼反應(E, Eye opening)

  • 4分:主動地睜開眼晴(spontaneous)。
  • 3分:聽到呼喚後會睜眼(to speech)。
  • 2分:有刺激或痛楚會睜眼(to pain)。
  • 1分:對於刺激無反應。
  • C:有外力阻止眼睛睜開(closed),例如眼皮水腫。

說話反應(V, Verbal response)

  • 5分:說話有條理,會與人交談(oriented)。
  • 4分:可應答,但說話沒有邏輯性(confused)。
  • 3分:可說出單字或胡言亂語(inappropriate words)。
  • 2分:可發出聲音(unintelligible sounds)。
  • 1分:無任何反應(none)。
  • E:氣管插管無法正常發聲(endotracheal tube)。
  • T:氣管切開無法正常發聲(tracheotomy)。
  • A:失語症(aphasia)。

運動反應(M, Motor response)

  • 6分:可依指令做出各種動作(obey commands)。
  • 5分:施以刺激時,可定位出疼痛位置(localize)。
  • 4分:對疼痛刺激有反應,肢體會閃避(withdrawal)。
  • 3分:對疼痛刺激有反應,肢體會彎曲,試圖迴避(decorticate flexion)。
  • 2分:對疼痛刺激有反應,肢體反而會伸展開(decerebrate extension)。
  • 1分:無任何反應(no response)。

昏迷程度

昏迷程度以E、V、M三者分數加總來評估,正常人的昏迷指數是滿分15分,昏迷程度越重者的昏迷指數越低分,最低為3分。
  • 輕度昏迷:13分到14分。
  • 中度昏迷:9分到12分。
  • 重度昏迷:3分到8分。
  • 其他狀況:因插管或氣切無法發聲的重度昏迷者會有 2E或2T 的評分紀錄。

2015年10月22日 星期四

修改 TortoiseSVN 的 Log Message

Subversion 預設是不允許回去改 Message Log 的,所以要去改 Server 端的權限
VisualSVN 選取要修改的專案目錄 右鍵 Properties
上方選 Hook
修改 Pre-revision property change hook
貼上下方 Script

Script
@ECHO OFF

set repos=%1
set rev=%2
set user=%3
set propname=%4
set action=%5

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Only allow changes to svn:log. The author, date and other revision
:: properties cannot be changed
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
if /I not '%propname%'=='svn:log' goto ERROR_PROPNAME

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Only allow modifications to svn:log (no addition/overwrite or deletion)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
if /I not '%action%'=='M' goto ERROR_ACTION

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Make sure that the new svn:log message contains some text.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
set bIsEmpty=true
for /f "tokens=*" %%g in ('find /V ""') do (
set bIsEmpty=false
)
if '%bIsEmpty%'=='true' goto ERROR_EMPTY

goto :eof



:ERROR_EMPTY
echo Empty svn:log properties are not allowed. >&2
goto ERROR_EXIT

:ERROR_PROPNAME
echo Only changes to svn:log revision properties are allowed. >&2
goto ERROR_EXIT

:ERROR_ACTION
echo Only modifications to svn:log revision properties are allowed. >&2
goto ERROR_EXIT

:ERROR_EXIT
exit /b 1 

硝化菌 鹽 滲透壓 影響

這個是有關硝化菌的論文

來源 : http://web.deu.edu.tr/atiksu/ana58/nitri.doc

內容節錄:
Salt Osmotic Pressure
Nitrifiers have a sizable range of tolerable osmotic pressures, ranging from fresh to saline,
depending on the particular genus form. Furthermore,
many nitrifiers seem able to rapidly switch from one salt level to another
with little impact on their activity.
Within most nitrifying reactor systems, however, it is likely that they will become acclimated
to an osmotic pressure which varies relatively little over time,
even given the dynamics associated with makeup water addition.

簡單翻譯:
鹽滲透壓:硝化菌,能容忍相當大的滲透壓範圍,依據不同的種類有不同的適應範圍,大部分的硝化菌在不同鹽度的切換中只有微小的影響,然而在大部分的硝化反應器系統中,看起來硝化菌會適應於某個相對變化小的滲透壓值,即便有動態的補水系統.

結論:
硝化細菌能生存於海水及淡水中,大多可以迅速調節體質以減少因鹽度變化所帶來的衝擊

2015年10月19日 星期一

Discuz UCenter創始人 無法登入


uc_server/model  ==> admin.php
Search           $this->cookie_status = 0;
Replace to     $this->cookie_status = isset($_COOKIE['sid']) ? 1 : 0;

it works for me


這個HACK功能, 
它可以把.JPG .GIF .PNG結尾的URL自動轉換成[img][/img]!! 
這樣就不用自己輸入[img][/img], 
可以節省不少時間. 
至於製作方法如下所示 
請樓主依照步驟執行才不會錯誤發生 
修改方法:打開/include/discuzcode.php 
找到: 
function parseurl($message) { 
return preg_match("/\[code\].+?\[\/code\]/is", $message) ? $message : 
preg_replace( array( 
"/(?<=[^\]a-z0-9-=\"'\\/])((https?|ftp|gopher|news|telnet|mms|rtsp):\/\/|www\.)([a-z0-9\/\-_+=.~!%@?#%&;:$\\()|]+)/i", 
"/(?<=[^\]a-z0-9\/\-_.~?=:.])([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4}))/i" 
), array( 
"[url]\\1\\3[/url]", 
"[email]\\0[/email]" 
), ' '.$message); 

替換成: 
//[HACK]自動解析圖片URL By Ayoyo 
function parseurl($message) { 
return preg_match("/\[code\].+?\[\/code\]/is", $message) ? $message : 
preg_replace( array( 
"/(?<=[^\]a-z0-9-=\"'\\/])((https?|ftp|gopher|news|telnet|mms|rtsp):\/\/|www\.)([a-z0-9\/\-_+=.~!%@?#%&;:$\\()|]+)(.jpg|.png|.gif)/i", 
"/(?<=[^\]a-z0-9-=\"'\\/])((https?|ftp|gopher|news|telnet|mms|rtsp):\/\/|www\.)([a-z0-9\/\-_+=.~!%@?#%&;:$\\()|]+)/i", 
"/(?<=[^\]a-z0-9\/\-_.~?=:.])([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4}))/i" 
), array( 
//[HACK]自動解析圖片URL 

這樣就完成了 
記得在系統後台更新緩存!

2015年10月14日 星期三

組合語言指令介紹

REF: http://masm1215.myweb.hinet.net/

組合語言的假指令,可分為「一般的假指令」、「條件式組譯」及「高階指令」等三種,而一般,我們只需用到第一種,至於第二種,則式各人需要使用於巨集檔中,第三種,則不建議使用,因為要使用高階指令,那你不如用C語言去寫就好了,何必學組合語言呢,整個程式的整體架構是由程式設計師一人開發的,假如你加入了高階指令,那麼這個組合語言程式,不就沒有了他的本質(速度快,檔案小)。
  以下會將這三種假指令取其常用的,分別一一為您介紹。
捷徑:條件式組譯高階指令

一般的假指令

一般假指令的種類很多,例如:.model, .code, .data, .stack, end, ;, .186, .286, .386, .486, .586, equ, org, label, offset, segment, .data?, const, @, .fardata, .fardata?, seg, assume,dup等等。
  假指令本身,並不是程式碼,而是您在組譯時,組譯程式(MASM)會去看得懂這些假指令,而加以處理你所寫的程式碼,我將所有會用到的指令分別介紹如下:
1.指定微處理器模式 .8086、.186、.286、.386、.486
  若指定.286,那麼程式在組譯時,就無法組譯386以上的組合語言指令碼,例如 EAX與 EBX 等32位元的暫存器,只有386以上CPU才有,所以若程式裡有 mov eax,eax 等指令時,組譯會發生組譯錯誤的訊息,唯有將微處理器模式改回 .386 或 .486 時才會組譯成功。所以小弟建議,一般都採用 .486 即可。功能就是將以上的程式碼組譯成 80486 的程式碼。
2.定義記憶體模式 .model [模式」
  於本站「組合語言基礎」=>『組合語言原始檔基本架構』中,欲編寫組合語言程式一定要在原始檔中定義 記憶體模式,而其模式的種類與使用場合分別於下說明
記憶體模式
用途及記憶體使用範圍
tiny用於成立 .com 檔,程式段、資料段、額外段及堆疊段等四個區共用在同一個區段(64Kb)中,檔案最大僅能64Kb。
small程式段及資料段,各有64Kb的空間。為一般最常用的 .exe 檔的模式,建議使用。
medium程式段可超過64Kb,而資料段只有64Kb的空間。
compact資料段可超過64Kb,而程式段只有64Kb的空間。
large程式段與資料段,皆可大於 64 Kb。
huge同上,但更強的是,連同資料段中的任意某陣列,也可大於 64Kb 的範圍。
flat???? 用於 OS/2 系統。用途不詳......
使用範例
.model tiny

.model small
3.程式區段的起始 .code [名稱]
  定義程式區段的起始,如果我們定義兩個以上的程式段時,就必需為這些程式段命不同的名字;當我們只定義一個程式區段時,名稱可以省略不必命名,但在 tiny、small、compact 三種模式下,只能有一個程式段,所以就不必名稱了。
4.堆疊段起始 .stack [size]
  定義堆疊段的起始,定義時可指定大小,其中以 byte 為單位,若省略而不指定大小時,會以 1024 bytes 取代之。
5.一般資料段起始 .data、.fardata [名稱]
  近程資料段以 .data 起始,但其超出 64Kb 範圍的資料段稱為遠程資料段需以 .fardata 起始,而名稱,只有在定義兩個以上的遠程資料段時,才需命名。
6.無初始值之資料段與常數資料段 .data?、.fardata?、.const
  我們如果只編寫單獨為組合語言程式時,這三個區段則無需定義,但若我們寫的程式要與高階語言作連結時,就必需將無初始值的資料移至 data? 或 fardata? 區段中,且需將用來定義字串、實數及常數的部份移至 .const 區段中。如下
.model small
.486
.code
       :
       :
.data
       :
.data?
mag01 db ?    ; 單一變數,無初始值,單位 byte
mag02 dw ?,?,?  ; 一般變數,無初始值,單位 word 共 3 word = 6 bytes
mag03 db 24 dup(?) ; 陣列,無初始值,容量大小為 24 bytes
 
.stack
end
7.結束整個模組的組譯 END [程式段起始位址標名]
  當我們寫程式區段的程式碼時,必需在啟始執行的位置設一個標名,那麼該程式被組譯後,程式就會從這個標名開始執行,假設我們把它放在程式段的第一列。那麼於 END 之後也必需加上這個標名,才算是指定成功,程式才會以這個標名做起始,如下:
.model tiny
.486
.code
begin0: mov ax,ds
                mov  ......
     :
 
begin1: ......
 
.exit
 
 
 
 
end  begin0   ; 在此指定 .code 段的起始位址 cs:ip 值為 begin0
8.各區段暫存器之段位址初值的取得 @code、@data、@stack、@data? .....
  利用 mov 指令,即可將各區段段位值址取得,方法如下
   :
.stack 100h
   :
.data
   :
.code
start0:
   :
   mov ax,@code ; 取出 .code 段的區段位址,存入 ax
   mov bx,@data ; 取出 .data 段的區段位址,存入 bx
   mov dx,@stack ; 取出 .stack 段的區段位址,存入 dx
   :
   end start0
程式開始執行時,cs=@code 、ss=@stack、sp=100h(因為如上的設定100h),而 ds 與 es 則是指向另一個程式前置區(psp),所以 ds 與 es 的值要由我們自行在程式段中寫程式來指定,用 mov ax,@data 與 mov ds,ax 來讓 ds 指向資料段,如此,我們才取得到資料段中所存的資料、變數,所以我們可以將程式的基本架構寫成如下的格式。
.model small
.486
.code
begin0:  mov ax,@data
    mov ds,ax
 
 
 
.exit
.data
 
 
 
 
.stack
end   begin0
9.程式段起始位址的假指令 .startup
  使用時必需省略如上中的 end 後面的 begin0 及程式段的 begin0:,而且 .startup 也會自動執行 mov ax,@data 及 mov ds,ax,但如果是 .com 檔,它會自己加入 org   100h 指令,所以修改後架構,可參考「組合語言基礎」=>『組合語言原始檔基本架構』。
  也就是說用於 .com 檔時,可做下列改變
    :
.code
org  100h
start:
    mov .....     ; 程式開始
    :
    end  start ; 程式結束
轉換為
    :
.code
.startup
    mov ...... ; 程式開始 ( start 標名不見了,org 100h 也可省略了)
    :
    end   ; 程式結束
然而用於 .exe 檔時,與上有所不同,如下
    :
.code
start:
    mov ax,@data
    mov ds,ax
    mov ...... ; 程式開始
    :
    end  start ; 程式結束
轉換為
    :
.code
.startup
    mov ...... ; 程式開始 ( start 不見了,ds指向資料段也自動執行了)
    :
    end   ; 程式結束
10.程式結束返回 DOS 之假指令 .exit [錯誤碼](errorlevel)
  組譯程式在碰到 .exit 時,會自動翻譯為執行下列程式碼
    mov ah,4ch
    mov al,[錯誤碼]  ; <= 若無輸入錯誤碼,則此列將省略不會執行
    int 21h
上面的功能是將程式結束,主控權交還給 DOS。
11.重覆定義資料 dup
  可以重覆定一指定個數的記憶體變數內容,例如我們要定一個名稱為 poss0的記憶體變數,而內容是18個空白鍵,那麼我們的定義方式,可以有以下幾種為例:
方法一:
poss0 db 20h,20h,20h,20h,20h,20h,20h,20h,20h
   db 20h,20h,20h,20h,20h,20h,20h,20h,20h
方法二:
poss0 db 18 dup(20h)
12.常數符號之定義 equ 及 "="
  可利用定義功能,將程式中的某數值,以一個名稱取代,這種定義的用途的好處,就是修改程式容易,當我們寫一個程式,但如檔案內有個A數值為98,我們將它用等號定義,名稱定義為 numa,有一天我們要修改程式的A數值時,我們可以直接從定義的部份更改其A值即可將整個檔的A值都改了,這樣方便吧,如下:
numa equ 98
numa = 98
至於 equ 與 = 的差別,有兩個地方不同,第一就是 = 可以重覆定義同一個符號,但 equ 卻不行,第二就是 equ 可以定義字串等值,也就是定義變數的別名,但 = 卻不行。如下說明:
.model small
.code
.startup
 
aaa = 23
aaa = aaa+2
 
bbb equ 23
bbb equ bbb+2   ; 這裡會有錯,equ不可重複定義同一符號
 
ccc equ <aaa+bbb>
ddd equ <ax,ccc>
 
eee = <aaa+bbb>  ; 這裡有錯,"=" 不能定義字串或變數別名
 
   mov ax,aaa
   mov bx,bbb
   mov cx,ccc
   mov ddd
.exit
org, label,offset, segment,@,seg, assume,include等等。

條件式組譯

條件式組譯通常用在巨集檔裡面,因為同一個巨集中,為了避免佔用太大的記憶體,所以不是整個巨集裡的內容都需要用到,那麼那些沒有用到的部份就可不必組譯,可節省記憶體空間。
1.假設指令集 if....(else)....endif
  使用格式 [ ifxx   條件運算式 ],其中 ifxx 可為以下各模式,當條件成立時,才會將 ifxx 與 endif 之間的內容組譯。
if 假如不等於 0
ife 假如等於 0
ifdef 假如已定義過
ifndef 假如沒定義過
ifb 假如為空白
ifnb 假如不為空白
ifidn A,B 假如A等於B
ifidni A,B 假如A等於B(但區分大小寫)
ifdif A,B 假如A不等於B
ifdifi A,B 假如A不等於B(但區分大小寫)
使用範例如下
abcd  macro   pra1,pra2    ifb <para1>  ; 假如引數1沒有輸入任何東西,則令 ax =1
    mov   ax,1
    endif
     :
    exitm
2.條件二 else 指令集
  else、elsee、elsedef、elseb、elsenb、...... 功能同上,需用在 if 之後。
3.重覆組譯指令 repeat.....endm
  使用的格式為,[repeat 次數],當組譯器在組譯時,就會重複組譯 repeat 與 endm 之間的內容,所以通常用於巨集指令之內。
4.條件重覆組譯 while.....endm
  使用格式為 [while   條件運算式],當條件運算式成立時,重複組譯 while 與 endm之間的程式敘述。
5.重覆參數組譯 for.....endm
  使用格式為 [ for   參數,<數值1,數值2,數值3.....> ],重複組譯的次數是取決於共輸入幾個數值,如果只輸入三個數值,代表藉於 for 與 endm 之間的程式碼重複組譯三次,每一次的參數值都不一樣,第一次時參數是放入數值1,第二次是放人數值2,第三次是放人數值3。
6.重覆文字參數組譯 forc
  使用格式為 [ forc   參數,<字串> ],重複組譯的次數是取決字串的長度,如果只輸入 345 三個字,代表藉於 forc 與 endm 之間的程式碼重複組譯三次,每一次的參數值都不一樣,第一次時參數是放入數值3,第二次是放人數值4,第三次是放人數值5。 

高階指令

高階指令,也可稱為流程控制指令,可以讓使用者在寫迴圈時更為簡便化,且由於它的語法與 C 語言相近,所以語法也就比較高階化,讓人容易一看就知道在寫什麼。
  而可用的高階指令有 .if、.while、.repeat、.break、.continue 等五種,使用的語法分別列出如下:
(1)  .if 的使用方式
  下面是簡單的 .if 控制流程,首先會檢查條件式 A 是否有成立,如果有成立則往下一行執行,執行完 .if 的部份再跳至 .endif 離開迴圈,如果不成立則跳到下一個條件式 B 去檢查是否成立,依此類推,直到每個條件式都不成立時,才會去執行 .else 裡面的東西,執行完一樣是跳至 .endif 離開迴圈。
.if 條件式 A   :
.elseif 條件式 B
   :
.elseif 條件式 C       ( 可以有無限多個 .elseif )
   :
.else
   :
.endif
(2) .while 之使用方式
  條件式 A如果為真,則執行 .while ....   .endw 之間的指令的部份,直至條件式 A為假,才停止執行。
.while 條件式A   :      (假如條件式A為真則執行此處指令)
.endw
 (3) .repeat 之使用方式
  有兩種使用方法,第一種是 .repeat 與 .until 配合,即當執行裡面的指令一次後,去判斷條件式 A是否為真,如果為假則繼續重覆此段的指令,如果為真則結束迴圈,如下
.repeat  :   (此段指令即欲執行之迴圈)
.until 條件式A
第二種方法,是 .repeat 與 .untilcxz,即當執行完裡面的指令一次後,去判斷條件式A是否為真,且亦去判斷 cx 是否為 0,如果條件式A為假且cx不為0則繼續重覆此段的指令,如果為條件式A為真或者 cx=0 則結束迴圈,如下
.repeat  :   (此段指令即欲執行之迴圈)
.untilcxz 條件式A
(4) .break 與 .continue
  .break為結束迴圈,而 .continue 則為跳至迴圈的開頭,如下:
.while .....   :
.break
   :
.endw
     <===  執行至 .break時,會直接結束迴圈,而從這開始執行
 
 .while .....  <=== 執行至 .continue 時,會跳回這裡開始執行
   :
.continue
   :
.endw
.break 與 .continue 也能與 .if 搭配使用,如下
.while ......   :
.continue .if 條件式A <=== 條件式A成立時,跳至迴圈開頭
   :
.break .if 條件式B <== 條件式B成立時,結束迴圈
   :
.endw
(5)條件式的使用格式與方法
運算符號
意義
==
!=
>
<
>=
<=
&
!
&&
||
等於
不等於
大於
小於
大於等於
小於等於
AND
NOT
AND
OR

2015年9月18日 星期五

Google 相簿 自動備份 設定

您的新電子郵件地址為 xxxx@XXXXX.edu.tw
請用完整email登入 Google
密碼為 OOXXOOXX


手機 設定 帳號與同步處理 右上角+  選Google




同步方面 只要設定 Google相簿 跟 Google相簿備份 同步即可
(手機 設定 帳號與同步處理 Google 選取帳號)



再來請到 Google Play 下載 "Google相簿"



設定 - 備份與同步處理 - 選取要備份的帳號

選取上傳尺寸為 原始檔 (反正是無限儲存空間啊)

備份相片 就看你3G/4G 有沒吃到飽

可以選取 限WIFI 或是 Wifi+行動網路

僅限充電時 我是打勾 免得出去玩拍拍照就一直傳到沒電

設定完成 插上充電器 選取下面的全部備份 馬上將照片都備份吧 !!


2015年9月16日 星期三

鬥魚相關資訊

我養的是 PK(Plakat)鬥魚

鬥魚簡介
http://www.cvizir.com/bettahome/knowledge-bettatype.php

鬥魚飼養入門
http://www.gamebase.com.tw/forum/2442/topic/94352172/1

泰國鬥魚繁殖易上手
https://www.ptt.cc/bbs/Aquarium/M.1252917476.A.270.html

全台欖仁葉撿取點
http://www.guppytaiwan.com.tw/thread-292217-1-1.html

什麼是欖仁葉,有何功用?
http://www.cvizir.com/bettahome/knowledge-leafinfo.php

迷你虹吸管(10cc滴管) 吸魚大便的好物 ($8)
http://goods.ruten.com.tw/item/show?21519320702518

Gex 日本五味鬥魚缸(壓克力材質)($149) 10.8x10.8x12.9
http://goods.ruten.com.tw/item/show?21302169972844

Gex 日本五味多功能鬥魚缸(壓克力材質)($480) 12x11.5x18.5
http://goods.ruten.com.tw/item/show?21532283290243

鬥魚缸(壓克力材質)==基本B款[透明蓋+底座] ($135) 11x8x15
http://goods.ruten.com.tw/item/show?21301239893315

推薦飼料(德國Tetra德彩-七彩熱帶魚 顆粒飼料) 九月促銷 中+小 $300
<原價要 320+160 唷 , 可以找我合購>
http://goods.ruten.com.tw/item/show?21530174646054

方便的話可以找一些欖仁葉 , 可以讓魚比較開心


整合 .NET Framework 3.5 到 Windows 8 / 8.1 光碟

整合 .NET Framework 3.5 到 Windows 8 / 8.1 光碟

ref : http://blog.ilc.edu.tw/blog/blog/25793/post/78469/442866

以 Windows 8.1 Enterprise x64 版為例

1. 將光碟 ISO 檔用虛擬光碟軟體掛載,並將光碟中所有檔案複製到 e:\Win81\x64

2. 在 e:\Win81 目錄下建立 wim 的掛載目錄

3. 以系統管理者身份執行命令提示字元
e:
cd Win81
DISM /Mount-Wim /WimFile:x64\sources\install.wim /Index:1 /MountDir:WIM
DISM /Image:WIM /enable-feature /featurename:NetFX3 /All /Source:e:\Win81\x64\sources\sxs /LimitAccess
DISM /Unmount-Wim /MountDir:WIM /commit

4. 製作成光碟

5. 安裝完成之後,可以到 控制台 - 程式和功能 - 開啟或關閉 Windows 功能

整合 .NET Framework 4.5 到 Windows 7 光碟
因為 .NET Framework 4.5 的執行檔案是 .exe 檔,在我的印象中,似乎不能用 dism 的方式來整合,我想到的是,可以利用 Setupcomplete.cmd 這個在 Windows 7/8 安裝完成後會執行的檔案來安裝,詳細的方式可以參考下面的網站:
http://technet.microsoft.com/zh-tw/library/cc766314%28v=ws.10%29.aspx
或是搜尋 Setupcomplete.cmd 應該可以找到更多的相關資料

解除鎖定軟體 Unlocker

REF: http://izaka.tw/2015-1-25-217/
軟體名稱 : Unlocker 1.9.2
官方網站 : http://www.filehippo.com/download_unlocker



預設會替使用者安裝 Delta toolbar,請務必選擇進階安裝並取消工具列的安裝動作

2015年9月15日 星期二

網頁加密

http://www.vincentcheung.ca/jsencryption/instructions.html

js file


Instructions

To put encrypted text in your own site:
  1. Add the decryption JavaScript code (see below)
  2. Encrypt your text on the encryption page
    1. Type the password for the encrypted text in the Key box (be sure to remember the key!)
    2. Enter whatever you want to encrypt in the Plain Text box
    3. Click Encrypt
  3. Copy and paste the code in the HTML Code box into your website or blog

The JavaScript decryption code

Between the <head> and </head> tags in the html code of your webpage, add the following:
<script type="text/javascript" src="http://www.vincentcheung.ca/jsencryption/jsencryption.js"></script>

Encrypted text and decryption link

This is the basic code to use in the body of the html code of your webpage to do the decryption:
<div id="uniqueID" title="encrypted text">
    <a href="javascript:decryptText('uniqueID')">Show encrypted text</a>
</div>
encrypted text is the encrypted text generated from the encryption/decryption page.
uniqueID is a unique name for the element, which is automatically generated by the encryption/decryption page in the sample code. This can be anything that you want, but do not put your key here because it is visible to everyone.
The decryptText JavaScript function gets the encrypted text from the title of the element with the id uniqueID. Once decrypted, the contents of the element are replaced with the decrypted text.
The two uniqueID's must be exactly the same, otherwise the code will not work.
See the examples page to see this in action and for different uses.

Advanced options

The decryptText function can accept an array of element id's and it will decrypt each of them. The encrypted text in each of these element id's can be encrypted with the same or different keys.
You can change the message in the dialog box that asks for the key by providing the desired message as a second parameter, eg. decryptText('uniqueID', 'Enter the password:')
Instead of the fancy dialog box, you can use the standard JavaScript dialog box to request the key by doing this:
decryptText('uniqueID', null, true) or decryptText('uniqueID', 'Enter the key:', true)
One word of caution is that IE7 blocks the regular JavaScript dialog box and you have to click the pop-up message to allow the dialog to show.

Bookmarklets

Drag these to the bookmark toolbar:
Encrypt 
Decrypt
These bookmarklets provide a quick shortcut to the encryption/decryption page and automatically fills in the plain or encrypted text fields with the selected text on the page that you are currently on.

自製封裝Windows

http://izaka.tw/w7sp2/

20150915
Win10 do not support Windows Updates Downloader ,Use Win7 ok.

有設定子目錄的路徑會有 error message
使用整合版的 ISO 其 install.wim 有時會有問題
使用 dism /get-wiminfo /wimfile:c:\W7SP2\install.wim 確認版本可否使用
(自行整合封裝要花不少時間喔)

PS. Win7 ei.cfg 封印了版本選單
所以只要刪除這個檔案就可以解除版本封印
即可把任一版本的Windows 7安裝光碟變成 整合版光碟

亦可使用「ei.cfg Removal Utility」解除版封印 安裝過程會出現版本選擇畫面
家用入門版 家用進階版 專業版 旗艦版
雖然沒有企業版 不過 , 企業版的功能內容其實就和全功能的旗艦版完全一樣 ,
只有啟用方式不同 , 也就像是從官方下載的旗艦試用版.


2015年9月10日 星期四

Mklink 範例 轉移 Google Chrome Cache


mklink 這個指令讓其他磁碟的路徑 (比如 e:\DiskCLink\installer\) 取代 c:\windows\installer

用途為增加 C 槽空間 或是移轉儲存空間到別的空間去

1. C槽瘦身範例
robocopy /copyall /move /e c:\windows\installer e:\DiskCLink\installer

mklink /d c:\windows\installer e:\DiskCLink\installer\


2.轉移 Google Cache 範例 (通常轉移到 Ramdisk)
md R:\Temp\Chrome (R:\為你的RAMDISK)
rd /s /q C:\Users\你的用戶名\AppData\Local\Google\Chrome\User Data\Default\Cache
刪除Chrome預設路徑的Cache目錄,mklink命定只能建立不存在的路徑,不能建立在已有的資料夾上
mklink /D "C:\Users\你的用戶名\AppData\Local\Google\Chrome\User Data\Default\Cache" "R:\Temp\Chrome"
<將Cache目錄映射到z:\chrome>


PS. 支援 UNC 路徑 如 mklink /d c:\webroot \\ShareHost\ShareFolder

2015年9月9日 星期三

Widnows 同時 連接有線網路 無線網路

Widnows 當有連接有線網路時 無線網路 不會自動連線的解決方式

Windows 的「本機群組原則編輯器」(gpedit.msc)

本機電腦原則 - 系統管理範本 - 網路 - Windows 連線管理員 - 最小化網際網路或 Windows 網域的同時連線數目

Default 是 尚未設定 (但是會被啟用)

設定成 已停用 即可

2015年9月8日 星期二

ASUS UX32VD install Win10


當初買 ASUS UX32VD 是搭配 Win7 Home , Win10 出了當然要換 Win10 囉
1.先備份還原 Run ASUS recovery AI to create recovery ISOs (4 files 13.8G)
Recommend,due to to clean all the partitions and install the OS in SSD is much better.

2.安裝 win10 時把所有的分割區都殺了 (含 SSD 24G)

3.I choose to install Win10 Pro to SSD (about 14G after install)
裝在 SSD24G 不推薦 , 空間太小 無法休眠

4.安裝完成後 去裝置管理員把顯示卡驅動更新一下

5.裝置管理員會有黃色驚嘆號,下載DPTF安裝後就好了
ACPI\INT3400
ACPI\INT3402
ACPI\INT3403
ACPI\INT3404
please get the "Intel® Dynamic Platform and Thermal Framework Drive" from Asus website (http://dlcdnet.asus.com/pub/ASUS/nb/Drivers/DPTF/DPTF_Intel_Win7_64_Z6011067.zip)

6.Fn 鍵的功能請安裝 ATK package
Then you will need the FN key support , try to get the "ATKPackage_Win7_64_Z100022" from from Asus website ( or download directly HERE ) (note: driver can be used in both 32/64)

7.24G 的 SSD 可別浪費 , 設定 CacheExpress + Intel Rapid Start
1.執行 CreateRSTDSK
2.安裝 Intel Rapid Start
3.安裝 ExpressCache 後 , 重開機後即可
檢查成功與否方式為使用 DOS 視窗執行 ECCMD -info (位於 program files\Diskeeper Corp oration\ExpressCache) 看到 Mounted = Yes 即可
ps 如果有先安裝了 CacheExpress 的話 IRST 會不能裝 , 請移除再重做一次

8.使用Primo Ramdisk 切 Ramdisk

9.將 TEMP 檔改到 Ramdisk

10.Enjoy it !

PS
Intel Rapid Start Technology not supported

2015年7月30日 星期四

AMD KB reset 發兩次 (AMI)

SBSECInit.asm

IF MKF_SB900_RESET_WORKAROUND
;; Warm reset work around ( Do cold reset) end
;SB900 CF9 Reset workaround
    cmp   BYTE PTR DS:[0Ffff0h], 0EAh ; Is it warm reset ?
    jne NotWarmReset

    mov dx,0cf9h
    mov ax,6   ;hw reset
    out dx,ax

    mov dx,80h
    out dx,al

    jmp $
NotWarmReset:


As I check the KBC reset in Godvari platform , I can see 2 reset in the wave form ,
after trace , it seems to be the workaround from old chipset ...
a warm reset will issue a cold reset  right after it ...

2015年7月1日 星期三

AMI Debug code

================================================
StatusCodeMap.c , StatusCodeMapPei.c
================================================
//**********************************************************************
// Checkpoints map
//**********************************************************************
//1        - 0xF : SEC execution
//0x10 - 0x2F: PEI CAR execution
//0x30 - 0x4F: PEI execution after memory detection
//0x50 - 0x5F: PEI errors
//0x60 - 0xCF: DXE execution
//0xD0 - 0xDF: DXE errors
//0xE0 - 0xE8: S3 Resume
//0xE9 - 0xEF: S3 Resume errors
//0xF0 - 0xF8: Recovery
//0xF9 - 0xFF: Recovery errors

================================================
PEI
================================================
STATUS_CODE_TO_BYTE_MAP ProgressCheckpointMap[] =
{

//Regular boot
    { PEI_CORE_STARTED, 0x10 },
    { PEI_CAR_CPU_INIT, 0x11 },
    // reserved for CPU 0x12 - 0x14
    { PEI_CAR_NB_INIT, 0x15 },
    // reserved for NB 0x16 - 0x18
    { PEI_CAR_SB_INIT, 0x19 },
    // reserved for SB 0x1A - 0x1C
    // reserved for OEM use: 0x1D - 0x2A
    { PEI_MEMORY_SPD_READ, 0x2B },
    { PEI_MEMORY_PRESENCE_DETECT, 0x2C },
    { PEI_MEMORY_TIMING, 0x2D},
    { PEI_MEMORY_CONFIGURING, 0x2E },
    { PEI_MEMORY_INIT, 0x2F },
    // reserved for AML use: 0x30
    { PEI_MEMORY_INSTALLED, 0x31 },
    { PEI_CPU_INIT,  0x32 },
    { PEI_CPU_CACHE_INIT, 0x33 },
    { PEI_CPU_AP_INIT, 0x34 },
    { PEI_CPU_BSP_SELECT, 0x35 },
    { PEI_CPU_SMM_INIT, 0x36 },
    { PEI_MEM_NB_INIT, 0x37 },
    // reserved for NB 0x38 - 0x3A
    { PEI_MEM_SB_INIT, 0x3B },
    // reserved for SB 0x3C - 0x3E
    // reserved for OEM use: 0x3F - 0x4E
    { PEI_DXE_IPL_STARTED, 0x4F },
    { DXE_CORE_STARTED, 0x60 },
//Recovery
    { PEI_RECOVERY_AUTO, 0xF0 },
    { PEI_RECOVERY_USER, 0xF1 },
    { PEI_RECOVERY_STARTED, 0xF2 },
    { PEI_RECOVERY_CAPSULE_FOUND, 0xF3 },
    { PEI_RECOVERY_CAPSULE_LOADED, 0xF4 },
//S3
    { PEI_S3_STARTED, 0xE0 },
    { PEI_S3_BOOT_SCRIPT, 0xE1 },
    { PEI_S3_VIDEO_REPOST, 0xE2 },
    { PEI_S3_OS_WAKE, 0xE3 },

    {0,0}
};

STATUS_CODE_TO_BYTE_MAP ErrorCheckpointMap[] =
{

//Errors
//Regular boot
    { PEI_MEMORY_INVALID_TYPE, 0x50 },
    { PEI_MEMORY_INVALID_SPEED, 0x50 },
    { PEI_MEMORY_SPD_FAIL, 0x51 },
    { PEI_MEMORY_INVALID_SIZE, 0x52 },
    { PEI_MEMORY_MISMATCH, 0x52 },
    { PEI_MEMORY_NOT_DETECTED, 0x53 },
    { PEI_MEMORY_NONE_USEFUL, 0x53 },
    { PEI_MEMORY_ERROR, 0x54 },
    { PEI_MEMORY_NOT_INSTALLED, 0x55 },
    { PEI_CPU_INVALID_TYPE, 0x56 },
    { PEI_CPU_INVALID_SPEED, 0x56 },
    { PEI_CPU_MISMATCH, 0x57 },
    { PEI_CPU_SELF_TEST_FAILED, 0x58 },
    { PEI_CPU_CACHE_ERROR, 0x58 },
    { PEI_CPU_MICROCODE_UPDATE_FAILED, 0x59 },
    { PEI_CPU_NO_MICROCODE, 0x59 },
    { PEI_CPU_INTERNAL_ERROR, 0x5A },
    { PEI_CPU_ERROR, 0x5A },
    { PEI_RESET_NOT_AVAILABLE,0x5B },
    //reserved for AMI use: 0x5C - 0x5F
//Recovery
    { PEI_RECOVERY_PPI_NOT_FOUND, 0xF8 },
    { PEI_RECOVERY_NO_CAPSULE, 0xF9 },
    { PEI_RECOVERY_INVALID_CAPSULE, 0xFA },
    //reserved for AMI use: 0xFB - 0xFF
//S3 Resume
    { PEI_MEMORY_S3_RESUME_FAILED, 0xE8 },
    { PEI_S3_RESUME_PPI_NOT_FOUND, 0xE9 },
    { PEI_S3_BOOT_SCRIPT_ERROR, 0xEA },
    { PEI_S3_OS_WAKE_ERROR, 0xEB },
    //reserved for AMI use: 0xEC - 0xEF

    {0,0}
};

//**********************************************************************
// Beep codes map
//**********************************************************************
STATUS_CODE_TO_BYTE_MAP ProgressBeepMap[] =
{

//Recovery
    { PEI_RECOVERY_STARTED, 2 },

    {0,0}
};

STATUS_CODE_TO_BYTE_MAP ErrorBeepMap[] =
{

//Errors
//Regular boot
    { PEI_MEMORY_NOT_INSTALLED, 1 },
    { PEI_MEMORY_INSTALLED_TWICE, 1 },
    { PEI_DXEIPL_NOT_FOUND, 3 },
    { PEI_DXE_CORE_NOT_FOUND, 3 },
    { PEI_RESET_NOT_AVAILABLE, 7 },
//Recovery
    { PEI_RECOVERY_FAILED, 4 },
//S3 Resume
    { PEI_S3_RESUME_FAILED, 4 },

    {0,0}
};

================================================
DXE
================================================

STATUS_CODE_TO_BYTE_MAP ProgressCheckpointMap[] =
{
    { DXE_CORE_STARTED, 0x60 },
    { DXE_NVRAM_INIT, 0x61 },
    { DXE_SBRUN_INIT, 0x62 },
    { DXE_CPU_INIT, 0x63 },
    //reserved for CPU 0x64 - 0x67
    { DXE_NB_HB_INIT, 0x68 },
    { DXE_NB_INIT, 0x69 },
    { DXE_NB_SMM_INIT, 0x6A },
    //reserved for NB 0x6B - 0x6F
    { DXE_SB_INIT, 0x70 },
    { DXE_SB_SMM_INIT, 0x71 },
    { DXE_SB_DEVICES_INIT, 0x72 },
    //reserved for SB 0x73 - 0x77
    { DXE_ACPI_INIT, 0x78 },
    { DXE_CSM_INIT, 0x79 },
    //reserved for AMI use: 0x7A - 0x7F
    //reserved for OEM use: 0x80 - 0x8F
    { DXE_BDS_STARTED, 0x90 },
    { DXE_BDS_CONNECT_DRIVERS, 0x91 },
    { DXE_PCI_BUS_BEGIN, 0x92 },
    { DXE_PCI_BUS_HPC_INIT, 0x93 },
    { DXE_PCI_BUS_ENUM, 0x94 },
    { DXE_PCI_BUS_REQUEST_RESOURCES, 0x95 },
    { DXE_PCI_BUS_ASSIGN_RESOURCES, 0x96 },
    { DXE_CON_OUT_CONNECT, 0x97 },
    { DXE_CON_IN_CONNECT, 0x98 },
    { DXE_SIO_INIT, 0x99 },
    { DXE_USB_BEGIN, 0x9A },
    { DXE_USB_RESET, 0x9B },
    { DXE_USB_DETECT, 0x9C },
    { DXE_USB_ENABLE, 0x9D },
    //reserved for AMI use: 0x9E - 0x9F
    { DXE_IDE_BEGIN, 0xA0 },
    { DXE_IDE_RESET, 0xA1 },
    { DXE_IDE_DETECT, 0xA2 },
    { DXE_IDE_ENABLE, 0xA3 },
    { DXE_SCSI_BEGIN, 0xA4 },
    { DXE_SCSI_RESET, 0xA5 },
    { DXE_SCSI_DETECT, 0xA6 },
    { DXE_SCSI_ENABLE, 0xA7 },
    { DXE_SETUP_VERIFYING_PASSWORD, 0xA8 },
    { DXE_SETUP_START, 0xA9 },
    //reserved for AML use: 0xAA
    { DXE_SETUP_INPUT_WAIT, 0xAB },
    //reserved for AML use: 0xAC
    { DXE_READY_TO_BOOT, 0xAD },
    { DXE_LEGACY_BOOT, 0xAE },
    { DXE_EXIT_BOOT_SERVICES, 0xAF },
    { RT_SET_VIRTUAL_ADDRESS_MAP_BEGIN, 0xB0 },
    { RT_SET_VIRTUAL_ADDRESS_MAP_END, 0xB1 },
    { DXE_LEGACY_OPROM_INIT, 0xB2 },
    { DXE_RESET_SYSTEM, 0xB3 },
    { DXE_USB_HOTPLUG, 0xB4 },
    { DXE_PCI_BUS_HOTPLUG, 0xB5 },
    { DXE_NVRAM_CLEANUP, 0xB6 },
    { DXE_CONFIGURATION_RESET, 0xB7 },
    //reserved for AMI use: 0xB8 - 0xBF
    //reserved for OEM use: 0xC0 - 0xCF

    {0,0}
};

STATUS_CODE_TO_BYTE_MAP ErrorCheckpointMap[] =
{
    { DXE_CPU_ERROR, 0xD0 },
    { DXE_NB_ERROR, 0xD1 },
    { DXE_SB_ERROR, 0xD2 },
    { DXE_ARCH_PROTOCOL_NOT_AVAILABLE, 0xD3 },
    { DXE_PCI_BUS_OUT_OF_RESOURCES, 0xD4 },
    { DXE_LEGACY_OPROM_NO_SPACE, 0xD5 },
    { DXE_NO_CON_OUT, 0xD6 },
    { DXE_NO_CON_IN, 0xD7 },
    { DXE_INVALID_PASSWORD, 0xD8 },
    { DXE_BOOT_OPTION_LOAD_ERROR, 0xD9 },
    { DXE_BOOT_OPTION_FAILED, 0xDA },
    { DXE_FLASH_UPDATE_FAILED, 0xDB },
    { DXE_RESET_NOT_AVAILABLE, 0xDC },
    //reserved for AMI use: 0xDE - 0xDF

    {0,0}
};

//**********************************************************************
// Beep codes map
//**********************************************************************
STATUS_CODE_TO_BYTE_MAP ProgressBeepMap[] =
{
    {0,0}
};

STATUS_CODE_TO_BYTE_MAP ErrorBeepMap[] =
{
    { DXE_ARCH_PROTOCOL_NOT_AVAILABLE, 4 },
    { DXE_NO_CON_OUT, 5 },
    { DXE_NO_CON_IN, 5 },
    { DXE_INVALID_PASSWORD, 1 },
    { DXE_FLASH_UPDATE_FAILED, 6 },
    { DXE_RESET_NOT_AVAILABLE, 7 },
    { DXE_PCI_BUS_OUT_OF_RESOURCES, 8},

    {0,0}
};


2015年6月15日 星期一

Desire 820D 完美ROOT


For HTC Desire 820 dual sim , 820U 820T

下載  完美 ROOT 此為Root後 去除system保護 , 須要先 ROOT過

下面看不懂得最好還是不要用唷

fastboot devices , to ensure the device connected

fastboot flash boot a51dtul1117-new-2.img , to flash the perfect root kernel

fastboot reboot , to reboot

Desire 820D 更換開機動畫

1. 先要 ROOT , 開進 TWRP 刷機畫面 (POWER + 音量下 進入 Recovery 模式)
2. 刷  刪除官方開機畫面 (因為大多為非完美ROOT , 無法更動 system 區)
3. 刷  林志玲開機畫面 , 打擊蘋果開機畫面 (如下)
收工搞定


Desire 820D 官方 Recovery

For HTC desire 820 dual sim

android 5.0的新限制, root 會動到 /system, 導致sha1驗證碼產生變化, 於是無法OTA ,得刷 RUU 才能
(5.0前的只要刷原廠 Recovery 即可 OTA)
目前我也沒看到台版的 RUU (網路有不過需要帳號) , 也就是說5.0 , ROOT 後 會無法OTA 唷

更新到 5.0 後 須用新的 Recovery (TWRP Recovery For Lollipop arm64|(Qualcomm 615)
---------------------------------------------------
2015/10
終於等到 5.0 了 , 再來做一次 !! (應該是要使用最新的 Recovery 檔案大小是 12,988,672 byte)
第一次刷居然失敗了 , 大概是因為我改過開機動畫 , 刷回原本先
不過後來有跑了更新 跑了一陣子後 一樣變成紅色驚嘆號
有網友指出 更新的檔案資料夾 (手機儲存空間內的)須為 Download (D大寫) 最好只有一個檔
但是我目前還是會卡住 , 只能等有空再弄了

4.0.4 (OTA 1.23.709.10 內的) Recovery
5.0 OTA (2.10.709.2) 內的 Recovery

刷的方式 一樣都是 HBOOT 下 fastboot flash recovery RECOVERY檔名
---------------------------------------------------

2015/08 又有更新 1.23.709.10(227.99MB) 所以自己又來作一次
本頁的所有 下載列表

---------------------------------------------------

HTC Desire 820D 官方 Recovery

Desire820 官方 Recovery + TWRP2.8 中英文版

因為有新版的 OTA release (1.23.709.1) , Root 過當然得先重刷 Recovery 才能 OTA 囉

然後也是要重新刷最新版的 SuperSU 2.52 beta (分流)
或是穩定版的 SuperSU 2.46
1.下載 Desire 官方 Recovery + TWRP2.8 中英文版 (點選後 請找螢幕上方的Download箭頭) 下載後解壓縮
2.關閉快速開機 (設定 電源 快速開機 不要打勾) 然後正常關機
3.按音量下加電源鍵重開機到bootloader 進入fastboot模式
4.用USB接上電腦,手機會顯示為fastboot USB
5.執行 recovery.bat 即可刷回官方 recovery , 顯示應該如下
fastboot flash recovery recovery.img
target reported max download size of 16510976 bytes
sending 'recovery' (12662 KB)...
OKAY [ 1.293s]
writing 'recovery'...
OKAY [ 1.528s]
finished. total time: 2.825s
 6.重開機到桌面 , 執行更新檢查 , 下載更新 , 安裝

更新完成後 先 copy SuperSU 到記憶卡

刷回 TWRP2.8 (步驟5 執行 TWRP_CH.bat 中文版 or TWRP.bat 英文版 )

切換  Recovery mode 用 TWRP 刷 SuperSU2.49 重新取得 ROOT 權限


附上 1.23.709.1-1.22.709.1 OTA 原始檔
OTA_A51_DTUL_K44_DESIRE_SENSE60_hTC_Asia_TW_1.23.709.1-1.22.709.1_release_427591212hq69qllvk9ezb

PS.裡面其實就有原版的 recovery.img (在解壓縮的 Firmware 裡面)
 boot.img , hboot_signedbyaa.img 都在那裏面 有需要請自取


1.23.709.1更新後顯示版本

A51_DTUL PVT SHIP S-ON
HBOOT-3.19.0.0000
RADIO-01.01.010_U1030481_08.01.41119
OS-1.23.709.1
eMMC-boot 2048MB
Mar 27 2015,14:06:58.0

附上 1.23.709.10-1.23.709.1 OTA 原始檔
OTA_A51_DTUL_K44_DESIRE_SENSE60_hTC_Asia_TW_1.23.709.10-1.23.709.1_release_447338tfikhi3sej28mtib.zip

1.23.709.10更新後顯示版本
A51_DTUL PVT SHIP S-ON
HBOOT-3.19.0.0000
RADIO-01.01.010_U1030481_08.01.41119
OS-1.23.709.10
eMMC-boot 2048MB
Aug 10 2015,23:44:46.0