目前分類:programming (5)

瀏覽方式: 標題列表 簡短摘要

目標: 學習OS開機流程

閱讀者具備:

1. 組合語言

軟體工具: (all free)

NASM: 2.09.10 refer: http://www.nasm.us/

download: http://www.nasm.us/pub/nasm/releasebuilds/2.09.10/win32/nasm-2.09.10-installer.exe

VMware player: refer http://www.vmware.com/

step1: register (free)

https://www.vmware.com/tryvmware/index.php  VMplayer_step4

VMplayer_step5       

step2: downlaod

VMplayer_step1

VMplayer_step2  

VMplayer_step3  

VMplayer_step6  

 

Knowledge introduction:

開機流程:

power on -> BIOS -> bootloader -> OS

示意圖

  bootloader

 programming:  

design by notepad or other edit tool.

//-------------------------bootloader.txt------------------------------------------------------------------

%define os_start 0x1000
%define file_start 0x2000
%define driver 0x80
%define os_sector 3
%define file_sector 2
[bits 16]
org 0x7c00
start:
 mov ax,cs
 mov ds,ax
 mov es,ax
 mov al,03h
 mov ah,0
 int 10h   ;set screen mode, 80x25
;-------------------------------------
;local service
 mov si,msg_hello  ;hello message
 call print 
 mov ah,0   ;wait for keypress
 int 16h
;-------------------------------------
;load os code to ram
 mov ax,os_start
 mov es,ax
 mov cl,os_sector
 mov al,2
 call load_sector
;-------------------------------------
;load file table to ram
 mov ax,file_start
 mov es,ax
 mov cl,file_sector
 mov al,1
 call load_sector
;-------------------------------------
 jmp $   ; we don't have os. this is infinite loop.
; jmp os_start:000  ; jump to our shell
;-------------------------------------
;load function

load_sector:
 mov bx,0
 mov dl,driver  ;drive
 mov dh,0   ;head
 mov ch,0   ;track
 mov ah,2
 int 0x13
 jc exception
 ret
 exception:
  mov si,msg_error
  call print
  mov ah,0
  int 16h
  int 19h  ;reboot
;------------------------------------
;print function
print:
 pusha
 mov bp,sp
 loop_print:
  lodsb
  or al,al
  jz end_print
  mov ah,0x0e
  mov bx,0
  int 10h
  jmp loop_print
 end_print:
  mov sp,bp
  popa
  ret
;------------------
;data section
msg_hello db "Booting Successful...",10,13,"Hello !!",10,13,"Press any key to continue.",10,13,0
msg_error db "Exception occor at load_section",10,13,0

size equ $ - start
%if size+2 > 512
 
%error "code is too large for boot sector"

%endif
 
times (512 - size - 2) db 0
;--------------------
;end for bootloader
dw 0xaa55

//----------------------------------------------------------------------------------------

assembly by NASM

open NASM

在命令提示列使用

NASM -f bin bootloader.txt -o bootlaoder

bootloader2    

確認檔案大小為512 byte

//---------------------------------------------------------------------------------------------------

open VMware player

vm1

create a new virtual machine

vm2  

vm3  

vm4   

vm5  

vm6  

vm7  

vm8  

finished!!

vm9  

文章標籤

嵐綺緣 發表在 痞客邦 留言(0) 人氣()

Lessons on development of 64-bit C/C++ applications:

http://software.intel.com/en-us/blogs/2011/07/07/all-about-64-bit-programming-in-one-place/

 

 
An Examination of the Windows 2000 ( NT5.0 ) and Windows XP ( NT5.1 ) MBR ( Master Boot Record )
 
 

How PC Programs Work: Understanding x86 (Intel) Machine Code

http://thestarman.narod.ru/asm/index.html

文章標籤

嵐綺緣 發表在 痞客邦 留言(0) 人氣()

