Commit b85d7d81 authored by Stewart Brodie's avatar Stewart Brodie
Browse files

Added OS_ReadSysInfo 6, 7 and 8 from Ursula branch.

  Ensured that M_Phoebe builds set UtilityModule version to 4.00
Detail:
  The softload utility relies on the existence of the extra reason codes
    to OS_ReadSysInfo introduced in Ursula.  The main kernel now supports
    these too (they are simply interfaces to read kernel capabilities and
    configuration - eg. addresses and sizes of UND and SVC mode stacks)
  Avoid OS_ReadSysInfo 9 - ROL have used it for reading the ROM personality
    information (and it's not in our kernel)
  Added some of the new macros into Copro15ops required by the ABT dump
    area code (returned by OS_ReadSysInfo 7) and added the code into ARM600
    to store abort information there.
Admin:
  Required by softload utility for Ursula builds.
  Tested on Risc PC.

Version 5.15. Tagged as 'Kernel-5_15'
parent d9cfd887
; > Versions.Vicky
GET VersionASM
GET VersionASM
GBLA Version
GBLS VString
GBLS Date
GBLA OSVersionID ;for OS_Byte 129
[ STB
Version SETA Module_Version
VString SETS Module_MajorVersion
Date SETS Module_Date ; version for STB/NC OS
Version SETA 452
VString SETS "4.52"
Date SETS "07 Nov 1996" ; version for STB/NC OS
OSVersionID SETA &A6
|
[ M_Phoebe
Version SETA 400
VString SETS "4.00"
Date SETS "02 Feb 2000" ; version for RISC OS on desktop computers
OSVersionID SETA &A8 ; was &A7 for 3.70,3.71
|
Version SETA 371
VString SETS "3.71"
Date SETS "19 Feb 1997" ; version for RISC OS on desktop computers
]
]
END
......@@ -6,9 +6,9 @@
GBLS Module_MinorVersion
GBLS Module_Date
GBLS Module_FullVersion
Module_MajorVersion SETS "5.14"
Module_Version SETA 514
Module_MajorVersion SETS "5.15"
Module_Version SETA 515
Module_MinorVersion SETS ""
Module_Date SETS "27 Jan 2000"
Module_FullVersion SETS "5.14"
Module_Date SETS "02 Feb 2000"
Module_FullVersion SETS "5.15"
END
/* (5.14)
/* (5.15)
*
* This file is automatically maintained by srccommit, do not edit manually.
*
*/
#define Module_MajorVersion_CMHG 5.14
#define Module_MajorVersion_CMHG 5.15
#define Module_MinorVersion_CMHG
#define Module_Date_CMHG 27 Jan 2000
#define Module_Date_CMHG 02 Feb 2000
#define Module_MajorVersion "5.14"
#define Module_Version 514
#define Module_MajorVersion "5.15"
#define Module_Version 515
#define Module_MinorVersion ""
#define Module_Date "27 Jan 2000"
#define Module_Date "02 Feb 2000"
#define Module_FullVersion "5.14"
#define Module_FullVersion "5.15"
......@@ -3009,6 +3009,11 @@ PAbPreVeneer ROUT
; for the time being just merge lr and psr
mrs AL, r1, SPSR_all ; r1 = saved PSR
LDR r2, =Abort32_dumparea
STMIA r2, {r1,lr_abort} ;dump 32-bit PSR, fault address (PC)
STR lr_abort,[r2,#2*4] ;dump 32-bit PC
AND r2, r1, #&F0000003 ; get saved NZCV and 26 bit modes
ORR lr_abort, lr_abort, r2
AND r2, r1, #I32_bit + F32_bit ; extract I and F from new place
......@@ -3050,6 +3055,10 @@ DAbPreVeneer ROUT
mrs AL, r1, CPSR_all ; r1 = CPSR
ADD r2, r13_abort, #8*4 ; r2 -> saved register bank for r8 onwards
LDR r4, =Abort32_dumparea+3*4 ;use temp area (avoid overwriting main area for expected aborts)
ARM_read_FAR r3
STMIA r4, {r0,r3,lr_abort} ; dump 32-bit PSR, fault address, 32-bit PC
MOV r4, lr_abort ; move address of aborting instruction into an unbanked register
BIC r1, r1, #&1F ; knock out current mode bits
ANDS r3, r0, #&1F ; extract old mode bits (and test for USR26_mode (=0))
......@@ -3469,6 +3478,16 @@ DAbPreVeneer ROUT
90
; copy temp area to real area (we believe this is an unexpected data abort now)
LDR r0, =Abort32_dumparea
LDR r1, [r0,#3*4]
STR r1, [r0]
LDR r1, [r0,#4*4]
STR r1, [r0,#4]
LDR r1, [r0,#5*4]
STR r1, [r0,#2*4]
; for the time being just merge lr and psr
LDR r0, [sp, #8*4] ; r0 = original SPSR (can't have been modified)
......
......@@ -20,6 +20,8 @@
; 24-01-96 MJS Created
; 07-10-96 MJS Updated for proper ARM 810 support (not needed for RO 3.70)
; 10-03-97 MJS A few additions for chocolate flavour screen handling (possible
; Domain and FSR register use) in Phoebe OS
ARM_config_cp CP 15 ;coprocessor number for configuration control
......@@ -27,6 +29,8 @@ ARM_ID_reg CN 0 ;processor ID
ARM_control_reg CN 1 ;control
ARM_tbase_reg CN 2 ;translation base (MMU)
ARM_domain_reg CN 3 ;domain access control (MMU)
ARM_FSR_reg CN 5 ;Fault status reg (MMU, read only on ARM 6/7)
ARM_FAR_reg CN 6 ;Fault address reg (MMU, read only on ARM 6/7)
ARM67_TLBflush_reg CN 5 ;TLB flush, ARMs 6 or 7
ARM67_TLBpurge_reg CN 6 ;TLB purge entry, ARMs 6 or 7
......@@ -89,6 +93,18 @@ C15 CN 15
MCR$cond ARM_config_cp,0,$reg,ARM_control_reg,C0,0
MEND
;read MMU fault status
MACRO
ARM_read_FSR $reg,$cond
MRC$cond ARM_config_cp,0,$reg,ARM_FSR_reg,C0,0
MEND
;read MMU fault address
MACRO
ARM_read_FAR $reg,$cond
MRC$cond ARM_config_cp,0,$reg,ARM_FAR_reg,C0,0
MEND
;read ID register to register $id
;bits 15:12 of returned ID will be 0,7,8,10 for ARM 6,7,8,A
MACRO
......
......@@ -1057,8 +1057,14 @@ ReadSysInfo_Code ROUT
CMP r0, #5
BCC %FT40 ; R0 = 4
BEQ %FT50 ; R0 = 5
CMP r0, #7
BCC %FT60 ; R0 = 6
BEQ %FT70 ; R0 = 7
CMP r0, #9
BCC %FT80 ; R0 = 8
; R0 = 9 not allocated yet (BEQ %FT90)
; R0 > 5, so illegal value
; R0 > 8, so illegal value
ADR r0, ErrorBlock_BadReadSysInfo
[ International
......@@ -1410,6 +1416,141 @@ NVRAM_TAG_MACAddressChecksum
LDR r0, [r0, #RawMachineID+0]
ExitSWIHandler
; OS_ReadSysInfo 6 - read kernel values (Acorn use only; eg. SoftLoad, ROMPatch)
;
; On entry: r0 = 6 (reason code)
; r1 -> input block, 1 word per entry, giving number of value required, terminated by -1
; OR: r1 = 0 if just 1 value is required, and this is to beturned in r2
; r2 -> output block, 1 word per entry, will be filled in on output
; OR: r2 = number of single value required, if r1 = 0
;
; On exit:
; if r1 entry != 0:
; r0,r1,r2 preserved
; output block filled in, filled in value(s) set to 0 if unrecognised/no longer meaningful value(s)
; if r1 entry = 0:
; r0,r1 preserved
; r2 = single value required, or set to 0 if if unrecognised/no longer meaningful value
;
; valid value numbers available - see table below
;
60
Push "r0-r3"
ADR r3,osri6_table
CMP r1,#0
BEQ %FT64
62
LDR r0,[r1],#4
CMP r0,#-1
BEQ %FT66
CMP r0,#osri6_maxvalue
MOVHI r0,#0
LDRLS r0,[r3,r0,LSL #2]
STR r0,[r2],#4
B %BT62
64
CMP r2,#osri6_maxvalue
MOVHI r2,#0
LDRLS r2,[r3,r2,LSL #2]
STR r2,[sp,#2*4]
66
Pull "r0-r3"
ExitSWIHandler
osri6_table
DCD CamEntriesPointer ;0
DCD MaxCamEntry ;1
DCD PageFlags_Unavailable ;2
DCD PhysRamTable ;3
DCD ARMA_Cleaner_flipflop ;4
DCD TickNodeChain ;5
DCD ROMModuleChain ;6
DCD DAList ;7
DCD AppSpaceDANode ;8
DCD Module_List ;9
DCD ModuleSHT_Entries ;10
DCD ModuleSWI_HashTab ;11
DCD IOSystemType ;12
DCD L1PT ;13
DCD L2PT ;14
DCD UNDSTK ;15
DCD SVCSTK ;16
DCD SysHeapStart ;17
osri6_maxvalue * 17
; OS_ReadSysInfo 7 - read 32-bit Abort information for last unexpected abort
; (prefetch or data)
;
; On entry: r0 = 6 (reason code)
;
; On exit: r1 = 32-bit PC for last abort
; r2 = 32-bit PSR for last abort
; r3 = fault address for last abort (same as PC for prefetch abort)
;
70
Push "r0"
LDR r0, =Abort32_dumparea
LDR r1, [r0,#2*4]
LDR r2, [r0]
LDR r3, [r0,#4]
Pull "r0"
ExitSWIHandler
; OS_ReadSysInfo 8 - Returns summary information on host platform.
;
; On entry:
; r0 = 8 (reason code 8)
;
; On exit:
; r0 = platform class
; currently defined classes are:
; 0 = unspecified platform (r1,r2 will be 0)
; 1 = Medusa (currently returned for Risc PC only)
; 2 = Morris (currently returned for A7000 only)
; 3 = Morris+ (currently returned for A7000+ only)
; 4 = Phoebe (currently returned for Risc PC 2 only)
; all other values currently reserved
; r1 = 32 additional platform specifier flags (if defined)
; bits 0..31 = value of flags 0..31 if defined, 0 if undefined
; r2 = defined status of the 32 flags in r1
; bits 0..31 = status of flags 0..31
; 0 = flag is undefined in this OS version
; 1 = flag is defined in this OS version
;
; The current flag definitions for r1 (1=supported, 0=unsupported) are :
;
; 0 = Podule expansion card(s)
; 1 = PCI expansion card(s)
; 2 = additional processor(s)
; 3 = auto power off
; 4..31 reserved (currently undefined)
;
80
Push "r3-r5"
ADR r3, %86
MOV r4, #IOMD_Base
LDRB r4, [r4, #IOMD_ID0]
82
LDR r5, [r3], #4
TEQ r5, #&80000000 ;terminator
TEQNE r5, r4
LDMEQIA r3, {r0-r2}
BEQ %FT84
ADD r3, r3, #3*4
B %BT82
84
Pull "r3-r5"
ExitSWIHandler
86
DCD IOMD_Original :AND: &FF, 1, &00000001, &0000000F
DCD IOMD_7500 :AND: &FF, 2, &00000001, &0000000F
DCD IOMD_7500FE :AND: &FF, 3, &00000001, &0000000F
DCD IOMD_IOMD2 :AND: &FF, 4, &0000000F, &0000000F
DCD &80000000, 0, 0, 0 ;terminator
LTORG
END
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment