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/sms/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         .UP              = 0b00000001
    163         .DOWN            = 0b00000010
    164         .LEFT            = 0b00000100
    165         .RIGHT           = 0b00001000
    166         .A               = 0b00010000
    167         .B               = 0b00100000
    168         .START           = 0b01000000
    169         .SELECT          = 0b10000000
    170 
    171         .JOYPAD_COUNT   = 2
    172 
    173         .JOY_PORT1      = 0xDC
    174 
    175         .JOY_PORT1      = 0xDC
    176 
    177         .JOY_P1_UP       = 0b00000001
    178         .JOY_P1_MD_Z     = 0b00000001
    179         .JOY_P1_DOWN     = 0b00000010
    180         .JOY_P1_MD_Y     = 0b00000010
    181         .JOY_P1_LEFT     = 0b00000100
    182         .JOY_P1_MD_X     = 0b00000100
    183         .JOY_P1_RIGHT    = 0b00001000
    184         .JOY_P1_MD_MODE  = 0b00001000
    185         .JOY_P1_SW1      = 0b00010000
    186         .JOY_P1_TRIGGER  = 0b00010000
    187         .JOY_P1_MD_A     = 0b00010000
    188         .JOY_P1_SW2      = 0b00100000
    189         .JOY_P1_MD_START = 0b00100000
    190         .JOY_P2_UP       = 0b01000000
    191         .JOY_P2_MD_Z     = 0b01000000
    192         .JOY_P2_DOWN     = 0b10000000
    193         .JOY_P2_MD_Y     = 0b10000000
    194 
    195         .JOY_PORT2      = 0xDD
    196 
    197         .JOY_P2_LEFT     = 0b00000001
    198         .JOY_P2_MD_X     = 0b00000001
    199         .JOY_P2_RIGHT    = 0b00000010
    200         .JOY_P2_MD_MODE  = 0b00000010
    201         .JOY_P2_SW1      = 0b00000100
    202         .JOY_P2_TRIGGER  = 0b00000100
    203         .JOY_P2_MD_A     = 0b00000100
    204         .JOY_P2_SW2      = 0b00001000
    205         .JOY_P2_MD_START = 0b00001000
    206         .JOY_RESET       = 0b00010000
    207         .JOY_P1_LIGHT    = 0b01000000
    208         .JOY_P2_LIGHT    = 0b10000000
    209 
    210         .FMADDRESS      = 0xF0
    211         .FMDATA         = 0xF1
    212         .AUDIOCTRL      = 0xF2
    213 
    214         .RAM_CONTROL    = 0xfffc
    215 
    216         .RAMCTL_BANK    = 0b00000100
    217         .RAMCTL_ROM     = 0b00000000
    218         .RAMCTL_RAM     = 0b00001000
    219         .RAMCTL_RO      = 0b00010000
    220         .RAMCTL_PROT    = 0b10000000
    221 
    222         .GLASSES_3D     = 0xfff8
    223 
    224         .MAP_FRAME0     = 0xfffd
    225         .MAP_FRAME1     = 0xfffe
    226         .MAP_FRAME2     = 0xffff
    227 
    228         .BIOS           = 0xC000
    229 
    230         .SYSTEM_NTSC    = 0x00
    231         .SYSTEM_PAL     = 0x01
    232 
    233         .CPU_CLOCK      = 3579545
    234 
    235         ;; GBDK library screen modes
    236 
    237         .T_MODE         = 0x02  ; Text mode (bit 2)
    238         .T_MODE_OUT     = 0x02  ; Text mode output only
    239         .T_MODE_INOUT   = 0x03  ; Text mode with input
    240         .M_NO_SCROLL    = 0x04  ; Disables scrolling of the screen in text mode
    241         .M_NO_INTERP    = 0x08  ; Disables special character interpretation
    242 
    243         ;; Screen dimentions in tiles
    244 
    245         .SCREEN_X_OFS   = 0
    246         .SCREEN_Y_OFS   = 0
    247         .SCREEN_WIDTH   = 32
    248         .SCREEN_HEIGHT  = 24
    249         .VDP_MAP_HEIGHT = 28
    250         .VDP_MAP_WIDTH  = 32
    251 
    252         ;; Interrupt flags
    253 
    254         .VBL_IFLAG      = 0x01
    255         .LCD_IFLAG      = 0x02
    256 
    257         ; characters
    258         .CR             = 0x0A
    259         .SPACE          = 0x00
    260 
    261         ;; C related
    262         ;; Overheap of a banked call.  Used for parameters
    263         ;;  = ret + real ret + bank
    264 
    265         .BANKOV         = 5
    266 
    267         ;; Global variables
    268         .globl  .mode
    269 
    270         ;; Interrupt routines
    271         .globl _INT_ISR
    272         .globl _NMI_ISR
    273 
    274         ;; Symbols defined at link time
    275         .globl  .STACK
    276         .globl  _shadow_OAM
    277         .globl  __shadow_OAM_OFF
    278 
    279         ;; Main user routine
    280         .globl  _main
    281 
    282         ;; Macro definitions
    283 
    284 .macro VDP_WRITE_DATA regH regL
    285         ld a, regL
    286         out (#.VDP_DATA), a
    287         ld a, regH
    288         inc hl
    289         dec hl
    290         out (#.VDP_DATA), a
    291 .endm
    292 
    293 .macro VDP_WRITE_CMD regH regL
    294         ld a, regL
    295         di
    296         out (#.VDP_CMD), a
    297         ld a, regH
    298         ei
    299         out (#.VDP_CMD), a
    300 .endm
    301 
    302 .macro VDP_DELAY ?lbl
    303         nop
    304         jr lbl
    305 lbl:
    306 .endm
    307 
    308 .macro VDP_CANCEL_INT
    309         in a, (.VDP_STAT)       ; cancel pending VDP interrupts
    310 .endm
    311 
    312 .macro WRITE_VDP_CMD_HL
    313         rst 0x10
    314 .endm
    315 
    316 .macro WRITE_VDP_DATA_HL
    317         rst 0x20
    318 .endm
    319 
    320 .macro CALL_HL
    321         rst 0x30
    322 .endm
    323 
    324 .macro DISABLE_VBLANK_COPY
    325         ld hl, #__shadow_OAM_OFF
    326         inc (hl)
    327 .endm
    328 
    329 .macro ENABLE_VBLANK_COPY
    330         ld hl, #__shadow_OAM_OFF
    331         dec (hl)
    332 .endm
    333 
    334 .macro ADD_A_REG16 regH regL
    335         add regL
    336         ld regL, a
    337         adc regH
    338         sub regL
    339         ld regH, a
    340 .endm
    341 
    342 .macro MUL_DE_BY_A_RET_HL ?lbl1 ?lbl2
    343         ; Multiply DE by A, return result in HL; preserves: BC
    344         ld hl, #0
    345 lbl1:
    346         srl a
    347         jp nc, lbl2
    348         add hl, de
    349 lbl2:
    350         sla e
    351         rl d
    352         or a
    353         jp nz, lbl1
    354 .endm
    355 
    356 .macro DIV_PART divident divisor ?lbl
    357         rl divident
    358         rla
    359         sub divisor
    360         jr  nc, lbl
    361         add divisor
    362 lbl:
    363 .endm
    364 .macro FAST_MOD8 divident divisor
    365         ; returns modulus in A
    366         .rept 8
    367                 DIV_PART divident divisor
    368         .endm
    369 .endm
    370 

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