freemyipod r710 - Code Review

Jump to: navigation, search
Repository:freemyipod
Revision:r709‎ | r710 | r711 >
Date:04:54, 25 April 2011
Author:theseven
Status:new
Tags:
Comment:
emCORE: New target: iPod Touch 2G
The kernel works, LCD works, but USB is broken. Apart from that, it's about on par with the iPod Nano 4G port
Modified paths:
  • /emcore/trunk/SOURCES (modified) (history)
  • /emcore/trunk/TARGETS (modified) (history)
  • /emcore/trunk/drawing.S (modified) (history)
  • /emcore/trunk/target/ipodtouch2g (added) (history)
  • /emcore/trunk/target/ipodtouch2g/config.h (added) (history)
  • /emcore/trunk/target/ipodtouch2g/crt0.S (added) (history)
  • /emcore/trunk/target/ipodtouch2g/lcd.c (added) (history)
  • /emcore/trunk/target/ipodtouch2g/ls.x (added) (history)
  • /emcore/trunk/target/ipodtouch2g/target.h (added) (history)
  • /emcore/trunk/target/ipodtouch2g/target.mk (added) (history)
  • /emcore/trunk/usb/synopsysotg.h (modified) (history)

Diff [purge]

Index: emcore/trunk/drawing.S
@@ -157,8 +157,8 @@
158158 bne renderchar_x
159159 ldmfd sp!, {r4-r9,pc}
160160
 161+renderchar_native:
