|
|
|
@ -112,7 +112,8 @@ func (mmu *MMU) Load(page *Page) { |
|
|
|
|
|
|
|
|
|
// Everything is referenced, we need to remove one
|
|
|
|
|
if len(mmu.LoadedPages) == 4 { |
|
|
|
|
mmu.LoadedPages = mmu.LoadedPages[:2] |
|
|
|
|
mmu.movePageToDrive(mmu.LoadedPages[3]) |
|
|
|
|
mmu.LoadedPages = mmu.LoadedPages[:3] |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -124,13 +125,18 @@ func (mmu *MMU) Load(page *Page) { |
|
|
|
|
func (mmu *MMU) findEmptyRegisterAddress() *uint16 { |
|
|
|
|
var i uint16 |
|
|
|
|
for i = 0; i < uint16(len(mmu.module.register)/PageSize); i++ { |
|
|
|
|
var isTaken bool |
|
|
|
|
for _, loadedPage := range mmu.LoadedPages { |
|
|
|
|
if *loadedPage.RegisterAddress == i { |
|
|
|
|
isTaken = true |
|
|
|
|
break |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if isTaken { |
|
|
|
|
continue |
|
|
|
|
} |
|
|
|
|
return &i |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return &defaultRegister |
|
|
|
|
} |
|
|
|
|