diff --git a/ZealOS-2021-09-19-01_53_08.iso b/ZealOS-2021-09-21-02_47_38.iso
similarity index 99%
rename from ZealOS-2021-09-19-01_53_08.iso
rename to ZealOS-2021-09-21-02_47_38.iso
index e6876f1f..bed13bec 100755
Binary files a/ZealOS-2021-09-19-01_53_08.iso and b/ZealOS-2021-09-21-02_47_38.iso differ
diff --git a/docs/Doc/MemoryOverview.DD.html b/docs/Doc/MemoryOverview.DD.html
index 494ab91f..76f59d1a 100755
--- a/docs/Doc/MemoryOverview.DD.html
+++ b/docs/Doc/MemoryOverview.DD.html
@@ -43,7 +43,7 @@ body {background-color:#fef1f0;}
kernel memory in other operating systems. See SysCAlloc(), SysMAlloc(), SysMAllocIdent() and SysStrNew().
All of the regular page tables are marked, "cached". When accessing hardware, however, you need uncached page table. The
-lowest 4Gig addresses have an alias to access hardware located toward the top of mapped space, 0x01C4A00000. See
+lowest 4Gig addresses have an alias to access hardware located toward the top of mapped space, 0x01D7800000. See
dev.uncached_alias.
During an extended powered-on session of ZealOS, in theory, memory will become fragmented, requiring a reboot. It has never
@@ -71,13 +71,13 @@ body {background-color:#fef1f0;}
0xF0000000. PCI devices are supported, so Mem32DevAlloc() flaws could become an issue.
0x0080000000-~0x00DFFFFFFF
- 0x0100000000-~0x01C49FFFFF
+ 0x0100000000-~0x01D77FFFFF
Data Heap mem. (The physical memory that exists in this range is data heap.)
- 0x01C4A00000- 0x02C49FFFFF
+ 0x01D7800000- 0x02D77FFFFF
Uncached alias of first 4Gig. (For 32-bit device access.)
- - 0x02C49FFFFF
+ - 0x02D77FFFFF
64-bit devices are alloced with Mem64DevAlloc() counting backward.
diff --git a/docs/Home/Net/Drivers/Run.CC.html b/docs/Home/Net/Drivers/Run.CC.html
index 2d7e33e2..149382a7 100755
--- a/docs/Home/Net/Drivers/Run.CC.html
+++ b/docs/Home/Net/Drivers/Run.CC.html
@@ -34,46 +34,58 @@ body {background-color:#fef1f0;}
#define PCIV_E1000 0x8086
#define PCID_82545EM 0x100F
-U0 NetDriverInclude(U8 *driver)
-{
- U8 *filename = MStrPrint(__DIR__ "/%s", driver);
+
+#define PCIV_VIRTIO 0x1AF4
+//#define PCID_VIRTIO_NET 0x1000
- ExeFile(filename);
- Free(filename);
-}
+U0 NetDriverInclude(U8 *driver)
+{
+ U8 *filename = MStrPrint(__DIR__ "/%s", driver);
-U0 NetDriverInit()
-{
- CPCIDev *net_driver_pci = PCIDevFind(PCIC_NETWORK);
- Bool found = FALSE;
-
- switch (net_driver_pci->vendor_id)
- {
- case PCIV_PCNET:
- switch (net_driver_pci->device_id)
- {
- case PCID_PCNET:
- NetDriverInclude("PCNet");
- found = TRUE;
- break;
- }
- break;
-
- case PCIV_E1000:
- switch (net_driver_pci->device_id)
- {
- case PCID_82545EM:
- NetDriverInclude("E1000");
- found = TRUE;
- break;
- }
- break;
- }
-
- if (!found)
- throw('NET');
-}
-
-NetDriverInit;
+ ExeFile(filename);
+ Free(filename);
+}
+
+U0 NetDriverInit()
+{
+ CPCIDev *net_driver_pci = PCIDevFind(PCIC_NETWORK);
+ Bool found = FALSE;
+
+ switch (net_driver_pci->vendor_id)
+ {
+ case PCIV_PCNET:
+ switch (net_driver_pci->device_id)
+ {
+ case PCID_PCNET:
+ NetDriverInclude("PCNet");
+ found = TRUE;
+ break;
+ }
+ break;
+
+ case PCIV_E1000:
+ switch (net_driver_pci->device_id)
+ {
+ case PCID_82545EM:
+ NetDriverInclude("E1000");
+ found = TRUE;
+ break;
+ }
+ break;
+
+ case PCIV_VIRTIO:
+ NetDriverInclude("VirtIONet");
+ found = TRUE;
+ break;
+ }
+
+ if (!found)
+ {
+ ClassRep(net_driver_pci);
+ throw('NODRIVER');
+ }
+}
+
+NetDriverInit;