IO address range Device
00 – 1F First DMA controller 8237 A-5
20 – 3F First Programmable Interrupt Controller, 8259A, Master
40 – 5F Programmable Interval Timer (System Timer), 8254
60 – 6F Keyboard, 8042
70 – 7F Real Time Clock, NMI mask
80 – 9F DMA Page Register, 74LS612
87 DMA Channel 0
83 DMA Channel 1
81 DMA Channel 2
82 DMA Channel 3
8B DMA Channel 5
89 DMA Channel 6
8A DMA Channel 7
8F Refresh
A0 – BF Second Programmable Interrupt Controller, 8259A, Slave
C0 – DF Second DMA controller 8237 A-5
F0 Clear 80287 Busy
F1 Reset 80287
F8 – FF Math coprocessor, 80287
F0 – F5 PCjr Disk Controller
F8 – FF Reserved for future microprocessor extensions
100 – 10F POS Programmable Option Select (PS2)
110 – 1EF System IO channel
140 – 15F Secondary SCSI host adapter
170 – 177 Secondary Parallel ATA Disk Controller
1F0 – 1F7 Primary Parallel ATA Hard Disk Controller
200 – 20F Game port
210 – 217 Expansion Unit
220 – 233 Sound Blaster and most other sound cards
278 – 27F LPT2 parallel port
280 – 29F LCD on Wyse 2108 PC SMC Elite default factory setting
2B0 – 2DF Alternate Enhanced Graphics Adapter (EGA) display control
2E8 – 2EF COM4 serial port
2E1 GPIBIEEE-488 Adapter 0
2E2 – 2E3 Data acquisition
2F8 – 2FF COM2 serial port
300 – 31F Prototype Card
300 – 31F Novell NE1000 compatible Ethernet network interfaces
300 – 31F AMD Am7990 Ethernet network interface, IRQ=5.
320 – 323 ST-506 and compatible hard disk drive interface
330 – 331 MPU-401 UART on most sound cards
340 – 35F Primary SCSI host adapter
370 – 377 Secondary floppy disk drive controller
378 – 37F LPT1 parallel port
380 – 38C Secondary Binary Synchronous Data Link Control (SDLC) adapter
388 – 389 AdLib Music Synthesizer Card
3A0 – 3A9 Primary Binary Synchronous Data Link Control (SDLC) adapter
3B0 – 3BB Monochrome Display Adapter (MDA) display control
3BC – 3BF MDA LPT parallel port
3C0 – 3CF Enhanced Graphics Adapter (EGA) display control
3D0 – 3DF Color Graphics Adapter (CGA)
3E8 – 3EF COM3 serial port
3F0 – 3F7 Primary floppy disk drive controller. Primary IDE controller (slave drive) (3F6–3F7h)
3F8 – 3FF COM1 serial port
CF8 – CFC PCI configuration space

文章標籤

嵐綺緣 發表在 痞客邦 留言(0) 人氣()

0x0000:0 Interrupt Vector Table
0x0040:0 BIOS Data Area
0x0050:0 PrtScr Status / Unused
0x0060:0 Image Load Address
0x07C0:0 Boot code is loaded here at startup (31k mark)
0xA000:0 EGA/VGA RAM for graphics display mode 0Dh & above
0xB000:0 MDA RAM, Hercules graphics display RAM
0xB800:0 CGA display RAM
0xC000:0 EGA/VGA BIOS ROM (thru C7FF)
0xC400:0 Video adapter ROM space
0xC600:0 256 B PGA communication area
0xC800:0 16 KB Hard disk adapter BIOS ROM
0xC800:5 XT Hard disk ROM format, AH=Drive, AL=Interleave
0xD000:0 32 KB Cluster adapter BIOS ROM
0xD800:0 PCjr conventionalsoftware cartridge address
0xE000:0 64 KB Expansion ROM space (hardwired on AT+)
                128 KB PS/2 System ROM (thru F000)
0xF000:0 System monitor ROM
                PCjr: software cartridge override address
0xF400:0 System expansion ROMs
0xF600:0 IBM ROM BASIC (AT)
0xF800:0 PCjr software cartridge override address
0xFC00:0 BIOS ROM
0xFF00:0 System ROM
0xFFA6:E ROM graphics character table
0xFFFF:0 ROM bootstrap code
0xFFFF:5 8 B ROM date (not applicable for all clones)
0xFFFF:E 1 B ROM machine id

文章標籤

嵐綺緣 發表在 痞客邦 留言(0) 人氣()

Overview:

