Commit d91e9420 authored by Ben Avison's avatar Ben Avison
Browse files

Miscellaneous stuff.

Detail:
  * Merged in the change to RISC OS 4.02 kernel that moved the GSTrans
    workspace out of scratch space.
  * Fixed a few bugs in callback postponement, and interrupt holes in
    callback dispatch. See Docs.CallbackChange for full info.
  * Fixed SystemSizeCMOS to SysHeapCMOS - wouldn't build as was.
  * Added an export of a C version of Hdr:HALDevice, based on the Hdr2H
    translation but with an additional struct definition. Required by
    SoundControl 1.00.
  * Added some additional location and ID allocations to Hdr:HALDevice.
    Required by today's HAL and SoundControl.
Admin:
  Partially tested.

Version 5.35, 4.79.2.56. Tagged as 'Kernel-5_35-4_79_2_56'
parent 2c1c85d9
No related merge requests found
......@@ -2,3 +2,4 @@ hdr/** gitlab-language=armasm linguist-language=armasm linguist-detectable=true
s/** gitlab-language=armasm linguist-language=armasm linguist-detectable=true
**/s/** gitlab-language=armasm linguist-language=armasm linguist-detectable=true
*,ffb gitlab-language=bbcbasic linguist-language=bbcbasic linguist-detectable=true
h/** gitlab-language=c linguist-language=c linguist-detectable=true
Callbacks can be triggered when a SWI returns to USR mode with interrupts
enabled. (Non-transient callbacks have an additional constraint that the
SVC stack must be empty.) However, if an X SWI returns an error (and R0 is
in RAM) then there is a danger that a callback will cause the data pointed
to by R0 to be overwriten, so at some time before RISC OS 2.00, the concept
of callback postponement was introduced: if an X SWI returns to USR mode
with interrupts enabled, V set and R0 pointing to RAM, then no callbacks are
triggered, but instead the callback postpone flag is set, which also stops
callbacks being handled after interrupts. There is also some code to attempt
to ensure that callbacks are only postponed until the next SWI.
However, the execution of this is flawed: the callback postpone flag is
not cleared until the next time a *non-transient* callback is dispatched.
The only reason that this hasn't been seen more often is that there is
*another* bug, namely that the postpone flag if only set if there were
callbacks pending (either transient or non-transient) during SWI exit.
This means that between an X SWI returning V set to USR mode with interrupts
enabled and callbacks pending, and the first time after OS_SetCallBack is used
that any X or non-X SWI returns V set or clear to USR mode with interrupts
enabled and the SVC stack empty, the following holds:
* transient callbacks are handled when any SWI exits to USR mode with
interrupts enabled irrespective of the V flag, except after the first SWI
(the one that set the postpone flag) - plus of course, during OS_ReadLine etc;
* transient callbacks are not handled after any interrupt.
This is obviously nonsensical, so we are changing the behaviour to what we
believe is closer to the original intent:
SWI XThing -> error set Postpone
..
.. (no callbacks on interrupts)
..
SWI (X)Anything if no error, or non-X error,
clear Postpone,
callbacks (if any) happen
if X error, and callbacks pending
then clear Postpone, callbacks happen
if X error, and no callbacks pending,
leave Postpone set
BA/KB 21 Feb 2003
......@@ -96,9 +96,10 @@ of the computer. Again, it is grouped by bytes.
Bits 31-28: Bus type
0 => processor (0 = core, 1 = coprocessor)
1 => main system bus (0 = AHB, 1 = ASB)
1 => main system bus (0 = AHB, 1 = ASB, 2 = PXBus)
2 => peripheral bus (0 = APB)
3 => expansion bus (0 = Acorn Expansion Card, 1 = ISA, 2 = PCI)
4 => serial bus (0 = AC-Link)
Bits 27-24: Bus sub-type (see above)
Bits 23-16: Bus number
Bits 15-8: Card number (PCI, expansion card etc) / chip select number
......
......@@ -66,7 +66,8 @@ EXPORTS = ${EXP_HDR}.EnvNumbers \
${EXP_HDR}.HALDevice \
${EXP_HDR}.OSEntries \
${C_EXP_HDR}.RISCOS \
${C_EXP_HDR}.HALEntries
${C_EXP_HDR}.HALEntries \
${C_EXP_HDR}.HALDevice
#
# Generic rules:
......@@ -173,4 +174,14 @@ ${C_EXP_HDR}.HALEntries: hdr.HALEntries
${MKDIR} ${C_EXP_HDR}
perl Build:Hdr2H hdr.HALEntries $@
${C_EXP_HDR}.HALDevice: o.Global.h.HALDevice h.HALDevice
${CP} h.HALDevice $@ ${CPFLAGS}
print o.Global.h.HALDevice { >> $@ }
o.Global.h.HALDevice: hdr.HALDevice
${MKDIR} o.Global.h
dir o
perl Build:Hdr2H ^.hdr.HALDevice Global.h.HALDevice
back
# Dynamic dependencies:
......@@ -16,7 +16,7 @@ Date SETS Module_Date ; version for STB/NC OS
|
Version SETA 502
VString SETS "5.02"
Date SETS "24 Jan 2003" ; version for RISC OS on desktop computers
Date SETS "21 Feb 2003" ; version for RISC OS on desktop computers
]
END
......@@ -13,11 +13,11 @@
GBLS Module_ComponentPath
Module_MajorVersion SETS "5.35"
Module_Version SETA 535
Module_MinorVersion SETS "4.79.2.55"
Module_Date SETS "27 Jan 2003"
Module_ApplicationDate SETS "27-Jan-03"
Module_MinorVersion SETS "4.79.2.56"
Module_Date SETS "21 Feb 2003"
Module_ApplicationDate SETS "21-Feb-03"
Module_ComponentName SETS "Kernel"
Module_ComponentPath SETS "RiscOS/Sources/Kernel"
Module_FullVersion SETS "5.35 (4.79.2.55)"
Module_HelpVersion SETS "5.35 (27 Jan 2003) 4.79.2.55"
Module_FullVersion SETS "5.35 (4.79.2.56)"
Module_HelpVersion SETS "5.35 (21 Feb 2003) 4.79.2.56"
END
......@@ -5,19 +5,19 @@
*
*/
#define Module_MajorVersion_CMHG 5.35
#define Module_MinorVersion_CMHG 4.79.2.55
#define Module_Date_CMHG 27 Jan 2003
#define Module_MinorVersion_CMHG 4.79.2.56
#define Module_Date_CMHG 21 Feb 2003
#define Module_MajorVersion "5.35"
#define Module_Version 535
#define Module_MinorVersion "4.79.2.55"
#define Module_Date "27 Jan 2003"
#define Module_MinorVersion "4.79.2.56"
#define Module_Date "21 Feb 2003"
#define Module_ApplicationDate "27-Jan-03"
#define Module_ApplicationDate "21-Feb-03"
#define Module_ComponentName "Kernel"
#define Module_ComponentPath "RiscOS/Sources/Kernel"
#define Module_FullVersion "5.35 (4.79.2.55)"
#define Module_HelpVersion "5.35 (27 Jan 2003) 4.79.2.55"
#define Module_FullVersion "5.35 (4.79.2.56)"
#define Module_HelpVersion "5.35 (21 Feb 2003) 4.79.2.56"
#define Module_LibraryVersionInfo "5:35"
/* Copyright 2003 Tematic Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef GLOBAL_HALDEVICE_H
#include <stdbool.h>
#include <stdint.h>
struct device
{
uint16_t type;
uint16_t id;
uint32_t location;
uint32_t version;
const char *description;
void *address;
uint32_t reserved1[3];
bool (*Activate)(struct device *);
void (*Deactivate)(struct device *);
void (*Reset)(struct device *);
int32_t (*Sleep)(struct device *, int32_t state);
int32_t devicenumber;
bool (*TestIRQ)(struct device *);
uint32_t reserved2[2];
};
#endif
/* In the exported copy of this file, the Hdr2H translation of hdr.HALDevice will follow. */
......@@ -30,14 +30,14 @@ HALDevice_Location # 4
HALDevice_Version # 4
HALDevice_Description # 4
HALDevice_Address # 4
# 12
HALDevice_Reserved1 # 12
HALDevice_Activate # 4
HALDevice_Deactivate # 4
HALDevice_Reset # 4
HALDevice_Sleep # 4
HALDevice_Device # 4
HALDevice_TestIRQ # 4
# 8
HALDevice_Reserved2 # 8
HALDeviceSize * :INDEX: @
......@@ -47,7 +47,8 @@ HALDeviceVideo_VDU # 1 ; VDU display
HALDeviceType_Audio * 2 :SHL: 8
^ 1
HALDeviceAudio_PCM16 # 1 ; 16-bit PCM sound output
HALDeviceAudio_AudC # 1 ; 16-bit sound input/output controller
HALDeviceAudio_Mixer # 1 ; Sound I/O mixer
HALDeviceType_SysPeri * 3 :SHL: 8
^ 1
......@@ -62,34 +63,46 @@ HALDeviceComms_UART # 1 ; UART
HALDeviceBus_Pro * 0 :SHL: 28
^ 0
HALDeviceProBus_Core # 1 :SHL: 24
HALDeviceProBus_CoPro # 1 :SHL: 24
HALDeviceProBus_Core * 0 :SHL: 24
HALDeviceProBus_CoPro * 1 :SHL: 24
HALDeviceBus_Sys * 1 :SHL: 28
^ 0
HALDeviceSysBus_AHB # 1 :SHL: 24
HALDeviceSysBus_ASB # 1 :SHL: 24
HALDeviceSysBus_AHB * 0 :SHL: 24
HALDeviceSysBus_ASB * 1 :SHL: 24
HALDeviceSysBus_PXBus * 2 :SHL: 24
HALDeviceBus_Peri * 2 :SHL: 28
^ 0
HALDevicePeriBus_APB # 1 :SHL: 24
HALDevicePeriBus_APB * 0 :SHL: 24
HALDeviceBus_Exp * 3 :SHL: 28
^ 0
HALDeviceExpBus_Acorn # 1 :SHL: 24
HALDeviceExpBus_ISA # 1 :SHL: 24
HALDeviceExpBus_PCI # 1 :SHL: 24
HALDeviceExpBus_Acorn * 0 :SHL: 24
HALDeviceExpBus_ISA * 1 :SHL: 24
HALDeviceExpBus_PCI * 2 :SHL: 24
HALDeviceBus_Ser * 4 :SHL: 28
HALDeviceSerBus_ACLink * 0 :SHL: 24
^ 0
HALDeviceID_AudC_M5451 # 1
^ 0
HALDeviceID_Mixer_STAC9750 # 1
^ 0
HALDeviceID_DMAC_M1535Legacy # 1
HALDeviceID_DMAC_M1535IDE # 1
HALDeviceID_DMAC_M1535 # 1
HALDeviceID_DMAC_M5229 # 1
^ 0
HALDeviceID_DMAB_M1535Legacy # 1
HALDeviceID_DMAB_M1535 # 1
^ 0
HALDeviceID_DMAL_M1535IDE # 1
HALDeviceID_DMAL_M5229 # 1
]
......
......@@ -1659,10 +1659,15 @@ Export_ScratchSpace # ScratchSpaceSize
; Tidying the RMA uses ScratchSpace while all modules are dead
[ GSWorkspaceInKernelBuffers
; the GSTrans workspace has now moved to the kernel buffers area
; GSInit and GSRead may now safely be called from USR mode wahey...
|
; GSTRANS workspace: GSINIT puts state into the workspacem and GSREAD uses it.
; DO NOT do any operations between GSINIT/GSREAD SWIS.
; SWIs called: OSWord in time var code
; BinaryToDecimal, ReadUnsigned
]
; LVR: ADFS uses scratch space to format floppies on 1772 based machines
......@@ -1670,13 +1675,20 @@ Export_ScratchSpace # ScratchSpaceSize
; ColourTrans_SelecTable/RetrunColourNumber and also whilst generating
; stipple pattterns.
[ GSWorkspaceInKernelBuffers
; GSVarWSpace is now in kernel buffers
|
GSVarWSpace * ScratchSpace
]
^ 0
GSNameBuff # &100
GS_Stack # &200
GS_StackPtr_Lim * &200 / 4 ; Number of words in stack.
GS_StackPtr # 4
[ GSWorkspaceInKernelBuffers
GSVarWSpace_Size # 0
]
^ @ + ScratchSpace
......@@ -1904,6 +1916,12 @@ RedirectBuff # OscliBuffSize
OscliCircBuffStart # OscliBuffSize * OscliNoBuffs
OscliCircBuffLimit # 0
[ GSWorkspaceInKernelBuffers
GSVarWSpace # GSVarWSpace_Size
SysVarWorkSpace # 40 ; used by the sys$* variables for reading the current time into
]
KbuffsEnd # 0
KbuffsSize * KbuffsEnd - KbuffsBaseAddress ;size of Kernel buffers area
......
......@@ -186,6 +186,10 @@ 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 GSWorkspaceInKernelBuffers ; Move gstrans workspace into the kernel buffers area to fix redirection
GSWorkspaceInKernelBuffers SETL {TRUE} ; and everything else that suffers from the dodgy use of scratch space.
GBLL EarlierReentrancyInDAShrink
EarlierReentrancyInDAShrink SETL {TRUE} ; fix for RAMFS and new FileCore (causes reentrant DA shrink/remove)
......@@ -333,6 +337,9 @@ LCDSupport SETL {TRUE} :LAND: :LNOT: STB
GBLL FixR9CorruptionInExtensionSWI ; whether R9 corruption by ExtensionSWI handler is fixed
FixR9CorruptionInExtensionSWI SETL No26bitCode ; currently FALSE as CC's !SpellMod (possibly others) rely on it being broken
GBLL FixCallBacks ; see Docs.CallbackChange
FixCallBacks SETL {TRUE} ; also addresses some atomicity problems
GBLL InterlacedPointer
InterlacedPointer SETL {TRUE} :LAND: STB ; enable code to do proper interlaced pointer
......
......@@ -240,8 +240,12 @@ SetTimeVar ROUT
CMP R2, #&FE
BHI TimeVarTooLong
Push "R0, lr"
[ GSWorkspaceInKernelBuffers
LDR R12, =SysVarWorkSpace
|
GSVarGetWSpace
ADD R12, R12, #GSNameBuff
]
MOV R11, #8
STRB R11, [R12], #1
MOV R10, #0
......@@ -299,8 +303,12 @@ SetDate ROUT
CMP R2, #&F8
BHI TimeVarTooLong
Push "R0, lr"
[ GSWorkspaceInKernelBuffers
LDR R12, =SysVarWorkSpace
|
GSVarGetWSpace
ADD R12, R12, #GSNameBuff
]
MOV R11, #15
STRB R11, [R12], #1
MOV R10, #0
......@@ -328,8 +336,13 @@ SetDate ROUT
; R1 corrupt
ReadTimeFormatted ROUT
Push "R3,R4,LR"
[ GSWorkspaceInKernelBuffers
LDR R12, =SysVarWorkSpace
ADD R2, R12, #1
|
GSVarGetWSpace
ADD R2, R12, #GSNameBuff+1 ; This code copied from OsWord0EAlpha
]
01 MOV R4, R0
SUB R13, R13, #8
MOV R1, R13
......@@ -340,7 +353,11 @@ ReadTimeFormatted ROUT
BVS %FT02
MOV R0, #-1
MOV R1, R13
[ GSWorkspaceInKernelBuffers
MOV R3, #?SysVarWorkSpace-1
|
MOV R3, #?GSNameBuff-1
]
SWI XTerritory_ConvertDateAndTime
02 ADD R13, R13, #8
SUBVC R2, R1, R0
......@@ -392,8 +409,13 @@ ReadRCL MOV R0, #0
LDR R0, [R0, #RCLimit]
ReadNumSysVar
Push "lr"
[ GSWorkspaceInKernelBuffers
LDR R12, =SysVarWorkSpace
MOV R1, R12
|
GSVarGetWSpace
ADD R1, R12, #GSNameBuff
]
MOV R2, #256
SWI XOS_BinaryToDecimal
MOV R0, R1
......@@ -414,14 +436,22 @@ SetNumSysVar ROUT ; R1 ptr to string, R2 string length
SUBS R2, R2, #1
ADDMI R2, R2, #1 ; give 0 in R2 for bad length.
Pull "PC", MI
[ GSWorkspaceInKernelBuffers
LDR R12, =SysVarWorkSpace
|
LDR R12, =GSNameBuff+GSVarWSpace
]
03 LDRB R10, [R1], #1 ; copy into a buffer so we can terminate it.
STRB R10, [R12], #1
SUBS R2, R2, #1
BPL %BT03
MOV R10, #13
STRB R10, [R12], #1
[ GSWorkspaceInKernelBuffers
LDR R1, =SysVarWorkSpace
|
LDR R1, =GSNameBuff+GSVarWSpace
]
LDRB R10, [R1]
MOV R12, #0
CMP R10, #"-"
......@@ -538,6 +568,8 @@ GSINIT ROUT
BICNE lr, lr, #Z_bit
ExitSWIHandler
LTORG
; -----------------------------------------------------------------------------
......
......@@ -547,6 +547,9 @@ Local_SLVK
LDR r12, [sp], #4
MOV r10, #0
[ FixCallBacks
MSR CPSR_c, #I32_bit + SVC32_mode ; IRQs off makes CallBackFlag atomic; 32bit so ready for SPSR use
]
LDRB r11, [r10, #CallBack_Flag]
TST lr, #V_bit
......@@ -557,7 +560,9 @@ SWIReturnWithCallBackFlag * {PC}-SWIRelocation
40 TEQ r11, #0
[ :LNOT: FixCallBacks
MSREQ CPSR_c, #I32_bit + SVC32_mode ; IRQs off for SPSR use
]
MSREQ SPSR_cxsf, lr
LDREQ lr, [sp], #4
Pull "r10-r12", EQ
......@@ -567,7 +572,12 @@ SWIReturnWithCallBackFlag * {PC}-SWIRelocation
! 0,"VSetReturn at ":CC:(:STR:({PC}-SWIRelocation))
50 TST r12, #Auto_Error_SWI_bit
[ FixCallBacks
BNE callback_checking + SWIRelocation ; we need to do this for X errors even if the callback flags
; are all clear, so that the postpone flag can be set
|
BNE %BT40
]
B VSet_GenerateError + SWIRelocation
......@@ -815,6 +825,11 @@ CallASWIR12 ROUT
VSet_GenerateError ROUT
Push lr
[ FixCallBacks
BIC lr, lr, #&0F
ORR lr, lr, #SVC_mode
MSR CPSR_c, lr ; Set caller's interrupt state and 26/32bitness
]
MOV r1, #Service_Error
BL Issue_Service
......@@ -825,6 +840,9 @@ VSet_GenerateError ROUT
BIC lr, lr, #V_bit ; return with V clear: error claimed!
MOV r10, #0 ; set up r10 and r11 as required
[ FixCallBacks
MSR CPSR_c, #I32_bit + SVC32_mode ; IRQs off makes CallBackFlag atomic; 32bit so ready for SPSR use
]
LDRB r11, [r10, #CallBack_Flag]
B SWIReturnWithCallBackFlag
......@@ -874,13 +892,21 @@ ErrHandler ROUT
STR r14, [r10, #Curr_Active_Object]
LDR r0, [r10, #ErrHan_ws] ; r0 is his wp
[ :LNOT: FixCallBacks
LDRB r11, [r10, #CallBack_Flag]
CMP r11, #0
]
MRS r12, CPSR
BIC r12, r12, #I32_bit+F32_bit+&0F ; USR26/32 mode, ARM, IRQs enabled
[ FixCallBacks
MSR CPSR_c, #I32_bit+SVC32_mode ; disable interrupts for SPSR use and CallBackFlag atomicity
LDRB r11, [r10, #CallBack_Flag]
CMP r11, #0
|
MSREQ CPSR_c, #I32_bit+SVC32_mode ; disable interrupts for SPSR use
]
MSREQ SPSR_cxsf, r12
Pull "r10-r12", EQ
......@@ -898,7 +924,9 @@ ErrHandler ROUT
callback_checking
TST lr, #I32_bit+&0F ; user 26/32 mode, ints enabled?
[ :LNOT: FixCallBacks ; already entered with this CPSR
MSRNE CPSR_c, #I32_bit + SVC32_mode
]
MSRNE SPSR_cxsf, lr
LDRNE lr, [sp], #4
Pull "r10-r12", NE
......@@ -906,10 +934,13 @@ callback_checking
; Further checks: postpone callback if returning V set and R0->RAM
TST lr, #V_bit
TST lr, #V_bit ; if no error then do callbacks
BEQ Do_CallBack
TST r11, #CBack_Postpone ; only one postponement
BNE Do_CallBack ; allowed.
TST r11, #CBack_Postpone
[ FixCallBacks
TSTNE r11, #CBack_OldStyle :OR: CBack_VectorReq ; can only postpone if not already or if no callbacks pending
]
BNE Do_CallBack
[ ROMatTop
CMP r0, #ROM
BHS Do_CallBack
......@@ -918,13 +949,16 @@ callback_checking
RSBHIS r12, r0, #ROMLimit
BHI Do_CallBack
]
[ :LNOT: FixCallBacks
MSR CPSR_c, #I32_bit + SVC32_mode ; ints off while flag updated
LDRB r11, [r10, #CallBack_Flag]
]
ORR r11, r11, #CBack_Postpone ; signal to IRQs
STRB r11, [r10, #CallBack_Flag]
back_to_user
[ :LNOT: FixCallBacks ; already entered with this CPSR
MSR CPSR_c, #I32_bit + SVC32_mode
]
back_to_user_irqs_already_off
MSR SPSR_cxsf, lr
LDR lr, [sp], #4
......@@ -932,11 +966,21 @@ back_to_user_irqs_already_off
MOVS pc, lr
Do_CallBack ; CallBack allowed:
[ FixCallBacks
; Entered in SVC32 mode with IRQs off, r10 = 0
TST r11, #CBack_Postpone
BICNE r11, r11, #CBack_Postpone
STRNEB r11, [r10, #CallBack_Flag]
Do_CallBack_postpone_already_clear
]
TST r11, #CBack_VectorReq ; now process any vector entries
MOV r12,lr
BLNE process_callback_chain
MOV lr,r12
[ FixCallBacks
LDRB r11, [r10, #CallBack_Flag] ; non-transient callback may have been set during transient callbacks
]
TST r11, #CBack_OldStyle
BEQ back_to_user
[ :LNOT:No26bitCode
......@@ -946,13 +990,20 @@ Do_CallBack ; CallBack allowed:
[ {TRUE} ; LRust, Fix RP-0609
; Check that SVC_sp is empty (apart from r14,r10-r12), i.e. system truly is idle
LDR r11, =SVCSTK-4*4 ; What SVC_sp should be if system idle
CMP sp, r11 ; Stack empty?
LDR r12, =SVCSTK-4*4 ; What SVC_sp should be if system idle
CMP sp, r12 ; Stack empty?
BLO back_to_user ; No then no call back
]
[ FixCallBacks
[ :LNOT: No26bitCode
MSR CPSR_c, #I32_bit + SVC2632 ; back to 26-bit mode
]
BIC r11, r11, #CBack_OldStyle
|
MSR CPSR_c, #I32_bit + SVC2632 ; ints off while flag updated
LDRB r11, [r10, #CallBack_Flag]
BIC r11, r11, #CBack_Postpone+CBack_OldStyle
]
STRB r11, [r10, #CallBack_Flag]
MOV r12, #0
......@@ -985,6 +1036,10 @@ Do_CallBack ; CallBack allowed:
process_callback_chain ROUT
Push "r0-r6, r10-r12, lr" ; save some for the callee too.
[ FixCallBacks :LAND: No26bitCode
MRS r0, CPSR
Push "r0"
]
MOV r10, #0
MSR CPSR_c, #I32_bit + SVC2632 ; ints off while flag updated
......@@ -998,7 +1053,12 @@ process_callback_chain ROUT
LDR r2, [r2, #CallBack_Vector]
TEQ r2, #0
[ No26bitCode
[ FixCallBacks
Pull "r0", EQ
MSREQ CPSR_c, r0 ; restore original interrupt state and 32bitness
|
MSREQ CPSR_c, #SVC2632 ; ensure exit with ints on
]
Pull "r0-r6, r10-r12, PC",EQ
|
Pull "r0-r6, r10-r12, PC",EQ,^
......
......@@ -94,7 +94,7 @@ Initial_IRQ_Code ROUT
BIC r0, r0, #IRQ32_mode :EOR: SVC32_mode
MSR CPSR_c, r0
Pull "r10-r12" ; SPSR, R0, LR really
[ No26bitCode
[ No26bitCode :LOR: FixCallBacks
ORR r0, r0, #SVC32_mode
|
BIC r0, r0, #&1F
......@@ -106,7 +106,11 @@ Initial_IRQ_Code ROUT
MOV r0, r11 ; restore original R0
MOV r10, #0
LDRB r11, [r10, #CallBack_Flag]
[ FixCallBacks
B Do_CallBack_postpone_already_clear
|
B Do_CallBack
]
LTORG
......
......@@ -1060,7 +1060,7 @@ DefaultCMOSTable ; list of non-zero options wanted :
= KeyRepCMOS, 8
= RMASizeCMOS, 0
= SpriteSizeCMOS, 0
= SystemSizeCMOS, 8
= SysHeapCMOS, 8
= MODETVCMOS, &10 ; TV 0,1
= NetFSIDCMOS, 254
= NetPSIDCMOS, 235
......
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