You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

107 lines
1.3 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. INCLUDE "hardware.inc"
  2. INCLUDE "util.inc"
  3. SECTION "Header", ROM0[$100]
  4. _entry:
  5. di
  6. jp start
  7. rept $150 - _entry
  8. db 0
  9. endr
  10. SECTION "Frame", WRAM0
  11. frame:: db
  12. SECTION "VBlank", ROM0[$40]
  13. handle_vblank:
  14. reti
  15. SECTION "Code", ROM0
  16. start:
  17. ld hl, rLCDC
  18. res 7, [hl]
  19. res 2, [hl]
  20. ld hl, rIE
  21. ld [hl], IEF_VBLANK
  22. call OAM_Init
  23. ; call Keys_Init
  24. ; call Player_Init
  25. ld hl, intro_Data
  26. call Map_Load
  27. ; set palette
  28. ld a, %11100100
  29. ld hl, rOBP0
  30. ld [hl], a
  31. ld hl, rBGP
  32. ld [hl], a
  33. ; enable lcd, sprites and interrupts
  34. ld hl, rLCDC
  35. set 7, [hl]
  36. set 1, [hl]
  37. ei
  38. .loop:
  39. ld hl, frame
  40. inc [hl]
  41. call Keys_Update
  42. call scroll_update
  43. ; wait for vblank
  44. halt
  45. call Map_Update
  46. ; ~160 cycles
  47. ld a, HIGH(_OAM)
  48. call DMA_Start
  49. jp .loop
  50. ; TODO: Move into player movement routine
  51. scroll_update:
  52. ; scroll map with arrow keys
  53. ld a, [keys]
  54. and PADF_UP
  55. jr z, .down
  56. ld d, 1
  57. call Map_ScrollUp
  58. ret
  59. .down:
  60. ld a, [keys]
  61. and PADF_DOWN
  62. jr z, .right
  63. ld d, 1
  64. call Map_ScrollDown
  65. ret
  66. .right:
  67. ld a, [keys]
  68. and PADF_RIGHT
  69. jr z, .left
  70. ld d, 1
  71. call Map_ScrollRight
  72. ret
  73. .left:
  74. ld a, [keys]
  75. and PADF_LEFT
  76. ret z
  77. ld d, 1
  78. call Map_ScrollLeft