summaryrefslogtreecommitdiffstats
path: root/documentation
diff options
context:
space:
mode:
authorRegina König2020-06-25 15:55:11 +0200
committerRegina König2020-06-25 15:55:11 +0200
commit945836811b78f7f1dd169a4b1909ed2565975728 (patch)
tree190a072fd0a7cd94c44c1c8dc9dfcb4c2e6ebade /documentation
parentcreated new application to find out how to access memory information (diff)
downloadmemtest86-945836811b78f7f1dd169a4b1909ed2565975728.tar.gz
memtest86-945836811b78f7f1dd169a4b1909ed2565975728.tar.xz
memtest86-945836811b78f7f1dd169a4b1909ed2565975728.zip
added outcommented example code into GetMemoryMap application and some further documentation files
Diffstat (limited to 'documentation')
-rw-r--r--documentation/UEFI general/get memory map32
-rw-r--r--documentation/UEFI_from_spec/EFI_IMAGE_ENTRY_POINT2
-rw-r--r--documentation/assembler/general46
-rw-r--r--documentation/c_tutorial/praeprozessor_direktiven90
-rw-r--r--documentation/c_tutorial/printf_formats11
-rw-r--r--documentation/c_tutorial/standard_header28
-rw-r--r--documentation/c_tutorial/struct72
-rw-r--r--documentation/developer manual x86-64/0_0 general_information20
-rw-r--r--documentation/developer manual x86-64/2_1.3 Notational Conventions92
9 files changed, 392 insertions, 1 deletions
diff --git a/documentation/UEFI general/get memory map b/documentation/UEFI general/get memory map
new file mode 100644
index 0000000..14c246f
--- /dev/null
+++ b/documentation/UEFI general/get memory map
@@ -0,0 +1,32 @@
+http://hypervsir.blogspot.com/2014/09/approach-to-retrieving-bios-memory-map.html
+
+
+
+BIOS routine: INT 0x15, AX=0xE820
+_______________
+GetMemoryMap() is one of the boot services.
+EFI System Table -> Boot Services Table pointer -> function pointer (physical address) of GetMemoryMap.
+Preboot Software must be in protected mode and be consistent with EFI environment (e.g. both 32bit or 64bit environment,
+if not, processor mode switch must be preceded before calling);
+the Page must be disabled, otherwise SetVirtualAddressMap() must be called for memory "fix-up" e.g. converting physical memory to virtual memory; and there are many other calling conventions e.g. interrupt status, eflags, stack space and alignment, for details, please read the UEFI specification.
+
+After calling this function, the OS bootloader can get the system memory map information for each region with the structure EFI_MEMORY_DESCRIPTOR. In this structure, there are some fields like memory type, memory start address, number of pages (the length), and memory attributes (cacheability attributes, e.g. WT/WB/UC/WC, and protection attributes, e.g. write/execution/read protections).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/documentation/UEFI_from_spec/EFI_IMAGE_ENTRY_POINT b/documentation/UEFI_from_spec/EFI_IMAGE_ENTRY_POINT
index 4f9044e..0716335 100644
--- a/documentation/UEFI_from_spec/EFI_IMAGE_ENTRY_POINT
+++ b/documentation/UEFI_from_spec/EFI_IMAGE_ENTRY_POINT
@@ -10,7 +10,7 @@ PROTOTYPE
EFI_STATUS
(EFIAPI *EFI_IMAGE_ENTRY_POINT) (
IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTabel
+ IN EFI_SYSTEM_TABLE *SystemTable
);
PARAMETERS
diff --git a/documentation/assembler/general b/documentation/assembler/general
new file mode 100644
index 0000000..9619c1b
--- /dev/null
+++ b/documentation/assembler/general
@@ -0,0 +1,46 @@
+REGISTER
+
+eax general purpose, spezielle Bedeutung bei Arithmetikbefehlen
+ebx general purpose
+ecx general purpose, spezielle Bedeutung bei Schleifen
+edx general purpose
+ebp basepointer
+esi source for stringoperations
+edi destination for stringoperations
+esp stackpointer
+
+SEGMENT REGISTERS
+
+cs codesegment
+ds data segment
+ss stacksegment
+es beliebiges Segment
+fs beliebiges Segment
+gs beliebiges Segment
+
+FURTHER REGISTERS
+eip instruction pointer
+ef flags
+
+
+
+eax, ebx, ecx, edx:
+
+ eax
+---------------------------
+ | ax
+ --------------
+ ah | al
+ ------- ------
+
+
+
+
+[SECTION .data]
+gruss: db 'hello, world'
+unglueck: dw 13
+million: dd 1000000
+
+
+[SECTION .text]
+ mov ax,[million]
diff --git a/documentation/c_tutorial/praeprozessor_direktiven b/documentation/c_tutorial/praeprozessor_direktiven
new file mode 100644
index 0000000..ba0c01d
--- /dev/null
+++ b/documentation/c_tutorial/praeprozessor_direktiven
@@ -0,0 +1,90 @@
+#DEFINE
+---------
+
+zb um parametrisierte Makros zu schreiben:
+
+#define MAX(x,y) ( (x)<=(y) ?(y) :(x) )
+
+---beachte, dass x und y auch in der Funktion in Klammern stehen müssen.
+Beim Aufruf braucht man kein Emikolon am Ende, es ist aber auch nicht falsch
+
+#define TAUSCHE(x,y) { \
+ int j; \
+ j=x; x=y; y=j; \
+ }
+
+Bedenke, dass der Präprozessor das Makro ersetzt. Zu lange Ausdrücke blähen den Code unnötig auf. Statt dessen sollte man manchmal lieber eine Funktion benutzen.
+
+Die define-Direktive ist im Übrigen eine rein für die Programmiersprache C gedachte Direktive. Ein reiner C++-Compiler wird define deshalb nicht erkennen und kompilieren. Die meisten Compiler kennen aber sowohl C als auch C++.
+
+Der Geltungsbereich von symbolischen Konstanten bzw. Makros reicht vom Punkt der Deklaration mit #define bis zur Aufhebung mit #undef. Die Aufhebung mittels #undef ist aber optional. Wird #undef nicht verwendet, reicht der Geltungsbereich bis zum Dateiende.
+
+#ifndef __STDIO_H
+ #define __STDIO_H
+#endif
+
+--------------
+#define FERTIG
+
+int main(void) {
+ printf("Programmstart!\n");
+
+#ifdef FERTIG
+ #error "Das Programm ist noch nicht fertig gestellt!!\n" Kompilererror. Das Programm lässt sichn nicht übersetzen
+#endif
+
+
+BEDINGTE KOMPILIERUNG UND VORDEFINIERTE MAKROS
+-----------------------------------------------
+__LINE__ Zeilennummer innerhalb der aktuellen Quellcodedatei
+__FILE__ Name der aktuellen Quellcodedatei
+__DATE__ Datum, wann das Programm compiliert wurde (als Zeichenkette)
+__TIME__ Uhrzeit, wann das Programm compiliert wurde (als Zeichenkette)
+__STDC__ Liefert eine 1, wenn sich der Compiler nach dem Standard-C richtet.
+__STDC_VERSION__ Liefert die Zahl 199409L, wenn sich der Compiler nach dem C95-Standard richtet; die Zahl 199901L, wenn sich der Compiler nach dem C99-Standard richtet. Ansonsten ist dieses Makro nicht definiert.
+
+Vordefiniertes Makro Compiler
+_MSC_VER Microsoft C ab Version 6.0
+_QC Microsoft Quick C ab Version 2.51
+__TURBOC__ Borland Turbo C, Turbo C++ und BC++
+__BORLANDC__ Borland C++
+__ZTC__ Zortech C und C++
+__SC__ Symantec C++
+__WATCOMC__ WATCOM C
+__GNUC__ GNU C
+__EMX__ Emx GNU C
+
+Vordefiniertes Makro Betriebssystem
+__unix__ UNIX-System
+__unix UNIX-System
+__MS_DOS__ MS-DOS
+__WIN32__ MS Windows ab 95
+__OS2__ OS2
+_Windows Zielsystem MS Windows
+__NT__ MS Windows NT
+__linux__ Linux-System
+__FreeBSD__ FreeBSD
+__OpenBSD__ OpenBSD
+_SGI_SOURCE SGI-IRIX mit Extension *.sgi
+_MIPS_ISA SGI-IRIX
+__hpux HP-UX
+
+
+#ifdef symbol
+#ifdef ( symbol )
+
+#elif symbol
+#elif ( symbol )
+
+#else
+
+#endif
+
+Gute Möglichkeit zum Debuggen: - __func__ gibt den Namen der aktuellen Funktion aus
+void eine_funktion(void) {
+ printf("Name der Funktion: %s\n",__func__);
+}
+
+
+
+__________________________________________________________________________________________
diff --git a/documentation/c_tutorial/printf_formats b/documentation/c_tutorial/printf_formats
new file mode 100644
index 0000000..84cab65
--- /dev/null
+++ b/documentation/c_tutorial/printf_formats
@@ -0,0 +1,11 @@
+Zeichen Umwandlung
+%d oder %i int
+%c einzelnes Zeichen
+%e oder %E double im Format [-]d.ddd e±dd bzw. [-]d.ddd E±dd
+%f double im Format [-]ddd.ddd
+%o int als Oktalzahl ausgeben
+%p die Adresse eines Zeigers
+%s Zeichenkette ausgeben
+%u unsigned int
+%x oder %X int als Hexadezimalzahl ausgeben
+%% Prozentzeichen
diff --git a/documentation/c_tutorial/standard_header b/documentation/c_tutorial/standard_header
new file mode 100644
index 0000000..ebc4664
--- /dev/null
+++ b/documentation/c_tutorial/standard_header
@@ -0,0 +1,28 @@
+(C89)
+assert.h Fehlersuche und Debugging
+ctype.h Zeichentest und Konvertierung
+errno.h Fehlercodes
+float.h Limits/Eigenschaften für Gleitpunkttypen
+limits.h Implementierungskonstanten
+locale.h länderspezifische Eigenschaften
+math.h mathematische Funktionen
+setjmp.h unbedingte Sprünge
+signal.h Signale
+stdarg.h variable Parameterübergabe
+stddef.h Standard Datentyp
+stdio.h Standard-I/O
+stdlib.h nützliche Funktionen
+string.h Zeichenkettenoperationen
+time.h Datum und Zeit
+
+(C95 / C99)
+complex.h komplexe Arithmetik (Trigonometrie etc)
+Fenv.h Kontrolle de GLeitpunktzahlen-Umgebung
+inttypes.h für genauere Integertypen
+iso646.h alternative Schreibweisen für logische Operatoren; zur Verwendung von Zeichensätzen im ISO-646-Format
+stdbool.h boolesche Datentypen
+stdint.h ganzzahlige Typen vorgegebener Breite
+tgmath.h typengenerische Mathematik-Funktionen
+wchar.h Umwandlung von Strings in Zahlenwerte für den erweiterten Zeichensatz; String- und Speicherbearbeitung für den erweiterten Zeichensatz; Ein- und Ausgabe für den erweiterten Zeichensatz
+wctype.h Zeichenuntersuchung für den erweiterten Zeichensatz
+
diff --git a/documentation/c_tutorial/struct b/documentation/c_tutorial/struct
new file mode 100644
index 0000000..e08892b
--- /dev/null
+++ b/documentation/c_tutorial/struct
@@ -0,0 +1,72 @@
+struct index {
+ int seite;
+ char titel[30];
+} lib;
+
+entspricht
+struct index lib;
+
+bzw wenn Strukturname unnötig:
+struct {
+ int seite;
+ char titel[30];
+} lib;
+
+
+struct index {
+ int seite;
+ char titel[30];
+} lib1, lib2, lib3;
+
+struct index {
+ int seite;
+ char titel[30];
+} lib = { 308, "Strukturen" };
+
+struct index lib = { 55, "Einführung in C" };
+
+
+/* struct2.c */
+#include <stdio.h>
+#include <stdlib.h>
+#define MAX 30
+
+struct adres {
+ char vname[MAX];
+ char nname[MAX];
+ long PLZ;
+ char ort[MAX];
+ int geburtsjahr;
+} adressen;
+
+/* Funktion zur Ausgabe des Satzes */
+void ausgabe(struct adres x) {
+ printf("\n\nSie gaben ein:\n\n");
+ printf("Vorname.........:%s", x.vname);
+ printf("Nachname........:%s", x.nname);
+ printf("Postleitzahl....:%ld\n",x.PLZ);
+ printf("Ort.............:%s", x.ort);
+ printf("Geburtsjahr.....:%d\n", x.geburtsjahr);
+}
+
+int main(void) {
+ printf("Vorname : ");
+ fgets(adressen.vname, MAX, stdin);
+ printf("Nachname : ");
+ fgets(adressen.nname, MAX, stdin);
+ printf("Postleitzahl : ");
+ do {
+ scanf("%5ld",&adressen.PLZ);
+ } while(getchar()!= '\n');
+ printf("Wohnort : ");
+ fgets(adressen.ort, MAX, stdin);
+ printf("Geburtsjahr : ");
+ do {
+ scanf("%4d",&adressen.geburtsjahr);
+ } while(getchar()!='\n' );
+
+ ausgabe(adressen);
+ return EXIT_SUCCESS;
+}
+
+struct index lib = { 55, "Einführung in C" };
diff --git a/documentation/developer manual x86-64/0_0 general_information b/documentation/developer manual x86-64/0_0 general_information
new file mode 100644
index 0000000..1fb2bca
--- /dev/null
+++ b/documentation/developer manual x86-64/0_0 general_information
@@ -0,0 +1,20 @@
+Intel 64 and IA-32 Architectures Software Developer's Manual
+
+Volume 1: Basic Architecture (Order no 253665)
+Volume 2 (A|B|C|D): Instruction Set Reference (253666|253667|326018|334569)
+ + opcode structure
+ Chapter
+ 1 About this Manual
+ 2 Instruction Format
+ 3 Instruction Set Reference A-L
+ 4 Instruction Set Reference M-U
+ 5 Instruction Set Reference V-Z
+ 6 Safer Mode Extensions Reference
+ Appendix
+ A Opcode Map
+ B Instructions Format and Encodings
+ C Intel C/C++ Compiler Intrinsics and Functional Equivalents
+
+Volume 3 (A|B|C|D): System Programming Guide (253668|253669|326019|332831)
+ operating system support environment. Target OS and BIOS designers.
+ 3B: programming environment for classes of software that host os.
diff --git a/documentation/developer manual x86-64/2_1.3 Notational Conventions b/documentation/developer manual x86-64/2_1.3 Notational Conventions
new file mode 100644
index 0000000..5ace83e
--- /dev/null
+++ b/documentation/developer manual x86-64/2_1.3 Notational Conventions
@@ -0,0 +1,92 @@
+1.3.1 Bits and Bytes
+---------------------
+ Little Endian - bytes of a word are numbered starting from least significant byte
+ Data Structure
+ Highest_addr Byte_Offest
+ 28
+ 24
+ 20
+ 16
+ 12
+ 8
+ 4
+ Lowest_addr 0
+ Byte3 Byte2 Byte1 Byte0
+ Bit_Offset 0 - 7 8 - 15 16 - 23 24 - 31
+
+1.3.2 Reserved Bits
+--------------------
+ Avoid any software dependence upon the state of reserved bits. They should be regarded as unpredictable.
+
+1.3.3 Instruction Operands
+---------------------------
+ When symbolically represented: label: mnemonic argument1, argument2, argument3
+ label: identifier
+ mnemonic: reserved name for a class if instruction opcodes
+ arguments: optional. Either literals or identifiers for data items.
+ identifiers: either reserved names of registers
+ or assigned to data items
+ if two: right - source, left - destination
+ !! Some assembly languages put the source and destination in reverse order !!
+
+1.3.4 Hexadecimal and Binary Numbers
+-------------------------------------
+ Base 16: string of hexadecimal digits followed by the character H (eg F82EH)
+ Base 2: string of 1s and 0s, sometimes followed by B
+
+1.3.5 Segmented Addressing
+---------------------------
+ Processor uses byte addressing -> memory organized and accessed as a sequence of bytes.
+ address space: range of memory that can be addressed.
+
+ Segmented addressing: program may have many independet address spaces (segments).
+ eg keep code (instructions) and stack in separate segments.
+ Specify a byte address within a segment:
+ Segment-register:Byte-address
+
+ examples:
+ DS:FF79H DS: segment pointed by the DS register, FF79H: address
+ CS:EIP CS: code segment, EIP: address of instruction
+
+
+1.3.6 Exceptions
+-----------------
+ example:
+ #PF(fault code) PF: Page-fault exception, reports error code
+ #GP(0) GP: general-protection exception, error code = 0
+
+1.3.7 A new Syntax for CPUID, CR, and MSR Values
+-------------------------------------------------
+-- CPUID: optain feature flags, status and system information
+
+ CPUID.01H:ECX.SSE[bit 25] = 1
+ | | |_ Value (or range) of output
+ | |_ Output register and feature flag
+ | or field name with bit pos
+ |__ Input value for EAX register
+
+-- CR: check control register bits
+
+ CR4.OSFXSR[bit 9] = 1
+ | | |_ Value (or range) of output
+ | |_ Feature flag or field name with bit position(s)
+ |_ Example CR name
+
+-- MSR: read model-specific registers
+
+ IA32_MISC_ENABLE.ENABLEOPCODE[bit 2] = 1
+ | | |_ Value (or range) of output
+ | |_ Feature flag or field name with bit position(s)
+ |_ Example MSR name
+
+
+
+
+
+
+
+
+
+
+
+