Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
RiscOS
Sources
Kernel
Commits
0e436c95
Commit
0e436c95
authored
24 years ago
by
Stewart Brodie
Browse files
Options
Download
Email Patches
Plain Diff
Added OS_Memory 12 and EarlierReentrancyInDAShrink
Imported from Kernel 5.36.
parent
2abb437b
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
131 additions
and
2 deletions
+131
-2
s/ChangeDyn
s/ChangeDyn
+4
-0
s/GetAll
s/GetAll
+3
-0
s/MemInfo
s/MemInfo
+124
-2
No files found.
s/ChangeDyn
View file @
0e436c95
...
...
@@ -1987,6 +1987,10 @@ AreaShrink
BNE
%BT25
30
[
EarlierReentrancyInDAShrink
MOV
r4
,
#
0
; indicate no page block (and ptr to semaphore)
STR
r4
,
[
r4
,
#
CDASemaphore
]
; OK to reenter now (we've done the damage)
]
BL
CallPostShrink
RSB
r1
,
r2
,
#
0
LDR
r0
,
[
r11
,
#
DANode_Number
]
; reload dynamic area number
...
...
This diff is collapsed.
Click to expand it.
s/GetAll
View file @
0e436c95
...
...
@@ -208,6 +208,9 @@ ShadowROM SETL {FALSE} ; &FF800000
Interruptible32bitModes
SETL
{TRUE}
;if true, limited 32-bit mode code support (interrupt handler does not assume
; 26-bit foreground), also allows faster, 32-bit APCS version of FPEmulator
GBLL
EarlierReentrancyInDAShrink
; fix for RAMFS and new FileCore (causes reentrant DA shrink/remove)
EarlierReentrancyInDAShrink
SETL
{TRUE}
GBLL
OnlyKernelCanAccessHardwareVectors
OnlyKernelCanAccessHardwareVectors
SETL
{TRUE}
; if true, only the Kernel is permitted to write to the hardware vectors
; while in 26-bit mode. If false, the whole ROM can (including BASIC
...
...
This diff is collapsed.
Click to expand it.
s/MemInfo
View file @
0e436c95
...
...
@@ -60,6 +60,9 @@ MemReturn
B
MemoryReadPhys
B
MemoryAmounts
B
MemoryIOSpace
B
%BT20
; Reason code 10 reserved (for MemoryFreePoolLock).
B
%BT20
; Reason code 11 reserved (for PCImapping).
B
RecommendPage
40
...
...
@@ -413,7 +416,7 @@ MemoryReadPhys ROUT
LDR
r3
,
=
NotPresent
:OR:
NotAvailable
BL
fill_words
; &02000000 to &02
2
00000 is VRAM or not present.
; &02000000 to &02
4
00000 is VRAM or not present.
MOV
r4
,
#
0
LDR
r4
,
[
r4
,
#
VRAMSize
]
; Get amount of VRAM (in bytes).
TEQ
r4
,
#
0
...
...
@@ -514,10 +517,11 @@ fill_words
; In: r0 = flags
; bit meaning
; 0-7 8 (reason code)
; 8-11 1=return amount of DRAM
; 8-11 1=return amount of DRAM
(excludes any soft ROM)
; 2=return amount of VRAM
; 3=return amount of ROM
; 4=return amount of I/O space
; 5=return amount of soft ROM (ROM loaded into hidden DRAM)
; 12-31 reserved (set to 0)
;
; Out: r1 = number of pages of the specified type of memory
...
...
@@ -534,6 +538,19 @@ MemoryAmounts ROUT
BICS
lr
,
r0
,
#
&FF
; Get type of memory required (leave bits 12-31, non-zero => error).
BEQ
%FT30
; Don't understand 0 (so the spec says).
TEQ
lr
,
#
5
:SHL:
8
; Check for soft ROM
BNE
%FT10
LDR
r1
,
=
L1PT
MOV
r2
,
#
ROM
ADD
r1
,
r1
,
r2
,
LSR
#(
20
-
2
)
; L1PT address for ROM
LDR
r2
,
[
r1
]
MOV
r2
,
r2
,
LSR
#
12
TEQ
r2
,
#
PhysROM
:SHR:
12
; see if we have hard or soft ROM
MOVEQ
r1
,
#
0
; no soft ROM
MOVNE
r1
,
#
OSROM_ImageSize
*
1024
; this much soft ROM
B
%FT20
10
TEQ
lr
,
#
4
:SHL:
8
; Check for IO space.
LDREQ
r1
,
=
136
*
1024
*
1024
; Just return 136M (includes VIDC and EASI space).
BEQ
%FT20
...
...
@@ -648,4 +665,109 @@ easi_space_table
]
]
; HAL
;----------------------------------------------------------------------------------------
; MemoryFreePoolLock
;
; See code on Ursula branch
;----------------------------------------------------------------------------------------
;PCImapping - reserved for Acorn use (PCI manager)
;
; See code on Ursula branch
;----------------------------------------------------------------------------------------
;RecommendPage
;
; In: r0 bits 0..7 = 12 (reason code 12)
; r0 bits 8..31 = 0 (reserved flags)
; r1 = size of physically contiguous RAM region required (bytes)
; r2 = log2 of required alignment of base of region (eg. 12 = 4k, 20 = 1M)
;
; Out: r3 = page number of first page of recommended region that could be
; grown as specific pages by dynamic area handler (only guaranteed
; if grow is next page claiming operation)
; - or error if not possible (eg too big, pages unavailable)
;
RecommendPage
ROUT
Push
"r0-r2,r4-r10,lr"
CMP
r2
,#
30
BHI
RP_failed
;refuse to look for alignments above 1G
;
ADD
r1
,
r1
,#
&1000
SUB
r1
,
r1
,#
1
MOV
r1
,
r1
,
LSR
#
12
MOVS
r1
,
r1
,
LSL
#
12
;size rounded up to whole no. of pages
;
CMP
r2
,#
12
MOVLO
r2
,#
12
;log2 alignment must be at least 12 (4k pages)
MOV
r0
,#
1
MOV
r4
,
r0
,
LSL
r2
;required alignment-1
;
MOV
r0
,#
PhysRamTable
MOV
r3
,#
0
;page number, starts at 0
LDR
r5
,=
CamEntriesPointer
LDR
r5
,[
r5
]
ADD
r5
,
r5
,#
4
; [r5,<page no.>,LSL #3] addresses flags word in CAM
LDMIA
r0
!,{
r7
,
r8
}
;address,size of video chunk (skip this one)
;
RP_nextchunk
ADD
r3
,
r3
,
r8
,
LSR
#
12
;page no. of first page of next chunk
LDMIA
r0
!,{
r7
,
r8
}
;address,size of next physical chunk
CMP
r8
,#
0
BEQ
RP_failed
;
ADD
r6
,
r7
,
r4
SUB
r6
,
r6
,#
1
;round up
MOV
r6
,
r6
,
LSR
r2
MOV
r6
,
r6
,
LSL
r2
SUB
r6
,
r6
,
r7
;adjustment to first address of acceptable alignment
CMP
r6
,
r8
BHS
RP_nextchunk
;negligible chunk
ADD
r7
,
r3
,
r6
,
LSR
#
12
;first page number of acceptable alignment
SUB
r9
,
r8
,
r6
;remaining size of chunk
;
;find first available page
RP_nextpage
CMP
r9
,
r1
BLO
RP_nextchunk
LDR
r6
,[
r5
,
r7
,
LSL
#
3
]
;page flags from CAM
;must not be marked Unavailable or Required
TST
r6
,#
PageFlags_Unavailable
:OR:
PageFlags_Required
BEQ
RP_checkotherpages
RP_nextpagecontinue
CMP
r9
,
r4
BLS
RP_nextchunk
ADD
r7
,
r7
,
r4
,
LSR
#
12
;next page of suitable alignment
SUB
r9
,
r9
,
r4
B
RP_nextpage
;
RP_checkotherpages
ADD
r10
,
r7
,
r1
,
LSR
#
12
SUB
r10
,
r10
,#
1
;last page required
RP_checkotherpagesloop
LDR
r6
,[
r5
,
r10
,
LSL
#
3
]
;page flags from CAM
TST
r6
,#
PageFlags_Unavailable
:OR:
PageFlags_Required
BNE
RP_nextpagecontinue
SUB
r10
,
r10
,#
1
CMP
r10
,
r7
BHI
RP_checkotherpagesloop
;
;success!
;
MOV
r3
,
r7
Pull
"r0-r2,r4-r10,pc"
RP_failed
MOV
r3
,#
0
ADR
r0
,
RP_error
SETV
STR
r0
,[
sp
]
Pull
"r0-r2,r4-r10,pc"
RP_error
DCD
0
DCB
"No chunk available (OS_Memory 12)"
,
0
ALIGN
END
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment