1 ; -*- fundamental -*- ---------------------------------------------------
3 ; Copyright 2004 H. Peter Anvin - All Rights Reserved
5 ; This program is free software; you can redistribute it and/or modify
6 ; it under the terms of the GNU General Public License as published by
7 ; the Free Software Foundation, Inc., 53 Temple Place Ste 330,
8 ; Boston MA 02111-1307, USA; either version 2 of the License, or
9 ; (at your option) any later version; incorporated herein by reference.
11 ; -----------------------------------------------------------------------
15 ; initcache: Initialize the cache data structures
18 xor eax,eax ; We don't care about sector 0
20 mov cx,65536/SECTOR_SIZE
26 ; getcachesector: Check for a particular sector (EAX) in the sector cache,
27 ; and if it is already there, return a pointer in GS:SI
28 ; otherwise load it and return said pointer.
36 mov si,CachePtrs ; Sector cache pointers
37 mov cx,65536/SECTOR_SIZE
46 ; Need to load it. Highly inefficient cache replacement
47 ; algorithm: Least Recently Written (LRW)
52 mov bx,[NextCacheSlot]
54 and bx,(1 << (16-SECTOR_SHIFT))-1
55 mov [NextCacheSlot],bx
57 mov [CachePtrs+bx],eax
72 .hit: ; We have it; get the pointer
81 CachePtrs resd 65536/SECTOR_SIZE ; Cached sector pointers
82 NextCacheSlot resw 1 ; Next cache slot to occupy