161162 #if (LCD_BYTESPERPIXEL == 2)
162 -renderchar_native:
163163 stmfd sp!, {r4-r7,lr}
164164 ldr r7, [sp,#0x14]
165165 cmn r2, #1
@@ -224,8 +224,49 @@
225225 add r0, r0, #2
226226 ldmfd sp!, {r4-r7,pc}
227227 #else
 228+#if (LCD_BYTESPERPIXEL == 4)
 229+
 230+ stmfd sp!, {r4-r7,lr}
 231+ ldr r7, [sp,#0x14]
 232+ cmn r2, #1
 233+ beq renderchar_native_nobg
 234+ mov r6, r0
 235+ mov r4, #8
 236+renderchar_native_opaquerow:
 237+ mov r5, #6
 238+renderchar_native_opaquecol:
 239+ str r2, [r6], #4
 240+ subs r5, r5, #1
 241+ bne renderchar_native_opaquecol
 242+ add r6, r6, r7,lsl#1
 243+ sub r6, r6, #12
 244+ subs r4, r4, #1
 245+ bne renderchar_native_opaquerow
 246+renderchar_native_nobg:
 247+ adr r5, renderchar_font
 248+ sub r3, r3, #0x20
 249+ cmp r3, #0x5f
 250+ addcc r5, r3,lsl#2
 251+ addcc r5, r3
 252+ mov r3, #5
 253+renderchar_native_col:
 254+ mov r6, r0
 255+ ldrb r4, [r5], #1
 256+renderchar_native_row:
 257+ tst r4, #1
 258+ strne r1, [r6]
 259+ add r6, r6, r7,lsl#2
 260+ movs r4, r4,lsr#1
 261+ bne renderchar_native_row
 262+ add r0, r0, #4
 263+ subs r3, r3, #1
 264+ bne renderchar_native_col
 265+ add r0, r0, #4
 266+ ldmfd sp!, {r4-r7,pc}
 267+#else
228268 #error Unknown number of bytes per pixel!
229269 #endif
 270+#endif
230271
231272 renderchar_font:
232273 .byte 0, 0, 0, 0, 0
Index: emcore/trunk/TARGETS
@@ -2,3 +2,4 @@
33 ipodnano3g
44 ipodnano4g
55 ipodclassic
 6+ipodtouch2g
Index: emcore/trunk/target/ipodtouch2g/lcd.c
@@ -0,0 +1,156 @@
 2+//
 3+//
 4+// Copyright 2011 TheSeven
 5+//
 6+//
 7+// This file is part of emCORE.
 8+//
 9+// emCORE is free software: you can redistribute it and/or
 10+// modify it under the terms of the GNU General Public License as
 11+// published by the Free Software Foundation, either version 2 of the
 12+// License, or (at your option) any later version.
 13+//
 14+// emCORE is distributed in the hope that it will be useful,
 15+// but WITHOUT ANY WARRANTY; without even the implied warranty of
 16+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 17+// See the GNU General Public License for more details.
 18+//
 19+// You should have received a copy of the GNU General Public License along
 20+// with emCORE. If not, see <http://www.gnu.org/licenses/>.
 21+//
 22+//
 23+
 24+
 25+#include "global.h"
 26+#include "thread.h"
 27+#include "util.h"
 28+#include "lcd.h"
 29+
 30+
 31+static struct mutex lcd_mutex IDATA_ATTR;
 32+#define fb ((uint32_t*)0x0fc00000)
 33+
 34+
 35+void lcd_init()
 36+{
 37+ mutex_init(&lcd_mutex);
 38+}
 39+
 40+int lcd_get_width()
 41+{
 42+ return LCD_WIDTH;
 43+}
 44+
 45+int lcd_get_height()
 46+{
 47+ return LCD_HEIGHT;
 48+}
 49+
 50+int lcd_get_bytes_per_pixel()
 51+{
 52+ return LCD_BYTESPERPIXEL;
 53+}
 54+
 55+int lcd_get_format()
 56+{
 57+ return LCD_FORMAT;
 58+}
 59+
 60+void lcd_shutdown()
 61+{
 62+}
 63+
 64+bool displaylcd_busy() ICODE_ATTR;
 65+bool displaylcd_busy()
 66+{
 67+ return false;
 68+}
 69+
 70+void displaylcd_sync() ICODE_ATTR;
 71+void displaylcd_sync()
 72+{
 73+}
 74+
 75+void displaylcd_native(unsigned int startx, unsigned int endx,
 76+ unsigned int starty, unsigned int endy, void* data)
 77+{
 78+ mutex_lock(&lcd_mutex, TIMEOUT_BLOCK);
 79+ displaylcd_safe_native(startx, endx, starty, endy, data);
 80+ mutex_unlock(&lcd_mutex);
 81+}
 82+
 83+void displaylcd_safe_native(unsigned int startx, unsigned int endx,
 84+ unsigned int starty, unsigned int endy, void* data)
 85+{
 86+ int pixels = (endx - startx + 1) * (endy - starty + 1);
 87+ if (pixels <= 0) return;
 88+ uint32_t* ptr = &fb[starty * LCD_WIDTH + startx];
 89+ int rows = endy - starty + 1;
 90+ int rowsize = (endx - startx + 1) * 4;
 91+ while (rows--)
 92+ {
 93+ memcpy(ptr, data, rowsize);
 94+ ptr += LCD_WIDTH;
 95+ data += rowsize;
 96+ }
 97+}
 98+
 99+void filllcd_native(unsigned int startx, unsigned int endx,
 100+ unsigned int starty, unsigned int endy, int color)
 101+{
 102+ int pixels = (endx - startx + 1) * (endy - starty + 1);
 103+ if (pixels <= 0) return;
 104+ uint32_t* ptr = &fb[starty * LCD_WIDTH + startx];
 105+ int rows = endy - starty + 1;
 106+ int rowsize = (endx - startx + 1) * 4;
 107+ while (rows--)
 108+ {
 109+ int i;
 110+ for (i = 0; i < rowsize; i += 4) fb[i] = color;
 111+ ptr += LCD_WIDTH;
 112+ }
 113+ mutex_unlock(&lcd_mutex);
 114+}
 115+
 116+void displaylcd(unsigned int x, unsigned int y, unsigned int width, unsigned int height,
 117+ void* data, unsigned int datax, unsigned int datay, unsigned int stride)
 118+{
 119+ if (width * height <= 0) return;
 120+ mutex_lock(&lcd_mutex, TIMEOUT_BLOCK);
 121+ uint32_t* ptr = &fb[y * LCD_WIDTH + x];
 122+ uint8_t* inptr = &((uint8_t*)data)[datay * stride + datax];
 123+ int rowsize = stride * 3;
 124+ while (height--)
 125+ {
 126+ int pixels = width;
 127+ uint8_t* ip = inptr;
 128+ uint32_t* op = ptr;
 129+ while (pixels--)
 130+ {
 131+ uint32_t value = *ip++ << 16;
 132+ value |= *ip++ << 8;
 133+ value |= *ip++;
 134+ *op++ = value;
 135+ }
 136+ inptr += rowsize;
 137+ ptr += LCD_WIDTH;
 138+ }
 139+ mutex_unlock(&lcd_mutex);
 140+}
 141+
 142+void filllcd(unsigned int x, unsigned int y, unsigned int width, unsigned int height, int color)
 143+{
 144+ filllcd_native(x, y, width, height, color);
 145+}
 146+
 147+int lcd_translate_color(uint8_t alpha, uint8_t red, uint8_t green, uint8_t blue)
 148+ ICODE_ATTR __attribute__((naked, noinline));
 149+int lcd_translate_color(uint8_t alpha, uint8_t red, uint8_t green, uint8_t blue)
 150+{
 151+ asm volatile(
 152+ "orr r0, r3, r0,lsl#24 \n\t"
 153+ "orr r1, r2, r1,lsl#8 \n\t"
 154+ "orr r0, r0, r1,lsl#8 \n\t"
 155+ "mov pc, lr \n\t"
 156+ );
 157+}
Index: emcore/trunk/target/ipodtouch2g/ls.x
@@ -0,0 +1,101 @@
 2+ENTRY(__start)
 3+OUTPUT_FORMAT(elf32-littlearm)
 4+OUTPUT_ARCH(arm)
 5+STARTUP(build/ipodtouch2g/target/ipodtouch2g/crt0.o)
 6+
 7+MEMORY
 8+{
 9+ INIT : ORIGIN = 0x09000000, LENGTH = 0x06b00000
 10+ SRAM : ORIGIN = 0x22000000, LENGTH = 0x00100000
 11+ SDRAM : ORIGIN = 0x0fb00000, LENGTH = 0x00100000
 12+}
 13+
 14+SECTIONS
 15+{
 16+ .inithead :
 17+ {
 18+ _initheadstart = .;
 19+ _poolstart = .;
 20+ *(.inithead*)
 21+ . = ALIGN(0x4);
 22+ _initheadend = .;
 23+ } > INIT
 24+
 25+ .sram :
 26+ {
 27+ _sramstart = .;
 28+ KEEP(*(.intvect))
 29+ *(.intvect)
 30+ *(.icode*)
 31+ *(.irodata*)
 32+ *(.idata*)
 33+ . = ALIGN(0x4);
 34+ _sramend = .;
 35+ } > SRAM AT> INIT
 36+ _sramsource = LOADADDR(.sram);
 37+
 38+ .sdram :
 39+ {
 40+ _sdramstart = .;
 41+ _poolend = .;
 42+ *(.text*)
 43+ *(.glue_7)
 44+ *(.glue_7t)
 45+ . = ALIGN(0x4);
 46+ *(.rodata*)
 47+ . = ALIGN(0x4);
 48+ *(.data*)
 49+ . = ALIGN(0x4);
 50+ _sdramend = .;
 51+ } > SDRAM AT> INIT
 52+ _sdramsource = LOADADDR(.sdram);
 53+
 54+ .init :
 55+ {
 56+ _initstart = .;
 57+ *(.initcode*)
 58+ *(.initrodata*)
 59+ *(.initdata*)
 60+ . = ALIGN(0x4);
 61+ _initend = .;
 62+ } > INIT
 63+
 64+ .inittail :
 65+ {
 66+ _inittailstart = .;
 67+ *(.inittail*)
 68+ . = ALIGN(0x4);
 69+ _inittailend = .;
 70+ } > INIT
 71+
 72+ .ibss (NOLOAD) :
 73+ {
 74+ _ibssstart = .;
 75+ *(.ibss*)
 76+ . = ALIGN(0x4);
 77+ _abortstackstart = .;
 78+ . += 0x400;
 79+ _abortstackend = .;
 80+ _irqstackstart = .;
 81+ . += 0x400;
 82+ _irqstackend = .;
 83+ *(.stack*)
 84+ . = ALIGN(0x4);
 85+ _ibssend = .;
 86+ } > SRAM
 87+
 88+ .bss (NOLOAD) :
 89+ {
 90+ _bssstart = .;
 91+ *(.bss*)
 92+ *(COMMON)
 93+ . = ALIGN(0x4);
 94+ _bssend = .;
 95+ } > SDRAM
 96+
 97+ /DISCARD/ :
 98+ {
 99+ *(.eh_frame)
 100+ }
 101+
 102+}
Index: emcore/trunk/target/ipodtouch2g/crt0.S
@@ -0,0 +1,305 @@
 2+@
 3+@
 4+@ Copyright 2010 TheSeven
 5+@
 6+@
 7+@ This file is part of emCORE.
 8+@
 9+@ emCORE is free software: you can redistribute it and/or
 10+@ modify it under the terms of the GNU General Public License as
 11+@ published by the Free Software Foundation, either version 2 of the
 12+@ License, or (at your option) any later version.
 13+@
 14+@ emCORE is distributed in the hope that it will be useful,
 15+@ but WITHOUT ANY WARRANTY; without even the implied warranty of
 16+@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 17+@ See the GNU General Public License for more details.
 18+@
 19+@ You should have received a copy of the GNU General Public License
 20+@ along with emCORE. If not, see <http://www.gnu.org/licenses/>.
 21+@
 22+@
 23+
 24+
 25+.section .intvect,"ax",%progbits
 26+ ldr pc, =reset_handler
 27+ ldr pc, =undef_instr_handler
 28+ ldr pc, =syscall_handler
 29+ ldr pc, =prefetch_abort_handler
 30+ ldr pc, =data_abort_handler
 31+ ldr pc, =reserved_handler
 32+ ldr pc, =irq_handler
 33+ ldr pc, =fiq_handler
 34+.ltorg
 35+
 36+
 37+.section .inithead,"ax",%progbits
 38+.global __start
 39+__start:
 40+ b _start
 41+
 42+.section .initcode,"ax",%progbits
 43+.global _start
 44+_start:
 45+ ldr r0, =0x00450878
 46+ mcr p15, 0, r0,c1,c0,0
 47+ ldr r0, =_sramsource
 48+ ldr r1, =_sramstart
 49+ ldr r2, =_sramend
 50+.copysram:
 51+ cmp r2, r1
 52+ ldrhi r3, [r0], #4
 53+ strhi r3, [r1], #4
 54+ bhi .copysram
 55+ ldr r0, =_sdramsource
 56+ ldr r1, =_sdramstart
 57+ ldr r2, =_sdramend
 58+.copysdram:
 59+ cmp r2, r1
 60+ ldrhi r3, [r0], #4
 61+ strhi r3, [r1], #4
 62+ bhi .copysdram
 63+ ldr r0, =_ibssstart
 64+ ldr r1, =_ibssend
 65+ mov r2, #0
 66+.clearibss:
 67+ cmp r1, r0
 68+ strhi r2, [r0], #4
 69+ bhi .clearibss
 70+ ldr r0, =_bssstart
 71+ ldr r1, =_bssend
 72+.clearbss:
 73+ cmp r1, r0
 74+ strhi r2, [r0], #4
 75+ bhi .clearbss
 76+ ldr r1, =0x38200000
 77+ ldr r0, [r1]
 78+ orr r0, r0, #1
 79+ bic r0, r0, #0x10000
 80+ str r0, [r1]
 81+ mov r0, #0
 82+ mcr p15, 0, r0,c7,c5,0
 83+ add r1, r1, #0x00c00000
 84+ add r2, r1, #0x00001000
 85+ add r3, r1, #0x00002000
 86+ sub r4, r0, #1
 87+ str r4, [r1,#0x14]
 88+ str r4, [r2,#0x14]
 89+ str r4, [r1,#0xf00]
 90+ str r4, [r2,#0xf00]
 91+ str r4, [r3,#0x08]
 92+ str r4, [r3,#0x0c]
 93+ str r0, [r1,#0x14]
 94+ str r0, [r2,#0x14]
 95+ mov r0, #0
 96+ ldr r1, =0x3c500000
 97+ str r0, [r1,#0x48]
 98+ str r0, [r1,#0x4c]
 99+ msr cpsr_c, #0xd2
 100+ ldr sp, =_irqstackend
 101+ msr cpsr_c, #0xd7
 102+ ldr sp, =_abortstackend
 103+ msr cpsr_c, #0xdb
 104+ ldr sp, =_abortstackend
 105+ msr cpsr_c, #0x1f
 106+ ldr sp, =_abortstackend
 107+ bl init
 108+ bl yield
 109+ mov r0, #0
 110+ ldr pc, =idleloop
 111+.ltorg
 112+
 113+
 114+.section .icode, "ax", %progbits
 115+.align 2
 116+idleloop:
 117+ mcr p15, 0, r0,c7,c0,4
 118+ b idleloop
 119+
 120+.global reset
 121+.global hang
 122+.type reset, %function
 123+.type hang, %function
 124+reset:
 125+ msr cpsr_c, #0xd3
 126+ mov r0, #0x100000
 127+ mov r1, #0x3c800000
 128+ str r0, [r1]
 129+hang:
 130+ msr cpsr_c, #0xd3
 131+ mcr p15, 0, r0,c7,c0,4
 132+ b hang
 133+.size reset, .-reset
 134+.size hang, .-hang
 135+
 136+.type reset_handler, %function
 137+reset_handler:
 138+ stmfd sp, {r10-r12}
 139+ mov r10, sp
 140+ mov r11, lr
 141+ mrs r12, cpsr
 142+ msr cpsr_c, #0xd7
 143+ sub sp, sp, #0x44
 144+ stmia sp!, {r0-r9}
 145+ sub r0, r10, #0xc
 146+ ldmia r0, {r0-r2}
 147+ mov r3, r10
 148+ mov r4, r11
 149+ mov r5, r11
 150+ mov r6, r12
 151+ stmia sp!, {r0-r6}
 152+ sub sp, sp, #0x44
 153+ mov r0, #0
 154+ adr r1, reset_text
 155+ mov r2, r11
 156+ b panic
 157+.size reset_handler, .-reset_handler
 158+
 159+.global undef_instr_handler
 160+.type undef_instr_handler, %function
 161+undef_instr_handler:
 162+ sub sp, sp, #0x44
 163+ stmia sp!, {r0-r12}
 164+ sub r2, lr, #4
 165+ mrs r3, spsr
 166+ mrs r4, cpsr
 167+ orr r0, r3, #0xc0
 168+ msr cpsr_c, r0
 169+ mov r0, sp
 170+ mov r1, lr
 171+ msr cpsr_c, r4
 172+ stmia sp!, {r0-r3}
 173+ sub sp, sp, #0x44
 174+ mov r0, #0
 175+ adr r1, undef_instr_text
 176+ ldr r3, [r2]
 177+ b panicf
 178+.size undef_instr_handler, .-undef_instr_handler
 179+
 180+.type prefetch_abort_handler, %function
 181+prefetch_abort_handler:
 182+ sub sp, sp, #0x44
 183+ stmia sp!, {r0-r12}
 184+ sub r2, lr, #4
 185+ mrs r3, spsr
 186+ mrs r4, cpsr
 187+ orr r0, r3, #0xc0
 188+ msr cpsr_c, r0
 189+ mov r0, sp
 190+ mov r1, lr
 191+ msr cpsr_c, r4
 192+ stmia sp!, {r0-r3}
 193+ sub sp, sp, #0x44
 194+ mov r0, #0
 195+ adr r1, prefetch_abort_text
 196+ mrc p15, 0, r3,c5,c0,1
 197+ mov r4, r3,lsr#4
 198+ and r4, r4, #0xf
 199+ and r5, r3, #0xf
 200+ stmfd sp!, {r4-r5}
 201+ b panicf
 202+.size prefetch_abort_handler, .-prefetch_abort_handler
 203+
 204+.type data_abort_handler, %function
 205+data_abort_handler:
 206+ sub sp, sp, #0x44
 207+ stmia sp!, {r0-r12}
 208+ sub r2, lr, #8
 209+ mrs r3, spsr
 210+ mrs r4, cpsr
 211+ orr r0, r3, #0xc0
 212+ msr cpsr_c, r0
 213+ mov r0, sp
 214+ mov r1, lr
 215+ msr cpsr_c, r4
 216+ stmia sp!, {r0-r3}
 217+ sub sp, sp, #0x44
 218+ mov r0, #0
 219+ adr r1, data_abort_text
 220+ mrc p15, 0, r3,c5,c0
 221+ mov r4, r3,lsr#4
 222+ and r4, r4, #0xf
 223+ and r5, r3, #0xf
 224+ mrc p15, 0, r6,c6,c0
 225+ stmfd sp!, {r4-r6}
 226+ b panicf
 227+.size data_abort_handler, .-data_abort_handler
 228+
 229+.type reserved_handler, %function
 230+reserved_handler:
 231+ stmfd sp, {r10-r12}
 232+ mov r10, sp
 233+ mov r11, lr
 234+ mrs r12, cpsr
 235+ msr cpsr_c, #0xd7
 236+ sub sp, sp, #0x44
 237+ stmia sp!, {r0-r9}
 238+ sub r0, r10, #0xc
 239+ ldmia r0, {r0-r2}
 240+ mov r3, r10
 241+ mov r4, r11
 242+ mov r5, r11
 243+ mov r6, r12
 244+ stmia sp!, {r0-r6}
 245+ sub sp, sp, #0x44
 246+ mov r0, #0
 247+ adr r1, reserved_text
 248+ mov r2, r11
 249+ b panic
 250+.size reserved_handler, .-reserved_handler
 251+
 252+.type fiq_handler, %function
 253+fiq_handler:
 254+ mov r0, #2
 255+ adr r1, fiq_text
 256+ b panic
 257+.size fiq_handler, .-fiq_handler
 258+
 259+prefetch_abort_text:
 260+ .ascii "Prefetch abort at %08X!\nFSR: %08X (domain %d, fault %d)\0"
 261+
 262+reset_text:
 263+ .ascii "Hit reset vector!\n(Last known PC: %08X)\0"
 264+
 265+undef_instr_text:
 266+ .ascii "Undefined instruction at %08X!\n(Opcode: %08X)\0"
 267+
 268+data_abort_text:
 269+ .ascii "Data abort at %08X!\nFSR: %08X (domain %d, fault %d)\nAddress: %08X\0"
 270+
 271+fiq_text:
 272+ .ascii "Unhandled FIQ!\0"
 273+
 274+reserved_text:
 275+ .ascii "Hit reserved exception handler!\n(Last known PC: %08X)\0"
 276+
 277+syscall_text:
 278+ .ascii "Unhandled syscall!\0"
 279+
 280+
 281+.section .icode.usec_timer, "ax", %progbits
 282+.align 2
 283+.global read_native_timer
 284+.type read_native_timer, %function
 285+read_native_timer:
 286+ ldr r0, val_3c700000
 287+ ldr r1, [r0,#0x80]
 288+ ldr r0, [r0,#0x84]
 289+ bx lr
 290+.size read_native_timer, .-read_native_timer
 291+
 292+.global read_usec_timer
 293+.type read_usec_timer, %function
 294+read_usec_timer:
 295+ ldr r0, val_3c700000
 296+ ldr r1, [r0,#0x80]
 297+ ldr r0, [r0,#0x84]
 298+ mov r0, r0,lsr#5
 299+ orr r0, r0, r1,lsl#27
 300+ add r0, r0, r0,asr#2
 301+ add r0, r0, r0,asr#6
 302+ bx lr
 303+.size read_usec_timer, .-read_usec_timer
 304+
 305+val_3c700000:
 306+ .word 0x3c700000
Index: emcore/trunk/target/ipodtouch2g/config.h
@@ -0,0 +1,40 @@
 2+//
 3+//
 4+// Copyright 2009 TheSeven
 5+//
 6+//
 7+// This file is part of the Linux4Nano toolkit.
 8+//
 9+// TheSeven's iBugger is free software: you can redistribute it and/or
 10+// modify it under the terms of the GNU General Public License as
 11+// published by the Free Software Foundation, either version 2 of the
 12+// License, or (at your option) any later version.
 13+//
 14+// TheSeven's iBugger is distributed in the hope that it will be useful,
 15+// but WITHOUT ANY WARRANTY; without even the implied warranty of
 16+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 17+// See the GNU General Public License for more details.
 18+//
 19+// You should have received a copy of the GNU General Public License along
 20+// with the Linux4Nano toolkit. If not, see <http://www.gnu.org/licenses/>.
 21+//
 22+//
 23+
 24+
 25+#ifndef __CONFIG_H__
 26+#define __CONFIG_H__
 27+
 28+
 29+//#define NAND_DEBUG
 30+//#define NAND_TRACE
 31+//#define VFL_DEBUG
 32+//#define VFL_TRACE
 33+//#define FTL_DEBUG
 34+//#define FTL_TRACE
 35+
 36+
 37+//#define DEBUG_CONSOLES 2
 38+//#define DEBUG_PRINT_SOURCE_LINE
 39+
 40+
 41+#endif
Index: emcore/trunk/target/ipodtouch2g/target.h
@@ -0,0 +1,64 @@
 2+//
 3+//
 4+// Copyright 2010 TheSeven
 5+//
 6+//
 7+// This file is part of emCORE.
 8+//
 9+// emCORE is free software: you can redistribute it and/or
 10+// modify it under the terms of the GNU General Public License as
 11+// published by the Free Software Foundation, either version 2 of the
 12+// License, or (at your option) any later version.
 13+//
 14+// emCORE is distributed in the hope that it will be useful,
 15+// but WITHOUT ANY WARRANTY; without even the implied warranty of
 16+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 17+// See the GNU General Public License for more details.
 18+//
 19+// You should have received a copy of the GNU General Public License along
 20+// with emCORE. If not, see <http://www.gnu.org/licenses/>.
 21+//
 22+//
 23+
 24+
 25+#ifndef __TARGET_H__
 26+#define __TARGET_H__
 27+
 28+
 29+#define PLATFORM_ID 0x47325449
 30+
 31+
 32+#define ARM_ARCH 6
 33+#define LITTLE_ENDIAN
 34+#define CACHEALIGN_BITS 4
 35+#define CPU_FREQ 532000000
 36+
 37+
 38+#define CONSOLE_BOOT 3
 39+#define CONSOLE_PANIC 3
 40+#define CONSOLE_PANICDUMP 0
 41+
 42+
 43+#define HAVE_USB
 44+#define USB_NUM_ENDPOINTS 5
 45+
 46+#define HAVE_LCD
 47+#define LCD_WIDTH 320
 48+#define LCD_HEIGHT 480
 49+#define LCD_FORMAT 0x00721d07 // rgb888
 50+#define LCD_BYTESPERPIXEL 4
 51+#define LCDCONSOLE_FGCOLOR 0
 52+#define LCDCONSOLE_BGCOLOR -1
 53+
 54+#define HAVE_BACKLIGHT
 55+
 56+#define HAVE_I2C
 57+
 58+//#define HAVE_STORAGE
 59+//#define HAVE_FLASH_STORAGE
 60+//#define HAVE_STORAGE_FLUSH
 61+//#define CONFIG_STORAGE STORAGE_NAND
 62+//#define SECTOR_SIZE 4096
 63+
 64+
 65+#endif
Index: emcore/trunk/target/ipodtouch2g/target.mk
@@ -0,0 +1 @@
 2+CFLAGS_ipodtouch2g += -mcpu=arm1136j-s
Index: emcore/trunk/SOURCES
@@ -59,6 +59,19 @@
6060 target/ipodclassic/usbtarget.c
6161 #endif
6262
 63+#ifdef TARGET_ipodtouch2g
 64+target/ipodnano4g/mmu.c
 65+target/ipodnano4g/timer.c
 66+target/ipodnano4g/i2c.S
 67+target/ipodnano4g/interrupt.c
 68+target/ipodnano4g/power.c
 69+target/ipodnano4g/accel.c
 70+target/ipodnano4g/backlight.c
 71+target/ipodnano4g/clockgates.c
 72+target/ipodtouch2g/lcd.c
 73+usb/synopsysotg.c
 74+#endif
 75+
6376 #ifdef ARM_ARCH
6477 arm/arm-support.S
6578 arm/contextswitch.S
Index: emcore/trunk/usb/synopsysotg.h
@@ -34,7 +34,7 @@
3535 #if defined(TARGET_ipodnano3g) || defined(TARGET_ipodclassic)
3636 #include "target/ipodnano3g/s5l8702.h"
3737 #endif
38 -#ifdef TARGET_ipodnano4g
 38+#if defined(TARGET_ipodnano4g) || defined(TARGET_ipodtouch2g)
3939 #include "target/ipodnano4g/s5l8720.h"
4040 #endif
4141