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.