Rev 329 | 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, #0x38400000mov r0, #0x20000000orr r0, r0, #0x590000str r0, [r1,#0x104]orr r1, r1, #0x200000mov r0, #0xd00orr r0, r0, #0x1str r0, [r1]mov r0, #0str r0, [r1,#0x10]mov pc, lr.size lcd_init, .-lcd_init.section .icode.lcd_shutdown, "ax", %progbits.align 2.global lcd_shutdown.type lcd_shutdown, %functionlcd_shutdown:stmfd sp!, {r4, lr}bl displaylcd_detectlcdsub r12, r12, #0x04900000cmp r0, #2beq lcd_shutdown_type2mov r0, #0x28bl displaylcd_sendlcdcmov r0, #0x10bl displaylcd_sendlcdcb lcd_shutdown_donelcd_shutdown_type2:mov r0, #0x07bl displaylcd_sendlcdcmov r0, #0x200orr r0, r0, #0x32bl displaylcd_sendlcddmov r0, #0x13bl displaylcd_sendlcdcmov r0, #0x1100orr r0, #0x37bl displaylcd_sendlcddmov r0, #0x07bl displaylcd_sendlcdcmov r0, #0x200orr r0, r0, #0x01bl displaylcd_sendlcddmov r0, #0x13bl displaylcd_sendlcdcmov r0, #0x100orr r0, #0x37bl displaylcd_sendlcddmov r0, #0x07bl displaylcd_sendlcdcmov r0, #0x200bl displaylcd_sendlcddmov r0, #0x10bl displaylcd_sendlcdcmov r0, #0x680bl displaylcd_sendlcddmov r0, #0x12bl displaylcd_sendlcdcmov r0, #0x160bl displaylcd_sendlcddmov r0, #0x13bl displaylcd_sendlcdcmov r0, #0x100orr r0, r0, #0x27bl displaylcd_sendlcddmov r0, #0x10bl displaylcd_sendlcdcmov r0, #0x600bl displaylcd_sendlcddlcd_shutdown_done:ldmfd sp!, {r4, lr}mov r0, #5120b sleep.size lcd_shutdown, .-lcd_shutdown.section .text.lcd_get_width, "ax", %progbits.align 2.global lcd_get_width.type lcd_get_width, %functionlcd_get_width:mov r0, #176mov pc, lr.size lcd_get_width, .-lcd_get_width.section .text.lcd_get_height, "ax", %progbits.align 2.global lcd_get_height.type lcd_get_height, %functionlcd_get_height:mov r0, #132mov pc, lr.size lcd_get_height, .-lcd_get_height.section .text.lcd_get_bytes_per_pixel, "ax", %progbits.align 2.global lcd_get_bytes_per_pixel.type lcd_get_heightbytes_per_pixel, %functionlcd_get_bytes_per_pixel:mov r0, #2mov pc, lr.size lcd_get_bytes_per_pixel, .-lcd_get_bytes_per_pixel.section .icode.displaylcd, "ax", %progbits.align 2.global displaylcd.type displaylcd, %functiondisplaylcd:stmfd sp!, {r0-r5,lr}bl displaylcd_syncbl displaylcd_detectlcdsub r12, r12, #0x04900000cmp r0, #2bne displaylcd_othertypesmov r0, #0x50bl displaylcd_sendlcdcldr r0, [sp]bl displaylcd_sendlcddmov r0, #0x51bl displaylcd_sendlcdcldr r0, [sp,#0x04]bl displaylcd_sendlcddmov r0, #0x52bl displaylcd_sendlcdcldr r0, [sp,#0x08]bl displaylcd_sendlcddmov r0, #0x53bl displaylcd_sendlcdcldr r0, [sp,#0x0c]bl displaylcd_sendlcddmov r0, #0x20bl displaylcd_sendlcdcldr r0, [sp]bl displaylcd_sendlcddmov r0, #0x21bl displaylcd_sendlcdcldr r0, [sp,#0x08]bl displaylcd_sendlcddmov r0, #0x22bl displaylcd_sendlcdcb displaylcd_blitdisplaylcd_othertypes:mov r0, #0x2abl displaylcd_sendlcdcldr r0, [sp]bl displaylcd_sendlcddldr r0, [sp,#0x04]bl displaylcd_sendlcddmov r0, #0x2bbl displaylcd_sendlcdcldr r0, [sp,#0x08]bl displaylcd_sendlcddldr r0, [sp,#0x0c]bl displaylcd_sendlcddmov r0, #0x2cbl displaylcd_sendlcdcdisplaylcd_blit:ldmia sp, {r0-r3}sub r1, r0add r1, r1, #1sub r3, r2add r3, r3, #1mul r5, r1, r3ldr r1, [sp,#0x1c]add r12, r12, #0x40displaylcd_wait:ldr r4, [r12,#-0x24]tst r4, #8bne displaylcd_waitcmp r1, #-1bne displaylcd_dmaldr r0, [sp,#0x20]movs r4, r5,lsl#31mov r1, r0stmcsia r12, {r0-r1}mov r2, r0strne r0, [r12]mov r3, r0displaylcd_pixel:ldr r4, [r12,#-0x24]tst r4, #8bne displaylcd_pixelsubs r5, r5, #4stmcsia r12, {r0-r3}bhi displaylcd_pixelldmfd sp!, {r0-r5,pc}displaylcd_dma:movs r4, r5,lsl#31mov r4, #0x38400000ldrcsh r2, [r1], #2mov r0, #0x20000000ldrcsh r3, [r1], #2orr r0, r0, #0x590000stmcsia r12, {r2-r3}mov r3, r5,lsr#2ldrneh r2, [r1], #2sub r3, r3, #1str r1, [r4,#0x100]str r0, [r4,#0x104]str r3, [r4,#0x108]strne r2, [r12]bl clean_dcachemov r0, #4str r0, [r4,#0x114]ldmfd sp!, {r0-r5,pc}displaylcd_sendlcdc:ldr r4, [r12,#0x1c]tst r4, #0x10bne displaylcd_sendlcdcstr r0, [r12,#0x04]mov pc, lrdisplaylcd_sendlcdd:ldr r4, [r12,#0x1c]tst r4, #0x10bne displaylcd_sendlcddstr 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, #0x38400000ldr r0, [r1,#0x184]tst r0, #0x70000ldreq pc, [sp], #4adr lr, displaylcd_sync_waitmov r0, #0x100b sleep.size displaylcd_sync, .-displaylcd_sync.section .icode.displaylcd_busy, "ax", %progbits.align 2.global displaylcd_busy.type displaylcd_busy, %functiondisplaylcd_busy:mov r1, #0x38400000ldr 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, #0x38400000ldr 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, #0x38400000mov r0, #7str r0, [r1,#0x114]bl lcdconsole_callbackldr pc, [sp], #4.size INT_DMA8, .-INT_DMA8.section .icode.lcd_translate_color, "ax", %progbits.align 2.global lcd_translate_color.type lcd_translate_color, %functionlcd_translate_color:cmp r0, #0xffmoveq r0, #-1moveq pc, lrcmp r0, #0movne r0, #0xff000000orrne r0, r0, #0xff0000mov r2, r2,lsr#2mov r1, r1,lsr#3orr r0, r0, r3,lsr#3orr r0, r0, r2,lsl#5orr r0, r0, r1,lsl#11mov pc, lr.size lcd_translate_color, .-lcd_translate_color