From f56cfdd5a8da660e1ed99f46c1ac07b565fb2e3e Mon Sep 17 00:00:00 2001 From: kolaente Date: Sat, 20 Jun 2020 14:08:02 +0200 Subject: [PATCH] Make Page Address to pageNumber --- hal/paging.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/hal/paging.go b/hal/paging.go index 631e22d..0743401 100644 --- a/hal/paging.go +++ b/hal/paging.go @@ -7,7 +7,7 @@ var defaultRegister uint16 = 0 type Page struct { Referenced bool RegisterAddress *uint16 - Address Address + PageNumber uint16 } // PageTable uses key as page number @@ -16,12 +16,12 @@ type PageTable map[uint16]*Page type Address uint16 type MMU struct { - PageTable *PageTable + PageTable PageTable LoadedPages []*Page Registers []float64 // 4k registers // pseudo hard drive which holds all pages - drive map[Address][]float64 + drive map[uint16][]float64 } func (address Address) PageNumber() uint16 { @@ -32,14 +32,14 @@ func (address Address) Offset() uint16 { return uint16(address) & 0x03FF } -func (table PageTable) Find(address Address) { +func (mmu *MMU) Find(address Address) { // 10 bit for one register in a page // 6 bit to address the page // 000010 | 0000000011 // -> Page 2, offset 3 // Find the page with that number - page := table[address.PageNumber()] + page := mmu.PageTable[address.PageNumber()] // Page not loaded in "physical" register if page.RegisterAddress == nil { @@ -89,7 +89,7 @@ func (mmu *MMU) findEmptyRegisterAddress() *uint16 { func (mmu *MMU) movePageToDrive(page *Page) { for i := 0; i < PageSize-1; i++ { - mmu.drive[page.Address][i] = mmu.Registers[i+page.RegisterOffset()] + mmu.drive[page.PageNumber][i] = mmu.Registers[i+page.RegisterOffset()] } page.RegisterAddress = nil @@ -97,7 +97,7 @@ func (mmu *MMU) movePageToDrive(page *Page) { func (mmu *MMU) loadPageFromDrive(page *Page) { for i := 0; i < PageSize-1; i++ { - mmu.Registers[i+page.RegisterOffset()] = mmu.drive[page.Address][i] + mmu.Registers[i+page.RegisterOffset()] = mmu.drive[page.PageNumber][i] } page.RegisterAddress = mmu.findEmptyRegisterAddress() }