Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
Hello,
I'm trying to do an OS that shows a message(msg1 = Hello, World) for the user, but when the OS boots up on Bochs, it don't shows nothing than the boot process. Here is my code:
According to the listed expected values, you would get nothing, since you're calling a function to print one char, and the char you set is null, or garbage, depending on what was left over in your AL reg. That was easily debuggable...
17:56 < sortie> Paging is called paging because you need to draw it on pages in your notebook to succeed at it.
I see you are already able to display a single character. To display a string, just loop it until a string-terminating character (usually 0 but can be anything.)
[BITS 16] ; 16 bit code generation
[ORG 0x7C00] ; ORGin location is 7C00
jmp short main ; Jump past disk description section
nop ; Pad out before disk description
; ------------------------------------------------------------------
; Disk description table, to make it a valid floppy
; Note: some of these values are hard-coded in the source!
; Values are those used by IBM for 1.44 MB, 3.5" diskette
OEMLabel db "BERL OS " ; Disk label - 8 chars
BytesPerSector dw 512 ; Bytes per sector
SectorsPerCluster db 1 ; Sectors per cluster
ReservedForBoot dw 1 ; Reserved sectors for boot record
NumberOfFats db 2 ; Number of copies of the FAT
RootDirEntries dw 224 ; Number of entries in root dir
; (224 * 32 = 7168 = 14 sectors to read)
LogicalSectors dw 2880 ; Number of logical sectors
MediumByte db 0F0h ; Medium descriptor byte
SectorsPerFat dw 9 ; Sectors per FAT
SectorsPerTrack dw 18 ; Sectors per track (36/cylinder)
Sides dw 2 ; Number of sides/heads
HiddenSectors dd 0 ; Number of hidden sectors
LargeSectors dd 0 ; Number of LBA sectors
DriveNo dw 0 ; Drive No: 0
Signature db 41 ; Drive signature: 41 for floppy
VolumeID dd 00000000h ; Volume ID: any number
VolumeLabel db "BERL OS "; Volume Label: any 11 chars
FileSystem db "FAT12 " ; File system type: don't change!
main:
MOV BH, 00h
MOV BL, 07h
MOV AL, 1
MOV BH, 0
MOV BL, 0011_1011b
MOV CX, osmsgend - os_msg ; calculate message size.
MOV DL, 30
MOV DH, 0
PUSH CS
POP ES
MOV BP, os_msg
MOV AH, 13h
INT 10h
JMP wel
wel:
MOV BH, 00h
MOV BL, 07h
MOV AL, 1
MOV BH, 0
MOV BL, 0011_1011b
MOV CX, welcome_end - welcome ; calculate message size.
MOV DL, 32
MOV DH, 2
PUSH CS
POP ES
MOV BP, welcome
MOV AH, 13h
INT 10h
JMP osmsgend
welcome DB "Welcome !"
welcome_end:
os_msg DB "BerlOS v0.0.1"
osmsgend:
JMP $
; Boot things
TIMES 510-($-$$) DB 0 ; Fill the rest of the sector with zeros
DW 0xAA55 ; Boot signature
Nathan wrote:Hello Andrew,
Thanks for the very good help, but what those things do of difference in my OS, i know about BIOS, but why i have to declare this all?
EDIT: You need BPB (BIOS Parameters Block) if your file system requires it.
FAT12 needs this BPB.
Best regards,
-- Andrew
Last edited by Andr3w on Sun Aug 23, 2009 12:05 pm, edited 1 time in total.