git.y1.nz

gbdk-2020

GameBoy Development Kit
download: https://git.y1.nz/archives/gbdk.tar.gz
README | Files | Log | Refs | LICENSE

gbdk-lib/libc/targets/z80/gg/global.s

      1         .GG_STATE       = 0x00
      2 
      3         .GGSTATE_STT    = 0b10000000
      4         .GGSTATE_NJAP   = 0b01000000
      5         .GGSTATE_NNTS   = 0b00100000
      6 
      7         .GG_EXT_7BIT    = 0x01
      8 
      9         .GG_EXT_CTL     = 0x02
     10 
     11         .GGEXT_NINIT    = 0b10000000
     12 
     13         .GG_SIO_SEND    = 0x03
     14         .GG_SIO_RECV    = 0x04
     15         .GG_SIO_CTL     = 0x05
     16 
     17         .SIOCTL_TXFL    = 0b00000001
     18         .SIOCTL_RXRD    = 0b00000010
     19         .SIOCTL_FRER    = 0b00000100
     20         .SIOCTL_INT     = 0b00001000
     21         .SIOCTL_TON     = 0b00010000
     22         .SIOCTL_RON     = 0b00100000
     23         .SIOCTL_BS0     = 0b01000000
     24         .SIOCTL_BS1     = 0b10000000
     25 
     26         .GG_SOUND_PAN   = 0x06
     27 
     28         .SOUNDPAN_TN1R  = 0b00000001
     29         .SOUNDPAN_TN2R  = 0b00000010
     30         .SOUNDPAN_TN3R  = 0b00000100
     31         .SOUNDPAN_NOSR  = 0b00001000
     32         .SOUNDPAN_TN1L  = 0b00010000
     33         .SOUNDPAN_TN2L  = 0b00100000
     34         .SOUNDPAN_TN3L  = 0b01000000
     35         .SOUNDPAN_NOSL  = 0b10000000
     36 
     37         .MEMORY_CTL     = 0x3E
     38 
     39         .MEMCTL_JOYON   = 0b00000000
     40         .MEMCTL_JOYOFF  = 0b00000100
     41         .MEMCTL_BASEON  = 0b00000000
     42         .MEMCTL_BASEOFF = 0b00001000
     43         .MEMCTL_RAMON   = 0b00000000
     44         .MEMCTL_RAMOFF  = 0b00010000
     45         .MEMCTL_CROMON  = 0b00000000
     46         .MEMCTL_CROMOFF = 0b00100000
     47         .MEMCTL_ROMON   = 0b00000000
     48         .MEMCTL_ROMOFF  = 0b01000000
     49         .MEMCTL_EXTON   = 0b00000000
     50         .MEMCTL_EXTOFF  = 0b10000000
     51 
     52         .JOY_CTL        = 0x3F
     53 
     54         .JOY_P1_TR_DIR_IN  = 0b00000001
     55         .JOY_P1_TR_DIR_OUT = 0b00000000
     56         .JOY_P1_TH_DIR_IN  = 0b00000010
     57         .GUN_P1_LATCH      = 0b00000010
     58         .JOY_P1_TH_DIR_OUT = 0b00000000
     59         .JOY_P2_TR_DIR_IN  = 0b00000100
     60         .JOY_P2_TR_DIR_OUT = 0b00000000
     61         .JOY_P2_TH_DIR_IN  = 0b00001000
     62         .GUN_P2_LATCH      = 0b00001000
     63         .JOY_P2_TH_DIR_OUT = 0b00000000
     64         .JOY_P1_TR_OUT_HI  = 0b00010000
     65         .JOY_P1_TR_OUT_LO  = 0b00000000
     66         .JOY_P1_TH_OUT_HI  = 0b00100000
     67         .JOY_P1_TH_OUT_LO  = 0b00000000
     68         .JOY_P2_TR_OUT_HI  = 0b01000000
     69         .JOY_P2_TR_OUT_LO  = 0b00000000
     70         .JOY_P2_TH_OUT_HI  = 0b10000000
     71         .JOY_P2_TH_OUT_LO  = 0b00000000
     72 
     73         .JOY_TH_HI      = 0b11110101
     74         .JOY_TH_LO      = 0b01010101
     75 
     76         .VDP_VRAM       = 0x4000
     77         .VDP_CRAM       = 0xC000
     78 
     79         .VDP_SAT_TERM   = 0xD0
     80 
     81         .VDP_VCOUNTER   = 0x7E
     82         .VDP_PSG        = 0x7F
     83         .VDP_HCOUNTER   = 0x7F
     84 
     85         .VDP_DATA       = 0xBE
     86         .VDP_CMD        = 0xBF
     87         .VDP_STAT       = 0xBF
     88 
     89         .STATF_INT_VBL  = 0b10000000
     90         .STATF_9_SPR    = 0b01000000
     91         .STATF_SPR_COLL = 0b00100000
     92 
     93         .VDP_REG_MASK   = 0b10000000
     94         .VDP_R0         = 0b10000000
     95 
     96         .R0_VSCRL       = 0b00000000
     97         .R0_VSCRL_INH   = 0b10000000
     98         .R0_HSCRL       = 0b00000000
     99         .R0_HSCRL_INH   = 0b01000000
    100         .R0_NO_LCB      = 0b00000000
    101         .R0_LCB         = 0b00100000
    102         .R0_IE1_OFF     = 0b00000000
    103         .R0_IE1         = 0b00010000
    104         .R0_SS_OFF      = 0b00000000
    105         .R0_SS          = 0b00001000
    106         .R0_DEFAULT     = 0b00000110
    107         .R0_ES_OFF      = 0b00000000
    108         .R0_ES          = 0b00000001
    109 
    110         .VDP_R1         = 0b10000001
    111 
    112         .R1_DEFAULT     = 0b10000000
    113         .R1_DISP_OFF    = 0b00000000
    114         .R1_DISP_ON     = 0b01000000
    115         .R1_IE_OFF      = 0b00000000
    116         .R1_IE          = 0b00100000
    117         .R1_SPR_8X8     = 0b00000000
    118         .R1_SPR_8X16    = 0b00000010
    119 
    120         .VDP_R2         = 0b10000010
    121 
    122         .R2_MAP_0x3800  = 0xFF
    123         .R2_MAP_0x3000  = 0xFD
    124         .R2_MAP_0x2800  = 0xFB
    125         .R2_MAP_0x2000  = 0xF9
    126         .R2_MAP_0x1800  = 0xF7
    127         .R2_MAP_0x1000  = 0xF5
    128         .R2_MAP_0x0800  = 0xF3
    129         .R2_MAP_0x0000  = 0xF1
    130 
    131         .VDP_R3         = 0b10000011
    132         .VDP_R4         = 0b10000100
    133         .VDP_R5         = 0b10000101
    134 
    135         .R5_SAT_0x3F00  = 0xFF
    136         .R5_SAT_0x1F00  = 0xBF
    137         .R5_SAT_MASK    = 0b10000001
    138 
    139         .VDP_R6         = 0b10000110
    140 
    141         .R6_BANK0       = 0xFB
    142         .R6_DATA_0x0000 = 0xFB
    143         .R6_BANK1       = 0xFF
    144         .R6_DATA_0x2000 = 0xFF
    145 
    146         .VDP_R7         = 0b10000111
    147         .VDP_RBORDER    = 0b10000111
    148 
    149         .R7_COLOR_MASK  = 0b11110000
    150 
    151         .VDP_R8         = 0b10001000
    152         .VDP_RSCX       = 0b10001000
    153 
    154         .VDP_R9         = 0b10001001
    155         .VDP_RSCY       = 0b10001001
    156 
    157         .VDP_R10        = 0b10001010
    158 
    159         .R10_INT_OFF    = 0xFF
    160         .R10_INT_EVERY  = 0x00
    161 
    162         .JOYPAD_COUNT   = 1
    163 
    164         .UP              = 0b00000001
    165         .DOWN            = 0b00000010
    166         .LEFT            = 0b00000100
    167         .RIGHT           = 0b00001000
    168         .A               = 0b00010000
    169         .B               = 0b00100000
    170         .START           = 0b01000000
    171         .SELECT          = 0b10000000
    172 
    173         .JOY_PORT1      = 0xDC
    174 
    175         .JOY_P1_UP       = 0b00000001
    176         .JOY_P1_MD_Z     = 0b00000001
    177         .JOY_P1_DOWN     = 0b00000010
    178         .JOY_P1_MD_Y     = 0b00000010
    179         .JOY_P1_LEFT     = 0b00000100
    180         .JOY_P1_MD_X     = 0b00000100
    181         .JOY_P1_RIGHT    = 0b00001000
    182         .JOY_P1_MD_MODE  = 0b00001000
    183         .JOY_P1_SW1      = 0b00010000
    184         .JOY_P1_TRIGGER  = 0b00010000
    185         .JOY_P1_MD_A     = 0b00010000
    186         .JOY_P1_SW2      = 0b00100000
    187         .JOY_P1_MD_START = 0b00100000
    188         .JOY_P2_UP       = 0b01000000
    189         .JOY_P2_MD_Z     = 0b01000000
    190         .JOY_P2_DOWN     = 0b10000000
    191         .JOY_P2_MD_Y     = 0b10000000
    192 
    193         .JOY_PORT2      = 0xDD
    194 
    195         .JOY_P2_LEFT     = 0b00000001
    196         .JOY_P2_MD_X     = 0b00000001
    197         .JOY_P2_RIGHT    = 0b00000010
    198         .JOY_P2_MD_MODE  = 0b00000010
    199         .JOY_P2_SW1      = 0b00000100
    200         .JOY_P2_TRIGGER  = 0b00000100
    201         .JOY_P2_MD_A     = 0b00000100
    202         .JOY_P2_SW2      = 0b00001000
    203         .JOY_P2_MD_START = 0b00001000
    204         .JOY_RESET       = 0b00010000
    205         .JOY_P1_LIGHT    = 0b01000000
    206         .JOY_P2_LIGHT    = 0b10000000
    207 
    208         .FMADDRESS      = 0xF0
    209         .FMDATA         = 0xF1
    210         .AUDIOCTRL      = 0xF2
    211 
    212         .RAM_CONTROL    = 0xfffc
    213 
    214         .RAMCTL_BANK    = 0b00000100
    215         .RAMCTL_ROM     = 0b00000000
    216         .RAMCTL_RAM     = 0b00001000
    217         .RAMCTL_RO      = 0b00010000
    218         .RAMCTL_PROT    = 0b10000000
    219 
    220         .GLASSES_3D     = 0xfff8
    221 
    222         .MAP_FRAME0     = 0xfffd
    223         .MAP_FRAME1     = 0xfffe
    224         .MAP_FRAME2     = 0xffff
    225 
    226         .BIOS           = 0xC000
    227 
    228         .SYSTEM_NTSC    = 0x00
    229         .SYSTEM_PAL     = 0x01
    230 
    231         .CPU_CLOCK      = 3579545
    232 
    233         ;; GBDK library screen modes
    234 
    235         .T_MODE         = 0x02  ; Text mode (bit 2)
    236         .T_MODE_OUT     = 0x02  ; Text mode output only
    237         .T_MODE_INOUT   = 0x03  ; Text mode with input
    238         .M_NO_SCROLL    = 0x04  ; Disables scrolling of the screen in text mode
    239         .M_NO_INTERP    = 0x08  ; Disables special character interpretation
    240 
    241         ;; Screen dimentions in tiles
    242 
    243         .SCREEN_X_OFS   = 6
    244         .SCREEN_Y_OFS   = 3
    245         .SCREEN_WIDTH   = 20
    246         .SCREEN_HEIGHT  = 18
    247         .VDP_MAP_HEIGHT = 28
    248         .VDP_MAP_WIDTH  = 32
    249 
    250         ;; Interrupt flags
    251 
    252         .VBL_IFLAG      = 0x01
    253         .LCD_IFLAG      = 0x02
    254 
    255         ; characters
    256         .CR             = 0x0A
    257         .SPACE          = 0x00
    258 
    259         ;; C related
    260         ;; Overheap of a banked call.  Used for parameters
    261         ;;  = ret + real ret + bank
    262 
    263         .BANKOV         = 5
    264 
    265         ;; Global variables
    266         .globl  .mode
    267 
    268         ;; Interrupt routines
    269         .globl _INT_ISR
    270         .globl _NMI_ISR
    271 
    272         ;; Symbols defined at link time
    273         .globl  .STACK
    274         .globl  _shadow_OAM
    275         .globl  __shadow_OAM_OFF
    276 
    277         ;; Main user routine
    278         .globl  _main
    279 
    280         ;; Macro definitions
    281 
    282 .macro VDP_WRITE_DATA regH regL
    283         ld a, regL
    284         out (#.VDP_DATA), a
    285         ld a, regH
    286         inc hl
    287         dec hl
    288         out (#.VDP_DATA), a
    289 .endm
    290 
    291 .macro VDP_WRITE_CMD regH regL
    292         ld a, regL
    293         di
    294         out (#.VDP_CMD), a
    295         ld a, regH
    296         ei
    297         out (#.VDP_CMD), a
    298 .endm
    299 
    300 .macro VDP_DELAY ?lbl
    301         nop
    302         jr lbl
    303 lbl:
    304 .endm
    305 
    306 .macro VDP_CANCEL_INT
    307         in a, (.VDP_STAT)       ; cancel pending VDP interrupts
    308 .endm
    309 
    310 .macro WRITE_VDP_CMD_HL
    311         rst 0x10
    312 .endm
    313 
    314 .macro WRITE_VDP_DATA_HL
    315         rst 0x20
    316 .endm
    317 
    318 .macro CALL_HL
    319         rst 0x30
    320 .endm
    321 
    322 .macro DISABLE_VBLANK_COPY
    323         ld hl, #__shadow_OAM_OFF
    324         inc (hl)
    325 .endm
    326 
    327 .macro ENABLE_VBLANK_COPY
    328         ld hl, #__shadow_OAM_OFF
    329         dec (hl)
    330 .endm
    331 
    332 .macro ADD_A_REG16 regH regL
    333         add regL
    334         ld regL, a
    335         adc regH
    336         sub regL
    337         ld regH, a
    338 .endm
    339 
    340 .macro MUL_DE_BY_A_RET_HL ?lbl1 ?lbl2
    341         ; Multiply DE by A, return result in HL; preserves: BC
    342         ld hl, #0
    343 lbl1:
    344         srl a
    345         jp nc, lbl2
    346         add hl, de
    347 lbl2:
    348         sla e
    349         rl d
    350         or a
    351         jp nz, lbl1
    352 .endm
    353 
    354 .macro DIV_PART divident divisor ?lbl
    355         rl divident
    356         rla
    357         sub divisor
    358         jr  nc, lbl
    359         add divisor
    360 lbl:
    361 .endm
    362 .macro FAST_MOD8 divident divisor
    363         ; returns modulus in A
    364         .rept 8
    365                 DIV_PART divident divisor
    366         .endm
    367 .endm

This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.