2012-05-04 4 views
1

http://www.brokenthorn.com에 대한 운영 체제 개발 자습서를 따라 왔습니다. 지금 나는이 코드를 사용하여 BIOS 설정 매개 변수 블록을 시도하고있다 :FAT 12 구현

jmp loader 
bpbName db "NubOS",0,0,0 
bpbBytesPerSector:  DW 512 
bpbSectorsPerCluster: DB 1 
bpbReservedSectors:  DW 1 
bpbNumberOfFATs:  DB 2 
bpbRootEntries:   DW 224 
bpbTotalSectors:  DW 2880 
bpbMedia:    DB 0xF0 
bpbSectorsPerFAT:  DW 9 
bpbSectorsPerTrack:  DW 18 
bpbHeadsPerCylinder: DW 2 
bpbHiddenSectors:  DD 0 
bpbTotalSectorsBig:  DD 0 
bsDriveNumber:   DB 0 
bsUnused:    DB 0 
bsExtBootSignature:  DB 0x29 
bsSerialNumber:   DD 0xa0a1a2a3 
bsVolumeLabel:   DB "MOS FLOPPY " 
bsFileSystem:   DB "FAT12 " 

을하지만, 내가 가상 플로피의 ImDisk driver을 사용하여 디스크를 열려고하면, 드라이브를 포맷 할 필요가 있다고 말한다. 내가 쓰고있는 코드가 맞습니까?

+1

위의 3 바이트 바로 앞에 @hobbs가 없습니다. 이것은 btw이며 [Microsoft - fatgen103.doc의 공식 문서] (http://msdn.microsoft.com/en-us/library/windows/hardware/gg463084.aspx)에 설명되어 있습니다. –

+0

3 바이트 점프를해야 겠지만 질문에 넣어야합니다. –

+1

나머지는 어때요? 실제로 FAT 분야를 작성 했습니까? –

답변

2

짧은 점프을 시도해보십시오 분야는 nop 다음, jmp short loader로 시작, 다음, 다음, bsFileSystem 통해 loader: 모든 코드를 bpbName를 이동 한 다음 512 바이트 섹터의 마지막 2 바이트 0x550xAA 서비스를 제공합니다. 이 두 개는 각각 510511 오프셋에 있어야합니다.

2

BPB 전에 3 바이트 건너 뛰기 명령이 누락되었습니다. 섹터 당 바이트 수는 0x08이 아닌 디스크의 시작 부분에 상대적인 오프셋 0x0b에 있어야합니다. 점프는 BPB 다음에있는 부트 로더 코드로 갈 것입니다 (점프가 짧아서 2 바이트 만 필요하면 nop이옵니다).

기계가 디스크에서 절대 부팅되지 않으면 처음 3 바이트에 임의의 값을 넣을 수 있지만 어쨌든 점프를 사용하면 This disk is not bootable과 같은 코드를 인쇄하는 것이 일반적입니다. 기계가 정지합니다.

+0

나는 처음에는 점프를했고 나는 그 질문에 그것을 넣을 것이다. –