atm959

main.asm

Aug 13th, 2018
438
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;****************************************************************************************************************************************************
  2. ;*  Includes
  3. ;****************************************************************************************************************************************************
  4.  
  5.     INCLUDE "tileData/alice.inc"
  6.    
  7. ;****************************************************************************************************************************************************
  8. ;*  user data [constants]
  9. ;****************************************************************************************************************************************************
  10.  
  11.  
  12. ;****************************************************************************************************************************************************
  13. ;*  equates
  14. ;****************************************************************************************************************************************************
  15.  
  16. ;****************************************************************************************************************************************************
  17. ;*  macros
  18. ;****************************************************************************************************************************************************
  19.  
  20. ;****************************************************************************************************************************************************
  21. ;*  cartridge header
  22. ;****************************************************************************************************************************************************
  23.  
  24.     SECTION "Org $00",ROM0[$00]
  25. RST_00:
  26.     jp  $100
  27.  
  28.     SECTION "Org $08",ROM0[$08]
  29. RST_08:
  30.     jp  $100
  31.  
  32.     SECTION "Org $10",ROM0[$10]
  33. RST_10:
  34.     jp  $100
  35.  
  36.     SECTION "Org $18",ROM0[$18]
  37. RST_18:
  38.     jp  $100
  39.  
  40.     SECTION "Org $20",ROM0[$20]
  41. RST_20:
  42.     jp  $100
  43.  
  44.     SECTION "Org $28",ROM0[$28]
  45. RST_28:
  46.     jp  $100
  47.  
  48.     SECTION "Org $30",ROM0[$30]
  49. RST_30:
  50.     jp  $100
  51.  
  52.     SECTION "Org $38",ROM0[$38]
  53. RST_38:
  54.     jp  $100
  55.  
  56.     SECTION "V-Blank IRQ Vector",ROM0[$40]
  57. VBL_VECT:
  58.     jp VBlank
  59.    
  60.     SECTION "LCD IRQ Vector",ROM0[$48]
  61. LCD_VECT:
  62.     reti
  63.  
  64.     SECTION "Timer IRQ Vector",ROM0[$50]
  65. TIMER_VECT:
  66.     reti
  67.  
  68.     SECTION "Serial IRQ Vector",ROM0[$58]
  69. SERIAL_VECT:
  70.     reti
  71.  
  72.     SECTION "Joypad IRQ Vector",ROM0[$60]
  73. JOYPAD_VECT:
  74.     reti
  75.    
  76.     SECTION "Start",ROM0[$100]
  77.     nop
  78.     jp  Start
  79.  
  80.     ; $0104-$0133 [Nintendo logo - do _not_ modify the logo data here or the GB will not run the program]
  81.     DB  $CE,$ED,$66,$66,$CC,$0D,$00,$0B,$03,$73,$00,$83,$00,$0C,$00,$0D
  82.     DB  $00,$08,$11,$1F,$88,$89,$00,$0E,$DC,$CC,$6E,$E6,$DD,$DD,$D9,$99
  83.     DB  $BB,$BB,$67,$63,$6E,$0E,$EC,$CC,$DD,$DC,$99,$9F,$BB,$B9,$33,$3E
  84.  
  85.     ; $0134-$013E [Game title - up to 11 upper case ASCII characters, pad with $00]
  86.     DB  "ALICE IMAGE"
  87.         ;0123456789A
  88.  
  89.     ; $013F-$0142 [Product code - 4 ASCII characters, assigned by Nintendo, just leave blank]
  90.     DB  "    "
  91.         ;0123
  92.  
  93.     ; $0143 [Color GameBoy compatibility code]
  94.     DB  $00 ; $00 - DMG
  95.             ; $80 - DMG/GBC
  96.             ; $C0 - GBC Only cartridge
  97.  
  98.     ; $0144 [High-nibble of license code - normally $00 if $014B != $33]
  99.     DB  $00
  100.  
  101.     ; $0145 [Low-nibble of license code - normally $00 if $014B != $33]
  102.     DB  $00
  103.  
  104.     ; $0146 [GameBoy/Super GameBoy indicator]
  105.     DB  $00 ; $00 - GameBoy
  106.  
  107.     ; $0147 [Cartridge type - all Color GameBoy cartridges are at least $19]
  108.     DB  $00 ; $00 - ROM Only
  109.  
  110.     ; $0148 [ROM size]
  111.     DB  $00 ; $00 - 256Kbit = 32Kbyte = 2 banks
  112.  
  113.     ; $0149 [RAM size]
  114.     DB  $00 ; $00 - None
  115.  
  116.     ; $014A [Destination code]
  117.     DB  $01 ; $01 - All others
  118.             ; $00 - Japan
  119.  
  120.     ; $014B [Licensee code - this _must_ be $33]
  121.     DB  $33 ; $33 - Check $0144/$0145 for Licensee code.
  122.  
  123.     ; $014C [Mask ROM version - handled by RGBFIX]
  124.     DB  $00
  125.  
  126.     ; $014D [Complement check - handled by RGBFIX]
  127.     DB  $00
  128.  
  129.     ; $014E-$014F [Cartridge checksum - handled by RGBFIX]
  130.     DW  $00
  131.  
  132.  
  133. ;****************************************************************************************************************************************************
  134. ;*  Program Start
  135. ;****************************************************************************************************************************************************
  136.  
  137.     SECTION "Program Start",ROM0[$0150]
  138. Start:
  139.     ld  sp,$FFFE            ;set the stack pointer to $FFFE
  140.  
  141.     call clearWRAM          ;Clear the Work RAM
  142.  
  143.     ei
  144.     ld a, $01
  145.     ld [$FFFF], a
  146.  
  147. Loop:
  148.  
  149. .waitVBlankDone:
  150.     ld a, [$C002]
  151.     cp a, $01
  152.     jr nz, .waitVBlankDone
  153.     ld a, $00
  154.     ld [$C002], a
  155.  
  156.     jp Loop
  157.  
  158. ;***************************************************************
  159. ;* Subroutines
  160. ;***************************************************************
  161.  
  162.     SECTION "Support Routines",ROM0
  163.  
  164. clearWRAM:
  165.     ld hl, $C000
  166.     ld bc, $1FFF
  167. .clearWRAMLoop:
  168.     ld a, $00
  169.     ld [hl], a
  170.     inc hl
  171.     dec bc
  172.     ld a, b
  173.     or c
  174.     jr nz, .clearWRAMLoop
  175.     ret
  176.  
  177. clearOAM:
  178.     ld hl, $FE00
  179.     ld bc, 40*4
  180. .clearOAMLoop:
  181.     ld a, $00
  182.     ld [hl], a
  183.     inc hl
  184.     dec bc
  185.     ld a, b
  186.     or c
  187.     jr nz, .clearOAMLoop
  188.     ret
  189.  
  190. clearMap:
  191.     ld hl, $9800
  192.     ld de, $9C00
  193.     ld bc, 32*32
  194. .clearMapLoop:
  195.     ld a, $00
  196.     ld [hl], a
  197.     ld [de], a
  198.     inc hl
  199.     inc de
  200.     dec bc
  201.     ld a, b
  202.     or c
  203.     jr nz, .clearMapLoop
  204.     ret
  205.  
  206. loadTiles:
  207. .loadTilesLoop:
  208.     ld a, [hl]
  209.     ld [de], a
  210.     inc hl
  211.     inc de
  212.     dec bc
  213.     ld a, b
  214.     or c
  215.     jr nz, .loadTilesLoop
  216.     ret
  217.  
  218. placeImage:
  219.     ld a, $00
  220.     ld [$9800], a
  221.     ld a, $01
  222.     ld [$9801], a
  223.     ld a, $02
  224.     ld [$9802], a
  225.     ld a, $03
  226.     ld [$9803], a
  227.     ret
  228.  
  229. VBlank:
  230.     ld a, [$C001]
  231.     cp a, $01
  232.     jr z, .skipInit
  233.  
  234. .waitRealVBlank:
  235.     ld  a,[$FF44]           ;get current scanline
  236.     cp  $91                 ;Are we in v-blank yet?
  237.     jr  nz, .waitRealVBlank ;if A != 0x91 then loop
  238.  
  239.     ld  a, $00              ;Load 0x00 to A
  240.     ld  [$FF40],a           ;turn off LCD
  241.  
  242.     call clearOAM           ;Clear OAM
  243.     call clearMap           ;Clear BG
  244.  
  245.     ld hl, alice3_tile_data     ;Load a pointer to the tiles into HL
  246.     ld de, $8000                ;Load the destination in VRAM to DE
  247.     ld bc, alice3_tile_data_size;Load the number of bytes to load into BC
  248.     call loadTiles              ;Load the tiles
  249.  
  250.     call placeImage
  251.  
  252.     ld a, %11100100         ;Load 0xE4 to A
  253.     ld [$FF47], a           ;Load A into 0xFF47 (DMG BG Shades)
  254.     ld [$FF48], a           ;Load A into 0xFF48 (DMG Sprite Shades)
  255.  
  256.     ld  a, $D2
  257.     ld  [$FF40],a           ;Turn on the LCD, BG, etc
  258.  
  259.     ld a, $01
  260.     ld [$C001], a
  261.  
  262. .skipInit:
  263.  
  264.     ld a, $01
  265.     ld [$C002], a
  266.     reti
Advertisement
Add Comment
Please, Sign In to add comment