A dungeon delver roguelike using Pathfinder 2nd edition rules
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Adding blank code

+272 -220
+254 -62
gb/hardware.inc
··· 1 1 ;* 2 - ;* Gameboy Hardware definitions 2 + ;* Game Boy Hardware definitions 3 + ;* https://github.com/gbdev/hardware.inc 3 4 ;* 4 5 ;* Based on Jones' hardware.inc 5 6 ;* And based on Carsten Sorensen's ideas. 7 + ;* 8 + ;* To the extent possible under law, the authors of this work have 9 + ;* waived all copyright and related or neighboring rights to the work. 10 + ;* See https://creativecommons.org/publicdomain/zero/1.0/ for details. 11 + ;* 12 + ;* SPDX-License-Identifier: CC0-1.0 6 13 ;* 7 14 ;* Rev 1.1 - 15-Jul-97 : Added define check 8 15 ;* Rev 1.2 - 18-Jul-97 : Added revision check macro ··· 26 33 ;* Rev 2.9 - 28-Feb-20 : Added utility rP1 constants 27 34 ;* Rev 3.0 - 27-Aug-20 : Register ordering, byte-based sizes, OAM additions, general cleanup (Blitter Object) 28 35 ;* Rev 4.0 - 03-May-21 : Updated to use RGBDS 0.5.0 syntax, changed IEF_LCDC to IEF_STAT (Eievui) 36 + ;* Rev 4.1 - 16-Aug-21 : Added more flags, bit number defines, and offset constants for OAM and window positions (rondnelson99) 37 + ;* Rev 4.2 - 04-Sep-21 : Added CH3- and CH4-specific audio registers flags (ISSOtm) 38 + ;* Rev 4.3 - 07-Nov-21 : Deprecate VRAM address constants (Eievui) 39 + ;* Rev 4.4 - 11-Jan-22 : Deprecate VRAM CART_SRAM_2KB constant (avivace) 40 + ;* Rev 4.5 - 03-Mar-22 : Added bit number definitions for OCPS, BCPS and LCDC (sukus) 41 + ;* Rev 4.6 - 15-Jun-22 : Added MBC3 registers and special values 42 + ;* Rev 4.7.0 - 27-Jun-22 : Added alternate names for some constants 43 + ;* Rev 4.7.1 - 05-Jul-22 : Added RPB_LED_ON constant 44 + ;* Rev 4.8.0 - 25-Oct-22 : Changed background addressing constants (zlago) 45 + ;* Rev 4.8.1 - 29-Apr-23 : Added rOPRI (rbong) 46 + ;* Rev 4.9.0 - 24-Jun-23 : Added definitions for interrupt vectors (sukus) 47 + ;* Rev 4.9.1 - 11-Sep-23 : Added repository link and CC0 waiver notice 48 + ;* Rev 4.9.2 - 18-Aug-24 : Corrected CART_ROM_MBC5_BAT to CART_ROM_MBC5_RAM (DevEd) 49 + 50 + 51 + ; NOTE: REVISION NUMBER CHANGES MUST BE REFLECTED 52 + ; IN `rev_Check_hardware_inc` BELOW! 29 53 30 54 IF __RGBDS_MAJOR__ == 0 && __RGBDS_MINOR__ < 5 31 55 FAIL "This version of 'hardware.inc' requires RGBDS version 0.5.0 or later." ··· 36 60 IF !DEF(HARDWARE_INC) 37 61 DEF HARDWARE_INC EQU 1 38 62 63 + ; Usage: rev_Check_hardware_inc <min_ver> 64 + ; Examples: rev_Check_hardware_inc 4.1.2 65 + ; rev_Check_hardware_inc 4.1 (equivalent to 4.1.0) 66 + ; rev_Check_hardware_inc 4 (equivalent to 4.0.0) 39 67 MACRO rev_Check_hardware_inc 40 - ;NOTE: REVISION NUMBER CHANGES MUST BE ADDED 41 - ;TO SECOND PARAMETER IN FOLLOWING LINE. 42 - IF \1 > 4.0 ;PUT REVISION NUMBER HERE 43 - WARN "Version \1 or later of 'hardware.inc' is required." 68 + DEF CUR_VER equs "4,9,2" ; ** UPDATE THIS LINE WHEN CHANGING THE REVISION NUMBER ** 69 + 70 + DEF MIN_VER equs STRRPL("\1", ".", ",") 71 + DEF INTERNAL_CHK equs """MACRO ___internal 72 + IF \\1 != \\4 || \\2 < \\5 || (\\2 == \\5 && \\3 < \\6) 73 + FAIL "Version \\1.\\2.\\3 of 'hardware.inc' is incompatible with requested version \\4.\\5.\\6" 44 74 ENDC 75 + \nENDM""" 76 + INTERNAL_CHK 77 + ___internal {CUR_VER}, {MIN_VER},0,0 78 + PURGE CUR_VER, MIN_VER, INTERNAL_CHK, ___internal 45 79 ENDM 46 80 81 + 82 + ;*************************************************************************** 83 + ;* 84 + ;* General memory region constants 85 + ;* 86 + ;*************************************************************************** 87 + 47 88 DEF _VRAM EQU $8000 ; $8000->$9FFF 48 - DEF _VRAM8000 EQU _VRAM 49 - DEF _VRAM8800 EQU _VRAM+$800 50 - DEF _VRAM9000 EQU _VRAM+$1000 51 89 DEF _SCRN0 EQU $9800 ; $9800->$9BFF 52 90 DEF _SCRN1 EQU $9C00 ; $9C00->$9FFF 53 91 DEF _SRAM EQU $A000 ; $A000->$BFFF ··· 58 96 DEF _AUD3WAVERAM EQU $FF30 ; $FF30->$FF3F 59 97 DEF _HRAM EQU $FF80 ; $FF80->$FFFE 60 98 61 - ; *** MBC5 Equates *** 99 + 100 + ;*************************************************************************** 101 + ;* 102 + ;* MBC registers 103 + ;* 104 + ;*************************************************************************** 105 + 106 + ; *** Common *** 62 107 63 - DEF rRAMG EQU $0000 ; $0000->$1fff 64 - DEF rROMB0 EQU $2000 ; $2000->$2fff 65 - DEF rROMB1 EQU $3000 ; $3000->$3fff - If more than 256 ROM banks are present. 66 - DEF rRAMB EQU $4000 ; $4000->$5fff - Bit 3 enables rumble (if present) 108 + ; -- 109 + ; -- RAMG ($0000-$1FFF) 110 + ; -- Controls whether access to SRAM (and the MBC3 RTC registers) is allowed (W) 111 + ; -- 112 + DEF rRAMG EQU $0000 113 + 114 + DEF CART_SRAM_ENABLE EQU $0A 115 + DEF CART_SRAM_DISABLE EQU $00 116 + 117 + 118 + ; -- 119 + ; -- ROMB0 ($2000-$3FFF) 120 + ; -- Selects which ROM bank is mapped to the ROMX space ($4000-$7FFF) (W) 121 + ; -- 122 + ; -- The range of accepted values, as well as the behavior of writing $00, 123 + ; -- varies depending on the MBC. 124 + ; -- 125 + DEF rROMB0 EQU $2000 126 + 127 + ; -- 128 + ; -- RAMB ($4000-$5FFF) 129 + ; -- Selects which SRAM bank is mapped to the SRAM space ($A000-$BFFF) (W) 130 + ; -- 131 + ; -- The range of accepted values varies depending on the cartridge configuration. 132 + ; -- 133 + DEF rRAMB EQU $4000 134 + 135 + 136 + ; *** MBC3-specific registers *** 137 + 138 + ; Write one of these to rRAMG to map the corresponding RTC register to all SRAM space 139 + DEF RTC_S EQU $08 ; Seconds (0-59) 140 + DEF RTC_M EQU $09 ; Minutes (0-59) 141 + DEF RTC_H EQU $0A ; Hours (0-23) 142 + DEF RTC_DL EQU $0B ; Lower 8 bits of Day Counter ($00-$FF) 143 + DEF RTC_DH EQU $0C ; Bit 7 - Day Counter Carry Bit (1=Counter Overflow) 144 + ; Bit 6 - Halt (0=Active, 1=Stop Timer) 145 + ; Bit 0 - Most significant bit of Day Counter (Bit 8) 146 + 147 + 148 + ; -- 149 + ; -- RTCLATCH ($6000-$7FFF) 150 + ; -- Write $00 then $01 to latch the current time into the RTC registers (W) 151 + ; -- 152 + DEF rRTCLATCH EQU $6000 153 + 154 + 155 + ; *** MBC5-specific register *** 156 + 157 + ; -- 158 + ; -- ROMB1 ($3000-$3FFF) 159 + ; -- A 9th bit that "extends" ROMB0 if more than 256 banks are present (W) 160 + ; -- 161 + ; -- Also note that rROMB0 thus only spans $2000-$2FFF. 162 + ; -- 163 + DEF rROMB1 EQU $3000 164 + 165 + 166 + ; Bit 3 of RAMB enables the rumble motor (if any) 167 + DEF CART_RUMBLE_ON EQU 1 << 3 67 168 68 169 69 170 ;*************************************************************************** 70 171 ;* 71 - ;* Custom registers 172 + ;* Memory-mapped registers 72 173 ;* 73 174 ;*************************************************************************** 74 175 ··· 103 204 ; -- 104 205 DEF rSC EQU $FF02 105 206 207 + DEF SCF_START EQU %10000000 ; Transfer Start Flag (1=Transfer in progress, or requested) 208 + DEF SCF_SPEED EQU %00000010 ; Clock Speed (0=Normal, 1=Fast) ** CGB Mode Only ** 209 + DEF SCF_SOURCE EQU %00000001 ; Shift Clock (0=External Clock, 1=Internal Clock) 210 + 211 + DEF SCB_START EQU 7 212 + DEF SCB_SPEED EQU 1 213 + DEF SCB_SOURCE EQU 0 106 214 107 215 ; -- 108 216 ; -- DIV ($FF04) ··· 137 245 DEF TACF_16KHZ EQU %00000011 138 246 DEF TACF_65KHZ EQU %00000010 139 247 DEF TACF_262KHZ EQU %00000001 248 + 249 + DEF TACB_START EQU 2 140 250 141 251 142 252 ; -- ··· 256 366 DEF rNR30 EQU $FF1A 257 367 DEF rAUD3ENA EQU rNR30 258 368 369 + DEF AUD3ENA_OFF EQU %00000000 370 + DEF AUD3ENA_ON EQU %10000000 371 + 259 372 260 373 ; -- 261 374 ; -- AUD3LEN/NR31 ($FF1B) ··· 279 392 ; -- 280 393 DEF rNR32 EQU $FF1C 281 394 DEF rAUD3LEVEL EQU rNR32 395 + 396 + DEF AUD3LEVEL_MUTE EQU %00000000 397 + DEF AUD3LEVEL_100 EQU %00100000 398 + DEF AUD3LEVEL_50 EQU %01000000 399 + DEF AUD3LEVEL_25 EQU %01100000 282 400 283 401 284 402 ; -- ··· 338 456 DEF rNR43 EQU $FF22 339 457 DEF rAUD4POLY EQU rNR43 340 458 459 + DEF AUD4POLY_15STEP EQU %00000000 460 + DEF AUD4POLY_7STEP EQU %00001000 461 + 341 462 342 463 ; -- 343 464 ; -- AUD4GO/NR44 ($FF23) 344 465 ; -- 345 - ; -- Bit 7 - Inital 466 + ; -- Bit 7 - Initial (when set, sound restarts) 346 467 ; -- Bit 6 - Counter/consecutive selection 347 468 ; -- 348 469 DEF rNR44 EQU $FF23 ··· 353 474 ; -- AUDVOL/NR50 ($FF24) 354 475 ; -- Channel control / ON-OFF / Volume (R/W) 355 476 ; -- 356 - ; -- Bit 7 - Vin->SO2 ON/OFF (Vin??) 357 - ; -- Bit 6-4 - SO2 output level (volume) (# 0-7) 358 - ; -- Bit 3 - Vin->SO1 ON/OFF (Vin??) 359 - ; -- Bit 2-0 - SO1 output level (volume) (# 0-7) 477 + ; -- Bit 7 - Vin->SO2 ON/OFF (left) 478 + ; -- Bit 6-4 - SO2 output level (left speaker) (# 0-7) 479 + ; -- Bit 3 - Vin->SO1 ON/OFF (right) 480 + ; -- Bit 2-0 - SO1 output level (right speaker) (# 0-7) 360 481 ; -- 361 482 DEF rNR50 EQU $FF24 362 483 DEF rAUDVOL EQU rNR50 ··· 369 490 ; -- AUDTERM/NR51 ($FF25) 370 491 ; -- Selection of Sound output terminal (R/W) 371 492 ; -- 372 - ; -- Bit 7 - Output sound 4 to SO2 terminal 373 - ; -- Bit 6 - Output sound 3 to SO2 terminal 374 - ; -- Bit 5 - Output sound 2 to SO2 terminal 375 - ; -- Bit 4 - Output sound 1 to SO2 terminal 376 - ; -- Bit 3 - Output sound 4 to SO1 terminal 377 - ; -- Bit 2 - Output sound 3 to SO1 terminal 378 - ; -- Bit 1 - Output sound 2 to SO1 terminal 379 - ; -- Bit 0 - Output sound 0 to SO1 terminal 493 + ; -- Bit 7 - Output channel 4 to SO2 terminal (left) 494 + ; -- Bit 6 - Output channel 3 to SO2 terminal (left) 495 + ; -- Bit 5 - Output channel 2 to SO2 terminal (left) 496 + ; -- Bit 4 - Output channel 1 to SO2 terminal (left) 497 + ; -- Bit 3 - Output channel 4 to SO1 terminal (right) 498 + ; -- Bit 2 - Output channel 3 to SO1 terminal (right) 499 + ; -- Bit 1 - Output channel 2 to SO1 terminal (right) 500 + ; -- Bit 0 - Output channel 1 to SO1 terminal (right) 380 501 ; -- 381 502 DEF rNR51 EQU $FF25 382 503 DEF rAUDTERM EQU rNR51 ··· 422 543 DEF LCDCF_WIN9C00 EQU %01000000 ; Window Tile Map Display Select 423 544 DEF LCDCF_WINOFF EQU %00000000 ; Window Display 424 545 DEF LCDCF_WINON EQU %00100000 ; Window Display 425 - DEF LCDCF_BG8800 EQU %00000000 ; BG & Window Tile Data Select 426 - DEF LCDCF_BG8000 EQU %00010000 ; BG & Window Tile Data Select 546 + DEF LCDCF_BLK21 EQU %00000000 ; BG & Window Tile Data Select 547 + DEF LCDCF_BLK01 EQU %00010000 ; BG & Window Tile Data Select 427 548 DEF LCDCF_BG9800 EQU %00000000 ; BG Tile Map Display Select 428 549 DEF LCDCF_BG9C00 EQU %00001000 ; BG Tile Map Display Select 429 550 DEF LCDCF_OBJ8 EQU %00000000 ; OBJ Construction ··· 432 553 DEF LCDCF_OBJON EQU %00000010 ; OBJ Display 433 554 DEF LCDCF_BGOFF EQU %00000000 ; BG Display 434 555 DEF LCDCF_BGON EQU %00000001 ; BG Display 556 + 557 + DEF LCDCB_ON EQU 7 ; LCD Control Operation 558 + DEF LCDCB_WIN9C00 EQU 6 ; Window Tile Map Display Select 559 + DEF LCDCB_WINON EQU 5 ; Window Display 560 + DEF LCDCB_BLKS EQU 4 ; BG & Window Tile Data Select 561 + DEF LCDCB_BG9C00 EQU 3 ; BG Tile Map Display Select 562 + DEF LCDCB_OBJ16 EQU 2 ; OBJ Construction 563 + DEF LCDCB_OBJON EQU 1 ; OBJ Display 564 + DEF LCDCB_BGON EQU 0 ; BG Display 435 565 ; "Window Character Data Select" follows BG 436 566 437 567 ··· 452 582 DEF STATF_LCD EQU %00000011 ; Both OAM and VRAM used by system 453 583 DEF STATF_BUSY EQU %00000010 ; When set, VRAM access is unsafe 454 584 585 + DEF STATB_LYC EQU 6 586 + DEF STATB_MODE10 EQU 5 587 + DEF STATB_MODE01 EQU 4 588 + DEF STATB_MODE00 EQU 3 589 + DEF STATB_LYCF EQU 2 590 + DEF STATB_BUSY EQU 1 455 591 456 592 ; -- 457 593 ; -- SCY ($FF42) ··· 542 678 ; -- 543 679 DEF rWX EQU $FF4B 544 680 681 + DEF WX_OFS EQU 7 ; add this to a screen position to get a WX position 682 + 545 683 546 684 ; -- 547 685 ; -- SPEED ($FF4D) ··· 604 742 605 743 DEF HDMA5F_MODE_GP EQU %00000000 ; General Purpose DMA (W) 606 744 DEF HDMA5F_MODE_HBL EQU %10000000 ; HBlank DMA (W) 745 + DEF HDMA5B_MODE EQU 7 ; DMA mode select (W) 607 746 608 747 ; -- Once DMA has started, use HDMA5F_BUSY to check when the transfer is complete 609 748 DEF HDMA5F_BUSY EQU %10000000 ; 0=Busy (DMA still in progress), 1=Transfer complete (R) ··· 621 760 DEF RPF_WRITE_HI EQU %00000001 622 761 DEF RPF_WRITE_LO EQU %00000000 623 762 763 + DEF RPB_LED_ON EQU 0 764 + DEF RPB_DATAIN EQU 1 765 + 624 766 625 767 ; -- 626 - ; -- BCPS ($FF68) 627 - ; -- Background Color Palette Specification (R/W) 768 + ; -- BCPS/BGPI ($FF68) 769 + ; -- Background Color Palette Specification (aka Background Palette Index) (R/W) 628 770 ; -- 629 771 DEF rBCPS EQU $FF68 772 + DEF rBGPI EQU rBCPS 630 773 631 774 DEF BCPSF_AUTOINC EQU %10000000 ; Auto Increment (0=Disabled, 1=Increment after Writing) 775 + DEF BCPSB_AUTOINC EQU 7 776 + DEF BGPIF_AUTOINC EQU BCPSF_AUTOINC 777 + DEF BGPIB_AUTOINC EQU BCPSB_AUTOINC 632 778 633 779 634 780 ; -- 635 - ; -- BCPD ($FF69) 636 - ; -- Background Color Palette Data (R/W) 781 + ; -- BCPD/BGPD ($FF69) 782 + ; -- Background Color Palette Data (aka Background Palette Data) (R/W) 637 783 ; -- 638 784 DEF rBCPD EQU $FF69 785 + DEF rBGPD EQU rBCPD 639 786 640 787 641 788 ; -- 642 - ; -- OCPS ($FF6A) 643 - ; -- Object Color Palette Specification (R/W) 789 + ; -- OCPS/OBPI ($FF6A) 790 + ; -- Object Color Palette Specification (aka Object Background Palette Index) (R/W) 644 791 ; -- 645 792 DEF rOCPS EQU $FF6A 793 + DEF rOBPI EQU rOCPS 646 794 647 795 DEF OCPSF_AUTOINC EQU %10000000 ; Auto Increment (0=Disabled, 1=Increment after Writing) 796 + DEF OCPSB_AUTOINC EQU 7 797 + DEF OBPIF_AUTOINC EQU OCPSF_AUTOINC 798 + DEF OBPIB_AUTOINC EQU OCPSB_AUTOINC 648 799 649 800 650 801 ; -- 651 - ; -- OCPD ($FF6B) 652 - ; -- Object Color Palette Data (R/W) 802 + ; -- OCPD/OBPD ($FF6B) 803 + ; -- Object Color Palette Data (aka Object Background Palette Data) (R/W) 653 804 ; -- 654 805 DEF rOCPD EQU $FF6B 806 + DEF rOBPD EQU rOCPD 807 + 808 + 809 + ; -- 810 + ; -- OPRI ($FF6C) 811 + ; -- Object Priority Mode (R/W) 812 + ; -- CGB Only 813 + 814 + ; -- 815 + ; -- Priority can be changed only from the boot ROM 816 + ; -- 817 + DEF rOPRI EQU $FF6C 818 + 819 + DEF OPRI_OAM EQU 0 ; Prioritize objects by location in OAM (CGB Mode default) 820 + DEF OPRI_COORD EQU 1 ; Prioritize objects by x-coordinate (Non-CGB Mode default) 821 + 655 822 656 823 657 824 ; -- ··· 695 862 DEF IEF_TIMER EQU %00000100 ; Timer Overflow 696 863 DEF IEF_STAT EQU %00000010 ; STAT 697 864 DEF IEF_VBLANK EQU %00000001 ; V-Blank 865 + 866 + DEF IEB_HILO EQU 4 867 + DEF IEB_SERIAL EQU 3 868 + DEF IEB_TIMER EQU 2 869 + DEF IEB_STAT EQU 1 870 + DEF IEB_VBLANK EQU 0 698 871 699 872 700 873 ;*************************************************************************** ··· 731 904 ; -- Can be used with AUD1HIGH, AUD2HIGH, AUD3HIGH 732 905 ; -- See AUD1HIGH for more info 733 906 ; -- 734 - 735 907 DEF AUDHIGH_RESTART EQU %10000000 736 908 DEF AUDHIGH_LENGTH_ON EQU %01000000 737 909 DEF AUDHIGH_LENGTH_OFF EQU %00000000 ··· 744 916 ;*************************************************************************** 745 917 746 918 DEF BOOTUP_A_DMG EQU $01 ; Dot Matrix Game 747 - DEF BOOTUP_A_CGB EQU $11 ; Color GameBoy 748 - DEF BOOTUP_A_MGB EQU $FF ; Mini GameBoy (Pocket GameBoy) 919 + DEF BOOTUP_A_CGB EQU $11 ; Color Game Boy 920 + DEF BOOTUP_A_MGB EQU $FF ; Mini Game Boy (Pocket Game Boy) 749 921 750 922 ; if a=BOOTUP_A_CGB, bit 0 in b can be checked to determine if real CGB or 751 923 ; other system running in GBC mode ··· 755 927 756 928 ;*************************************************************************** 757 929 ;* 758 - ;* Cart related 930 + ;* Interrupt vector addresses 759 931 ;* 760 932 ;*************************************************************************** 761 933 762 - ; $0143 Color GameBoy compatibility code 934 + DEF INT_HANDLER_VBLANK EQU $0040 935 + DEF INT_HANDLER_STAT EQU $0048 936 + DEF INT_HANDLER_TIMER EQU $0050 937 + DEF INT_HANDLER_SERIAL EQU $0058 938 + DEF INT_HANDLER_JOYPAD EQU $0060 939 + 940 + 941 + ;*************************************************************************** 942 + ;* 943 + ;* Header 944 + ;* 945 + ;*************************************************************************** 946 + 947 + ;* 948 + ;* Nintendo scrolling logo 949 + ;* (Code won't work on a real Game Boy) 950 + ;* (if next lines are altered.) 951 + MACRO NINTENDO_LOGO 952 + DB $CE,$ED,$66,$66,$CC,$0D,$00,$0B,$03,$73,$00,$83,$00,$0C,$00,$0D 953 + DB $00,$08,$11,$1F,$88,$89,$00,$0E,$DC,$CC,$6E,$E6,$DD,$DD,$D9,$99 954 + DB $BB,$BB,$67,$63,$6E,$0E,$EC,$CC,$DD,$DC,$99,$9F,$BB,$B9,$33,$3E 955 + ENDM 956 + 957 + ; $0143 Color Game Boy compatibility code 763 958 DEF CART_COMPATIBLE_DMG EQU $00 764 959 DEF CART_COMPATIBLE_DMG_GBC EQU $80 765 960 DEF CART_COMPATIBLE_GBC EQU $C0 766 961 767 - ; $0146 GameBoy/Super GameBoy indicator 962 + ; $0146 Game Boy/Super Game Boy indicator 768 963 DEF CART_INDICATOR_GB EQU $00 769 964 DEF CART_INDICATOR_SGB EQU $03 770 965 ··· 786 981 DEF CART_ROM_MBC3_RAM EQU $12 787 982 DEF CART_ROM_MBC3_RAM_BAT EQU $13 788 983 DEF CART_ROM_MBC5 EQU $19 789 - DEF CART_ROM_MBC5_BAT EQU $1A 984 + DEF CART_ROM_MBC5_RAM EQU $1A 790 985 DEF CART_ROM_MBC5_RAM_BAT EQU $1B 791 986 DEF CART_ROM_MBC5_RUMBLE EQU $1C 792 987 DEF CART_ROM_MBC5_RAM_RUMBLE EQU $1D ··· 815 1010 ; $0149 SRAM size 816 1011 ; these are kilobytes 817 1012 DEF CART_SRAM_NONE EQU 0 818 - DEF CART_SRAM_2KB EQU 1 ; 1 incomplete bank 819 1013 DEF CART_SRAM_8KB EQU 2 ; 1 bank 820 1014 DEF CART_SRAM_32KB EQU 3 ; 4 banks 821 1015 DEF CART_SRAM_128KB EQU 4 ; 16 banks 822 - 823 - DEF CART_SRAM_ENABLE EQU $0A 824 - DEF CART_SRAM_DISABLE EQU $00 825 1016 826 1017 ; $014A Destination code 827 1018 DEF CART_DEST_JAPANESE EQU $00 ··· 860 1051 ;*************************************************************************** 861 1052 862 1053 DEF SCRN_X EQU 160 ; Width of screen in pixels 863 - DEF SCRN_Y EQU 144 ; Height of screen in pixels 1054 + DEF SCRN_Y EQU 144 ; Height of screen in pixels. Also corresponds to the value in LY at the beginning of VBlank. 864 1055 DEF SCRN_X_B EQU 20 ; Width of screen in bytes 865 1056 DEF SCRN_Y_B EQU 18 ; Height of screen in bytes 866 1057 ··· 879 1070 ; OAM attributes 880 1071 ; each entry in OAM RAM is 4 bytes (sizeof_OAM_ATTRS) 881 1072 RSRESET 882 - DEF OAMA_Y RB 1 ; y pos 883 - DEF OAMA_X RB 1 ; x pos 1073 + DEF OAMA_Y RB 1 ; y pos plus 16 1074 + DEF OAMA_X RB 1 ; x pos plus 8 884 1075 DEF OAMA_TILEID RB 1 ; tile id 885 1076 DEF OAMA_FLAGS RB 1 ; flags (see below) 886 1077 DEF sizeof_OAM_ATTRS RB 0 1078 + 1079 + DEF OAM_Y_OFS EQU 16 ; add this to a screen-relative Y position to get an OAM Y position 1080 + DEF OAM_X_OFS EQU 8 ; add this to a screen-relative X position to get an OAM X position 887 1081 888 1082 DEF OAM_COUNT EQU 40 ; number of OAM entries in OAM RAM 889 1083 ··· 905 1099 DEF OAMB_BANK1 EQU 3 ; Bank number; 0,1 (GBC) 906 1100 907 1101 908 - ;* 909 - ;* Nintendo scrolling logo 910 - ;* (Code won't work on a real GameBoy) 911 - ;* (if next lines are altered.) 912 - MACRO NINTENDO_LOGO 913 - DB $CE,$ED,$66,$66,$CC,$0D,$00,$0B,$03,$73,$00,$83,$00,$0C,$00,$0D 914 - DB $00,$08,$11,$1F,$88,$89,$00,$0E,$DC,$CC,$6E,$E6,$DD,$DD,$D9,$99 915 - DB $BB,$BB,$67,$63,$6E,$0E,$EC,$CC,$DD,$DC,$99,$9F,$BB,$B9,$33,$3E 916 - ENDM 917 - 918 1102 ; Deprecated constants. Please avoid using. 919 1103 920 1104 DEF IEF_LCDC EQU %00000010 ; LCDC (see STAT) 1105 + DEF _VRAM8000 EQU _VRAM 1106 + DEF _VRAM8800 EQU _VRAM+$800 1107 + DEF _VRAM9000 EQU _VRAM+$1000 1108 + DEF CART_SRAM_2KB EQU 1 ; 1 incomplete bank 1109 + DEF LCDCF_BG8800 EQU %00000000 ; BG & Window Tile Data Select 1110 + DEF LCDCF_BG8000 EQU %00010000 ; BG & Window Tile Data Select 1111 + DEF LCDCB_BG8000 EQU 4 ; BG & Window Tile Data Select 921 1112 922 - ENDC ;HARDWARE_INC 1113 + 1114 + ENDC ;HARDWARE_INC
-158
gb/hello-world.asm
··· 1 - INCLUDE "hardware.inc" 2 - 3 - SECTION "Header", ROM0[$100] 4 - 5 - jp EntryPoint 6 - 7 - ds $150 - @, 0 ; Make room for the header 8 - 9 - EntryPoint: 10 - ; Shut down audio circuitry 11 - ld a, 0 12 - ld [rNR52], a 13 - 14 - ; Do not turn the LCD off outside of VBlank 15 - WaitVBlank: 16 - ld a, [rLY] 17 - cp 144 18 - jp c, WaitVBlank 19 - 20 - ; Turn the LCD off 21 - ld a, 0 22 - ld [rLCDC], a 23 - 24 - ; Copy the tile data 25 - ld de, Tiles 26 - ld hl, $9000 27 - ld bc, TilesEnd - Tiles 28 - CopyTiles: 29 - ld a, [de] 30 - ld [hli], a 31 - inc de 32 - dec bc 33 - ld a, b 34 - or a, c 35 - jp nz, CopyTiles 36 - 37 - ; Copy the tilemap 38 - ld de, Tilemap 39 - ld hl, $9800 40 - ld bc, TilemapEnd - Tilemap 41 - CopyTilemap: 42 - ld a, [de] 43 - ld [hli], a 44 - inc de 45 - dec bc 46 - ld a, b 47 - or a, c 48 - jp nz, CopyTilemap 49 - 50 - ; Turn the LCD on 51 - ld a, LCDCF_ON | LCDCF_BGON 52 - ld [rLCDC], a 53 - 54 - ; During the first (blank) frame, initialize display registers 55 - ld a, %11100100 56 - ld [rBGP], a 57 - 58 - Done: 59 - jp Done 60 - 61 - 62 - SECTION "Tile data", ROM0 63 - 64 - Tiles: 65 - db $00,$ff, $00,$ff, $00,$ff, $00,$ff, $00,$ff, $00,$ff, $00,$ff, $00,$ff 66 - db $00,$ff, $00,$80, $00,$80, $00,$80, $00,$80, $00,$80, $00,$80, $00,$80 67 - db $00,$ff, $00,$7e, $00,$7e, $00,$7e, $00,$7e, $00,$7e, $00,$7e, $00,$7e 68 - db $00,$ff, $00,$01, $00,$01, $00,$01, $00,$01, $00,$01, $00,$01, $00,$01 69 - db $00,$ff, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 70 - db $00,$ff, $00,$7f, $00,$7f, $00,$7f, $00,$7f, $00,$7f, $00,$7f, $00,$7f 71 - db $00,$ff, $03,$fc, $00,$f8, $00,$f0, $00,$e0, $20,$c0, $00,$c0, $40,$80 72 - db $00,$ff, $c0,$3f, $00,$1f, $00,$0f, $00,$07, $04,$03, $00,$03, $02,$01 73 - db $00,$80, $00,$80, $7f,$80, $00,$80, $00,$80, $7f,$80, $7f,$80, $00,$80 74 - db $00,$7e, $2a,$7e, $d5,$7e, $2a,$7e, $54,$7e, $ff,$00, $ff,$00, $00,$00 75 - db $00,$01, $00,$01, $ff,$01, $00,$01, $01,$01, $fe,$01, $ff,$01, $00,$01 76 - db $00,$80, $80,$80, $7f,$80, $80,$80, $00,$80, $ff,$80, $7f,$80, $80,$80 77 - db $00,$7f, $2a,$7f, $d5,$7f, $2a,$7f, $55,$7f, $ff,$00, $ff,$00, $00,$00 78 - db $00,$ff, $aa,$ff, $55,$ff, $aa,$ff, $55,$ff, $fa,$07, $fd,$07, $02,$07 79 - db $00,$7f, $2a,$7f, $d5,$7f, $2a,$7f, $55,$7f, $aa,$7f, $d5,$7f, $2a,$7f 80 - db $00,$ff, $80,$ff, $00,$ff, $80,$ff, $00,$ff, $80,$ff, $00,$ff, $80,$ff 81 - db $40,$80, $00,$80, $7f,$80, $00,$80, $00,$80, $7f,$80, $7f,$80, $00,$80 82 - db $00,$3c, $02,$7e, $85,$7e, $0a,$7e, $14,$7e, $ab,$7e, $95,$7e, $2a,$7e 83 - db $02,$01, $00,$01, $ff,$01, $00,$01, $01,$01, $fe,$01, $ff,$01, $00,$01 84 - db $00,$ff, $80,$ff, $50,$ff, $a8,$ff, $50,$ff, $a8,$ff, $54,$ff, $a8,$ff 85 - db $7f,$80, $7f,$80, $7f,$80, $7f,$80, $7f,$80, $7f,$80, $7f,$80, $7f,$80 86 - db $ff,$00, $ff,$00, $ff,$00, $ab,$7e, $d5,$7e, $ab,$7e, $d5,$7e, $ab,$7e 87 - db $ff,$01, $fe,$01, $ff,$01, $fe,$01, $ff,$01, $fe,$01, $ff,$01, $fe,$01 88 - db $7f,$80, $ff,$80, $7f,$80, $ff,$80, $7f,$80, $ff,$80, $7f,$80, $ff,$80 89 - db $ff,$00, $ff,$00, $ff,$00, $aa,$7f, $d5,$7f, $aa,$7f, $d5,$7f, $aa,$7f 90 - db $f8,$07, $f8,$07, $f8,$07, $80,$ff, $00,$ff, $aa,$ff, $55,$ff, $aa,$ff 91 - db $7f,$80, $7f,$80, $7f,$80, $7f,$80, $7f,$80, $ff,$80, $7f,$80, $ff,$80 92 - db $d5,$7f, $aa,$7f, $d5,$7f, $aa,$7f, $d5,$7f, $aa,$7f, $d5,$7f, $aa,$7f 93 - db $d5,$7e, $ab,$7e, $d5,$7e, $ab,$7e, $d5,$7e, $ab,$7e, $d5,$7e, $eb,$3c 94 - db $54,$ff, $aa,$ff, $54,$ff, $aa,$ff, $54,$ff, $aa,$ff, $54,$ff, $aa,$ff 95 - db $7f,$80, $7f,$80, $7f,$80, $7f,$80, $7f,$80, $7f,$80, $7f,$80, $00,$ff 96 - db $d5,$7e, $ab,$7e, $d5,$7e, $ab,$7e, $d5,$7e, $ab,$7e, $d5,$7e, $2a,$ff 97 - db $ff,$01, $fe,$01, $ff,$01, $fe,$01, $ff,$01, $fe,$01, $ff,$01, $80,$ff 98 - db $7f,$80, $ff,$80, $7f,$80, $ff,$80, $7f,$80, $ff,$80, $7f,$80, $aa,$ff 99 - db $ff,$00, $ff,$00, $ff,$00, $ff,$00, $ff,$00, $ff,$00, $ff,$00, $2a,$ff 100 - db $ff,$01, $fe,$01, $ff,$01, $fe,$01, $fe,$01, $fe,$01, $fe,$01, $80,$ff 101 - db $7f,$80, $ff,$80, $7f,$80, $7f,$80, $7f,$80, $7f,$80, $7f,$80, $00,$ff 102 - db $fe,$01, $fe,$01, $fe,$01, $fe,$01, $fe,$01, $fe,$01, $fe,$01, $80,$ff 103 - db $3f,$c0, $3f,$c0, $3f,$c0, $1f,$e0, $1f,$e0, $0f,$f0, $03,$fc, $00,$ff 104 - db $fd,$03, $fc,$03, $fd,$03, $f8,$07, $f9,$07, $f0,$0f, $c1,$3f, $82,$ff 105 - db $55,$ff, $2a,$7e, $54,$7e, $2a,$7e, $54,$7e, $2a,$7e, $54,$7e, $00,$7e 106 - db $01,$ff, $00,$01, $01,$01, $00,$01, $01,$01, $00,$01, $01,$01, $00,$01 107 - db $54,$ff, $ae,$f8, $50,$f0, $a0,$e0, $60,$c0, $80,$c0, $40,$80, $40,$80 108 - db $55,$ff, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 109 - db $55,$ff, $6a,$1f, $05,$0f, $02,$07, $05,$07, $02,$03, $03,$01, $02,$01 110 - db $54,$ff, $80,$80, $00,$80, $80,$80, $00,$80, $80,$80, $00,$80, $00,$80 111 - db $55,$ff, $2a,$1f, $0d,$07, $06,$03, $01,$03, $02,$01, $01,$01, $00,$01 112 - db $55,$ff, $2a,$7f, $55,$7f, $2a,$7f, $55,$7f, $2a,$7f, $55,$7f, $00,$7f 113 - db $55,$ff, $aa,$ff, $55,$ff, $aa,$ff, $55,$ff, $aa,$ff, $55,$ff, $00,$ff 114 - db $15,$ff, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00, $00,$00 115 - db $55,$ff, $6a,$1f, $0d,$07, $06,$03, $01,$03, $02,$01, $03,$01, $00,$01 116 - db $54,$ff, $a8,$ff, $54,$ff, $a8,$ff, $50,$ff, $a0,$ff, $40,$ff, $00,$ff 117 - db $00,$7e, $2a,$7e, $d5,$7e, $2a,$7e, $54,$7e, $ab,$76, $dd,$66, $22,$66 118 - db $00,$7c, $2a,$7e, $d5,$7e, $2a,$7e, $54,$7c, $ff,$00, $ff,$00, $00,$00 119 - db $00,$01, $00,$01, $ff,$01, $02,$01, $07,$01, $fe,$03, $fd,$07, $0a,$0f 120 - db $00,$7c, $2a,$7e, $d5,$7e, $2a,$7e, $54,$7e, $ab,$7e, $d5,$7e, $2a,$7e 121 - db $00,$ff, $a0,$ff, $50,$ff, $a8,$ff, $54,$ff, $a8,$ff, $54,$ff, $aa,$ff 122 - db $dd,$62, $bf,$42, $fd,$42, $bf,$40, $ff,$00, $ff,$00, $f7,$08, $ef,$18 123 - db $ff,$00, $ff,$00, $ff,$00, $ab,$7c, $d5,$7e, $ab,$7e, $d5,$7e, $ab,$7e 124 - db $f9,$07, $fc,$03, $fd,$03, $fe,$01, $ff,$01, $fe,$01, $ff,$01, $fe,$01 125 - db $d5,$7e, $ab,$7e, $d5,$7e, $ab,$7e, $d5,$7e, $ab,$7e, $d5,$7e, $ab,$7c 126 - db $f7,$18, $eb,$1c, $d7,$3c, $eb,$3c, $d5,$3e, $ab,$7e, $d5,$7e, $2a,$ff 127 - db $ff,$01, $fe,$01, $ff,$01, $fe,$01, $ff,$01, $fe,$01, $ff,$01, $a2,$ff 128 - db $7f,$c0, $bf,$c0, $7f,$c0, $bf,$e0, $5f,$e0, $af,$f0, $57,$fc, $aa,$ff 129 - db $ff,$01, $fc,$03, $fd,$03, $fc,$03, $f9,$07, $f0,$0f, $c1,$3f, $82,$ff 130 - db $55,$ff, $2a,$ff, $55,$ff, $2a,$ff, $55,$ff, $2a,$ff, $55,$ff, $00,$ff 131 - db $45,$ff, $a2,$ff, $41,$ff, $82,$ff, $41,$ff, $80,$ff, $01,$ff, $00,$ff 132 - db $54,$ff, $aa,$ff, $54,$ff, $aa,$ff, $54,$ff, $aa,$ff, $54,$ff, $00,$ff 133 - db $15,$ff, $2a,$ff, $15,$ff, $0a,$ff, $15,$ff, $0a,$ff, $01,$ff, $00,$ff 134 - db $01,$ff, $80,$ff, $01,$ff, $80,$ff, $01,$ff, $80,$ff, $01,$ff, $00,$ff 135 - TilesEnd: 136 - 137 - SECTION "Tilemap", ROM0 138 - 139 - Tilemap: 140 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, 0,0,0,0,0,0,0,0,0,0,0,0 141 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, 0,0,0,0,0,0,0,0,0,0,0,0 142 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, 0,0,0,0,0,0,0,0,0,0,0,0 143 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, 0,0,0,0,0,0,0,0,0,0,0,0 144 - db $00, $00, $01, $02, $03, $01, $04, $03, $01, $05, $00, $01, $05, $00, $06, $04, $07, $00, $00, $00, 0,0,0,0,0,0,0,0,0,0,0,0 145 - db $00, $00, $08, $09, $0a, $0b, $0c, $0d, $0b, $0e, $0f, $08, $0e, $0f, $10, $11, $12, $13, $00, $00, 0,0,0,0,0,0,0,0,0,0,0,0 146 - db $00, $00, $14, $15, $16, $17, $18, $19, $1a, $1b, $0f, $14, $1b, $0f, $14, $1c, $16, $1d, $00, $00, 0,0,0,0,0,0,0,0,0,0,0,0 147 - db $00, $00, $1e, $1f, $20, $21, $22, $23, $24, $22, $25, $1e, $22, $25, $26, $22, $27, $1d, $00, $00, 0,0,0,0,0,0,0,0,0,0,0,0 148 - db $00, $00, $01, $28, $29, $2a, $2b, $2c, $2d, $2b, $2e, $2d, $2f, $30, $2d, $31, $32, $33, $00, $00, 0,0,0,0,0,0,0,0,0,0,0,0 149 - db $00, $00, $08, $34, $0a, $0b, $11, $0a, $0b, $35, $36, $0b, $0e, $0f, $08, $37, $0a, $38, $00, $00, 0,0,0,0,0,0,0,0,0,0,0,0 150 - db $00, $00, $14, $39, $16, $17, $1c, $16, $17, $3a, $3b, $17, $1b, $0f, $14, $3c, $16, $1d, $00, $00, 0,0,0,0,0,0,0,0,0,0,0,0 151 - db $00, $00, $1e, $3d, $3e, $3f, $22, $27, $21, $1f, $20, $21, $22, $25, $1e, $22, $40, $1d, $00, $00, 0,0,0,0,0,0,0,0,0,0,0,0 152 - db $00, $00, $00, $41, $42, $43, $44, $30, $33, $41, $45, $43, $41, $30, $43, $41, $30, $33, $00, $00, 0,0,0,0,0,0,0,0,0,0,0,0 153 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, 0,0,0,0,0,0,0,0,0,0,0,0 154 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, 0,0,0,0,0,0,0,0,0,0,0,0 155 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, 0,0,0,0,0,0,0,0,0,0,0,0 156 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, 0,0,0,0,0,0,0,0,0,0,0,0 157 - db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, 0,0,0,0,0,0,0,0,0,0,0,0 158 - TilemapEnd:
+18
gb/main.asm
··· 1 + INCLUDE "hardware.inc" 2 + 3 + SECTION "Header", ROM0[$100] 4 + 5 + jp EntryPoint 6 + 7 + ds $150 - @, 0 ; Make room for the header 8 + 9 + EntryPoint: 10 + ; Do not turn the LCD off outside of VBlank 11 + WaitVBlank: 12 + ld a, [rLY] 13 + cp 144 14 + jp c, WaitVBlank 15 + 16 + ; Turn the LCD off 17 + ld a, 0 18 + ld [rLCDC], a