|
|
@ -67,7 +67,7 @@ func (mmu *MMU) Load(page *Page) { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
page.RegisterAddress = mmu.findEmptyRegisterAddress() |
|
|
|
mmu.loadPageFromDrive(page) |
|
|
|
|
|
|
|
|
|
|
|
mmu.LoadedPages = append(mmu.LoadedPages, page) |
|
|
|
mmu.LoadedPages = append(mmu.LoadedPages, page) |
|
|
|
} |
|
|
|
} |
|
|
@ -89,8 +89,19 @@ func (mmu *MMU) findEmptyRegisterAddress() *uint16 { |
|
|
|
func (mmu *MMU) movePageToDrive(page *Page) { |
|
|
|
func (mmu *MMU) movePageToDrive(page *Page) { |
|
|
|
|
|
|
|
|
|
|
|
for i := 0; i < PageSize-1; i++ { |
|
|
|
for i := 0; i < PageSize-1; i++ { |
|
|
|
mmu.drive[page.Address][i] = mmu.Registers[i+int(*page.RegisterAddress)*PageSize] |
|
|
|
mmu.drive[page.Address][i] = mmu.Registers[i+page.RegisterOffset()] |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
page.RegisterAddress = nil |
|
|
|
page.RegisterAddress = nil |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (mmu *MMU) loadPageFromDrive(page *Page) { |
|
|
|
|
|
|
|
for i := 0; i < PageSize-1; i++ { |
|
|
|
|
|
|
|
mmu.Registers[i+page.RegisterOffset()] = mmu.drive[page.Address][i] |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
page.RegisterAddress = mmu.findEmptyRegisterAddress() |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (page *Page) RegisterOffset() int { |
|
|
|
|
|
|
|
return int(*page.RegisterAddress) * PageSize |
|
|
|
|
|
|
|
} |
|
|
|