; ; MP3ASM version 1.4 ; Last updated: 04-Nov-2004, 17:00 ; .text .include "header.s" .set fpga_base, 0x40000000 .set mmc_port, 0 .set mmc_clk, 0b00000010 .set mmc_out, 0b00000100 .set mmc_in, 0b00001000 .global mmcrw .global lcdwait .global lcdwritedata .global lcdwritectrl .global delay ; --------------------------------------- ; Function: ; byte mmcrw(byte writebyte) ; --------------------------------------- mmcrw: stmfd sp!, {r4-r5} mov r4, #mmc_out mov r5, #fpga_base ; bit 7 and r1, r4, r0, lsr #5 strb r1, [r5, #mmc_port] ldrb r2, [r5, #mmc_port] and r2, r2, #mmc_in mov r3, r2, lsl #4 orr r1, r1, #mmc_clk strb r1, [r5, #mmc_port] ; bit 6 and r1, r4, r0, lsr #4 strb r1, [r5, #mmc_port] ldrb r2, [r5, #mmc_port] and r2, r2, #mmc_in orr r3, r3, r2, lsl #3 orr r1, r1, #mmc_clk strb r1, [r5, #mmc_port] ; bit 5 and r1, r4, r0, lsr #3 strb r1, [r5, #mmc_port] ldrb r2, [r5, #mmc_port] and r2, r2, #mmc_in orr r3, r3, r2, lsl #2 orr r1, r1, #mmc_clk strb r1, [r5, #mmc_port] ; bit 4 and r1, r4, r0, lsr #2 strb r1, [r5, #mmc_port] ldrb r2, [r5, #mmc_port] and r2, r2, #mmc_in orr r3, r3, r2, lsl #1 orr r1, r1, #mmc_clk strb r1, [r5, #mmc_port] ; bit 3 and r1, r4, r0, lsr #1 strb r1, [r5, #mmc_port] ldrb r2, [r5, #mmc_port] and r2, r2, #mmc_in orr r3, r3, r2 orr r1, r1, #mmc_clk strb r1, [r5, #mmc_port] ; bit 2 and r1, r4, r0 strb r1, [r5, #mmc_port] ldrb r2, [r5, #mmc_port] and r2, r2, #mmc_in orr r3, r3, r2, lsr #1 orr r1, r1, #mmc_clk strb r1, [r5, #mmc_port] ; bit 1 and r1, r4, r0, lsl #1 strb r1, [r5, #mmc_port] ldrb r2, [r5, #mmc_port] and r2, r2, #mmc_in orr r3, r3, r2, lsr #2 orr r1, r1, #mmc_clk strb r1, [r5, #mmc_port] ; bit 0 and r1, r4, r0, lsl #2 strb r1, [r5, #mmc_port] ldrb r2, [r5, #mmc_port] and r2, r2, #mmc_in orr r0, r3, r2, lsr #3 orr r1, r1, #mmc_clk strb r1, [r5, #mmc_port] ldmfd sp!, {r4-r5} mov pc, lr ; --------------------------------------- ; Function: ; void lcdwait(void) ; --------------------------------------- lcdwait: ldr r1, Lit_ROM_base ldr r2, FN_LCD_wtr add r1, r1, r2 mov pc, r1 ; --------------------------------------- ; Function: ; void lcdwritedata(byte data) ; --------------------------------------- lcdwritedata: ldr r1, Lit_ROM_base ldr r2, FN_LCD_data_wr add r1, r1, r2 mov pc, r1 ; --------------------------------------- ; Function: ; void lcdwritectrl(byte data) ; --------------------------------------- lcdwritectrl: ldr r1, Lit_ROM_base ldr r2, FN_LCD_ctrl_wr add r1, r1, r2 mov pc, r1 ; --------------------------------------- ; Function: ; void delay(int cycle) ; --------------------------------------- delay: subs r0, r0, #1 ; @@@ bhi delay ; mov pc, lr ;----------------------------------------------------------- Lit_PIO_base: .word PIO_base Lit_ROM_base: .word ROM_base FN_LCD_wtr: .word 0x00000850 FN_LCD_data_wr: .word 0x00000884 FN_LCD_ctrl_wr: .word 0x00000898 .end