안녕하세요. 오랜만에 쓰는 글이 뻘글입니다.
갑자기 지난 기억이 떠올라서 그냥 한번 그적거려 보겠습니다.
꽤 묘한 작업을 진행하던 중에 우연히 알게 됐습니다.
묘한 작업이라는 것은 BIOS를 두번 실행하는 것 이죠. ㅎㅎ;
저는 그 전부터 0번지라는 것은 알고 있었습니다. 우스운건 그 이유는 까먹고 있었다는 것이죠.
이래서 사람은 기록을 해야 됩니다.
바이오스를 두번째 실행하면 시스템이 리셋되어 버리는데 그와 관련된 바이오스 코드의 의사표현은 대충 이렇습니다.
1. 키보드상태를읽는다.
2. 상태비트와 0x4 비교
3. 2번에서 0x4 와의 비교값에 따라 PCI BUS를 ACPI 로 설정, 커맨드를 날린다.
이 커맨드는 ACPI 의 스펙에서는 SYS_RST#으로 정의하고 있습니다.
흥미로운 얘기로 보안 프로그램에서는 닥리셋 = 닥치고 리셋용 루틴이 있습니다.
디버깅 시도등이 감지될때 강도높은 프로그램은 시스템을 통채로 리셋해버리기도 합니다.
이 방법도 그를 위해서 사용되기도 하나 보더군요.
키보드 상태비트가 0x4라는 뜻은 키보드 상태 flag중에 sys flag가 세팅되어야 하는 경우를 의미합니다.
- SYS (System flag) - Post reads this to determine if power-on reset, or software reset 0: Power-up value - System is in power-on reset.
1: BAT code received - System has already beed initialized.
댓글 2
-
myskan
2011.05.08 18:31
-
myskan
2011.05.08 18:37
4. 전원이 인가되면 프로세서는 Reset 명령어를 받는 것이 아니라 Reset signal을 받게 됩니다.
간단히 예를 들어 보면 아래와 같은 덧셈기는 Reset signal에 의하여 A 값은 항상 0 이 됩니다.
always (posedge clk or negedge rst_x)
begin
if (!rst_x) A <= 0;
else A <= A + 1
end
즉 좀더 확장해서 A가 명령어 패치 주소를 생성하는 것이라면 0 번지에서
Reset 벡터 값을 읽어 오게 되는 것이지요.명령어를 읽어 드립니다. 0번지에 리셋 벡터가 있을 수도 있고 0번지에 리셋 벡터로 점프하라는 명령어가 있을 수도 있습니다.
.
1. Software Reset 일때 방전시킨다는 생각은 잘못하신것입니다.
방전시킨이후 다시 파워를 공급하면 Power On Reset과 차이가 없지 않을까요??
2. 프로세서는 Reset signal에 의하여 동작을 합니다. 그리고 Reset signal은 Reset Controller에서 생성을 합니다.
프로세서 만드는 회사마다 표현상 차이가 있는데 Software Reset일 경우 Exception 처럼 처리하는 경우도 있습니다.
이 경우도 프로세서의 명령어 패치 주소가 0이 될까요????
3. 프로세서의 모든 값은 Power On Reset 일때 0 인 백지 상태가 된다고 이야기 할 수는 없습니다.