feat(boot): read BPB
This commit is contained in:
		
							parent
							
								
									85d09cbbf6
								
							
						
					
					
						commit
						899e456249
					
				
					 4 changed files with 63 additions and 1 deletions
				
			
		|  | @ -16,6 +16,7 @@ STACK_TOP      = 0x7000 | ||||||
| 
 | 
 | ||||||
| ; ---------- Magic ------------ | ; ---------- Magic ------------ | ||||||
| STPDBOOT_MAGIC = 0x53545044 | STPDBOOT_MAGIC = 0x53545044 | ||||||
|  | STPDFS_MAGIC   = 0x44505453 | ||||||
| 
 | 
 | ||||||
| ; ---------- Video ------------ | ; ---------- Video ------------ | ||||||
| VIDEO_WIDTH  = 1024 | VIDEO_WIDTH  = 1024 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,22 @@ | ||||||
| 	;; File: fat12.inc | 	;; File: fat12.inc | ||||||
| 
 | 
 | ||||||
|  | struc fat_bpb | ||||||
|  | { | ||||||
|  | 	.jump             db 3 dup(?) | ||||||
|  | 	.oem_name         db 8 dup(?) | ||||||
|  | 	.bytes_per_sects  dw ? | ||||||
|  | 	.sects_per_clust  db ? | ||||||
|  | 	.reserved_sects   dw ? | ||||||
|  | 	.FAT_count        db ? | ||||||
|  | 	.root_dir_entries dw ? | ||||||
|  | 	.total_sects      dw ? | ||||||
|  | 	.media_type       db ? | ||||||
|  | 	.sects_per_FAT    dw ? | ||||||
|  | 	.sects_per_track  dw ? | ||||||
|  | 	.heads_per_cyl    dw ? | ||||||
|  | } | ||||||
|  | defn fat_bpb | ||||||
|  | 
 | ||||||
| 	;; Struct: fat_entry | 	;; Struct: fat_entry | ||||||
| struc fat_entry | struc fat_entry | ||||||
| { | { | ||||||
|  |  | ||||||
|  | @ -1,4 +1,11 @@ | ||||||
|  | 	;; File: disk.inc | ||||||
| 
 | 
 | ||||||
|  | 	;; Function: disk_read_sectors | ||||||
|  | 	;; | ||||||
|  | 	;; In: | ||||||
|  | 	;;   AX    - LBA starting sector | ||||||
|  | 	;;   CX    - Sector count | ||||||
|  | 	;;   ES:BX - buffer  | ||||||
| disk_read_sectors: | disk_read_sectors: | ||||||
| ;	test byte [bDriveLBA], TRUE | ;	test byte [bDriveLBA], TRUE | ||||||
| ;	je .lba_read | ;	je .lba_read | ||||||
|  |  | ||||||
|  | @ -65,7 +65,44 @@ _start: | ||||||
| 	; 0        512      1024             XXXX        XXXX | 	; 0        512      1024             XXXX        XXXX | ||||||
| 	; | 	; | ||||||
| 
 | 
 | ||||||
|  | 	; read stupidfs super block | ||||||
|  | 	mov ax, DISK_BUFFER/0x10 | ||||||
|  | 	mov es, ax | ||||||
|  | 	mov ax, 1 | ||||||
|  | 	mov cx, 1 | ||||||
|  | 	xor bx, bx | ||||||
|  | 	call disk_read_sectors | ||||||
|  | 
 | ||||||
|  | 	cmp dword [DISK_BUFFER], STPDFS_MAGIC | ||||||
|  | 	jne  .fat_fallback | ||||||
|  | 
 | ||||||
|  | 	; fallback to fat12	 | ||||||
| 	; for now fat12 is asumed | 	; for now fat12 is asumed | ||||||
|  | .fat_fallback: | ||||||
|  | 	; get bpb | ||||||
|  | 	mov ax, DISK_BUFFER/0x10 | ||||||
|  | 	mov es, ax | ||||||
|  | 	xor bx, bx | ||||||
|  | 	mov ax, 0 | ||||||
|  | 	mov cx, 1 | ||||||
|  | 	call disk_read_sectors | ||||||
|  | 
 | ||||||
|  | 	mov word ax, [DISK_BUFFER + fat_bpb.sects_per_track] | ||||||
|  | 	mov word [sectors_per_track], ax | ||||||
|  | 	mov word ax, [DISK_BUFFER + fat_bpb.heads_per_cyl] | ||||||
|  | 	mov word [heads_per_cylinder], ax | ||||||
|  | 	mov word ax, [DISK_BUFFER + fat_bpb.bytes_per_sects] | ||||||
|  | 	mov word [bytes_per_sector], ax | ||||||
|  | 	mov word ax, [DISK_BUFFER + fat_bpb.sects_per_FAT] | ||||||
|  | 	mov word [sectors_per_FAT], ax | ||||||
|  | 	mov byte al, [DISK_BUFFER + fat_bpb.FAT_count] | ||||||
|  | 	mov byte [FAT_count], al | ||||||
|  | 	mov word ax, [DISK_BUFFER + fat_bpb.reserved_sects] | ||||||
|  | 	mov word [reserved_sectors], ax | ||||||
|  | 	mov word ax, [DISK_BUFFER + fat_bpb.root_dir_entries] | ||||||
|  | 	mov word [root_dir_entries], ax | ||||||
|  | 	mov byte al, [DISK_BUFFER + fat_bpb.sects_per_clust] | ||||||
|  | 	mov byte [sectors_per_cluster], al | ||||||
| 
 | 
 | ||||||
| 	call fat_load_root | 	call fat_load_root | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue