1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
|
gbdk-4.0.6
- Support for MegaDuck
- Library fixes/improvements
- fix RNG for SMS/GG
- check for overflow in metasprites handling routines
- set_*_based_tiles() / set_*_based_submap() set tilemaps using tile offset
- add_low_priority_TIM() set timer ISR handler that allows nested interrupts
- rename gb/BGB_emu.h into gb/EMU_debug.h
- Intellisense-friendly headers (hide SDCC dialect features)
- other minor fixes
- Toolchain
- png2mtspr
- support for 4bpp graphics and SGB borders
- new -tile_origin parameter
- Updated documentation
gbdk-4.0.5
- Support for Sega Master Sysyem/Sega Game Gear
- z80 library which provide compatibility layer as well as platform-specific functions
- support for the new targets on the toolchain side
- cross-platform examples (gnu make is required)
- Library fixes/improvements
- low level register/constant definitions for all targets
- DEVICE_* constants
- BANK* macros
- some headers were moved from gb/* into gbdk/*
- bcd.h, console.h, far_ptr.h, font.h, gbdecompress.h, metasprites.h
- new headers:
- gbdk/platform.h: includes specific platform headers depending on the target
- gbdk/incbin.h: INCBIN* macros for including of raw binary data
- gbdk/rledecompress.h: RLE decompression functions
- itoa()/uitoa()/ltoa()/ultoa() require radix parameter (GB target ignores it and assumes radix is 10)
- fixed get_bkg_tile_xy()
- other minor fixes/enhancements
- Toolchain
- lcc
- ability to pass target port/platform
- support for linker files
- bankpack
- support for linker files
- support for SMS/GG specifics
- png2mtspr was renamed to png2asset
- tilemaps/tiledata export without metasprite descriptors
- CGB support
- support for RLE compression in gbcompress
- New examples
- cross-platform examples
- INCBIN example
- on-the-fly RLE data decompression example
- Updated documentation
gbdk-4.0.4
- Updated documentation
- Library was improved
- Switch to standard types declared in stdint.h and stdbool.h
- separate cgb.h and sgb.h from gb.h (possible breaking change)
- get_vram_byte(), get_win_tile_xy(), get_bkg_tile_xy(), set_tile_data()
- fix broken decompression to VRAM routines
- Multiple minor improvements
- png2mtspr improvements and bug fixes
- support for code relocation with bankpack
- support for link scripts in lcc
- support for C input into gbcompress
- other lcc frontend improvements
gbdk-4.0.3
- Updated documentation, including the PDF version
- Library was improved
- Metasprites support (see example)
- GBCompress decompressor included (see example)
- Large map scrolling helper functions (see example)
- Multiple minor improvements
- New tools
- png2mtspr converts png images into metasprite structs
- gbcompress compression utility, compatible with GBTD/GBMB
gbdk-4.0.2
- Updated documentation
- Library was improved
- Linking with stdio.h does not require that much rom now
- Default font is changed to the smaller one (102 characters), that leaves space for user tiles
- Fixed broken support for multiplying longs
- Multiple minor improvements
- New bankpack feature, allows automatic bank allocation for data and code, see banks_autobank example, feature is in beta state, use with care
- Lcc improvements
gbdk-4.0.1
- Updated documentation
- IHX is checked for correctness before the makebin stage. That allows to warn about overwriting the same ROM addresses (SDCC toolchain does not check this anymore).
- Library was improved
- set_*_tiles() now wrap maps around horizontal and vertical boundaries correctly
- new fill_*_rect() functions to clear rectangle areas
- runtime initialization code now does not initialize whole WRAM with zeros anymore, that allows BGB to raise exceptions when code tries to read WRAM that was not written before.
- enhanced SGB support
- joypad_init()/joypad_ex() support for multiple joypads
- SGB border example
- _current_bank variable is updated when use bank switching macros
- Reorganized examples: each example is in separate folder now, that simplifies understanding.
- Lcc improvements
gbdk-4.0
- GBDK now requires SDCC 4.0.3 or higher, that has fully working toolchain. Old link-gbz80 linker is not used anymore, sdldgb and makebin are used to link objects and produce binary roms; maccer tool is no longer needed either
- SDCC 4.0.3 has much better code generator which produces smaller and faster code. Code is twice faster
- SOURCE LEVEL DEBUGGING is possible now! Native toolchain produces *.CDB files that contain detailed debug info. Look for EMULICIOUS extension for vs.code. It supports breakpoints, watches, inspection of local variables, and more!
- SDCC 4.0.4 has fixed RGBDS support; library is not updated to support that in full yet, but it is possible to assemble and link code emitted by SDCC with RGBDS
- New banked trampolines are used, they are faster and smaller
- New (old) initialization for non-constant arrays do NOT require 5 times larger rom space than initialized array itself, SDCC even tries to compress the data
- Library was improved
- itoa/ltoa functions were rewritten, div/mod is not required now which is about 10 times faster
- sprite functions are inline now, which is faster up to 12 times and produces the same or smaller code; .OAM symbol is renamed into _shadow_OAM that allows accessing shadow OAM directly from C code
- interrupt handling was revised, it is now possible to make dedicated ISR's, that is important for time-sensitive handlers such as HBlank.
- printf/sprintf were rewritten and splitted, print functions are twice faster now and also requre less rom space if you use sprintf() only, say, in bgb_emu.h
- crash_handler.h - crash handler that allows to detect problems with ROMs after they are being released (adapted handler, originally written by ISSOtm)
- improved and fixed string.h
- many other improvements and fixes - thanks to all contributors!
- Revised examples
- Improved linux support
- Lcc has been updated
- it works with the latest version of sdcc
- quoted paths with spaces are working now
gbdk-3.2
- support for BCD numbers
- support for far pointers, that allow to call functions in other banks by pointer
- some useful parts of native SDCC library are merged into GBDK (stdint, limits, stdbool, setjmp, stdatomic and so on)
gbdk-3.1
- Banked functions are working!
- Check this [post](https://gbdev.gg8.se/forums/viewtopic.php?id=700) for more info
- Check the examples/gb/banked code for basic usage
- USE_SFR_FOR_REG is the default now [check here why](https://gbdev.gg8.se/forums/viewtopic.php?id=697)
- Fixed examples that were not compiling in the previous version and some improvements in a few of them. Removed all warnings caused by changing to the new SDCC
- Fixed bug in lcc that was causing some files in the temp folder not being deleted
- Removed as-gbz80 (the lib is now compiled with sdasgb thanks to this [workaround](https://github.com/Zal0/gbdk-2020/commit/d2caafa4a66eb08998a14b258cb66af041a0e5c8))
- Profile support with bgb emulator
- Basic support including <gb/bgb_emu.h> and using the macros BGB_PROFILE_BEGIN and BGB_PROFILE_END. More info in this [post](https://gbdev.gg8.se/forums/viewtopic.php?id=703)
- For full profiling [check this repo](https://github.com/untoxa/bgb_profiling_toolkit/blob/master/readme.md) and this [post](https://gbdev.gg8.se/forums/viewtopic.php?id=710)
gbdk-3.00
Updated SDCC to v4.0
The new linker is not working so the old version is still there
There is an issue with sdagb compiling drawing.s (the JP in
line 32 after ".org .MODE_TABLE+4*.G_MODE" it's writing more
than 4 bytes invading some addresses required by input.s:41)
Because of this, all .s files in libc have been assembled
with the old as-gbz80 and that's why it is still included
gbdk-2.96
* Many changes. Code generated is now much more reliable and
passes all of sdcc's regression suite. Added support for large
sets of local variables (>127 bytes). Added full 32 bit long
support. Still no floating pt support.
gbdk-2.95-3
* Stopped lcc with sdcc from leaking .cdb files all across
/tmp.
* Optimised < and > for 16 bit varibles.
* Added a new lexer to sdcc. Compiling files with large
initalised arrays takes 31% of the time (well, at least
samptest.c does :)
gbdk-2.95-2
* Added model switching support
--model-medium uses near (16 bit) pointers for data, and
banked calls for anything not declared as 'nonbanked'
--model-small uses near (16 bit) pointers for data and
calls. Nothing uses banked calls. 'nonbanked' functions
are still placed in HOME. Libraries are under lib/medium
and lib/small.
* Added the gbdk version to 'sdcc --version'
* Changed the ways globals are exported, reducing the amount
of extra junk linked in.
* Turned on the optimisations in flex. Large constant arrays
like tile data should compile a bit faster.
gbdk-2.95
* Fixed 'a >> c' for c = [9..15]
* Fixed 'a << c' for c = [9..15]
* no$gmb doesn't support labels of > 32 chars. The linker now
trims all labels to 31 chars long.
* Fixed wait_vbl for the case where you miss a vbl
* Fixed + and - for any type where sizeof == 2 and one of the
terms was on the stack. This includes pointers and ints. Fixes
the text output bug in the examples. Should be faster now as
well. Note that + and - for longs is still broken.
* Fixed the missing */ in gb.h
* Added basic far function support. Currently only works for isas
and rgbasm. See examples/gb/far/*
* bc is now only pushed if the function uses it. i.e. something
like:
int silly(int i)
{
return i;
}
will not have the push bc; pop bc around it.
* Better rgbasm support. Basically:
o Use "sdcc -mgbz80 --asm=rgbds file.c" for each file.c
o Use "sdcc -mgbz80 --asm=rgbds crt0.o gbz80.lib gb.lib file1.o file2.o..."
to link everything together. The .lib files are generated using
astorgb.pl and sdcc to turn the gbdk libraries into something
rgbds compatible.
The libraries are _not_ fully tested. Trust nothing. But give it
a go :)
* Ran a spell checker across the README and ChangeLog
gbdk-2.94
* Fixed
#define BLAH 7 // Unterminated ' error
in sdcpp
* Fixed
SCY_REG += 2, SCY_REG -= 5
(add and subtract in indirect space) as they were both quite broken.
* externs and static's now work as expected.
* You can now specify which bank code should be put into using a
#pragma e.g:
#pragma bank=HOME
Under rgbds and asxxxx putting code in the HOME bank will force
the code into bank 0 - useful for library functions. The most
recent #pragma bank= will be the one used for the whole file.
* Fixed an interesting bug in the caching of lit addresses
* Added support for accessing high registers directly using the
'sfr' directive. See libc/gb/sfr.s and gb/hardware.h for an
example. It should be possible with a bit of work to make high
ram directly usable by the compiler; at the moment it is
experimental. You can test sfr's by enabling USE_SFR_FOR_REG=1
* Added remove_VBL etc functions.
* Documented the libs - see the gbdk-doc tarball distributed
seperatly.
* Two dimensional arrays seem to be broken.
gbdk-2.93
* Added multi-bank support into the compiler - The old -Wf-boxx
and -Wf-baxx options now work
* Has preliminary support for generating rgbds and ISAS compatible
assembler. Try -W--asm=rgbds or -W--asm=isas. The ISAS code is
untested as I dont have access to the real assembler.
* RSH is fixed
* AND is fixed
* The missing parts of 2.1.0's libs are there. Note: They are
untested.
* The dscan demo now fully works (with a hack :)
* There is a bug with cached computed values which are later used
as pointers. When the value is first used as a BYTE arg, then
later as a pointer the pointer fails as the high byte was never
computed and is now missing. A temporary fix is to declare
something appropriate as 'volatile' to stop the value being
cached. See dscan.c/bombs() for an example.
gbdk-2.92-2:
* win32 only. Takes care of some of the install bugs, including:
- Now auto detects where it is installed.
This can be overridden using set GBDKDIR=...
- Problems with the installer (now uses WinZip)
- Problems with the temp directory
Now scans TMP, TEMP, TMPDIR and finally c:\tmp
- cygwin1.dll and 'make' are no longer required
gbdk is now built using mingw32 which is win32 native
make.bat is automagically generated from the Makefile
- I've reverted to using WORD for signed 16 bit etc.
GBDK_2_COMPAT is no longer required.
gbdk-2.92:
* All the examples now work (with a little bit of patching :)
* Fixed problem with registers being cached instead of being
marked volatile.
* More register packing - should be a bit faster.
* You can now install somewhere except c:\gbdk | /usr/lib/gbdk
* Arrays initialised with constant addresses a'la galaxy.c now
work.
* Fixed minor bug with 104$: labels in as.
* Up to 167d/s...
|