head-rom.S 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. .global _start
  2. .global _stext
  3. .global _rambase
  4. .global _ramvec
  5. .global _ramstart
  6. .global _ramend
  7. #ifdef CONFIG_INIT_LCD
  8. .global bootlogo_bits
  9. #endif
  10. .data
  11. /*
  12. * Set up the usable of RAM stuff. Size of RAM is determined then
  13. * an initial stack set up at the end.
  14. */
  15. .align 4
  16. _ramvec:
  17. .long 0
  18. _rambase:
  19. .long 0
  20. _ramstart:
  21. .long 0
  22. _ramend:
  23. .long 0
  24. #define RAMEND (CONFIG_RAMBASE + CONFIG_RAMSIZE)
  25. .text
  26. _start:
  27. _stext: movew #0x2700,%sr
  28. #ifdef CONFIG_INIT_LCD
  29. movel #bootlogo_bits, 0xfffffA00 /* LSSA */
  30. moveb #0x28, 0xfffffA05 /* LVPW */
  31. movew #0x280, 0xFFFFFa08 /* LXMAX */
  32. movew #0x1df, 0xFFFFFa0a /* LYMAX */
  33. moveb #0, 0xfffffa29 /* LBAR */
  34. moveb #0, 0xfffffa25 /* LPXCD */
  35. moveb #0x08, 0xFFFFFa20 /* LPICF */
  36. moveb #0x01, 0xFFFFFA21 /* -ve pol */
  37. moveb #0x81, 0xfffffA27 /* LCKCON */
  38. movew #0xff00, 0xfffff412 /* LCD pins */
  39. #endif
  40. moveal #RAMEND-CONFIG_MEMORY_RESERVE*0x100000 - 0x10, %sp
  41. movew #32767, %d0 /* PLL settle wait loop */
  42. 1: subq #1, %d0
  43. bne 1b
  44. /* Copy data segment from ROM to RAM */
  45. moveal #_etext, %a0
  46. moveal #_sdata, %a1
  47. moveal #_edata, %a2
  48. /* Copy %a0 to %a1 until %a1 == %a2 */
  49. 1: movel %a0@+, %a1@+
  50. cmpal %a1, %a2
  51. bhi 1b
  52. moveal #_sbss, %a0
  53. moveal #_ebss, %a1
  54. /* Copy 0 to %a0 until %a0 == %a1 */
  55. 1:
  56. clrl %a0@+
  57. cmpal %a0, %a1
  58. bhi 1b
  59. movel #_sdata, %d0
  60. movel %d0, _rambase
  61. movel #_ebss, %d0
  62. movel %d0, _ramstart
  63. movel #RAMEND-CONFIG_MEMORY_RESERVE*0x100000, %d0
  64. movel %d0, _ramend
  65. movel #CONFIG_VECTORBASE, %d0
  66. movel %d0, _ramvec
  67. /*
  68. * load the current task pointer and stack
  69. */
  70. lea init_thread_union, %a0
  71. lea 0x2000(%a0), %sp
  72. 1: jsr start_kernel
  73. bra 1b
  74. _exit:
  75. jmp _exit
  76. putc:
  77. moveb %d7,0xfffff907
  78. 1:
  79. movew 0xfffff906, %d7
  80. andw #0x2000, %d7
  81. beq 1b
  82. rts
  83. .data
  84. env:
  85. .long 0
  86. .text