Lze psát pro x86 přenositelně? – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Lze psát pro x86 přenositelně? – Assembler – Fórum – Programujte.comLze psát pro x86 přenositelně? – Assembler – Fórum – Programujte.com

 

Matěj Andrle+1
Grafoman
12. 6. 2016   #1
-
0
-

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.

Nahlásit jako SPAM
IP: 46.135.96.–
Kit+15
Guru
13. 6. 2016   #2
-
0
-

#1 Matěj Andrle
Zkus Forth nebo Lisp.

Nahlásit jako SPAM
IP: 37.48.3.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Matěj Andrle+1
Grafoman
13. 6. 2016   #3
-
0
-

#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...

Nahlásit jako SPAM
IP: 82.208.37.–
Matěj Andrle+1
Grafoman
13. 6. 2016   #4
-
0
-

#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:
Nahlásit jako SPAM
IP: 82.208.37.–
Kit+15
Guru
13. 6. 2016   #5
-
0
-

#3 Matěj Andrle
Jsou to jen jazyky, které se na to mohou hodit. Implementaci si klidně můžeš napsat sám.

Nahlásit jako SPAM
IP: 37.48.3.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Matěj Andrle+1
Grafoman
13. 6. 2016   #6
-
0
-

#5 Kit
Nebudu potřebovat projímadlo...

Nahlásit jako SPAM
IP: 82.208.37.–
Kit+15
Guru
13. 6. 2016   #7
-
0
-

#6 Matěj Andrle
Raději si ho vem, aby se ti to nevrazilo do lebky.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:795b:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
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žit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 20 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý