; Copyright 2002 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. ; ; > $.Source.VduGrafV ; ; ARTHUR OPERATING SYSTEM - Vdu Drivers ; ======================= ; ; Vdu driver code - Default GraphicsV claimant ; ; Author K J Bracey ; Date 30.8.02 ; [ UseGraphicsV ASSERT GraphicsV_VSync = 1 ASSERT GraphicsV_SetMode = 2 ASSERT GraphicsV_SetInterlace = 3 ASSERT GraphicsV_SetBlank = 4 ASSERT GraphicsV_UpdatePointer = 5 ASSERT GraphicsV_SetDMAAddress = 6 ASSERT GraphicsV_VetMode = 7 ASSERT GraphicsV_DisplayFeatures = 8 ASSERT GraphicsV_WritePaletteEntry = 10 ASSERT GraphicsV_WritePaletteEntries = 11 ASSERT GraphicsV_Render = 13 ASSERT GraphicsV_IICOp = 14 MOSGraphicsV ROUT CMP r4, #(MOSGraphicsV_TableEnd - MOSGraphicsV_Table) / 4 ADDLS pc, pc, r4, LSL #2 MOSGraphicsV_Table MOV pc, lr ; reason code not known, so pass it on MOV pc, lr ; 0 B GV_VSync ; 1 B GV_SetMode ; 2 B GV_SetInterlace ; 3 B GV_SetBlank ; 4 B GV_UpdatePointer ; 5 B GV_SetAddress ; 6 B GV_VetMode ; 7 B GV_Features ; 8 MOV pc, lr ; 9 B GV_WritePaletteEntry ; 10 B GV_WritePaletteEntries ; 11 MOV pc, lr ; 12 B GV_Render ; 13 B GV_IICOp ; 14 MOSGraphicsV_TableEnd GV_VSync ROUT [ {FALSE} [ HAL Push "lr" ] LDR WsPtr, =OsbyteVars MOV r4, #0 B VsyncIRQ_ExtEntry | ; Switch to interrupt mode to process this. ASSERT No26bitCode LDR WsPtr, =OsbyteVars MRS r4, CPSR Push "lr" MSR CPSR_c, #I32_bit + IRQ32_mode Push "r4, lr" [ HAL Push "pc" B VsyncIRQ_ExtEntry NOP | BL VsyncIRQ_ExtEntry ] Pull "r4, lr" MSR CPSR_c, r4 MOV r4, #0 Pull "pc" ] GV_SetMode Push "r0-r3, r9, lr" mjsAddressHAL WsPtr MOV r4, #0 mjsCallHAL HAL_Video_SetMode Pull "r0-r3, r9, pc" GV_SetInterlace Push "r0-r3, r9, lr" mjsAddressHAL WsPtr MOV r4, #0 mjsCallHAL HAL_Video_SetInterlace Pull "r0-r3, r9, pc" GV_SetBlank Push "r0-r3, r9, lr" mjsAddressHAL WsPtr MOV r4, #0 mjsCallHAL HAL_Video_SetBlank Pull "r0-r3, r9, pc" GV_UpdatePointer Push "r0-r3, r9, lr" mjsAddressHAL WsPtr MOV r4, #0 mjsCallHAL HAL_Video_UpdatePointer Pull "r0-r3, r9, pc" GV_SetAddress Push "r0-r3, r9, lr" mjsAddressHAL WsPtr MOV r4, #0 mjsCallHAL HAL_Video_SetDAG Pull "r0-r3, r9, pc" GV_VetMode Push "r1-r3, r9, lr" mjsAddressHAL WsPtr MOV r4, #0 mjsCallHAL HAL_Video_VetMode Pull "r1-r3, r9, pc" GV_Features Push "r0,r1,r3, r9, lr" mjsAddressHAL WsPtr MOV r4, #0 mjsCallHAL HAL_Video_Features STR r0, [sp, #0] mjsCallHAL HAL_Video_PixelFormats STR r0, [sp, #4] mjsCallHAL HAL_Video_BufferAlignment MOV r2, r0 Pull "r0,r1,r3, r9, pc" GV_WritePaletteEntry Push "r0-r3, r9, lr" mjsAddressHAL WsPtr MOV r4, #0 mjsCallHAL HAL_Video_WritePaletteEntry Pull "r0-r3, r9, pc" GV_WritePaletteEntries Push "r0-r3, r9, lr" mjsAddressHAL WsPtr MOV r4, #0 mjsCallHAL HAL_Video_WritePaletteEntries Pull "r0-r3, r9, pc" GV_Render VDWS WsPtr LDR WsPtr, [WsPtr, #HALVideoFeatures] TST WsPtr, #1:SHL:4 MOVEQ pc, lr Push "r0-r3, r9, lr" ORR r0, r0, #1:SHL:31 mjsAddressHAL mjsCallHAL HAL_Video_Render TEQ r0, #0 MOVPL r4, #0 Pull "r0-r3, r9, pc" GV_IICOp Push "r9, lr" mjsAddressHAL WsPtr MOV r4, #0 mjsCallHAL HAL_Video_IICOp Pull "r9, pc" CallGraphicsV Push "r10,r12,lr" MOV r10, #GraphicsV BL CallVector Pull "r10,r12,pc" ; Corrupts R9-R11 ; returns EQ if acceleration valid CheckAcceleration ASSERT Log2BPP = Log2BPC +4 ADD R9, WsPtr, #Log2BPC LDMIA R9, {R9, R10} ; R9 = Log2BPC; R10 = Log2BPP LDR R11, [WsPtr, #VduSprite] TEQ R9, R10 ; BPC must equal BPP TEQEQ R11, #0 ; Must not be redirected MOV PC, R14 ] ; UseGraphicsV END