📄 ldlinux.lst
字号:
379 ; The following structure is used for "virtual kernels"; i.e. LILO-style 380 ; option labels. The options we permit here are `kernel' and `append 381 ; Since there is no room in the bottom 64K for all of these, we 382 ; stick them at vk_seg:0000 and copy them down before we need them. 383 ; 384 ; Note: this structure can be added to, but it must 385 ; 386 %define vk_power 7 ; log2(max number of vkernels) 387 %define max_vk (1 << vk_power) ; Maximum number of vkernels 388 %define vk_shift (16-vk_power) ; Number of bits to shift 389 %define vk_size (1 << vk_shift) ; Size of a vkernel buffer 390 391 struc vkernel 392 00000000 <res 0000000B> vk_vname: resb FILENAME_MAX ; Virtual name **MUST BE FIRST!** 393 0000000B <res 0000000B> vk_rname: resb FILENAME_MAX ; Real name 394 00000016 <res 00000002> vk_appendlen: resw 1 395 alignb 4 396 00000018 <res 00000100> vk_append: resb max_cmd_len+1 ; Command line 397 alignb 4 398 vk_end: equ $ ; Should be <= vk_size 399 endstruc 400 401 %ifndef DEPEND 402 %if (vk_end > vk_size) || (vk_size*max_vk > 65536) 403 %error "Too many vkernels defined, reduce vk_power" 404 %endif 405 %endif 406 407 ; 408 ; Segment assignments in the bottom 640K 409 ; Stick to the low 512K in case we're using something like M-systems flash 410 ; which load a driver into low RAM (evil!!) 411 ; 412 ; 0000h - main code/data segment (and BIOS segment) 413 ; 414 real_mode_seg equ 5000h 415 fat_seg equ 3000h ; 128K area for FAT (2x64K) 416 vk_seg equ 2000h ; Virtual kernels 417 xfer_buf_seg equ 1000h ; Bounce buffer for I/O to high mem 418 comboot_seg equ real_mode_seg ; COMBOOT image loading zone 419 420 ; --------------------------------------------------------------------------- 421 ; BEGIN CODE 422 ; --------------------------------------------------------------------------- 423 424 ; 425 ; Memory below this point is reserved for the BIOS and the MBR 426 ; 427 absolute 1000h 428 trackbuf equ $ ; Track buffer goes here 429 trackbufsize equ 16384 ; Safe size of track buffer 430 ; trackbuf ends at 5000h 431 432 433 ; 434 ; Constants for the xfer_buf_seg 435 ; 436 ; The xfer_buf_seg is also used to store message file buffers. We 437 ; need two trackbuffers (text and graphics), plus a work buffer 438 ; for the graphics decompressor. 439 ; 440 xbs_textbuf equ 0 ; Also hard-coded, do not change 441 xbs_vgabuf equ trackbufsize 442 xbs_vgatmpbuf equ 2*trackbufsize 443 444 445 absolute 5000h ; Here we keep our BSS stuff 446 00005000 <res 00000200> VKernelBuf: resb vk_size ; "Current" vkernel 447 alignb 4 448 00005200 <res 00000100> AppendBuf resb max_cmd_len+1 ; append= 449 00005300 <res 00000100> Ontimeout resb max_cmd_len+1 ; ontimeout 450 00005400 <res 00000100> Onerror resb max_cmd_len+1 ; onerror 451 00005500 <res 00000100> KbdMap resb 256 ; Keyboard map 452 00005600 <res 000000A0> FKeyName resb 10*16 ; File names for F-key help 453 000056A0 <res 0000000F> NumBuf resb 15 ; Buffer to load number 454 000056AF <res 00000001> NumBufEnd resb 1 ; Last byte in NumBuf 455 alignb 8 456 457 ; Expanded superblock 458 SuperInfo equ $ 459 000056B0 <res 00000080> resq 16 ; The first 16 bytes expanded 8 times 460 ; 461 ; These need to follow SuperInfo 462 ; 463 00005730 <res 00000004> RootDir resd 1 ; Location of root directory 464 00005734 <res 00000004> DataArea resd 1 ; Location of data area 465 00005738 <res 00000002> RootDirSize resw 1 ; Root dir size in sectors 466 0000573A <res 00000002> DirScanCtr resw 1 ; Used while searching directory 467 0000573C <res 00000002> EndofDirSec resw 1 ; = trackbuf+bsBytesPerSec-31 468 469 0000573E <res 00000001>- alignb 4 470 0000573E <rept> 471 00005740 <res 00000014> E820Buf resd 5 ; INT 15:E820 data buffer 472 00005754 <res 00000004> E820Mem resd 1 ; Memory detected by E820 473 00005758 <res 00000004> E820Max resd 1 ; Is E820 memory capped? 474 0000575C <res 00000004> HiLoadAddr resd 1 ; Address pointer for high load loop 475 00005760 <res 00000004> HighMemSize resd 1 ; End of memory pointer (bytes) 476 00005764 <res 00000004> RamdiskMax resd 1 ; Highest address for a ramdisk 477 00005768 <res 00000004> KernelSize resd 1 ; Size of kernel (bytes) 478 0000576C <res 00000004> SavedSSSP resd 1 ; Our SS:SP while running a COMBOOT image 479 00005770 <res 00000004> PMESP resd 1 ; Protected-mode ESP 480 00005774 <res 00000004> ClustPerMoby resd 1 ; Clusters per 64K 481 00005778 <res 00000004> ClustSize resd 1 ; Bytes/cluster 482 0000577C <res 0000000C> KernelName resb 12 ; Mangled name for kernel 483 ; (note the spare byte after!) 484 00005788 <res 00000004> OrigKernelExt resd 1 ; Original kernel extension 485 FBytes equ $ ; Used by open/getc 486 0000578C <res 00000002> FBytes1 resw 1 487 0000578E <res 00000002> FBytes2 resw 1 488 00005790 <res 00000002> DirBlocksLeft resw 1 ; Ditto 489 00005792 <res 00000002> RunLinClust resw 1 ; Cluster # for LDLINUX.SYS 490 00005794 <res 00000002> BufSafe resw 1 ; Clusters we can load into trackbuf 491 00005796 <res 00000002> BufSafeSec resw 1 ; = how many sectors? 492 00005798 <res 00000002> BufSafeBytes resw 1 ; = how many bytes? 493 0000579A <res 00000002> EndOfGetCBuf resw 1 ; = getcbuf+BufSafeBytes 494 0000579C <res 00000002> KernelClust resw 1 ; Kernel size in clusters 495 0000579E <res 00000002> FClust resw 1 ; Number of clusters in open/getc file 496 000057A0 <res 00000002> FNextClust resw 1 ; Pointer to next cluster in d:o 497 000057A2 <res 00000002> FPtr resw 1 ; Pointer to next char in buffer 498 000057A4 <res 00000002> CmdOptPtr resw 1 ; Pointer to first option on cmd line 499 000057A6 <res 00000002> KernelCNameLen resw 1 ; Length of unmangled kernel name 500 000057A8 <res 00000002> InitRDCNameLen resw 1 ; Length of unmangled initrd name 501 000057AA <res 00000002> NextCharJump resw 1 ; Routine to interpret next print char 502 000057AC <res 00000002> SetupSecs resw 1 ; Number of setup sectors 503 000057AE <res 00000002> A20Test resw 1 ; Counter for testing status of A20 504 000057B0 <res 00000002> A20Type resw 1 ; A20 type 505 000057B2 <res 00000002> CmdLineLen resw 1 ; Length of command line including null 506 000057B4 <res 00000002> GraphXSize resw 1 ; Width of splash screen file 507 000057B6 <res 00000002> VGAPos resw 1 ; Pointer into VGA memory 508 000057B8 <res 00000002> VGACluster resw 1 ; Cluster pointer for VGA image file 509 000057BA <res 00000002> VGAFilePtr resw 1 ; Pointer into VGAFileBuf 510 000057BC <res 00000002> Com32SysSP resw 1 ; SP saved during COM32 syscall 511 CursorDX equ $ 512 000057BE <res 00000001> CursorCol resb 1 ; Cursor column for message file 513 000057BF <res 00000001> CursorRow resb 1 ; Cursor row for message file 514 ScreenSize equ $ 515 000057C0 <res 00000001> VidCols resb 1 ; Columns on screen-1 516 000057C1 <res 00000001> VidRows resb 1 ; Rows on screen-1 517 000057C2 <res 00000002> BaudDivisor resw 1 ; Baud rate divisor 518 FlowControl equ $ 519 000057C4 <res 00000001> FlowOutput resb 1 ; Outputs to assert for serial flow 520 000057C5 <res 00000001> FlowInput resb 1 ; Input bits for serial flow 521 000057C6 <res 00000001> FlowIgnore resb 1 ; Ignore input unless these bits set 522 000057C7 <res 00000001> TextAttribute resb 1 ; Text attribute for message file 523 000057C8 <res 00000001> RetryCount resb 1 ; Used for disk access retries 524 000057C9 <res 00000001> KbdFlags resb 1 ; Check for keyboard escapes 525 000057CA <res 00000001> LoadFlags resb 1 ; Loadflags from kernel 526 000057CB <res 00000001> A20Tries resb 1 ; Times until giving up on A20 527 000057CC <res 00000001> FuncFlag resb 1 ; Escape sequences received from keyboard 528 000057CD <res 00000001> DisplayMask resb 1 ; Display modes mask 529 000057CE <res 00000001> CopySuper resb 1 ; Distinguish .bs versus .bss 530 000057CF <res 0000000B> MNameBuf resb 11 ; Generic mangled file name buffer 531 000057DA <res 0000000B> InitRD resb 11 ; initrd= mangled name 532 000057E5 <res 0000000D> KernelCName resb 13 ; Unmangled kernel name 533 000057F2 <res 0000000D> InitRDCName resb 13 ; Unmangled initrd name 534 000057FF <res 00000011> TextColorReg resb 17 ; VGA color registers for text mode 535 00005810 <res 0000000D> VGAFileBuf resb 13 ; Unmangled VGA image name 536 VGAFileBufEnd equ $ 537 0000581D <res 0000000B> VGAFileMBuf resb 11 ; Mangled VGA image name 538 alignb 4 ; For the good of REP MOVSD 539 00005828 <res 00000101> command_line resb max_cmd_len+2 ; Command line buffer 540 00005929 <res 00000100> default_cmd resb max_cmd_len+1 ; "default" command line 541 kern_cmd_len equ $-command_line 542 543 section .text 544 org 7C00h 545 ; 546 ; Some of the things that have to be saved very early are saved 547 ; "close" to the initial stack pointer offset, in order to 548 ; reduce the code size... 549 ; 550 StackBuf equ $-44-32 ; Start the stack here (grow down - 4K) 551 PartInfo equ StackBuf ; Saved partition table entry 552 FloppyTable equ PartInfo+16 ; Floppy info table (must follow PartInfo) 553 OrigFDCTabPtr equ StackBuf-4 ; The high dword on the stack 554 555 ; 556 ; Primary entry point. Tempting as though it may be, we can't put the 557 ; initial "cli" here; the jmp opcode in the first byte is part of the 558 ; "magic number" (using the term very loosely) for the DOS superblock. 559 ; 560 bootsec equ $ 561 00000000 EB3C jmp short start ; 2 bytes 562 00000002 90 nop ; 1 byte 563 ; 564 ; "Superblock" follows -- it's in the boot sector, so it's already 565 ; loaded and ready for us 566 ; 567 00000003 5359534C494E5558 bsOemName db 'SYSLINUX' ; The SYS command sets this, so...
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -