162 lines
4.5 KiB
NASM
162 lines
4.5 KiB
NASM
; Simple ISO emulation with el torito
|
|
|
|
; Fill until CD sector 0x10
|
|
times (0x10*2048)-($-$$) db 0
|
|
|
|
; Volume record
|
|
;TODO: fill in more fields
|
|
iso_volume_record:
|
|
db 1 ; Type volume record
|
|
db "CD001" ; Identifier
|
|
db 1 ; Version
|
|
db 0 ; Unused
|
|
times 32 db ' ' ; System identifier
|
|
.volume_id: ; Volume identifier
|
|
db 'Redox OS'
|
|
times 32-($-.volume_id) db ' '
|
|
times 8 db 0 ; Unused
|
|
db 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15 ; Volume space size (0x15)
|
|
times 32 db 0 ; Unused
|
|
db 0x01, 0x00, 0x00, 0x01 ; Volume set size
|
|
db 0x01, 0x00, 0x00, 0x01 ; Volume sequence number
|
|
db 0x00, 0x08, 0x08, 0x00 ; Logical block size in little and big endian
|
|
|
|
times 156-($-iso_volume_record) db 0
|
|
|
|
; Root directory entry
|
|
.root_directory:
|
|
db 0x22 ; Length of entry
|
|
db 0x00 ; Length of extended attributes
|
|
db 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14 ; Location of extent (0x14)
|
|
db 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00 ; Size of extent
|
|
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; Recording time
|
|
db 0x02 ; File flags
|
|
db 0x00 ; Interleaved file unit size
|
|
db 0x00 ; Interleaved gap size
|
|
db 0x01, 0x00, 0x00, 0x01 ; Volume sequence number
|
|
db 0x01 ; Length of file identifier
|
|
db 0x00 ; File identifier
|
|
|
|
times 128 db ' ' ; Volume set identifier
|
|
times 128 db ' ' ; Publisher identifier
|
|
times 128 db ' ' ; Data preparer identifier
|
|
times 128 db ' ' ; Application identifier
|
|
times 37 db ' ' ; Copyright file ID
|
|
times 37 db ' ' ; Abstract file ID
|
|
times 37 db ' ' ; Bibliographic file ID
|
|
|
|
times 881-($-iso_volume_record) db 0
|
|
|
|
db 1 ; File structure version
|
|
|
|
; Fill until CD sector 0x11
|
|
times (0x11*2048)-($-$$) db 0
|
|
|
|
; Boot record
|
|
iso_boot_record:
|
|
db 0 ; Type boot record
|
|
db "CD001" ; Identifier
|
|
db 1 ; Version
|
|
db "EL TORITO SPECIFICATION" ; Boot system identifier
|
|
times 0x47-($ - iso_boot_record) db 0 ; Padding
|
|
dd 0x13 ; Sector of boot catalog
|
|
|
|
; Fill until CD sector 0x12
|
|
times (0x12*2048)-($-$$) db 0
|
|
|
|
; Terminator
|
|
iso_terminator:
|
|
db 0xFF ; Type terminator
|
|
db "CD001" ; Identifier
|
|
db 1 ; Version
|
|
|
|
; Fill until CD sector 0x13
|
|
times (0x13*2048)-($-$$) db 0
|
|
|
|
; Boot catalog
|
|
iso_boot_catalog:
|
|
|
|
; Validation entry
|
|
.validation:
|
|
db 1 ; Header ID
|
|
db 0 ; Platform ID (x86)
|
|
dw 0 ; Reserved
|
|
times 24 db 0 ; ID string
|
|
dw 0x55aa ; Checksum
|
|
dw 0xaa55 ; Key
|
|
|
|
; Default entry
|
|
.default:
|
|
db 0x88 ; Bootable
|
|
db 4 ; Hard drive emulation
|
|
dw 0 ; Load segment (0 is platform default)
|
|
db 0xEE ; Partition type (0xEE is protective MBR)
|
|
db 0 ; Unused
|
|
dw 1 ; Sector count
|
|
dd 0 ; Start address for virtual disk
|
|
times 20 db 0 ; Padding
|
|
|
|
; EFI section header entry
|
|
.efi_section_header:
|
|
db 0x91 ; Final header
|
|
db 0xEF ; Platform ID (EFI)
|
|
dw 1 ; Number of section header entries
|
|
times 28 db 0 ; ID string
|
|
|
|
; EFI section entry
|
|
.efi_section_entry:
|
|
db 0x88 ; Bootable
|
|
db 0 ; No emulation
|
|
dw 0 ; Load segment (0 is platform default)
|
|
db 0 ; Partition type (not used)
|
|
db 0 ; Unused
|
|
dw 512 ; Sector count (1 MiB = 512 CD sectors)
|
|
dd 512 ; Start address for virtual disk (1 MiB = 512 CD sectors)
|
|
times 20 db 0 ; Padding
|
|
|
|
; Fill until CD sector 0x14
|
|
times (0x14*2048)-($-$$) db 0
|
|
|
|
iso_root_directory:
|
|
.self:
|
|
db 0x22 ; Length of entry
|
|
db 0x00 ; Length of extended attributes
|
|
db 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14 ; Location of extent (0x14)
|
|
db 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00 ; Size of extent
|
|
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; Recording time
|
|
db 0x02 ; File flags
|
|
db 0x00 ; Interleaved file unit size
|
|
db 0x00 ; Interleaved gap size
|
|
db 0x01, 0x00, 0x00, 0x01 ; Volume sequence number
|
|
db 0x01 ; Length of file identifier
|
|
db 0x00 ; File identifier
|
|
|
|
.parent:
|
|
db 0x22 ; Length of entry
|
|
db 0x00 ; Length of extended attributes
|
|
db 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14 ; Location of extent (0x14)
|
|
db 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00 ; Size of extent
|
|
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; Recording time
|
|
db 0x02 ; File flags
|
|
db 0x00 ; Interleaved file unit size
|
|
db 0x00 ; Interleaved gap size
|
|
db 0x01, 0x00, 0x00, 0x01 ; Volume sequence number
|
|
db 0x01 ; Length of file identifier
|
|
db 0x01 ; File identifier
|
|
|
|
.boot_cat:
|
|
db 0x2C ; Length of entry
|
|
db 0x00 ; Length of extended attributes
|
|
db 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13 ; Location of extent (0x13)
|
|
db 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00 ; Size of extent
|
|
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; Recording time
|
|
db 0x00 ; File flags
|
|
db 0x00 ; Interleaved file unit size
|
|
db 0x00 ; Interleaved gap size
|
|
db 0x01, 0x00, 0x00, 0x01 ; Volume sequence number
|
|
db 0x0A ; Length of file identifier
|
|
db "BOOT.CAT;1",0 ; File identifier
|
|
|
|
; Fill until CD sector 0x15
|
|
times (0x15*2048)-($-$$) db 0
|