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/sm83/sgb.s

      1         .include        "global.s"
      2 
      3         .area   _CODE
      4 
      5         ;; Check if running on SGB
      6         ;;   Set A to 0xFF when running on SGB
      7         ;;   Clear A when running on DMG
      8 .sgb_check::
      9 _sgb_check::
     10         PUSH    BC
     11         ADD     SP, #-0x10
     12         LDHL    SP, #0
     13         LD      C, #0x10
     14         XOR     A
     15         RST     0x28
     16         LDHL    SP,#0
     17         LD      A,#((.MLT_REQ << 3) | 1)
     18         LD      (HL+),A
     19         LD      A,#0x03
     20         LD      (HL-),A
     21         CALL    .sgb_transfer
     22         LD      C,#.P1
     23         LD      A,#(.P14 | .P15)
     24         LDH     (C),A
     25         LDH     A,(C)
     26         LDH     A,(C)
     27         LD      E, #4
     28         LDH     A,(C)           ; read delayed
     29 3$:
     30         LD      B, A
     31 
     32         LD      A,#.P15
     33         LDH     (C),A
     34         LDH     A,(C)
     35         LDH     A,(C)
     36 
     37         LD      A,#.P14
     38         LDH     (C),A
     39         LDH     A,(C)
     40         LDH     A,(C)
     41 
     42         LD      A,#(.P14 | .P15)
     43         LDH     (C),A
     44         LDH     A,(C)
     45         LDH     A,(C)
     46         LDH     A,(C)
     47         LDH     A,(C)           ; read delayed
     48         CP      B
     49         JR      NZ,1$
     50         
     51         DEC     E
     52         JR      NZ,3$
     53 2$:
     54         LD      E,#0
     55         JR      4$
     56 1$:
     57         LDHL    SP,#1
     58         LD      A,#0x00
     59         LD      (HL-),A
     60         CALL    .sgb_transfer
     61         LD      E,#1
     62 4$:
     63         ADD     SP,#0x10
     64         POP     BC
     65         RET
     66 
     67 _sgb_transfer::
     68         LDHL    SP,#2
     69         LD      A,(HL+)
     70         LD      H,(HL)
     71         LD      L,A
     72         
     73 .sgb_transfer::
     74         PUSH    BC
     75         LD      A,(HL)          ; Top of command data
     76         AND     #0x07
     77         JR      Z,6$
     78 1$:
     79         PUSH    AF
     80         LD      C,#.P1
     81         LDH     (C),A           ; Send reset
     82         LD      A,#(.P14 | .P15)
     83         LDH     (C),A
     84         LD      B,#0x10         ; Set counter to transfer 16 byte
     85 2$:     LD      E,#0x08         ; Set counter to transfer 8 bit
     86         LD      A,(HL+)
     87         LD      D,A
     88 
     89 3$:
     90         SRL     D
     91         LD      A,#.P14         ; P14 = high, P15 = low  (output "1")
     92         JR      C,4$
     93         LD      A,#.P15         ; P14 = low,  P15 = high (output "0")
     94 4$:
     95         LDH     (C),A
     96         LDH     A,(C)           ; delay
     97         LDH     A,(C)
     98         LD      A,#(.P14 | .P15); P14 = high, P15 = high
     99         LDH     (C),A
    100         LDH     A,(C)           ; delay
    101         LDH     A,(C)
    102         DEC     E
    103         JR      NZ,3$
    104 
    105         DEC     B
    106         JR      NZ,2$
    107         
    108         LD      A,#.P15         ; 129th bit "0" output
    109         LDH     (C),A
    110         LDH     A,(C)           ; delay
    111         LDH     A,(C)
    112         LD      A,#(.P14 | .P15)
    113         LDH     (C),A
    114 
    115         LD      DE,#8400		; was: 7000
    116 5$:
    117         LDH     A,(.P1)         ; 3 +
    118         DEC     DE              ; 2 +
    119         LD      A,D             ; 1 +
    120         OR      E               ; 1 +
    121         JR      NZ,5$           ; 3 = 10 cycles
    122 
    123         POP     AF
    124         DEC     A
    125         JR      NZ, 1$
    126 6$:
    127         POP     BC
    128         RET

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