1. interrup vector table

2. refer detail RBIL

(1)

A list of common BIOS interrupts can be found below. Note that some BIOSes (particularly old ones) will not support all of these interrupts.

Interrupt vector Description

INT 00 - CPU-generated - DIVIDE ERROR
INT 01 - CPU-generated - SINGLE STEP; (80386+) - DEBUGGING EXCEPTIONS
INT 02 - external hardware - NON-MASKABLE INTERRUPT
INT 03 - CPU-generated - BREAKPOINT
INT 04 - CPU-generated - INTO DETECTED OVERFLOW
INT 05 - PRINT SCREEN; CPU-generated (80186+) - BOUND RANGE EXCEEDED
INT 06 - CPU-generated (80286+) - INVALID OPCODE
INT 07 - CPU-generated (80286+) - PROCESSOR EXTENSION NOT AVAILABLE
INT 08 - IRQ0 - SYSTEM TIMER; CPU-generated (80286+)
INT 09 - IRQ1 - KEYBOARD DATA READY; CPU-generated (80286,80386)
INT 0A - IRQ2 - LPT2/EGA,VGA/IRQ9; CPU-generated (80286+)
INT 0B - IRQ3 - SERIAL COMMUNICATIONS (COM2); CPU-generated (80286+)
INT 0C - IRQ4 - SERIAL COMMUNICATIONS (COM1); CPU-generated (80286+)
INT 0D - IRQ5 - FIXED DISK/LPT2/reserved; CPU-generated (80286+)
INT 0E - IRQ6 - DISKETTE CONTROLLER; CPU-generated (80386+)
INT 0F - IRQ7 - PARALLEL PRINTER
INT 10 - VIDEO; CPU-generated (80286+)
INT 11 - BIOS - GET EQUIPMENT LIST; CPU-generated (80486+)
INT 12 - BIOS - GET MEMORY SIZE
INT 13 - DISK
INT 14 - SERIAL
INT 15 - CASSETTE
INT 16 - KEYBOARD
INT 17 - PRINTER
INT 18 - DISKLESS BOOT HOOK (START CASSETTE BASIC)
INT 19 - SYSTEM - BOOTSTRAP LOADER
INT 1A - TIME
INT 1B - KEYBOARD - CONTROL-BREAK HANDLER
INT 1C - TIME - SYSTEM TIMER TICK
INT 1D - SYSTEM DATA - VIDEO PARAMETER TABLES
INT 1E - SYSTEM DATA - DISKETTE PARAMETERS
INT 1F - SYSTEM DATA - 8x8 GRAPHICS FONT
INT 20 - DOS 1+ - TERMINATE PROGRAM
INT 21 - DOS 1+ - Function Calls
INT 22 - DOS 1+ - PROGRAM TERMINATION ADDRESS
INT 23 - DOS 1+ - CONTROL-C/CONTROL-BREAK HANDLER
INT 24 - DOS 1+ - CRITICAL ERROR HANDLER
INT 25 - DOS 1+ - ABSOLUTE DISK READ
INT 26 - DOS 1+ - ABSOLUTE DISK WRITE
INT 27 - DOS 1+ - TERMINATE AND STAY RESIDENT
INT 28 - DOS 2+ - DOS IDLE INTERRUPT
INT 29 - DOS 2+ - FAST CONSOLE OUTPUT
INT 2A - NETBIOS
INT 2B - DOS 2+ - RESERVED
INT 2C - DOS 2+ - RESERVED
INT 2D - DOS 2+ - RESERVED
INT 2E - DOS 2+ - PASS COMMAND TO COMMAND INTERPRETER FOR EXECUTION
INT 2F - Multiplex
INT 30 - (NOT A VECTOR!) - DOS 1+ - FAR JMP instruction
INT 31 - overwritten by CP/M jump instruction in INT 30
INT 32 - (no special use)
INT 33 - MS MOUSE
INT 34 - FLOATING POINT EMULATION - OPCODE D8h
INT 35 - FLOATING POINT EMULATION - OPCODE D9h
INT 36 - FLOATING POINT EMULATION - OPCODE DAh
INT 37 - FLOATING POINT EMULATION - OPCODE DBh
INT 38 - FLOATING POINT EMULATION - OPCODE DCh
INT 39 - FLOATING POINT EMULATION - OPCODE DDh
INT 3A - FLOATING POINT EMULATION - OPCODE DEh
INT 3B - FLOATING POINT EMULATION - OPCODE DFh
INT 3C - FLOATING POINT EMULATION - SEGMENT OVERRIDE
INT 3D - FLOATING POINT EMULATION - STANDALONE FWAIT
INT 3E - FLOATING POINT EMULATION - Borland "SHORTCUT" CALL
INT 3F - Overlay manager interrupt (Microsoft/Borland)
INT 40 - DISKETTE - RELOCATED ROM BIOS DISKETTE HANDLER
INT 41 - SYSTEM DATA - HARD DISK 0 PARAMETER TABLE; CPU - MS Windows
INT 42 - VIDEO - RELOCATED DEFAULT INT 10 VIDEO SERVICES (EGA,VGA)
INT 43 - VIDEO DATA - CHARACTER TABLE (EGA,MCGA,VGA)
INT 44 - VIDEO DATA - CHARACTER FONT (PCjr); Novell NetWare
INT 45 - Z100/Acorn
INT 46 - SYSTEM DATA - HARD DISK 1 DRIVE PARAMETER TABLE
INT 47 - Z100/Acorn/Western Digital/SQL Base
INT 48 - KEYBOARD (PCjr) - Z100/Watstar/Acorn/Western Digital/Compaq
INT 49 - SYSTEM DATA (PCjr) - Z100/TI/Watstar/Acorn/MAGic
INT 4A - SYSTEM - USER ALARM HANDLER
INT 4B - IBM SCSI interface; Virtual DMA Specification (VDS)
INT 4C - Z100/Acorn/TI
INT 4D - Z100
INT 4E - TI/Z100
INT 4F - Common Access Method SCSI
INT 50 - IRQ0 relocated by software
INT 51 - IRQ1 relocated by software
INT 52 - IRQ2 relocated by software
INT 53 - IRQ3 relocated by software
INT 54 - IRQ4 relocated by software
INT 55 - IRQ5 relocated by software
INT 56 - IRQ6 relocated by software
INT 57 - IRQ7 relocated by software
INT 58 - IRQ8/0 relocated by software
INT 59 - IRQ9/1 relocated by software; GSS Computer Graphics Interface
INT 5A - IRQ10/2 relocated by software
INT 5B - IRQ11/3 relocated by software; Network
INT 5C - IRQ12/4 relocated by software; Network Interface
INT 5D - IRQ13/5 relocated by software
INT 5E - IRQ14/6 relocated by software
INT 5F - IRQ15/7 relocated by software; HP 95LX GRAPHICS PRIMITIVES
INT 60 - reserved for user interrupt; multiple purposes
INT 61 - reserved for user interrupt; multiple purposes
INT 62 - reserved for user interrupt; multiple purposes
INT 63 - reserved for user interrupt; multiple purposes
INT 64 - reserved for user interrupt; multiple purposes
INT 65 - reserved for user interrupt; multiple purposes
INT 66 - reserved for user interrupt; multiple purposes
INT 67 - reserved for user interrupt; LIM EMS; multiple purposes
INT 68 - multiple purposes
INT 69 - multiple purposes
INT 6A - multiple purposes
INT 6B - multiple purposes
INT 6C - CONVERTIBLE; DOS 3.2; DECnet DOS network scheduler
INT 6D - VGA - internal
INT 6E - DECnet DOS - DECnet NETWORK PROCESS API
INT 6F - Novell NetWare; 10NET; MS Windows 3.0
INT 70 - IRQ8 - CMOS REAL-TIME CLOCK
INT 71 - IRQ9 - REDIRECTED TO INT 0A BY BIOS
INT 72 - IRQ10 - RESERVED
INT 73 - IRQ11 - RESERVED
INT 74 - IRQ12 - POINTING DEVICE (PS)
INT 75 - IRQ13 - MATH COPROCESSOR EXCEPTION (AT and up)
INT 76 - IRQ14 - HARD DISK CONTROLLER (AT and later)
INT 77 - IRQ15 - RESERVED (AT,PS); POWER CONSERVATION (Compaq)
INT 78 - DOS extenders; multiple purposes
INT 79 - multiple purposes
INT 7A - Novell NetWare; IBM 3270; multiple purposes
INT 7B - multiple purposes
INT 7C - multiple purposes
INT 7D - multiple purposes
INT 7E - RESERVED FOR DIP, Ltd. ROM LIBRARY; multiple purposes
INT 7F - multiple purposes
INT 80 - reserved for BASIC; multiple purposes
INT 81 - reserved for BASIC
INT 82 - reserved for BASIC
INT 83 - reserved for BASIC
INT 84 - reserved for BASIC
INT 85 - reserved for BASIC
INT 86 - IBM ROM BASIC - used while in interpreter; multiple purposes
INT 87 - IBM ROM BASIC - used while in interpreter
INT 88 - IBM ROM BASIC - used while in interpreter; multiple purposes
INT 89 - IBM ROM BASIC - used while in interpreter
INT 8A - IBM ROM BASIC - used while in interpreter
INT 8B - IBM ROM BASIC - used while in interpreter
INT 8C - IBM ROM BASIC - used while in interpreter
INT 8D - IBM ROM BASIC - used while in interpreter
INT 8E - IBM ROM BASIC - used while in interpreter
INT 8F - IBM ROM BASIC - used while in interpreter
INT 90 - IBM ROM BASIC - used while in interpreter
INT 91 - IBM ROM BASIC - used while in interpreter
INT 92 - IBM ROM BASIC - used while in interpreter; multiple purposes
INT 93 - IBM ROM BASIC - used while in interpreter
INT 94 - IBM ROM BASIC - used while in interpreter; multiple purposes
INT 95 - IBM ROM BASIC - used while in interpreter
INT 96 - IBM ROM BASIC - used while in interpreter
INT 97 - IBM ROM BASIC - used while in interpreter
INT 98 - IBM ROM BASIC - used while in interpreter
INT 99 - IBM ROM BASIC - used while in interpreter
INT 9A - IBM ROM BASIC - used while in interpreter
INT 9B - IBM ROM BASIC - used while in interpreter
INT 9C - IBM ROM BASIC - used while in interpreter
INT 9D - IBM ROM BASIC - used while in interpreter
INT 9E - IBM ROM BASIC - used while in interpreter
INT 9F - IBM ROM BASIC - used while in interpreter
INT A0 - IBM ROM BASIC - used while in interpreter
INT A1 - IBM ROM BASIC - used while in interpreter
INT A2 - IBM ROM BASIC - used while in interpreter
INT A3 - IBM ROM BASIC - used while in interpreter
INT A4 - IBM ROM BASIC - used while in interpreter
INT A5 - IBM ROM BASIC - used while in interpreter
INT A6 - IBM ROM BASIC - used while in interpreter
INT A7 - IBM ROM BASIC - used while in interpreter
INT A8 - IBM ROM BASIC - used while in interpreter
INT A9 - IBM ROM BASIC - used while in interpreter
INT AA - IBM ROM BASIC - used while in interpreter
INT AB - IBM ROM BASIC - used while in interpreter
INT AC - IBM ROM BASIC - used while in interpreter
INT AD - IBM ROM BASIC - used while in interpreter
INT AE - IBM ROM BASIC - used while in interpreter
INT AF - IBM ROM BASIC - used while in interpreter
INT B0 - IBM ROM BASIC - used while in interpreter
INT B1 - IBM ROM BASIC - used while in interpreter
INT B2 - IBM ROM BASIC - used while in interpreter
INT B3 - IBM ROM BASIC - used while in interpreter
INT B4 - IBM ROM BASIC - used while in interpreter
INT B5 - IBM ROM BASIC - used while in interpreter
INT B6 - IBM ROM BASIC - used while in interpreter
INT B7 - IBM ROM BASIC - used while in interpreter
INT B8 - IBM ROM BASIC - used while in interpreter
INT B9 - IBM ROM BASIC - used while in interpreter
INT BA - IBM ROM BASIC - used while in interpreter
INT BB - IBM ROM BASIC - used while in interpreter
INT BC - IBM ROM BASIC - used while in interpreter
INT BD - IBM ROM BASIC - used while in interpreter
INT BE - IBM ROM BASIC - used while in interpreter
INT BF - IBM ROM BASIC - used while in interpreter
INT C0 - IBM ROM BASIC - used while in interpreter
INT C1 - IBM ROM BASIC - used while in interpreter
INT C2 - IBM ROM BASIC - used while in interpreter
INT C3 - IBM ROM BASIC - used while in interpreter
INT C4 - IBM ROM BASIC - used while in interpreter
INT C5 - IBM ROM BASIC - used while in interpreter
INT C6 - IBM ROM BASIC - used while in interpreter
INT C7 - IBM ROM BASIC - used while in interpreter
INT C8 - IBM ROM BASIC - used while in interpreter
INT C9 - IBM ROM BASIC - used while in interpreter
INT CA - IBM ROM BASIC - used while in interpreter
INT CB - IBM ROM BASIC - used while in interpreter
INT CC - IBM ROM BASIC - used while in interpreter
INT CD - IBM ROM BASIC - used while in interpreter
INT CE - IBM ROM BASIC - used while in interpreter
INT CF - IBM ROM BASIC - used while in interpreter
INT D0 - IBM ROM BASIC - used while in interpreter
INT D1 - IBM ROM BASIC - used while in interpreter
INT D2 - IBM ROM BASIC - used while in interpreter
INT D3 - IBM ROM BASIC - used while in interpreter
INT D4 - IBM ROM BASIC - used while in interpreter
INT D5 - IBM ROM BASIC - used while in interpreter
INT D6 - IBM ROM BASIC - used while in interpreter
INT D7 - IBM ROM BASIC - used while in interpreter
INT D8 - IBM ROM BASIC - used while in interpreter
INT D9 - IBM ROM BASIC - used while in interpreter
INT DA - IBM ROM BASIC - used while in interpreter
INT DB - IBM ROM BASIC - used while in interpreter
INT DC - IBM ROM BASIC - used while in interpreter
INT DD - IBM ROM BASIC - used while in interpreter
INT DE - IBM ROM BASIC - used while in interpreter
INT DF - IBM ROM BASIC - used while in interpreter
INT E0 - IBM ROM BASIC - used while in interpreter; multiple purposes
INT E1 - IBM ROM BASIC - used while in interpreter
INT E2 - IBM ROM BASIC - used while in interpreter
INT E3 - IBM ROM BASIC - used while in interpreter
INT E4 - IBM ROM BASIC - used while in interpreter
INT E5 - IBM ROM BASIC - used while in interpreter
INT E6 - IBM ROM BASIC - used while in interpreter
INT E7 - IBM ROM BASIC - used while in interpreter
INT E8 - IBM ROM BASIC - used while in interpreter
INT E9 - IBM ROM BASIC - used while in interpreter
INT EA - IBM ROM BASIC - used while in interpreter
INT EB - IBM ROM BASIC - used while in interpreter
INT EC - IBM ROM BASIC - used while in interpreter
INT ED - IBM ROM BASIC - used while in interpreter
INT EE - IBM ROM BASIC - used while in interpreter
INT EF - BASIC - ORIGINAL INT 09 VECTOR
INT F0 - BASICA.COM, GWBASIC, compiled BASIC - ORIGINAL INT 08 VECTOR
INT F1 - reserved for user interrupt
INT F2 - reserved for user interrupt
INT F3 - reserved for user interrupt
INT F4 - reserved for user interrupt
INT F5 - reserved for user interrupt
INT F6 - reserved for user interrupt
INT F7 - reserved for user interrupt
INT F8 - reserved for user interrupt
INT F9 - reserved for user interrupt
INT FA - reserved for user interrupt
INT FB - reserved for user interrupt
INT FC - reserved for user interrupt
INT FD - reserved for user interrupt
INT FE - AT/XT286/PS50+ - destroyed by return from protected mode
INT FF - AT/XT286/PS50+ - destroyed by return from protected mode


(2)

refer: http://www.cs.cmu.edu/~ralf/files.html

文章標籤

嵐綺緣 發表在 痞客邦 留言(0) 人氣()