Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
en:docs:kernel:doskrnl [2023/12/13 01:37] – prokushev | en:docs:kernel:doskrnl [2024/05/25 02:43] (current) – prokushev | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | {{page> | ||
+ | |||
====== DOSKRNL ====== | ====== DOSKRNL ====== | ||
- | DOSKRNL is a specialized | + | DOSKRNL is a specialized |
+ | |||
+ | ===== Initialization ===== | ||
+ | |||
+ | DOSKRNL loaded at address differ from standard DOS 0060:0000 address. On test environment it was loaded to 0280:00, but [[https:// | ||
+ | |||
+ | On DOSKRNL startup registers are following: | ||
+ | |||
+ | * CS:IP - starting point | ||
+ | * SS:BP - pointer to the DOSKRNL init structure (also referenced as VDOS init in IBM documents) | ||
+ | * SS:SP - stack pointer (size around 800 bytes) | ||
- | ===== Startup ===== | + | Interrupts disabled. |
- | On DOSKRNL | + | DOSKRNL |
^ Offset ^ Size ^ Description ^ | ^ Offset ^ Size ^ Description ^ | ||
Line 17: | Line 29: | ||
| 18 | 4 | Far pointer to SHELL (arguments) | | | 18 | 4 | Far pointer to SHELL (arguments) | | ||
| 22 | 4 | Far pointer to linked list of VDD | | | 22 | 4 | Far pointer to linked list of VDD | | ||
- | | 26 | 1 | Current drive (0-A, 1-B,...)| | + | | 26 | 1 | Current drive (1-A, 2-B, 3-C, ...)| |
- | | 27 | 1 | Boot drive (0-A, 1-B,...) | | + | | 27 | 1 | Boot drive (1-A, 2-B, 3-C, ...) | |
- | | ???? | ??? | ???? | | + | | 28 |
+ | | ??? | ??? | ??? | | ||
- | Memory map on DOSKRNL start: | + | DEVICES is ASCIIZ string with list of DOS devices to be loaded divided by 0AH |
- | | Init area | [BP+0+BP+2-BP+4]: | + | SHELL is ASCIIZ string. |
- | | Free | [BP+0]:0 | | + | |
- | | DOSKRNL | + | SHELL arguments is ASCIIZ string (first byte is a string length, string ends with 0dh) |
- | | CMOS Data | 40:0 | | + | |
- | | Interrupt vectors | 0:0 | | + | |
- | As in most DOS kernels, DOSKRNL moves initialization code to higher memory. But uses init structure, not BIOS INT 12h, for memory information. | + | VDD is linked list of structures: |
- | VDDs linked list (in init area) in standard DOS Device drivers format | + | VDDs linked list in standard DOS Device drivers format. Entry can be placed in HMA, so need to be sure A20 enabled for such entries. Named as DOSDDTYPE in DDK |
^ offset ^ Size ^ Description ^ | ^ offset ^ Size ^ Description ^ | ||
Line 38: | Line 49: | ||
| ::: | ::: | Bit 15 = 1 if char device 0 if blk | | | ::: | ::: | Bit 15 = 1 if char device 0 if blk | | ||
| ::: | ::: | if bit 15 is 1 | | | ::: | ::: | if bit 15 is 1 | | ||
- | | ::: | ::: | Bit 0 = 1 if Current | + | | ::: | ::: | Bit 0 = 1 if Current |
- | | ::: | ::: | Bit 1 = 1 if Current | + | | ::: | ::: | Bit 1 = 1 if Current |
- | | ::: | ::: | Bit 2 = 1 if Current | + | | ::: | ::: | Bit 2 = 1 if Current |
- | | ::: | ::: | Bit 3 = 1 if Current CLOCK dev | | + | | ::: | ::: | Bit 3 = 1 if Current CLOCK device |
| ::: | ::: | Bit 4 = 1 if SPECIAL | | ::: | ::: | Bit 4 = 1 if SPECIAL | ||
| ::: | ::: | Bit 14 is the IOCTL bit | | | ::: | ::: | Bit 14 is the IOCTL bit | | ||
Line 48: | Line 59: | ||
| 8 | | 8 | ||
| 10 | 8 | character device name field. Character devices set a device name. For block devices the first byte is the number of units | | | 10 | 8 | character device name field. Character devices set a device name. For block devices the first byte is the number of units | | ||
+ | |||
+ | Memory map on DOSKRNL start: | ||
+ | |||
+ | | Init area | [BP+0+BP+2-BP+4]: | ||
+ | | Free | [BP+0]:0 | | ||
+ | | DOSKRNL | ||
+ | | Some data (VDD entries was found here) | ??? | | ||
+ | | CMOS Data | 40:0 | | ||
+ | | Interrupt vectors | 0:0 | | ||
+ | |||
+ | As in most DOS kernels, DOSKRNL moves initialization code to higher conventional memory. But uses init structure, not BIOS INT 12h, for memory information. | ||
DOSKRNL search and initialize XMS driver and moves some parts to HMA. Most other initialization things is same. DOSKRNL initializes standard device drivers and adds and initializes VDDs, passed via init structure. Some things (at least COMMAND.COM, | DOSKRNL search and initialize XMS driver and moves some parts to HMA. Most other initialization things is same. DOSKRNL initializes standard device drivers and adds and initializes VDDs, passed via init structure. Some things (at least COMMAND.COM, | ||
Line 60: | Line 82: | ||
* DOS | * DOS | ||
* BREAK | * BREAK | ||
+ | * FCBS | ||
+ | * LASTDRIVE | ||
todo add more info here | todo add more info here | ||
Also most of these setting can be adjusted via DOS Properties (aka DOS Settings). Refer [[https:// | Also most of these setting can be adjusted via DOS Properties (aka DOS Settings). Refer [[https:// | ||
+ | |||
+ | ===== Properties ===== | ||
+ | |||
+ | * COM_DIRECT_ACCESS | ||
+ | * COM_HOLD | ||
+ | * COM_RECEIVE_BUFFER_FLUSH | ||
+ | * COM_SELECT | ||
+ | * DOS_AUTOEXEC | ||
+ | * DOS_BACKGROUND_EXECUTION | ||
+ | * DOS_BREAK | ||
+ | * DOS_DEVICE | ||
+ | * DOS_FCBS | ||
+ | * DOS_FCBS_KEEP | ||
+ | * DOS_FILES | ||
+ | * DOS_HIGH | ||
+ | * DOS_LASTDRIVE | ||
+ | * DOS_RMSIZE | ||
+ | * DOS_SHELL | ||
+ | * DOS_STARTUP_DRIVE | ||
+ | * DOS_UMB | ||
+ | * DOS_VERSION | ||
+ | * DPMI_DOS_API | ||
+ | * DPMI_MEMORY_LIMIT | ||
+ | * DPMI_NETWORK_BUFF_SIZE | ||
+ | * EMS_FRAME_LOCATION | ||
+ | * EMS_HIGH_OS_MAP_REGION | ||
+ | * EMS_LOW_OS_MAP_REGION | ||
+ | * EMS_MEMORY_LIMIT | ||
+ | * HW_NOSOUND | ||
+ | * HW_ROM_TO_RAM | ||
+ | * HW_TIMER | ||
+ | * IDLE_SECONDS | ||
+ | * IDLE_SENSITIVITY | ||
+ | * INT_DURING_IO | ||
+ | * KBD_ALTHOME_BYPASS | ||
+ | * KBD_BUFFER_EXTEND | ||
+ | * KBD_CTRL_BYPASS | ||
+ | * KBD_RATE_LOCK | ||
+ | * MEM_EXCLUDE_REGION | ||
+ | * MEM_INCLUDE_REGION | ||
+ | * MOUSE_EXCLUSIVE_ACCESS | ||
+ | * PRINT_SEPARATE_OUTPUT | ||
+ | * PRINT_TIMEOUT | ||
+ | * SESSION_PRIORITY | ||
+ | * VIDEO_8514A_XGA_IOTRAP | ||
+ | * VIDEO_FASTPASTE | ||
+ | * VIDEO_MODE_RESTRICTIONS | ||
+ | * VIDEO_ONDEMAND_MEMORY | ||
+ | * VIDEO_RETRACE_EMULATION | ||
+ | * VIDEO_ROM_EMULATION | ||
+ | * VIDEO_SWITCH_NOTIFICATION | ||
+ | * VIDEO_WINDOW_REFRESH | ||
+ | * XMS_HANDLES | ||
+ | * XMS_MEMORY_LIMIT | ||
+ | * XMS_MINIMUM_HMA | ||
===== API ===== | ===== API ===== |