Start to use this repo as submodule
This commit is contained in:
1 parent
29addfee9a
commit
259be82bc8
2 files changed
+64
-44
No files matched your search
@@ -11,11 +11,18 @@
|
|||||||
0x0017: mov cx, 0x200
|
0x0017: mov cx, 0x200
|
||||||
0x001a: rep movsb byte ptr es:[di], byte ptr [si]
|
0x001a: rep movsb byte ptr es:[di], byte ptr [si]
|
||||||
0x001c: ljmp 0:0x621
|
0x001c: ljmp 0:0x621
|
||||||
|
|
||||||
0x0021: mov si, 0x7be
|
0x0021: mov si, 0x7be
|
||||||
|
|
||||||
|
|
||||||
0x0024: cmp byte ptr [si], al
|
0x0024: cmp byte ptr [si], al
|
||||||
0x0026: jne 0x33
|
0x0026: jne 0x33
|
||||||
|
|
||||||
|
|
||||||
0x0028: add si, 0x10
|
0x0028: add si, 0x10
|
||||||
0x002b: cmp si, 0x7fe
|
0x002b: cmp si, 0x7fe
|
||||||
|
|
||||||
|
|
||||||
0x002f: jne 0x24
|
0x002f: jne 0x24
|
||||||
0x0031: jmp 0x49
|
0x0031: jmp 0x49
|
||||||
0x0033: mov ah, 2
|
0x0033: mov ah, 2
|
||||||
@@ -27,3 +34,7 @@
|
|||||||
0x0042: int 0x13
|
0x0042: int 0x13
|
||||||
0x0044: ljmp 0:0x7c00
|
0x0044: ljmp 0:0x7c00
|
||||||
0x0049: jmp 0x49
|
0x0049: jmp 0x49
|
||||||
|
|
||||||
|
// This is test for workshop.
|
||||||
|
|
||||||
|
|
||||||
+53
-44
@@ -3,25 +3,28 @@ BITS 16
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; SLRboot
|
; SLRboot
|
||||||
; Bootloader for SingOS
|
; Bootloader for SingOS
|
||||||
; version 0.2.0.0-exp
|
; version 0.2.0.3-exp
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
cli
|
cli
|
||||||
mov [disk_identifier], dl
|
jmp long 0x0000:start
|
||||||
|
|
||||||
|
start:
|
||||||
mov ax, 0x1000
|
mov ax, 0x1000
|
||||||
mov ss, ax
|
mov ss, ax
|
||||||
mov sp, 0xb000
|
mov sp, 0xb000
|
||||||
mov ax, 0
|
mov ax, 0
|
||||||
mov ds, ax
|
mov ds, ax
|
||||||
mov es, ax
|
mov es, ax
|
||||||
|
mov [disk_identifier], dl
|
||||||
sti
|
sti
|
||||||
mov si, 0x7c00
|
mov si, 0x7c00
|
||||||
mov di, 0x600
|
mov di, 0x600
|
||||||
mov cx, 0x200
|
mov cx, 0x100
|
||||||
rep movsb
|
rep movsw
|
||||||
mov bx, relocated
|
mov bx, relocated
|
||||||
sub bx, 0x7600 ; Calculate the offset.
|
sub bx, 0x7600 ; Calculate the offset.
|
||||||
push bx
|
push bx
|
||||||
retf ; Return far
|
ret ; Return far
|
||||||
;jmp long 0:bx
|
;jmp long 0:bx
|
||||||
|
|
||||||
relocated:
|
relocated:
|
||||||
@@ -29,34 +32,29 @@ relocated:
|
|||||||
mov si, message ; Put address of the null-terminated string to output into 'si'
|
mov si, message ; Put address of the null-terminated string to output into 'si'
|
||||||
call print ; Call our string-printing routine
|
call print ; Call our string-printing routine
|
||||||
|
|
||||||
;mov ax, 0x0050
|
mov bx, [partition_1.start_LBA]
|
||||||
;mov es, ax ;Section to write into
|
mov WORD [DAPACK.lba_addr_dw_low], bx
|
||||||
;mov ah, 0x2 ;Read sectors from drive
|
mov bx, [partition_1.start_LBA + 1]
|
||||||
;mov al, 0x08 ;Number of sectors to read (31 * 512 = 15872 bytes)
|
mov WORD [DAPACK.lba_addr_dw_low + 1], bx
|
||||||
;mov ch, 0x0 ;Low 8 bits of cylinder
|
mov bx, [partition_1.start_LBA + 2]
|
||||||
;mov cl, 0x11 ;First sector to read (bits 0-5), upper bits of cylinder (bits 6-7)
|
mov WORD [DAPACK.lba_addr_dw_low + 2], bx
|
||||||
;mov dh, 0x0 ;Head number
|
mov bx, [partition_1.start_LBA + 3]
|
||||||
;mov dl, [disk_identifier] ;Drive number
|
mov WORD [DAPACK.lba_addr_dw_low + 3], bx
|
||||||
;mov bx, 0x0000 ;Offset into section
|
mov WORD [DAPACK.blkcnt], 0x01
|
||||||
;int 0x13 ;Low level disk services
|
mov WORD [DAPACK.db_addr_segment], 0x0000
|
||||||
mov ah, 2
|
mov WORD [DAPACK.db_addr_offset], 0x7c00
|
||||||
mov al, 0x08
|
mov si, DAPACK ; address of "disk address packet"
|
||||||
mov bx, 0x7c00
|
mov ah, 0x42 ; READ
|
||||||
mov BYTE dl, [disk_identifier]
|
mov dl, [disk_identifier]
|
||||||
mov BYTE dh, [partition_2.start_CHS + 1] ;byte [si + 1]
|
|
||||||
mov BYTE cl, [partition_2.start_CHS + 2]
|
|
||||||
mov BYTE ch, [partition_2.start_CHS] ;First sector to read (bits 0-5), upper bits of cylinder (bits 6-7)
|
|
||||||
int 0x13
|
int 0x13
|
||||||
;mov ax, 0x0
|
|
||||||
;mov ds, ax
|
|
||||||
mov ax, 89 ; lba adress
|
|
||||||
jmp long 0x0:0x7c00
|
jmp long 0x0:0x7c00
|
||||||
|
|
||||||
cli
|
cli
|
||||||
hlt
|
hlt
|
||||||
|
|
||||||
|
|
||||||
%IF 1
|
%IF 0
|
||||||
cli
|
cli
|
||||||
jmp long 0x0000:start
|
jmp long 0x0000:start
|
||||||
|
|
||||||
@@ -144,6 +142,15 @@ hlt
|
|||||||
|
|
||||||
.welcome_debug db 'This is debug mode', 0
|
.welcome_debug db 'This is debug mode', 0
|
||||||
|
|
||||||
|
printCRLF:
|
||||||
|
mov ah, 0xE
|
||||||
|
mov al, 13
|
||||||
|
int 0x10
|
||||||
|
mov al, 10
|
||||||
|
int 0x10
|
||||||
|
ret
|
||||||
|
%ENDIF
|
||||||
|
|
||||||
;Routine for printing a 'ax' as hex
|
;Routine for printing a 'ax' as hex
|
||||||
dumpax:
|
dumpax:
|
||||||
pusha ; save registers
|
pusha ; save registers
|
||||||
@@ -166,14 +173,6 @@ loop .loop
|
|||||||
popa ; restore registers
|
popa ; restore registers
|
||||||
ret
|
ret
|
||||||
|
|
||||||
printCRLF:
|
|
||||||
mov ah, 0xE
|
|
||||||
mov al, 13
|
|
||||||
int 0x10
|
|
||||||
mov al, 10
|
|
||||||
int 0x10
|
|
||||||
ret
|
|
||||||
%ENDIF
|
|
||||||
; Routine for outputting string in 'si' register to screen
|
; Routine for outputting string in 'si' register to screen
|
||||||
print:
|
print:
|
||||||
mov ah, 0xE ; Specify 'int 0x10' 'teletype output' function
|
mov ah, 0xE ; Specify 'int 0x10' 'teletype output' function
|
||||||
@@ -188,27 +187,37 @@ jmp .printchar ; Repeat for the next character
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
data:
|
data:
|
||||||
message db 'SLRboot for SingOS! v0.2.0.0-exp',13,10,0
|
message db 'SLRboot for SingOS! v0.2.0.3-exp',13,10,0
|
||||||
enter_debug_mode db 'Press d to enter bootloader debug mode',13,10,0
|
;enter_debug_mode db 'Press d to enter bootloader debug mode',13,10,0
|
||||||
enter_system_check db 'Performing system check:',13,10,0
|
;enter_system_check db 'Performing system check:',13,10,0
|
||||||
sys_check_ok db 'System check ok', 13, 10, 0
|
;sys_check_ok db 'System check ok', 13, 10, 0
|
||||||
boot_system db 'Read SingOS from disk', 13, 10, 0
|
;boot_system db 'Read SingOS from disk', 13, 10, 0
|
||||||
error_str db 'Error', 0
|
;error_str db 'Error', 0
|
||||||
success_str db 'Success', 0
|
;success_str db 'Success', 0
|
||||||
disk_identifier db 0
|
disk_identifier db 0
|
||||||
|
|
||||||
|
DAPACK:
|
||||||
|
.dap_Size: db 0x10 ; This is always 16 bytes (0x10)
|
||||||
|
.rev_byte: db 0x0 ; reserved byte, should always be zero
|
||||||
|
.blkcnt: dw 0x0 ; int 13 resets this to # of blocks actually read/written
|
||||||
|
.db_addr_offset: dw 0x0 ; memory buffer destination address (0:7c00)
|
||||||
|
.db_addr_segment: dw 0x0 ; in memory page zero
|
||||||
|
.lba_addr_dw_low: dd 0x0 ; put the lba to read in this spot
|
||||||
|
.lba_addr_dw_high: dd 0x0 ; more storage bytes only for big lba's ( > 4 bytes )
|
||||||
|
|
||||||
|
|
||||||
; Pad to 510 bytes (boot sector size minus 2) with 0s, and finish with the two-byte standard boot signature
|
; Pad to 510 bytes (boot sector size minus 2) with 0s, and finish with the two-byte standard boot signature
|
||||||
times 446-($-$$) db 0 ; First partion entry
|
times 446-($-$$) db 0 ; First partion entry
|
||||||
partition_1:
|
partition_1:
|
||||||
.active_partition db 0x00
|
.active_partition db 0x80
|
||||||
.start_CHS db 0x00, 0x00, 0x11;0x20, 0x21, 0x00
|
.start_CHS db 0x00, 0x00, 0x11;0x20, 0x21, 0x00
|
||||||
.disk_type db 0x83
|
.disk_type db 0x83
|
||||||
.end_CHS db 0x8C, 0x3D, 0x0F
|
.end_CHS db 0x8C, 0x3D, 0x0F
|
||||||
.start_LBA db 0x00, 0x08, 0x00, 0x00
|
.start_LBA db 0x10, 0x00, 0x00, 0x00
|
||||||
.size db 0x00, 0xC8, 0x03, 0x00
|
.size db 0x00, 0xC8, 0x03, 0x00
|
||||||
|
|
||||||
partition_2:
|
partition_2:
|
||||||
.active_partition db 0x80
|
.active_partition db 0x00
|
||||||
.start_CHS db 0x8C, 0x3E, 0x0F
|
.start_CHS db 0x8C, 0x3E, 0x0F
|
||||||
.disk_type db 0x83
|
.disk_type db 0x83
|
||||||
.end_CHS db 0xFF, 0xFF, 0xFF
|
.end_CHS db 0xFF, 0xFF, 0xFF
|
||||||
|
|||||||
Reference in new issue
Block a user