Dobrý den,
potřebuji napsat program na úrovni virtuálního stroje, jenže jej chci prodat a nerad bych se dělil s výrobcem použitého VM. Poněvadž chci napsat něco na úrovni OS, stejně to nedostanu jinam, než na PC a notebooky. Maximálně se asi dostanu na nějaká embedded, či tak. Počítám s tím, že při rozšíření tohoto systému by se stejně nešlo do takových zařízení. Každopádně pro snazší přijetí bych rád zabral na co největší skupinu. Krom kódu je pak otázkou i nasazení ovladačů. Na kolik uživatelů zaberu při napsání systému v instrukční sadě x86? (Půjde to i bez UEFI?) Popř. jak by to bylo s tím použitím VM? Děkuji.
Fórum › Assembler
Lze psát pro x86 přenositelně?
#2 Kit
Jasně, bavím se o nízkoúrovňovém programování a ty mi strčíš virtuální stroj... :S Respektive tím míním, že oba jazyky přecijen zasahují spíše do vyšších vrstev. Já potřebuji vyloženě nezávislý přístup k ovladačům HW a ideálně bez placeného SW...
#2 Kit
Zde bych se rád dostal na úroveň VM:
bits 16
org 0x7C00
Boot:
mov dl, 0x80 ; 80 - FF => HardDisk
mov ah, 0x42 ; Extended Read Sectors From Drive
mov si, .struct
int 0x13
jnc InitializeVESA
mov si, .msg
mov ah, 0xE
mov cx, 29
.writeChar:
lodsb
int 0x10
loop .writeChar
mov ah, 0
int 0x16 ; Wait for keystroke
mov ax, 0
int 0x19 ; Reboot the system
.struct:
dw 16 ; byte of structure length + empty byte
dw sectorsForLoad ; sectors for load count
dd Kernel ; out address
dq 1 ; start sector
.msg db "Fatal Error! Press any key..."
InitializeVESA:
in al, 0x92
or al, 2
out 0x92, al
mov bx, 0x4118
mov ax, 0x4F01
mov di, Screen
mov cx, bx
int 0x10
mov ax, 0x4F02
int 0x10
cli
lgdt [.GDTR]
mov eax, cr0
or al, 1
mov cr0, eax
; CR0: PG|----RESERVED----|NE|ET|TS|EM|MP|PE
; PE Bit 0. The Protected Environment flag. This flag puts the system into protected mode when set.
; MP Bit 1. The Monitor Coprocessor flag. This flag controls the operation of the "WAIT" instruction.
; EM Bit 2. The Emulate flag. When this flag is set, coprocessor instructions will generate an exception.
; TS Bit 3. The Task Switched flag. This flag is set automatically when the processor switches to a new task.
; ET Bit 4. The Extension Type flag. ET (also called "R") tells us which type of coprocessor is installed. If ET = 0, an 80287 is installed. if ET = 1, an 80387 is installed.
; NE Bit 5. New exceptions. If this flag is clear, FPU exceptions arrive as interrupts. If set, as exceptions.
; PG Bit 31. The Paging flag. When this flag is set, memory paging is enabled. We will talk more about that in a second.
mov ax, 0x8
mov ds, ax
mov es, ax
mov ss, ax
jmp 0x10:Kernel
.GDT dq 0, 0xCF92000000FFFF, 0xCF98000000FFFF
; Selector 0x00 cannot be used | 0x10 will be our code | 0x08 will be our data
.GDTR:
dw 0x1F
dd .GDT
times 502 - ($-$$) db 0
FileTableData:
.Offset dd 0
.Length dd 0
dw 0xAA55
%include "source/kernel/SMA.asm"
%include "source/kernel/features/Command.asm"
%include "source/kernel/features/Drawing.asm"
%include "source/kernel/features/Console.asm"
%include "source/kernel/features/Keyboard.asm"
%include "source/kernel/features/KeyMap.inc"
%include "source/kernel/features/Disk.asm"
%include "source/kernel/features/Int.asm"
%include "source/kernel/features/String.asm"
kernelPadding equ 512 - (($-$$) % 512)
kernelSize equ ($-$$) + kernelPadding
times kernelPadding db 0
sectorsForLoad equ ($-$$-512) / 512
times 40960 - kernelSize db 0
section .bss
Screen:
.Attributes resw 1
.WinAAttributes resb 1
.WinBAttributes resb 1
.WinGranularity resw 1
.WinSize resw 1
.WinASegment resw 1
.WinBSegment resw 1
.WinFuncPointer resd 1
.BytesPerScanLine resw 1
.Width resw 1
.Height resw 1
.XCharSize resb 1
.YCharSize resb 1
.NumberOfPlanes resb 1
.Depth resb 1
.NumberOfBanks resb 1
.MemoryModel resb 1
.BankSize resb 1
.NumberOfImagePages resb 1
.ReservedPage resb 1
.RedMaskSize resb 1
.RedMaskPos resb 1
.GreenMaskSize resb 1
.GreenMaskPos resb 1
.BlueMaskSize resb 1
.BlueMaskPos resb 1
.ReservedMaskSize resb 1
.ReservedMaskPos resb 1
.DirectColorModeInfo resb 1
; VBE 2.0 extensions
.PhysBasePointer resd 1
.MemoryOffset resd 1
.MemorySize resw 1
resb 206 ; Padding from Screen
FileTable resb 2048
GlobalOutput resb 124
FileBuffer:
Zjistit počet nových příspěvků
Přidej příspěvek
Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
Uživatelé prohlížející si toto vlákno
Uživatelé on-line: 0 registrovaných, 283 hostů
Podobná vlákna
Lze pouštět aplikace pro uživatele z administrátorského účtu? — založil Matěj Andrle
Lze vypsat neexistující id? — založil VelkyBubak
Jak to lze udělat — založil Radka
Které programy lze naprogramovat — založil Kuře
Asm x86, IN/OUT operace — založil Jimmy