From 06a53bf6f455b44d006c27a202a8c44f41d7da62 Mon Sep 17 00:00:00 2001 From: kolaente Date: Sat, 20 Jun 2020 13:00:10 +0200 Subject: [PATCH] Basic paging stuff --- hal/module.go | 1 + hal/paging.go | 30 ++++++++++++++++++++++++++++++ hal/paging_test.go | 14 ++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 hal/paging.go create mode 100644 hal/paging_test.go diff --git a/hal/module.go b/hal/module.go index 8458eab..bc42034 100644 --- a/hal/module.go +++ b/hal/module.go @@ -16,6 +16,7 @@ type Module struct { programStorage Program register []float64 IO map[int64]IO + pageTable *PageTable isStopped bool debugEnabled bool diff --git a/hal/paging.go b/hal/paging.go new file mode 100644 index 0000000..48e4ecc --- /dev/null +++ b/hal/paging.go @@ -0,0 +1,30 @@ +package hal + +type Page struct { + Referenced bool + PageNumber uint16 +} + +type PageTable []*Page + +type Address uint16 + +func (address Address) PageNumber() uint16 { + return uint16(address) >> 10 +} + +func (address Address) Offset() uint16 { + return uint16(address) & 0x03FF +} + +func (table *PageTable) 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 + + // Check if it is already loaded + // Load it if not +} diff --git a/hal/paging_test.go b/hal/paging_test.go new file mode 100644 index 0000000..08cb47c --- /dev/null +++ b/hal/paging_test.go @@ -0,0 +1,14 @@ +package hal + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestAddress(t *testing.T) { + // 000010 | 0000000011 + address := Address(0b0000100000000011) + + assert.Equal(t, uint16(0b10), address.PageNumber()) + assert.Equal(t, uint16(0b11), address.Offset()) +}