Skip to content

MegaDoge1337/assembler-boot

Repository files navigation

MDBoot (boot-file) πŸ’Ύ [ru - My native]

Запуск эмулятора ⚑

Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΡƒΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ:

  • ЗапуститС Ρ„Π°ΠΉΠ» "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, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π² Π½Π°Ρ‡Π°Π»Π΅ выполнСния Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°.

MDBoot (boot-file) πŸ’Ύ [en - thanks, Google Translater]

Launch the emulator ⚑

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

Emulator files πŸ“‘

  • 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

Modification of the program code πŸ”§

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

Debugging program code πŸ”Ž

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)

Description of blocks (sequentially from the beginning of the program to the end) πŸ“š

  • 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)

Variables πŸ“‹

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)

About

ASU // Laboratory Work // 2021

Topics

Resources

Stars

Watchers

Forks