Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΡΠΆΠ΅ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ. Π§ΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ:
- ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΡΠ°ΠΉΠ» "bochs.exe"
- Π ΠΎΡΠΊΡΡΡΠ΅ΠΌΡΡ ΠΎΠΊΠ½Π΅ Π½Π°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ "Load"
- ΠΡΠ±Π΅ΡΠΈΡΠ΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°ΠΉΠ»Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ ΡΠ°ΠΉΠ» "bochsrc"
- ΠΠ°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ "Start"
- bochs.exe - ΡΠΌΡΠ»ΡΡΠΎΡ
- bochsdbg.exe - ΡΠΌΡΠ»ΡΡΠΎΡ Ρ Π΄Π΅Π±Π°Π³Π³Π΅ΡΠΎΠΌ
- bochsrc - ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ
- bochsrc_dbg - ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π΄Π»Ρ Π΄Π΅Π±Π°Π³Π³Π΅ΡΠ°
- boot.ASM - Π½Π΅ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠ°
- boot.BIN - ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠ°
- disk.img - Π·Π°Π³ΡΡΠ·ΠΎΡΠ½ΡΠΉ ΠΎΠ±ΡΠ°Π·
- FASMW.exe - ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΠΊΠΎΠ΄Π°
- writeDisk.bat - ΠΎΠΏΠ΅ΡΠΈΡΡΠ΅Ρ ΡΡΠΈΠ»ΠΈΡΠ°ΠΌΠΈ dd ΠΈ fsutil Ρ ΡΠ΅Π»ΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π·Π°Π³ΡΡΠ·ΠΎΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·Π°
ΠΠ»Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°:
- ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ FASMW (ΠΈΠ»ΠΈ Π»ΡΠ±ΡΡ Π΄ΡΡΠ³ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠ»)
- ΠΡΠΊΡΠΎΠΉΡΠ΅ ΡΠ°ΠΉΠ» boot.ASM
- ΠΠ½Π΅ΡΠΈΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΊΠΎΠ΄
- Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠΉΡΠ΅ Π΅Π³ΠΎ (Π² FASMW "Run" -> "Compile")
- ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ writeDisk.bat
- ΠΠΎΠΆΠ΄ΠΈΡΠ΅ΡΡ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° (ΡΠ°ΠΉΠ» disk.img ΡΠ°ΠΌ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠ΅ΡΡΡ)
- ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΡΠΌΡΠ»ΡΡΠΎΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ Π²Π°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ
ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π΄Π΅Π±Π°Π³Π³ΠΈΠ½Π³Π° ΠΊΠΎΠ΄Π°:
- ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ FASMW (ΠΈΠ»ΠΈ Π»ΡΠ±ΡΡ Π΄ΡΡΠ³ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠ»)
- ΠΡΠΊΡΠΎΠΉΡΠ΅ ΡΠ°ΠΉΠ» boot.ASM
- Π Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π±ΡΠ΅ΠΉΠΊΠΏΠΎΠΈΠ½Ρ (Π²ΠΏΠΈΡΠΈΡΠ΅ 'xchg bx, bx')
- Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠΉΡΠ΅ Π΅Π³ΠΎ (Π² FASMW "Run" -> "Compile")
- ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ writeDisk.bat
- ΠΠΎΠΆΠ΄ΠΈΡΠ΅ΡΡ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° (ΡΠ°ΠΉΠ» disk.img ΡΠ°ΠΌ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠ΅ΡΡΡ)
- ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΡΠΌΡΠ»ΡΡΠΎΡ (!bochsdbg), Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°ΠΉΠ»Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ borchs_dbg ΠΈ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ (Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° ΠΊ ΡΠΎΡΠΊΠ΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ 'Continue', Π΄Π»Ρ Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π³Π° Π½Π°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ 'Step')
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΎΠ² (ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡ Π½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ) π
- boot__code16 - ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠ°
- boot__continuation - ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π³ΡΡΠ·ΠΎΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΠΈ
- timer__int - ΠΊΠΎΠ΄ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ°
- convert__timer__value - Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ: ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ° Π² ΡΡΡΠΎΠΊΡ ΡΠΈΡΡ
- timer__value__out - Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ: Π²ΡΠ²ΠΎΠ΄ ΡΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΡΠ°ΠΉΠΌΠ΅ΡΠ°
- keyboard__int - ΠΊΠΎΠ΄ ΠΏΡΠ΅ΡΠ²ΡΠ²Π°Π½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ
- reboot - Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ: ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠΌΡΠ»ΡΡΠΎΡΠ° (Ctrl+Break)
- no__reboot - Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ: Π±Π΅Π· ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠΌΡΠ»ΡΡΠΎΡΠ°
- ints__install - ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ
- clear__display - ΠΎΡΠΈΡΡΠΊΠ° Π΄ΠΈΡΠΏΠ»Π΅Ρ
- welcome - Π²ΡΠ²ΠΎΠ΄ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
- check__floppy - ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ floppy-ΠΏΡΠΈΠ²ΠΎΠ΄Π°
- have__floppy - Π΅ΡΠ»ΠΈ floppy-ΠΏΡΠΈΠ²ΠΎΠ΄ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΡΠ½
- have__floppy__out - Π²ΡΠ²ΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΡΠ½Π½ΠΎΠΌ floppy-ΠΏΡΠΈΠ²ΠΎΠ΄Π΅
- no__floppy - Π΅ΡΠ»ΠΈ floppy-ΠΏΡΠΈΠ²ΠΎΠ΄ Π½Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΡΠ½
- no__floppy__out - Π²ΡΠ²ΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ floppy-ΠΏΡΠΈΠ²ΠΎΠ΄Π΅
- check__coprocessor - ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°
- have__coprocessor - Π΅ΡΠ»ΠΈ ΡΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½
- have__coprocessor__out - Π²ΡΠ²ΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΌ ΡΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅
- no__coprocessor - Π΅ΡΠ»ΠΈ ΡΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½
- no__coprocessor__out - Π²ΡΠ²ΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎ Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΌ ΡΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ΅
- check__ram__size - ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ
- ram__size__out - Π²ΡΠ²ΠΎΠ΄ ΠΏΡΠ΅ΡΠΈΠΊΡΠ°
- ram__size__value__out - Π²ΡΠ²ΠΎΠ΄ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
- check__video__mode - ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π²ΠΈΠ΄Π΅ΠΎΡΠ΅ΠΆΠΈΠΌΠ°
- video__mode__out - Π²ΡΠ²ΠΎΠ΄ ΠΏΡΠ΅ΡΠΈΠΊΡΠ°
- check__mode__40x25__color - ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠ΅ΠΆΠΈΠΌΡ (Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ Π±Π»ΠΎΠΊΠ° Π΄ΠΎΠΏΡΡΠ΅Π½Π° ΠΎΡΠΈΠ±ΠΊΠ°, ΡΡΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π²ΡΠ΅ Π²ΠΈΠ΄Π΅ΠΎΡΠ΅ΠΆΠΈΠΌΡ, Π° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ "40x25 Color")
- mode__40x25__color__out - Π²ΡΠ²ΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎ Π²ΠΈΠ΄Π΅ΠΎΡΠ΅ΠΆΠΈΠΌΠ΅ "40x25 Color"
- mode__80x25__color__out - Π²ΡΠ²ΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎ Π²ΠΈΠ΄Π΅ΠΎΡΠ΅ΠΆΠΈΠΌΠ΅ "80x25 Color"
- mode__80x25__mono__out - Π²ΡΠ²ΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎ Π²ΠΈΠ΄Π΅ΠΎΡΠ΅ΠΆΠΈΠΌΠ΅ "80x25 Mono"
- check__number__of__floppy - ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° floppy-ΠΏΡΠΈΠ²ΠΎΠ΄ΠΎΠ²
- number__of__floppy__out - Π²ΡΠ²ΠΎΠ΄ ΠΏΡΠ΅ΡΠΈΠΊΡΠ°
- number__of__floppy__value__out - Π²ΡΠ²ΠΎΠ΄ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
- check__dma - ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° DMA
- dma__enable - Π΅ΡΠ»ΠΈ DMA Π²ΠΊΠ»ΡΡΡΠ½
- dma__enable__out - Π²ΡΠ²ΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎ Π²ΠΊΠ»ΡΡΡΠ½Π½ΠΎΠΌ DMA
- dma__disable - Π΅ΡΠ»ΠΈ DMA Π²ΡΠΊΠ»ΡΡΠ΅Π½
- dma__disable__out - Π²ΡΠ²ΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎ Π²ΡΠΊΠ»ΡΡΠ΅Π½Π½ΠΎΠΌ DMA
- number__of__rs232__cards - ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° RS-232 ΠΊΠ°ΡΡ
- number__of__rs232__cards__out - Π²ΡΠ²ΠΎΠ΄ ΠΏΡΠ΅ΡΠΈΠΊΡΠ°
- number__of__rs232__cards__value__out - Π²ΡΠ²ΠΎΠ΄ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
- check__game__port - ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° "Game port"
- game__port__enable - Π΅ΡΠ»ΠΈ "Game port" Π²ΠΊΠ»ΡΡΠ΅Π½
- game__port__enable__out - Π²ΡΠ²ΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎ Π²ΠΊΠ»ΡΡΡΠ½Π½ΠΎΠΌ "Game port"
- game__port__disable - Π΅ΡΠ»ΠΈ "Game port" Π²ΡΠΊΠ»ΡΡΠ΅Π½
- game__port__disable__out - Π²ΡΠ²ΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎ Π²ΡΠΊΠ»ΡΡΠ΅Π½Π½ΠΎΠΌ "Game port"
- check__internal__modem - ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π°Π»ΠΈΡΠΈΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄Π΅ΠΌΠ°
- internal__modem__installed - Π΅ΡΠ»ΠΈ ΠΌΠΎΠ΄Π΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½
- internal__modem__installed__out - Π²ΡΠ²ΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΌ ΠΌΠΎΠ΄Π΅ΠΌΠ΅
- internal__modem__not__installed - Π΅ΡΠ»ΠΈ ΠΌΠΎΠ΄Π΅ΠΌ Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½
- internal__modem__not__installed__out - Π²ΡΠ²ΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ ΠΌΠΎΠ΄Π΅ΠΌΠ°
- number__of__printers__attached - ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΡΡΠ½Π½ΡΡ ΠΏΡΠΈΠ½ΡΠ΅ΡΠΎΠ²
- number__of__printers__attached__out - Π²ΡΠ²ΠΎΠ΄ ΠΏΡΠ΅ΡΠΈΠΊΡΠ°
- number__of__printers__attached__value__out - Π²ΡΠ²ΠΎΠ΄ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
- card__map__header - Π²ΡΠ²ΠΎΠ΄ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π΄Π»Ρ ΡΠ°Π±Π»ΠΈΡΡ ΡΠ΅ΠΊΡΠΎΡΠΎΠ² ΠΊΠ°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ
- card__map__read__start - ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΊ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠ΅ΠΊΡΠΎΡΠ°Ρ
- card__map__reading - ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠ΅ΠΊΡΠΎΡΠ°Ρ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ int 0x15 ax = 0E820h
- base__addr__high__out - Π²ΡΠ²ΠΎΠ΄ BaseAddrHigh
- base__addr__low__out - Π²ΡΠ²ΠΎΠ΄ BaseAddrLow
- length__high__out - Π²ΡΠ²ΠΎΠ΄ LengthHigh
- length__low__out - Π²ΡΠ²ΠΎΠ΄ LengthLow
- type__is__arm - ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΈΠΏΠ° Π½Π° "ARM"
- type__is__arr - ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΈΠΏΠ° Π½Π° "ARR"
- type__is__udf - ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΈΠΏΠ° Π½Π° "UDF" (undefined)
- type__out - Π²ΡΠ²ΠΎΠ΄ ΡΠΈΠΏΠ° ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π·Π°Π²Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΡΠ΅Π½ΠΈΡ
- terminate - Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ° ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ Π²ΡΡ Π΅ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ)
ΠΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΡΡΠΎΠΊΡ ΠΈ Π΅Ρ Π΄Π»ΠΈΠ½Π½Ρ. Π Π΄Π°Π½Π½ΠΎΠΌ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠ΅ ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Ρ ΡΠ΅Π»ΡΡ Π²ΡΠ²ΠΎΠ΄Π° Π½Π° ΡΠΊΡΠ°Π½. ΠΠΎΡΡΠΎΠΌΡ ΠΎΠΏΠΈΡΠ°Π½Ρ Π±ΡΠ΄ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΄Π΅Π»ΡΡΡΠΈΠ΅ΡΡ ΡΡΠ΅Π΄ΠΈ Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅:
- buffer db 20 dup(?) - Π±ΡΡΠ΅Ρ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΎ ΡΠ΅ΠΊΡΠΎΡΠ°Ρ ΠΊΠ°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ (ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ ΡΠ΅ΠΊΡΠΎΡΠΎΠ² ΠΊΠ°ΡΡΡ)
- smap__signature - SMAP ΡΠΈΠ³Π½Π°ΡΡΡΠ° (ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ ΡΠ΅ΠΊΡΠΎΡΠΎΠ² ΠΊΠ°ΡΡΡ)
- xlat__table db '0123456789ABCDEF' - ΡΠ°Π±Π»ΠΈΡΠ° Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠ° Π² ASCII-ΠΊΠΎΠ΄ (ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ ΡΠ΅ΠΊΡΠΎΡΠΎΠ² ΠΊΠ°ΡΡΡ ΠΈ Π²ΡΠ²ΠΎΠ΄Π΅ ΡΠΊΠ°Π½ ΠΊΠΎΠ΄ΠΎΠ² ΠΊΠ»Π°Π²ΠΈΡ)
- table__pointer dw 820h - ΠΊΡΡΡΠΎΡ ΡΠ°Π±Π»ΠΈΡΡ, ΠΏΠΎΠΌΠΎΠ³Π°ΡΡΠΈΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΠΎΠΊΠΈ (ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ ΡΠ΅ΠΊΡΠΎΡΠΎΠ² ΠΊΠ°ΡΡΡ)
- timer__value dw 0 - Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠΌΠ΅ΡΠ°
- timer__value__string db '' - ΡΡΡΠΎΠΊΠ°, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΠ΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠΌΠ΅ΡΠ° Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° Π½Π° ΡΠΊΡΠ°Π½
- off__08h equ 08hx4 (Π³Π΄Π΅ 'x' - ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ.ΠΊ. .md ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΈΠΌΠ²ΠΎΠ» Π·Π²ΡΠ·Π΄ΠΎΡΠΊΠΈ Π·Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΊΡΡΡΠΈΠ²) - ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° ΡΠ΄Π²ΠΈΠ³Π° (Ρ Π΅ΡΠ½Ρ Π΄Π»Ρ Π²Π΅ΠΊΡΠΎΡΠ° ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ, ΡΠ΄Π°Π»ΡΡΡ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ, ΠΈΠ±ΠΎ Π½Π΅Ρ ΡΠΉ)
- off__09h equ 09hx4 (Π³Π΄Π΅ 'x' - ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ.ΠΊ. .md ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΈΠΌΠ²ΠΎΠ» Π·Π²ΡΠ·Π΄ΠΎΡΠΊΠΈ Π·Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΊΡΡΡΠΈΠ²) - ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° ΡΠ΄Π²ΠΈΠ³Π° (Ρ Π΅ΡΠ½Ρ Π΄Π»Ρ Π²Π΅ΠΊΡΠΎΡΠ° ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ, ΡΠ΄Π°Π»ΡΡΡ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ, ΠΈΠ±ΠΎ Π½Π΅Ρ ΡΠΉ)
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ old__offset ΠΈ old__segment ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΎ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡΡ 08h ΠΈ 09h, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ Π² Π½Π°ΡΠ°Π»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠ°.
The repository already includes all the required files. To start the bootloader:
- Run the file "bochs.exe"
- In the window that opens, click the "Load" button
- Select the "bochsrc" file as the configuration file
- Click the "Start" button
- bochs.exe - emulator
- bochsdbg.exe - emulator with debugger
- bochsrc - standard configuration
- bochsrc_dbg - configuration for debugger
- boot.ASM - uncompiled bootloader code
- boot.BIN - compiled bootloader code
- disk.img - boot image
- FASMW.exe - code editor
- writeDisk.bat - operates with dd and fsutil utilities to create a bootable image
To modify the program code:
- Run FASMW (or any other program that can compile the file)
- Open the boot.ASM file
- Make changes to the code
- Compile it (in FASMW "Run" -> "Compile")
- Run writeDisk.bat
- Wait until the end of the process (the disk.img file will overwrite itself)
- Start the emulator and check your development
To perform the code debugging procedure:
- Run FASMW (or any other program that can compile the file)
- Open the boot.ASM file
- Set the breakpoint in the required place (enter 'xchg bx, bx')
- Compile it (in FASMW "Run" -> "Compile")
- Run writeDisk.bat
- Wait until the end of the process (the disk.img file will overwrite itself)
- Start the emulator (! Bochsdbg), select borchs_dbg as the configuration file and carry out the debugging procedure (to go to the breakpoint, press the 'Continue' button, for a single step, press the 'Step' button)
- boot__code16 - required part of the bootloader
- boot__continuation - continuation of the boot code execution after the required part has been completed
- timer__int - timer interrupt code
- convert__timer__value - interrupt execution: converting the timer value to a string of numbers
- timer__value__out - interrupt execution: output of the converted timer string
- keyboard__int - keyboard interrupt code
- reboot - interrupt execution: reboot the emulator (Ctrl + Break)
- no__reboot - interrupt execution: without rebooting the emulator
- ints__install - install interrupts
- clear__display - clear the display
- welcome - display a welcome message
- check__floppy - check for a floppy drive
- have__floppy - if a floppy drive is connected
- have__floppy__out - display a message about a connected floppy drive
- no__floppy - if no floppy drive is connected
- no__floppy__out - display a message about the absence of a floppy drive
- check__coprocessor - check for the presence of a coprocessor
- have__coprocessor - if coprocessor is installed
- have__coprocessor__out - display a message about the installed coprocessor
- no__coprocessor - if coprocessor is not installed
- no__coprocessor__out - display a message about not installed coprocessor
- check__ram__size - check the amount of RAM
- ram__size__out - prefix output
- ram__size__value__out - value output
- check__video__mode - check the video mode
- video__mode__out - prefix output
- check__mode__40x25__color - check for modes (there was a mistake in the block name, this check processes all video modes, not just "40x25 Color")
- mode__40x25__color__out - displays a message about the video mode "40x25 Color"
- mode__80x25__color__out - displays a message about the video mode "80x25 Color"
- mode__80x25__mono__out - displays a message about the video mode "80x25 Mono"
- check__number__of__floppy - check the number of floppy drives
- number__of__floppy__out - prefix output
- number__of__floppy__value__out - display value
- check__dma - check DMA
- dma__enable - if DMA is enabled
- dma__enable__out - display a message about enabled DMA
- dma__disable - if DMA is disabled
- dma__disable__out - display a message about disabled DMA
- number__of__rs232__cards - check the number of RS-232 cards
- number__of__rs232__cards__out - prefix output
- number__of__rs232__cards__value__out - value output
- check__game__port - check "Game port"
- game__port__enable - if "Game port" is enabled
- game__port__enable__out - displays a message about the enabled "Game port"
- game__port__disable - if "Game port" is disabled
- game__port__disable__out - displays a message about disabled "Game port"
- check__internal__modem - check for a built-in modem
- internal__modem__installed - if the modem is installed
- internal__modem__installed__out - displays a message about the installed modem
- internal__modem__not__installed - if the modem is not installed
- internal__modem__not__installed__out - displays a message about the absence of a modem
- number__of__printers__attached - check the number of connected printers
- number__of__printers__attached__out - prefix output
- number__of__printers__attached__value__out - value output
- card__map__header - display the header for the table of sectors of the memory card
- card__map__read__start - preparation for getting information about sectors
- card__map__reading - getting information about sectors using int 0x15 ax = 0E820h
- base__addr__high__out - BaseAddrHigh output
- base__addr__low__out - BaseAddrLow output
- length__high__out - output LengthHigh
- length__low__out - Output of LengthLow
- type__is__arm - checking the type for "ARM"
- type__is__arr - checking the type for "ARR"
- type__is__udf - type check for "UDF" (undefined)
- type__out - type inference and check for termination of the reading process
- terminate - termination of execution (timer and keyboard interrupts are still working)
Most of the variables represent a string and its length. In this loader, this is necessary for the purpose of displaying. Therefore, only the variables that stand out among them will be described:
- buffer db 20 dup (?) - buffer for storing data about the sectors of the memory card (used when reading the sectors of the card)
- smap__signature - SMAP signature (used when reading map sectors)
- xlat__table db '0123456789ABCDEF' - a table for converting the register value to ASCII code (used when reading card sectors and outputting scanned key codes)
- table__pointer dw 820h - table cursor that helps position rows (used when reading map sectors)
- timer__value dw 0 - timer value
- timer__value__string db '' - a string into which the timer value is converted to be displayed on the screen
- off__08h equ 08hx4 (where 'x' is multiplication, since .md takes an asterisk as a pointer to italics) - shift constant (bullshit for the interrupt vector, it is not recommended to delete it, because fuck it)
- off__09h equ 09hx4 (where 'x' is multiplication, since .md takes an asterisk as a pointer to italics) - shift constant (bullshit for the interrupt vector, it is not recommended to delete, because fuck it)