Add drive

master
kolaente 4 years ago
parent c970c99ade
commit e72c6dfad5
Signed by: kolaente
GPG Key ID: F40E70337AB24C9B
  1. 16
      hal/paging.go

@ -7,6 +7,7 @@ var defaultRegister uint16 = 0
type Page struct {
Referenced bool
RegisterAddress *uint16
Address Address
}
// PageTable uses key as page number
@ -18,6 +19,9 @@ type MMU struct {
PageTable *PageTable
LoadedPages []*Page
Registers []float64 // 4k registers
// pseudo hard drive which holds all pages
drive map[Address][]float64
}
func (address Address) PageNumber() uint16 {
@ -45,13 +49,14 @@ func (table PageTable) Find(address Address) {
}
}
//
func (mmu *MMU) Load(page *Page) {
if len(mmu.LoadedPages) >= 4 {
for index, loadedPage := range mmu.LoadedPages {
if loadedPage.Referenced {
continue
}
loadedPage.RegisterAddress = nil
mmu.movePageToDrive(loadedPage)
mmu.LoadedPages = append(mmu.LoadedPages[:index], mmu.LoadedPages[index+1:]...)
break
}
@ -80,3 +85,12 @@ func (mmu *MMU) findEmptyRegisterAddress() *uint16 {
return &defaultRegister
}
func (mmu *MMU) movePageToDrive(page *Page) {
for i := 0; i < PageSize-1; i++ {
mmu.drive[page.Address][i] = mmu.Registers[i+int(*page.RegisterAddress)*PageSize]
}
page.RegisterAddress = nil
}

Loading…
Cancel
Save