Rev 8 | Blame | Last modification | View Log | RSS feed
@@@ Copyright 2010 TheSeven@@@ This file is part of emBIOS.@@ emBIOS is free software: you can redistribute it and/or@ modify it under the terms of the GNU General Public License as@ published by the Free Software Foundation, either version 2 of the@ License, or (at your option) any later version.@@ emBIOS is distributed in the hope that it will be useful,@ but WITHOUT ANY WARRANTY; without even the implied warranty of@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.@ See the GNU General Public License for more details.@@ You should have received a copy of the GNU General Public License@ along with emBIOS. If not, see <http://www.gnu.org/licenses/>.@@.section .initcode.lcd_init, "ax", %progbits.align 2.global lcd_init.type lcd_init, %functionlcd_init:mov r1, #0x38000000orr r1, r1, #0x400000mov r0, #0x20000000orr r0, r0, #0x190000str r0, [r1,#0x104]mov pc, lr.size lcd_init, .-lcd_init.section .icode.displaylcd, "ax", %progbits.align 2.global displaylcd.type displaylcd, %functiondisplaylcd:stmfd sp!, {r0-r4,lr}bl displaylcd_syncbl displaylcd_detectlcdsub r12, r12, #0x04900000cmp r0, #2bne displaylcd_othertypesmov r0, #0x50bl displaylcd_sendlcd2cldr r0, [sp]bl displaylcd_sendlcd2dmov r0, #0x51bl displaylcd_sendlcd2cldr r0, [sp,#0x04]bl displaylcd_sendlcd2dmov r0, #0x52bl displaylcd_sendlcd2cldr r0, [sp,#0x08]bl displaylcd_sendlcd2dmov r0, #0x53bl displaylcd_sendlcd2cldr r0, [sp,#0x0c]bl displaylcd_sendlcd2dmov r0, #0x20bl displaylcd_sendlcd2cldr r0, [sp]bl displaylcd_sendlcd2dmov r0, #0x21bl displaylcd_sendlcd2cldr r0, [sp,#0x08]bl displaylcd_sendlcd2dmov r0, #0x22bl displaylcd_sendlcd2cb displaylcd_blitdisplaylcd_othertypes:mov r0, #0x2abl displaylcd_sendlcdcldr r0, [sp]bl displaylcd_sendlcd2dldr r0, [sp,#0x04]bl displaylcd_sendlcd2dmov r0, #0x2bbl displaylcd_sendlcdcldr r0, [sp,#0x08]bl displaylcd_sendlcd2dldr r0, [sp,#0x0c]bl displaylcd_sendlcd2dmov r0, #0x2cbl displaylcd_sendlcdcdisplaylcd_blit:ldmia sp, {r0-r3}sub r1, r0add r1, r1, #1sub r3, r2add r3, r3, #1mul r2, r1, r3ldr r1, [sp,#0x18]cmp r1, #0x40000000bne displaylcd_dmadisplaylcd_pixel:ldr r0, [sp,#0x1c]bl displaylcd_sendlcd2dsubs r2, r2, #1bne displaylcd_pixelldmfd sp!, {r0-r4,pc}displaylcd_dma:mov r4, #0x38000000orr r4, r4, #0x400000mov r0, #0x20000000orr r0, r0, #0x190000str r0, [r4,#0x104]str r1, [r4,#0x100]mov r0, r2,lsr#1sub r0, r0, #1str r0, [r4,#0x108]bl clean_dcachemov r0, #4str r0, [r4,#0x114]ldmfd sp!, {r0-r4,pc}displaylcd_sendlcd2c:ldr r4, [r12,#0x1c]tst r4, #0x10bne displaylcd_sendlcd2cmov r4, r0,lsr#8str r4, [r12,#0x04]and r0, r0, #0xffdisplaylcd_sendlcdc:ldrh r4, [r12,#0x1c]tst r4, #0x10bne displaylcd_sendlcdcstrh r0, [r12,#0x04]mov pc, lrdisplaylcd_sendlcd2d:ldrh r4, [r12,#0x1c]tst r4, #0x10bne displaylcd_sendlcd2dmov r4, r0,lsr#8strh r4, [r12,#0x40]and r0, r0, #0xffdisplaylcd_sendlcdd:ldrh r4, [r12,#0x1c]tst r4, #0x10bne displaylcd_sendlcddstrh r0, [r12,#0x40]mov pc, lrdisplaylcd_detectlcd:mov r12, #0x3c000000orr r12, r12, #0xf00000ldr r0, [r12,#0xd0]bic r0, r0, #0x0fstr r0, [r12,#0xd0]ldr r0, [r12,#0xe0]bic r0, r0, #0xf0str r0, [r12,#0xe0]ldr r0, [r12,#0xd4]and r0, r0, #1ldr r1, [r12,#0xe4]and r1, r1, #2orr r0, r0, r1mov pc, lr.size displaylcd, .-displaylcd.section .icode.displaylcd_sync, "ax", %progbits.align 2.global displaylcd_sync.type displaylcd_sync, %functiondisplaylcd_sync:str lr, [sp,#-4]!displaylcd_sync_wait:mov r1, #0x38000000orr r1, r1, #0x400000ldr r0, [r1,#0x184]tst r0, #0x70000ldreq pc, [sp], #4adr lr, displaylcd_sync_waitb context_switch.size displaylcd_sync, .-displaylcd_sync.section .icode.displaylcd_busy, "ax", %progbits.align 2.global displaylcd_busy.type displaylcd_busy, %functiondisplaylcd_busy:mov r1, #0x38000000orr r1, r1, #0x400000ldr r0, [r1,#0x184]and r0, r0, #0x70000mov pc, lr.size displaylcd_busy, .-displaylcd_busy.section .icode.displaylcd_safe, "ax", %progbits.align 2.global displaylcd_safe.type displaylcd_safe, %functiondisplaylcd_safe:mov r1, #0x38000000orr r1, r1, #0x400000ldr r0, [r1,#0x184]tst r0, #0x70000moveq r0, #1movne r0, #0mov pc, lr.size displaylcd_safe, .-displaylcd_safe.section .icode.INT_DMA8, "ax", %progbits.align 2.global INT_DMA8.type INT_DMA8, %functionINT_DMA8:str lr, [sp,#-4]!mov r1, #0x38000000orr r1, r1, #0x400000mov r0, #7str r0, [r1,#0x114]bl lcdconsole_callbackldr pc, [sp], #4.size INT_DMA8, .-INT_DMA8