gbdk-2020 | GameBoy Development Kit |
| download: https://git.y1.nz/archives/gbdk.tar.gz | |
| README | Files | Log | Refs | LICENSE |
docs/pages/10_release_notes.md
1 @page docs_releases GBDK Release Notes
2
3 The GBDK-2020 releases can be found on Github:
4 https://github.com/gbdk-2020/gbdk-2020/releases
5
6
7 # GBDK-2020 Release Notes
8
9 ## GBDK-2020 4.5.0
10 2025/12
11 - SDCC
12 - Added HRAM area access for sm83
13 - Added `#pragma dataseg DATA_<N>` support for sm83 and z80 platforms
14 - [Patched SDCC Builds](https://github.com/gbdk-2020/gbdk-2020-sdcc/releases) with support for all platforms are used.
15 - See the [github workflow](https://github.com/gbdk-2020/gbdk-2020-sdcc/tree/main/.github/workflows) for details.
16 - Library
17 - Added dynamic HRAM variable allocation for GB/AP/Duck
18 - Added zx0 decompression support for sm83, z80 platforms: @ref zx0_decompress()
19 - Changed NULL definition in @ref types.h to match @ref stddef.h
20 - Fixed escaping `%` symbol in printf() and sprintf()
21 - GB/AP/Duck
22 - Improved @ref get_bkg_xy_addr(), @ref get_win_xy_addr()
23 - Improved performance for banked calls
24 - SMS/GG
25 - Changed GG "not interrrupt" link port control bit constant from `GGEXT_NINIT` to @ref GGEXT_NINT
26 - Remove broken and unused `FAST_DIV8` macro
27 - Removed legacy `___sdcc_bcall` trampoline
28 - Fixed parameter order of @ref set_tile_submap(), @ref set_tile_submap_compat()
29 - Fixed tilemap width not set correctly in @ref set_tile_submap_compat()
30 - NES
31 - Remove broken and unused `FAST_DIV8` macro
32 - Fixed @ref fill_bkg_rect() screen edge wrap, now calls @ref set_bkg_tile_xy()
33 - Examples
34 - Added HRAM variable example for GB/AP/Duck
35 - Added SRAM bank example for new `#pragma dataseg DATA_<N>`
36 - Added MegaDuck and Game Gear support to Game Boy Printer example
37 - Added missing compile.bat for some examples
38 - Improved the Text Scroller example
39 - Improved RLE compress example to convert and compress map at build time
40 - Fixed Platformer example incorrectly using `-keep_duplicate_tiles` flag
41 - Fixed Text Advanced Dialogue example printing (Rodrigo Card)
42 - Game Boy
43 - Added MBC5 Rumble example (Ev3)
44 - Improved Rand example with fast modulo, triangle and bell curve distributions
45 - Fixed Sound example not writing length when length bit enabled and triggering channel
46 - MegaDuck
47 - Added MegaDuck Laptop Printer example
48 - SMS
49 - Added NMI handler example
50 - Toolchain / Utilities
51 - @ref utility_png2asset "png2asset"
52 - Added binary palette export for `-bin` mode
53 - Added logging of conversion arguments to `.c` and `.h` output files
54 - Path is stripped to avoid potential unwanted username/etc disclosure
55 - Added `-use_metafile` option to load arguments from `<inputfile>.meta`
56 - Changed to separate attribute array for `-use_map_attributes` + `-use_structs` with SMS/GG
57 - Fixed broken transparency for SGB borders with more than one 16 color palette
58 - Fixed missing error for `-bin` requiring `-map`
59 - Fixed incorrect line breaks and trailing spaces in output
60 - @ref bankpack
61 - Changed Linkerfile output order to match packing order for use with asm .bndry alignment in rom banks
62 - First non-banked, then fixed bank, then auto-banked. Banknum ascending, size descending
63 - Improved bank assignment printout
64 - @ref utility_gbcompress "gbcompress"
65 - Added include guards for header file output (Rodrigo Card)
66 - Added zx0 compression and decompression mode: `--alg=zx0`
67 - @ref utility_romusage "romusage"
68 - Fixed missing error when filename not present
69 - Docs:
70 - Improved html style and mobile web formatting
71 - Various updates and improvements
72
73
74 ## GBDK-2020 4.4.0
75 2025/05
76 - Includes SDCC version ~4.5.0 (15267) with GBDK-2020 patches for Z80 and NES
77 - [Patched SDCC Builds](https://github.com/gbdk-2020/gbdk-2020-sdcc/releases) with support for Sega GG/SMS and the Nintendo NES are used.
78 - See the [github workflow](https://github.com/gbdk-2020/gbdk-2020-sdcc/tree/main/.github/workflows) for details.
79 - Building GBDK
80 - Added native GBDK build for ARM 64 Linux
81 - Changed from building on MacOS 11 to MacOS 13 for 64 bit Intel
82 - Changed from building on Ubuntu Linux 20.04 to 22.04 for 64 bit Intel
83 - SDCC
84 - Changed to using the `-N` flag with sdas since the the `-n` flag was removed
85 - Library
86 - Added export of `_vbl_done` (@ref VBL_DONE), a flag indicating the VBlank ISR has run
87 - Game Boy
88 - Added MBC7 related register and flag definitions
89 - @ref rMBC7_SRAM_ENABLE_1, @ref rMBC7_SRAM_ENABLE_2, @ref rMBC7_LATCH_1, @ref rMBC7_LATCH_2, @ref rMBC7_ACCEL_X_LO, @ref rMBC7_ACCEL_X_HI, @ref rMBC7_ACCEL_Y_LO, @ref rMBC7_ACCEL_Y_HI
90 - @ref MBC7_LATCH_ERASE, @ref MBC7_LATCH_CAPTURE, @ref MBC7_SRAM_ENABLE_KEY_1, @ref MBC7_SRAM_ENABLE_KEY_2
91 - Fixed possible halt bug when using @ref hblank_copy_vram()
92 - NES
93 - Added delay() and reset() functions for compatibility
94 - Added Timer interrupt emulation: @ref add_TIM() , @ref remove_TIM()
95 - Improved LCD ISR support for less graphics glitches
96 - Improved palette function code size (smaller)
97 - Changed LCD bkg_scroll_y to be relative to the current scanline for higher compatibility with Game Boy SCY_REG and LCD handlers
98 - Align coordinates and scanline counting in LCD ISR implementation with GB, add SCX / SCY / LYC defines
99 - Fixed bug with @ref set_bkg_1bpp_data() not working in buffered mode
100 - Fixed bug with multiple column attribute updates
101 - Fixed bugs with non-multiple-of-2 (/4) map width in @ref set_bkg_submap_attributes()
102 - SMS/GG
103 - Added Timer interrupt emulation: @ref add_TIM() , @ref remove_TIM()
104 - Improved metasprite Y clipping
105 - Changed from unsigned (`uint16_t`) to signed int16 (`int16_t`) for coordinates with the family of `...metasprite...()` functions
106 - MegaDuck
107 - Added header files: @ref duck/laptop_io.h, @ref duck/model.h, @ref duck/laptop_keycodes.h
108 - Toolchain / Utilities
109 - Added @ref utility_makenes "makenes" utility for finalizing NES rom headers (called automatically by @ref lcc)
110 - @ref lcc "lcc"
111 - Changed use `--no-optsdcc-in-asm` for building user programs and the GBDK library
112 - This removes some "O line" meta-data from object files to avoid false-positive linker errors
113 - It is a workaround for SDCC now appending the calling convention to the "O Line" in the object files by default
114 - Changed to warn about some deprecated flags: `A`,`b`, `B`, `-dn`, `-g`, `-n`, `-O`, `P`, `-p`, `-static`, `-t`, `-w`
115 - @ref utility_png2asset "png2asset"
116 - Added `-area` option to specify linker area name (such as `-area LIT` for SMS/GG)
117 - Added support for 512 tiles via alternate tile bank on GBC
118 - Fixed Palette Generation broken when using `-source_tileset` option
119 - @ref bankpack
120 - Added support for MBC7
121 - Fixed bugs with large number of object files
122 - @ref utility_romusage "romusage"
123 - Added Set hex bytes treated as Empty in ROM files (.gb/etc) `-b:HEXVAL:[...]`
124 - Added option to Hide memory regions (ex hide all RAM: `-nMEM:RAM`)
125 - Added support NES (`-p:NES1`) .noi/.map files
126 - Changed to allow filename at any location in option arguments
127 - Changed to improve error messaging
128 - Fixed detecting areas with leading underscores for .noi/.map files
129 - Fixed Brief/summarized mode counting overlapped header areas multiple times
130 - @ref utility_png2hicolorgb "png2hicolorgb"
131 - Added `--palendbit` for indicating end of data
132 - Added `--addendcolor=N` for appending color to clear the background on non-full height images
133 - Added `--precompiled` mode
134 - Added `-s` to specify variable/symbol name in C output
135 - @ref ihxcheck
136 - Fixed check on max bank to prevent crash
137 - Examples
138 - Added Text and Dialog example
139 - Changed irq example to be cross-platform
140 - Improved emu_debug example
141 - Improved Logo example Readme
142 - Game Boy
143 - Added MBC3 Real Time Clock (RTC) example
144 - Added MBC7 Accelerometer example
145 - MegaDuck
146 - Added MegaDuck Laptop model examples for keyboard, RTC and speech
147 - Docs:
148 - Added Cart SRAM Max Size to MBC Chart and clarify battery/save meaning
149 - Various updates and improvements
150
151
152 ## GBDK-2020 4.3.0
153 2024/06
154 - Includes SDCC version ~4.4.0 (14650) with GBDK-2020 patches for Z80 and NES
155 - [Patched SDCC Builds](https://github.com/gbdk-2020/gbdk-2020-sdcc/releases) with support for Sega GG/SMS and the Nintendo NES are used.
156 - See the [github workflow](https://github.com/gbdk-2020/gbdk-2020-sdcc/tree/main/.github/workflows) for details.
157 - Added native GBDK build for Apple ARM cpus
158 - Known Issues
159 - SDCC may fail on Windows when @ref windows_sdcc_non_c_drive_path_spaces "run from folder names with spaces on non-C drives".
160 - Library
161 - Added @ref get_system() which indicates system speed
162 - @ref SYSTEM_60HZ, @ref SYSTEM_50HZ, @ref SYSTEM_BITS_DENDY, @ref SYSTEM_BITS_NTSC, @ref SYSTEM_BITS_PAL, @ref SYSTEM_NTSC
163 - Changed to new calling convention for @ref printf(), @ref sprintf(), @ref abs()
164 - Changed @ref EMU_printf() to remove dependency on stdio.h added similar @ref EMU_fmtbuf()
165 - Fixed @ref emu_debug.h macros missing a trailing space
166 - NES
167 - Added PAL support (detects NTSC/PAL/Dendy on reset to adjust fake LCD ISR timings)
168 - Added BCD support
169 - Added deferred hblank system for fake LCD ISRs, allowing for multiple splits per-frame
170 - NMI optimization: Only call delay routine for remaining-vblank and LCD handler execution if LCD handler present
171 - NMI optimization: Skip OAM DMA and delay routines when display is off, to increase unbuffered performance
172 - NMI optimization: Save 8 cycles of stripe setup cost in vram transfer buffer execution
173 - ZP memory optimization: Make gbdk-nes functions use its own dedicated overlay segment
174 - Fixed `_map_tile_offset` not being applied for @ref set_bkg_based_tiles()
175 - Fixed VRAM transfer buffer bug (ensure stack page cleared on reset)
176 - Fixed support for 4-player controllers using fourscore
177 - Fixed @ref set_sprite_palette() to index from `0..3` instead of `4..7`
178 - Fixed @ref move_metasprite to initialize Y index register to zero
179 - Fixed @ref waitpadup to wait for button release instead of press
180 - Updated libc to latest from sdcc 4.4.0
181 - SMS/GG
182 - Added @ref SHOW_SPRITES, @ref HIDE_SPRITES (no hiding mid-frame)
183 - Added @ref S_BANK tile attribute
184 - Added 6 button controller support in @ref joypad()
185 - Added BCD support
186 - Added ability to move VDP SAT and name table to other locations by writing to VDP R2 and VDP R5.
187 - Set name table to 0x1800 and SAT to 0x1F00 by default to free up some sprite tile space
188 - Added R5_SAT_0x1F00 definition for the R5 value controlling SAT position in VRAM
189 - Added @ref __WRITE_VDP_REG_UNSAFE() VDP macro while interrupts are disabled (such as in ISR handlers)
190 - Added Game Gear registers and definitions
191 - `GG_STATE`: @ref GGSTATE_STT, @ref GGSTATE_NJAP, @ref GGSTATE_NNTS
192 - `GG_EXT_7BIT`
193 - `GG_EXT_CTL`: `GGEXT_NINIT`
194 - `GG_SIO_SEND`
195 - `GG_SIO_RECV`
196 - `GG_SIO_CTL`: @ref SIOCTL_TXFL, @ref SIOCTL_RXRD, @ref SIOCTL_FRER, @ref SIOCTL_INT, @ref SIOCTL_TON, @ref SIOCTL_RON, @ref SIOCTL_BS0, @ref SIOCTL_BS1
197 - `GG_SOUND_PAN`: @ref SOUNDPAN_TN1R, @ref SOUNDPAN_TN2R, @ref SOUNDPAN_TN3R, @ref SOUNDPAN_NOSR, @ref SOUNDPAN_TN1L, @ref SOUNDPAN_TN2L, @ref SOUNDPAN_TN3L, @ref SOUNDPAN_NOSL
198 - Optimized native tile data loading routines
199 - Improved @ref WRITE_VDP_DATA macro so it does not need `di`/`ei` protection
200 - Improved palette initialization in crt0
201 - Fixed tilemap wrapping over the low bound of the VDP name table
202 - Fixed @ref scroll_sprite()
203 - Fixed missing sms.h in sms/metasprites.h
204 - Fixed scroll glitch due to accessing VDP too fast
205 - Z80 shared SMS/GG/MSX
206 - Added @ref DIV_REG emulation for the Z80 systems, may be useful for seeding RNG
207 - Changed VDP to reduce chances of dangerous ISR nesting (see SDCC issue https://sourceforge.net/p/sdcc/bugs/3721/)
208 - Changed to allow nested locking of the shadow SAT copying on VBlank
209 - Optimized @ref memcpy() for larger amounts of data
210 - Fixed @ref waitpad()
211 - Fixed return result of "`set_tile x, y`" family functions
212 - Fixed to not allow interrupts to fire durint crt0 initialization code
213 - MSXDOS
214 - Fixed `.VDP_COLORDATA2` assembly definition
215 - Game Boy
216 - Added HBlank copy routines: @ref hblank_copy_vram(), @ref hblank_cpy_vram(), @ref hblank_copy()
217 - Added @ref SCF_START, @ref SCF_SOURCE, @ref SCF_SPEED aliases for SIO (Serial/Link port) control register control constants
218 - Added clamping and changed to new SDCC calling convention for @ref set_bkg_tile_xy(), @ref set_win_tile_xy()
219 - Added @ref S_BANK tile attribute
220 - Fixed 8-bit signed modulus
221 - MegaDuck
222 - Fixed ROM bank switching on hardware when trying to enable or switch SRAM banks
223 - Toolchain / Utilities
224 - Added @ref utility_romusage "romusage" utility for viewing free/used ROM and RAM in compiled programs
225 - @ref lcc "lcc"
226 - Changed `-debug` to add the following flags: `-Wa-l -Wl-u -Wl-w`
227 - @ref utility_png2asset "png2asset"
228 - Added `-sprite_no_optimize`: sprite conversion will keep duplicate and empty sprite tiles
229 - Added `-entity_tileset`: mark entity locations on maps during conversion with an entity tileset
230 - Added `-rel_paths`: paths to tilesets are relative to the input file path
231 - Changed `-keep_palette_order` to round up to at least one palette
232 - Changed `-use_structs` + `-source_tileset` behavior
233 - Point tile data to external source tileset
234 - Add `extra_tiles` struct member pointing to map tiles not found in source tileset (null if none found)
235 - Changed `-use_structs` to use designated initializers
236 - Changed if using either `-bpp 1` or `-pack_mode 1bpp` then the other is auto-enabled
237 - Fixed garbage in unused colors of palettes (set unused colors to black)
238 - Fixed `-bin` mode not honoring `-tiles_only` and `-maps_only`
239 - Fixed segfault and wrong data size for `-pack_mode sgb` + `-bin`
240 - Fixed missing Palette ID in attributes for multi-palette SMS/GG backgrounds
241 - Fixed not taking `-bpp` into account when converting metasprites and emitting `<symbol>_tile_pals[]`
242 - Fixed crash when filename for -o and -c not specified
243 - Fixed some attributes missing for metasprite export
244 - @ref makebin
245 - Fixed crash when using `-yS` (`-Wm-yS` with lcc)
246 - @ref bankpack
247 - Added `-banktype=` to allow forcing a bank type to CODE or LIT before packing starts
248 - Added support for `XL4` (32 bit addresses) object file format (in addition to existing `XL3`)
249 - Changed minimum bank for auto packing from `1` to `0` (required for the NES)
250 - Examples
251 - Added HBlank copy example for GB/AP/Duck
252 - Added Reading SNES joypads on NES example
253 - Added Game Boy Printer example
254 - Added Joypad testing example
255 - Added Display System example to demonstrate @ref get_system()
256 - Added Platformer example
257 - Added `GBDK_DEBUG` Makefile environment var for turning on/off debug flags
258 - Changed wav sample: play waveforms on the SMS/GG PSG
259 - Changed Random Number example: only call @ref initrand() once
260 - Changed Large Map: support modified initial camera position
261 - Changed all examples: use @ref BANKED macro instead of `__banked`
262 - Also change some to use @ref CURRENT_BANK instead of `_current_bank`
263 - Fixes for SMS/GG: Fonts, Large Map, gbdecompress
264 - Fixed NES version of Text Scroller to have multiple splits as other platforms do
265 - Fixed Simple Physics: joypad input caching was wrong
266 - Fixed Banks Non-Intrinsic: mismatched SRAM banks for final calculation, improved naming
267 - Removed Analogue Pocket examples that were just duplicates of Game Boy ones
268 - Docs:
269 - Fixed search where some exact matches didn't return a result
270 - Various updates and improvements
271 - Added more historical release notes
272
273
274 ## GBDK-2020 4.2.0
275 2023/08
276 - Includes SDCC version ~4.3 with GBDK-2020 patches for Z80 and NES
277 - [Patched SDCC Builds](https://github.com/gbdk-2020/gbdk-2020-sdcc/releases) with support for Sega GG/SMS and the Nintendo NES are used. See the [github workflow](https://github.com/gbdk-2020/gbdk-2020-sdcc/tree/main/.github/workflows) for details
278 - Known Issues
279 - SDCC may fail on Windows when @ref windows_sdcc_non_c_drive_path_spaces "run from folder names with spaces on non-C drives".
280 - Library
281 - Added `NORETURN` definition (for `_Noreturn`)
282 - Added: set_bkg_attributes(), set_bkg_submap_attributes(), set_bkg_attribute_xy()
283 - The following new functions replace old ones. The old functions will continue to work for now, but migration to new versions is strongly encouraged.
284 - vsync(): replaces wait_vbl_done()
285 - set_default_palette(): replaces cgb_compatibility()
286 - metasprites: added metasprite functions which can set base sprite property parameter (`__current_base_prop`) for GB/GBC and NES
287 - move_metasprite_flipy(): replaces move_metasprite_hflip()
288 - move_metasprite_flipx(): replaces move_metasprite_vflip()
289 - move_metasprite_flipxy(): replaces move_metasprite_hvflip()
290 - move_metasprite_ex(): (replaces move_metasprite()
291 - NES
292 - Added support for much of the GBDK API
293 - Banking support (library and sdcc toolchain)
294 - Added set_bkg_attributes_nes16x16(), set_bkg_submap_attributes_nes16x16(), set_bkg_attribute_xy_nes16x16()
295 - SMS/GG
296 - Swapped A and B buttons to match game boy buttons
297 - X coordinate metasprite clipping on the screen edges
298 - Game Boy
299 - Minor crt0 optimizations
300 - Faster vmemcpy(), set_data(), get_data()
301 - Fixed hide_sprites_range(39u, 40u); overflow shadow OAM
302 - Increased sgb_transfer() maximum packet length to 7 x 16 bytes
303 - Convert gb_decompress routines to the new calling convention
304 - Convert rle_decompress routines to the new calling convention
305 - Removed legacy MBC register definitions `.MBC1_ROM_PAGE` and `.MBC_ROM_PAGE`
306 - Workaround for possible HALT bug in Crash Handler
307 - Refactored interrupts to use less space
308 - Toolchain / Utilities
309 - Added @ref utility_png2hicolorgb "png2hicolorgb"
310 - @ref lcc "lcc"
311 - Fixed `--sdccbindir`
312 - Removed the unused `-DINT_16_BITS` from the default SDCC compiler and preprocessor arguments
313 - Improved improved Game Gear header compatibility (change header region code from 4 to 6)
314 - @ref utility_png2asset "png2asset"
315 - Added `-o` as a more standard version of the `-c` argument
316 - Added `-repair_index_pal`: Tries to repair tile palettes for indexed color pngs (such as when RGB paint programs mix up indexed colors if the same color exists in multiple palettes). Implies `-keep_palette_order`
317 - Added `-no_palettes`: Do not export palette data
318 - Fixed support for indexed color pngs with less than 8 bits color depth
319 - Fixed incorrect palettes when different colors have same luma value (use RGB values as less-significant bits)
320 - Fixed `-keep_duplicate_tiles` not working with `-source_tileset`
321 - Changed to use cross-platform constants for metasprite properties (S_FLIPX, S_FLIPY and S_PAL)
322 - @ref makebin
323 - Warn if RAM banks specified and file size of ROM is less than the 64K required to enable them with in emulators
324 - Added sdld6808 (for NES)
325 - Examples
326 - Fixed mkdir broken in some compile.bat files (remove unsupported -p flag during bat file conversion)
327 - Sound Test: Added MegaDuck support
328 - Wav Playback: Improved support on AGB/AGS hardware
329 - Metasprites: Added sub-palette switching for GBC and NES, software metasprite flipping for sms/gg
330 - Large Map: Added color for supported platforms
331 - LCD ISR Wobble: Improved interrupt flag settings
332 - Added GB-Type example
333 - Added Game Boy Color Hi-Color example using @ref utility_png2hicolorgb "png2hicolorgb"
334 - Docs:
335 - Improved search to do partial matches instead of matching start of string only
336 - Added SDAS assembler manual (asmlnk_manual.txt)
337 - Added section on @ref nes_technical_details "NES support"
338 - Added @ref using_cgb_features "Using Game Boy Color Features"
339 - Updated @ref megaduck_sound_register_value_changes "MegaDuck hardware documentation"
340 - Added @ref banked_calling_convention "Banked Calling Convention"
341 - Added mention of @ref MAX_HARDWARE_SPRITES
342
343 ## GBDK-2020 4.1.1
344 2022/11
345 - Includes SDCC version 13350 with GBDK-2020 patches for Z80
346 - Library
347 - Fixed @ref RGB() and @ref RGB8() macros
348
349 ## GBDK-2020 4.1.0
350 2022/10
351 - Includes SDCC version 13350 with GBDK-2020 patches for Z80
352 - Known Issues
353 - The `compile.bat` batch files for Windows use the an invalid `-p` option for `mkdir`
354 - Building GBDK
355 - The linux port of SDCC is custom built on Ubuntu 16.04 due to reduced GLIBC compatibility issues in more recent SDCC project builds.
356 - Added Windows 32-Bit build
357 - Platforms
358 - SDCC has renamed the `gbz80` port to `sm83` see @ref faq_gbz80_sm83_old_port_name_error
359 - Added experimental support for MSXDOS (`msxdos`) and NES (`nes`). These platforms are not fully functional at this time. See @ref docs_supported_consoles
360 - Licensing
361 - Clarified licensing status with consent from GBDK original authors, added licensing folder to distribution
362 - Library
363 - SGB: Use longer wait between the SGB packet transfers
364 - SMS/GG: less garbage on screen when clearing VRAM in the init code
365 - SMS/GG: Added @ref cgb_compatibility() to set default palette with the four shades of gray
366 - Fixed: @ref get_sprite_data(), @ref get_bkg_data() , @ref get_win_data() when @ref LCDCF_BG8000 bit of @ref LCDC_REG is set
367 - Fixed ISR chain lengths. VBL: 4 user handlers, LCD: 3 user handlers, SIO/TIM/JOY: 4 user handlers
368 - Added new constants for the Game Boy Color (CGB):
369 - @ref VBK_BANK_0, @ref VBK_BANK_1
370 - @ref VBK_TILES, @ref VBK_ATTRIBUTES
371 - @ref BKGF_PRI, @ref BKGF_YFLIP, @ref BKGF_XFLIP, @ref BKGF_BANK0, @ref BKGF_BANK1
372 - @ref BKGF_CGB_PAL0, @ref BKGF_CGB_PAL1, @ref BKGF_CGB_PAL2, @ref BKGF_CGB_PAL3, @ref BKGF_CGB_PAL4, @ref BKGF_CGB_PAL5, @ref BKGF_CGB_PAL6, @ref BKGF_CGB_PAL7
373 - @ref VBK_TILES, @ref VBK_ATTRIBUTES
374 - Toolchain / Utilities
375 - @ref lcc
376 - Changed to Error out and warn when `gbz80` port is used instead of `sm83`
377 - @ref utility_png2asset "png2asset"
378 - Added `-tiles_only`: Export tile data only
379 - Added `-maps_only`: Export map tilemap only
380 - Added `-metasprites_only`: Export metasprite descriptors only
381 - Added `-source_tileset`: Use source tileset image with common tiles
382 - Added `-keep_duplicate_tiles`: Do not remove duplicate tiles
383 - Added `-bin`: Export to binary format (includes header files)
384 - Added `-transposed`: Export transposed (column-by-column instead of row-by-row)
385 - Added basic MSXDOS support
386 - Added 1bpp packing mode (BPP1)
387 - `-spr16x16msx`
388 - Added basic NES support
389 - `-use_nes_attributes`
390 - `-use_nes_colors`
391 - Changed to only export `_tile_pals[]` arrays when `-use-structs` is set (ZGB specific)
392 - @ref utility_gbcompress "gbcompress"
393 - Added `--bank=<num>` Add Bank Ref: 1 - 511 (default is none, with `--cout` only)
394 - Fixed failure to flush data at end of compression (uncommitted bytes)
395 - Fixed `Warning: File read size didn't match expected`
396 - @ref lcc "lcc"
397 - When `-autobank` is specified `lcc` will automatically add `-yoA` for @ref makebin if no `-yo*` entry is present
398 - Fixed broken `-E` Preprocess only flag
399 - @ref utility_makecom "makecom"
400 - Added `makecom` for post-processing msxdos binaries
401 - @ref makebin
402 - Fixed (via sdcc) bug with `-yp` not always working correctly
403 - https://sourceforge.net/p/sdcc/code/12975/
404 - @ref bankpack
405 - Added support for the Game Boy Camera MBC
406 - Added `-reserve=<bank>:<size>` option to reserve space during autobank packing
407 - Workaround for libraries that contain objects in banks (such as gbt-player)
408 - @ref ihxcheck
409 - Check and warn for bank overflows under specific conditions
410 - A multiple write to the same address must occur. The address where the overlap ends is used as BANK.
411 - There must also be a write which spans multiple banks, the ending address of that must match BANK. The starting addresses is the OVERFLOW-FROM BANK.
412 - Examples
413 - Changed Logo example to use new GBDK logo art from user "Digit"
414 - Added example for APA image mode with more than 256 tiles
415 - Added SGB Sound Effects example
416 - Changed to new WAV sound example
417 - Docs
418 - Added improved @ref mbc_type_chart "MBC Type chart"
419 - Include SDCC manual in pdf format
420 - Various doc updates and improvements
421
422 ## GBDK-2020 4.0.6
423 2022/02
424 - Includes SDCC version 12539 with GBDK-2020 patches for Z80
425 - Building GBDK
426 - Changed to target older version of macOS (10.10) when building for better compatibility
427 - Platforms
428 - Added support for MegaDuck / Cougar Boy (`duck`). See @ref docs_supported_consoles
429 - Library
430 - Added @ref memcmp()
431 - Added @ref add_low_priority_TIM() function for timer interrupts which allow nesting for GB/CGB
432 - Added @ref set_bkg_based_tiles(), @ref set_bkg_based_submap(), @ref set_win_based_tiles(), @ref set_win_based_submap() for when a map's tiles don't start at VRAM index zero
433 - Added @ref clock() for SMS/GG
434 - Added macro definitions for SDCC features:
435 - `#define SFR __sfr`
436 - `#define AT(A) __at(A)`
437 - Added check for OAM overflow to metasprite calls for GB/CGB
438 - Added constant definitions @ref PSG_LATCH, @ref PSG_CH0, @ref PSG_CH1, @ref PSG_CH2, @ref PSG_CH3, @ref PSG_VOLUME for SMS/GG
439 - Renamed `bgb_emu.h` to `emu_debug.h` and BGB_* functions to EMU_*.
440 - Aliases for the BGB_* ones and a `bgb_emu.h` shim are present for backward compatibility
441 - Changed headers to wrap SDCC specific features (such as `NONBANKED`) with `#ifdef __SDCC`
442 - Changed @ref rand() and @ref arand() to return `uint8_t` instead of `int8_t` (closer to the standard)
443 - Fixed declaration for @ref PCM_SAMPLE and definition for @ref AUD3WAVE
444 - Fixed definition of `size_t` to be `unsigned int` instead of `int`
445 - Fixed @ref vmemcpy() and @ref memmove() for SMS/GG
446 - Fixed random number generation for SMS/GG
447 - Fixed letter `U` appearing as `K` for min font
448 - Fixed define name in crash_handler.h
449 - Exposed @ref __rand_seed
450 - Toolchain / Utilities
451 - @ref utility_png2asset "png2asset"
452 - Added SMS/GG graphics format support
453 - Added 4bpp and SGB borders
454 - Added warning when image size is not an even multiple of tile size
455 - Added `-tile_origin` offset option for when map tiles do not start at tile 0 in VRAM
456 - Added `*_TILE_COUNT` definition to output
457 - Fixed CGB `...s_map_attributes` type definition in output
458 - Fixed values for `num_palettes` in output
459 - Fixed incorrect `TILE_COUNT` value when not `-using_structs`
460 - @ref lcc "lcc"
461 - Changed @ref makebin flags to turn off Nintendo logo copy for GB/CGB (use version in crt instead)
462 - Fixed lcc handling of makebin `-x*` arguments
463 - Examples
464 - Added logo example (cross-platform)
465 - Added @ref ISR_VECTOR example of a raw ISR vector with no dispatcher for GB/CGB
466 - Changed sgb_border example to use png2asset for graphics
467 - Changed use of set_interrupts() in examples so it's outside critical sections (since it disables/enables interrupts)
468 - Changed cross-platform auto-banks example to use .h header files
469 - Changed SGB border example to also work with SGB on PAL SNES
470 - Docs
471 - Added new section: Migrating From Pre-GBDK-2020 Tutorials
472
473
474 ## GBDK-2020 4.0.5
475 2021/09
476 - Includes SDCC version 12539 with GBDK-2020 patches for Z80
477 - Known Issues
478 - SDCC: `z80instructionSize() failed to parse line node, assuming 999 bytes`
479 - This is a known issue with the SDCC Peephole Optimizer parsing and can be ignored.
480 - `-bo<n>` and `-ba<n>` are not supported by the Windows build of @ref sdcc
481 - On macOS the cross platform `banks` example has problems parsing the filename based ROM and RAM bank assignments into `-bo<n>` and `-ba<n>`
482 - Added support for new consoles. See @ref docs_supported_consoles
483 - Analogue Pocket (`ap`)
484 - Sega Master System (`sms`) and Game Gear (`gg`)
485 - Library
486 - Fixed error when calling get_bkg_tile_xy: `?ASlink-Warning-Undefined Global '.set_tile_xy' referenced by module `
487 ?ASlink-Warning-Byte PCR relocation error for symbol .set_tile_xy
488 - Variables in static storage are now initialized to zero per C standard (but remaining WRAM is not cleared)
489 - Added many new register flag constants and names. For example:
490 - @ref rLCDC is a new alias for @ref LCDC_REG
491 - @ref LCDCF_WINON, @ref LCDCF_WINOFF, @ref LCDCF_B_WINON
492 - Added @ref BANK(), @ref BANKREF(), @ref BANKREF_EXTERN()
493 - Added @ref INCBIN(), @ref BANK(), @ref INCBIN_SIZE(), @ref INCBIN_EXTERN()
494 - Added generic @ref SWITCH_ROM() and @ref SWITCH_RAM()
495 - Added @ref BGB_printf() and updated emulator debug output.
496 - Added @ref set_native_tile_data(), @ref set_tile_map(), @ref set_1bpp_colors, @ref set_bkg_1bpp_data, @ref set_sprite_1bpp_data, @ref set_2bpp_palette, @ref set_bkg_2bpp_data, @ref set_sprite_2bpp_data, @ref set_tile_2bpp_data (sms/gg only), @ref set_bkg_4bpp_data (sms/gg only), @ref set_sprite_4bpp_data (sms/gg only)
497 - Added RLE decompression support: @ref rle_init(), @ref rle_decompress(),
498 - Changed @ref itoa(), @ref uitoa(), @ref ltoa(), @ref ultoa() to now require a radix value (base) argument to be passed. On the Game Boy and Analogue Pocket the parameter is required but not utilized.
499 - Examples
500 - Added cross-platform examples (build for multiple consoles: gb, ap, sms, gg)
501 - Added sms, gg, pocket(ap) examples
502 - Added incbin example
503 - Added simple physics sub-pixel / fixed point math example
504 - Added rle decompression example
505 - Changed windows make.bat files to compile.bat
506 - Bug fixes and updates for existing examples
507 - Toolchain / Utilities
508 - @ref utility_png2asset "png2asset"
509 - @ref utility_png2asset "png2asset" is the new name for the `png2mtspr` utility
510 - Added collision rectangle width and height (`-pw`, `-ph`)
511 - Added option to use the palette from the source png (`-keep_palette_order`)
512 - Added option to disable tile flip (`-noflip`)
513 - Added export as map: tileset + bg (`-map`)
514 - Added option to use CGB BG Map attributes (`-use_map_attributes`)
515 - Added option to group the exported info into structs (`-use_structs`)
516 - @ref lcc "lcc"
517 - Use `-m` to select target port and platform: "-m[port]:[plat]" ports:`gbz80,z80` plats:`ap,gb,sms,gg`
518 - Changed default output format when not specified from `.ihx` to `.gb` (or other active rom extension)
519 - Changed lcc to always use the linkerfile `-lkout=` option when calling bankpack
520 - Fixed name generation crash when outfile lacks extension
521 - @ref bankpack
522 - Added linkerfile input and output: `-lkin=<file>`, `-lkout=<file>`
523 - Added selector for platform specific behavior `plat=<plat>` (Default:gb, Avaialble:`gb,sms`). sms/gg targets prohibits packing `LIT_N` areas in the same banks as `CODE_N` areas
524 - Added randomization for auto-banks (`-random`) for debugging and testing
525 - @ref utility_gbcompress
526 - Added C source array format output (--cout) (optional variable name argument --varname=)
527 - Added C source array format input (--cin) (experimental)
528 - Added block style rle compression and decompression mode: `--alg=rle`
529 - Fixed comrpession errors when input size was larger than 64k
530 - Docs
531 - Added @ref docs_supported_consoles section
532 - Various doc updates and improvements
533
534
535 ## GBDK-2020 4.0.4
536 2021/06
537 - Library
538 - Support SDCC INITIALIZER area (SDCC ~12207+)
539 - Added @ref get_vram_byte() / @ref get_win_tile_xy() / @ref get_bkg_tile_xy()
540 - Added @ref set_tile_data()
541 - Fixed SGB detection
542 - Fixed broken @ref get_tiles() / @ref set_tiles()
543 - Fixed broken token handling in @ref gb_decompress_sprite_data() / @ref gb_decompress_bkg_data() / @ref gb_decompress_win_data()
544 - Changed all headers to use standard `stdint.h` types (ex: `uint8_t` instead of `UINT8`/`UBYTE`)
545 - Made sample.h, cgb.h and sgb.h independent from gb.h
546 - Examples
547 - Added project using a .lk linkerfile
548 - Changed all examples to use standard stdint.h types
549 - Moved banks_farptr and banks_new examples to "broken" due to SDCC changes
550 - Toolchain / Utilities
551 - png2mtspr
552 - Added option to change default value for sprite property/attributes in (allows CGB palette, BG/WIN priority, etc).
553 - Improved: Turn off suppression of "blank" metasprite frames (composed of entirely transparent sprites)
554 - Fixed endless loop for png files taller than 255 pixels
555 - bankpack
556 - Fixed -yt mbc specifier to also accept Decimal
557 - Improved: bank ID can be used in same file it is declared. Requires SDCC 12238+ with `-n` option to defer symbol resolution to link time.
558 - gbcompress
559 - Added C source input (experimental) and output
560 - Added size `#defines`
561 - lcc
562 - Added `-no-libs` and `-no-crt` options
563 - Added support for .lk linker files (useful when number of files on lcc command line exceeds max size on windows)
564 - Added support for converting .ihx to .gb
565 - Added rewrite .o files -> .rel for linking when called with `-autobank` and `-Wb-ext=.rel`
566 - Workaround @ref makebin `-Wl-yp` formatting segfault
567 - Docs
568 - Improved utility_png2mtspr documentation
569 - Various doc updates and improvements
570
571
572 ## GBDK-2020 4.0.3
573 2021/03
574 - Library
575 - Added @ref set_vram_byte()
576 - Added @ref set_bkg_tile_xy() / @ref set_win_tile_xy()
577 - Added @ref get_bkg_xy_addr() / @ref get_win_xy_addr()
578 - Added @ref set_bkg_submap() / @ref set_win_submap()
579 - Added metasprite api support
580 - Added gb_decompress support
581 - Added @ref calloc / @ref malloc / @ref realloc / @ref free and generic @ref memmove
582 - Improved @ref printf(): ignore %0 padding and %1-9 width specifier instead of not printing, support upper case %X
583 - Fixed @ref line(): handle drawing when x1 is less than x2
584 - Examples
585 - Added large_map: showing how to use @ref set_bkg_submap()
586 - Added scroller: showing use of @ref get_bkg_xy_addr(), @ref set_bkg_tile_xy() and @ref set_vram_byte
587 - Added gbdecompress: de-compressing tile data into vram
588 - Added metasprites: show creating a large sprite with the new metasprite api
589 - Added template projects
590 - Fixed build issue with banks_autobank example
591 - Improved sgb_border
592 - Toolchain / Utilities
593 - Added @ref utility_gbcompress utility
594 - Added utility_png2mtspr metasprite utility
595 - Docs
596 - Added extensive documentation (some of which is imported and updated from the old gbdk docs)
597 - Added PDF version of docs
598
599
600 ## GBDK-2020 4.0.2
601 2021/01/17
602 - Includes SDCC snapshot build version 12016 (has a fix for duplicate debug symbols generated from inlined header functions which GBDK 4.0+ uses)
603 - Updated documentation
604 - Library was improved
605 - Linking with stdio.h does not require that much ROM now
606 - Default font is changed to the smaller one (102 characters), that leaves space for user tiles
607 - Fixed broken support for multiplying longs
608 - memset/memcpy minor enhancements
609 - safer copy-to-VRAM functions
610 - loading of 1bit data fixed, also now it is possible to specify pixel color
611 - Improved code generation for the GBDK Library with SDCC switch on by default: `--max-allocs-per-node 50000`
612 - fixed wrong parameter offsets in hiramcpy() (broken ram_function example)
613 - Multiple minor improvements
614 - New bankpack feature, allows automatic bank allocation for data and code, see banks_autobank example, feature is in beta state, use with care
615 - Lcc improvements
616 - Fixed option to specify alternate base addresses for shadow_OAM, etc
617 - Examples: Added bgb debug example
618
619
620 ## GBDK-2020 4.0.1
621 2020/11/14
622 - Updated API documentation
623 - 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).
624 - Library was improved
625 - set_*_tiles() now wrap maps around horizontal and vertical boundaries correctly
626 - new fill_*_rect() functions to clear rectangle areas
627 - 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.
628 - enhanced SGB support
629 - joypad_init() / joypad_ex() support for multiple joypads
630 - SGB border example
631 - _current_bank variable is updated when using bank switching macros
632 - Reorganized examples: each example is in separate folder now, that simplifies understanding.
633 - Lcc improvements
634 - Fix -S flag
635 - Fix default stack location from 0xDEFF to 0xE000 (end of WRAM1)
636 - Fix cleanup of .adb files with -Wf--debug flag
637 - Fix output not working if target is -o some_filename.ihx
638
639
640 ## GBDK-2020 4.0
641 2020/10/01
642 - 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
643 - SDCC 4.0.3 has much better code generator which produces smaller and faster code. Code is twice faster
644 - 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!
645 - 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 RGDBS
646 - New banked trampolines are used, they are faster and smaller
647 - 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
648 - Library was improved
649 - itoa/ltoa functions were rewritten, div/mod is not required now which is about 10 times faster
650 - 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
651 - interrupt handling was revised, it is now possible to make dedicated ISR's, that is important for time-sensitive handlers such as HBlank.
652 - 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
653 - crash_handler.h - crash handler that allows to detect problems with ROMs after they are being released (adapted handler, originally written by ISSOtm)
654 - improved and fixed string.h
655 - many other improvements and fixes - thanks to all contributors!
656 - Revised examples
657 - Improved linux support
658 - Lcc has been updated
659 - it works with the latest version of sdcc
660 - quoted paths with spaces are working now
661
662
663 ## GBDK-2020 3.2
664 2020/06/05
665 - Fixed OAM initialization that was causing a bad access to VRAM
666 - Interrupt handlers now wait for lcd controller mode 0 or 1 by default to prevent access to inaccessible VRAM in several functions (like set_bkg_tiles)
667 - Several optimizations here and there
668
669
670 ## GBDK-2020 3.1.1
671 2020/05/17
672 - Fixed issues with libgcc_s_dw2-1.dll
673
674
675 ## GBDK-2020 3.1
676 2020/05/16
677 - Banked functions are working! The patcher is fully integrated in link-gbz80, no extra tools are needed. It is based on Toxa's work
678 - Check this post for more info
679 - Check the examples/gb/banked code for basic usage
680 - Behavior formerly enabled by USE_SFR_FOR_REG is on by default now (no need to specify it, it isn't a tested `#ifdef` anymore). check here why:
681 https://gbdev.gg8.se/forums/viewtopic.php?id=697
682 - 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
683 - Fixed bug in lcc that was causing some files in the temp folder not being deleted
684 - Removed as-gbz80 (the lib is now compiled with sdasgb thanks to this workaround)
685 https://github.com/gbdk-2020/gbdk-2020/commit/d2caafa4a66eb08998a14b258cb66af041a0e5c8
686 - Profile support with bgb emulator
687 - Basic support including <gb/bgb_emu.h> and using the macros BGB_PROFILE_BEGIN and BGB_PROFILE_END. More info in this post
688 https://gbdev.gg8.se/forums/viewtopic.php?id=703
689 - For full profiling check this repo and this post
690 https://github.com/untoxa/bgb_profiling_toolkit/blob/master/readme.md
691 https://gbdev.gg8.se/forums/viewtopic.php?id=710
692
693
694 ## GBDK-2020 3.0.1
695 2020/04/12
696 - Updated SDCC to v.4.0
697 - Updated LCC to work with the new compiler
698
699
700 ## GBDK-2020 3.0
701 2020/04/12
702 - Initial GBDK-2020 release
703 Updated SDCC to v4.0
704 The new linker is not working so the old version is still there
705 There is an issue with sdagb compiling drawing.s (the JP in
706 line 32 after ".org .MODE_TABLE+4*.G_MODE" it's writing more
707 than 4 bytes invading some addresses required by input.s:41)
708 Because of this, all .s files in libc have been assembled
709 with the old as-gbz80 and that's why it is still included
710
711
712 # Historical GBDK Release Notes
713
714 ## GBDK 2.96
715 17 April, 2000
716 Many changes.
717 - Code generated is now much more reliable and
718 passes all of sdcc's regression suite.
719 - Added support for large sets of local variables (>127 bytes).
720 - Added full 32 bit long support.
721 - Still no floating pt support.
722
723 ## GBDK 2.95-3
724 19th August, 2000
725
726 * Stopped lcc with sdcc from leaking .cdb files all across
727 /tmp.
728 * Optimised < and > for 16 bit varibles.
729 * Added a new lexer to sdcc. Compiling files with large
730 initalised arrays takes 31% of the time (well, at least
731 samptest.c does :)
732
733 This is an experimental release for those who feel keen. The main change is a new lexer (the first part in the compilation process which recognises words and symbols like '!=' and 'char' and turns them into a token number) which speeds up compilation of large initialised arrays like tile data by a factor of three. Please report any bugs that show up - this is a big change.
734
735 I have also included a 'minimal' release for win32 users which omits the documentation, library sources, and examples. If this is useful I will keep doing it.
736
737 ## GBDK 2.95-2
738 5th August, 2000
739 Just a small update. From the README:
740
741 * Added model switching support
742 --model-medium uses near (16 bit) pointers for data, and
743 banked calls for anything not declared as 'nonbanked'
744 --model-small uses near (16 bit) pointers for data and
745 calls. Nothing uses banked calls. 'nonbanked' functions
746 are still placed in HOME. Libraries are under lib/medium
747 and lib/small.
748 * Added the gbdk version to 'sdcc --version'
749 * Changed the ways globals are exported, reducing the amount
750 of extra junk linked in.
751 * Turned on the optimisations in flex. Large constant arrays
752 like tile data should compile a bit faster.
753
754 ## GBDK 2.95
755 22nd July, 2000
756 * Fixed 'a << c' for c = [9..15]
757 * no$gmb doesn't support labels of > 32 chars. The linker now
758 trims all labels to 31 chars long.
759 * Fixed wait_vbl for the case where you miss a vbl
760 * Fixed + and - for any type where sizeof == 2 and one of the
761 terms was on the stack. This includes pointers and ints. Fixes
762 the text output bug in the examples. Should be faster now as
763 well. Note that + and - for longs is still broken.
764 * Fixed the missing */ in gb.h
765 * Added basic far function support. Currently only works for isas
766 and rgbasm. See examples/gb/far/*
767 * bc is now only pushed if the function uses it. i.e. something
768 like:
769 int silly(int i)
770 {
771 return i;
772 }
773 will not have the push bc; pop bc around it.
774 * Better rgbasm support. Basically:
775 o Use "sdcc -mgbz80 --asm=rgbds file.c" for each file.c
776 o Use "sdcc -mgbz80 --asm=rgbds crt0.o gbz80.lib gb.lib file1.o file2.o..."
777
778 to link everything together. The .lib files are generated using
779 astorgb.pl and sdcc to turn the gbdk libraries into something
780 rgbds compatible.
781 The libraries are _not_ fully tested. Trust nothing. But give it
782 a go :)
783 * Ran a spell checker across the README and ChangeLog
784
785 This is a recommended upgrade. Some of the big features are:
786
787 Decent rgbds support. All the libraries and most of the examples can now compile with rgbds as the assembler.
788 Banked function support. It is now easier to break the 32k barrier from within C. Functions can live in and be called transparently from any bank. Only works with rgbds
789 Fixed some decent bugs with RSH, LSH, and a nasty bug with + and - for int's and pointers.
790 Various optimisations in the code generator.
791
792 7th July, 2000
793 Information on float and long support. Someone asked about the state of float/long support recently. Heres my reply:
794
795 long support is partly there, as is float support. The compiler will correctly recognise the long and float keywords, and will generate the code for most basic ops (+, -, &, | etc) for longs correctly and will generate the function calls for floats and hard long operations (*, /, %) correctly. However it wont generate float constants in the correct format, nor will it 'return' a long or float - gbdk doesn't yet support returning types of 4 bytes. Unfortunately its not going to make it into 2.95 as there's too much else to do, but I should be able to complete long support for 2.96
796
797 ## GBDK 2.94
798 7th May, 2000
799 Many fixes - see the README for more.
800
801 7th May - Library documentation up. A good size part of the libraries that go with gbdk have been documented - follow the HTML link above to have a look. Thanks to quang for a good chunk of the gb.h documentation. Please report any errors :)
802 * Fixed
803 \#define BLAH 7 // Unterminated ' error
804 in sdcpp
805 * Fixed
806 SCY_REG += 2, SCY_REG -= 5
807 (add and subtract in indirect space) as they were both quite broken.
808 * externs and static's now work as expected.
809 * You can now specify which bank code should be put into using a
810 \#pragma e.g:
811 \#pragma bank=HOME
812 Under rgbds and asxxxx putting code in the HOME bank will force
813 the code into bank 0 - useful for library functions. The most
814 recent \#pragma bank= will be the one used for the whole file.
815 * Fixed an interesting bug in the caching of lit addresses
816 * Added support for accessing high registers directly using the
817 'sfr' directive. See libc/gb/sfr.s and gb/hardware.h for an
818 example. It should be possible with a bit of work to make high
819 ram directly usable by the compiler; at the moment it is
820 experimental. You can test sfr's by enabling USE_SFR_FOR_REG=1
821 * Added remove_VBL etc functions.
822 * Documented the libs - see the gbdk-doc tarball distributed
823 seperatly.
824 * Two dimensional arrays seem to be broken.
825
826 ## GBDK 2.93
827 6th April, 2000
828 From the README
829
830 * Added multi-bank support into the compiler - The old -Wf-boxx
831 and -Wf-baxx options now work
832 * Has preliminary support for generating rgbds and ISAS compatible
833 assembler. Try -W--asm=rgbds or -W--asm=isas. The ISAS code is
834 untested as I dont have access to the real assembler.
835 * RSH is fixed
836 * AND is fixed
837 * The missing parts of 2.1.0's libs are there. Note: They are
838 untested.
839 * The dscan demo now fully works (with a hack :)
840 * There is a bug with cached computed values which are later used
841 as pointers. When the value is first used as a BYTE arg, then
842 later as a pointer the pointer fails as the high byte was never
843 computed and is now missing. A temporary fix is to declare
844 something appropriate as 'volatile' to stop the value being
845 cached. See dscan.c/bombs() for an example.
846
847 ## GBDK 2.92-2 for win32
848 26th March, 2000
849 This is a maintenance release for win32 which fixes some of the niggly install problems, especially:
850 * win32 only. Takes care of some of the install bugs, including:
851 - Now auto detects where it is installed.
852 This can be overridden using set GBDKDIR=...
853 - Problems with the installer (now uses WinZip)
854 - Problems with the temp directory
855 Now scans TMP, TEMP, TMPDIR and finally c: tmp
856 - cygwin1.dll and 'make' are no longer required
857 gbdk is now built using mingw32 which is win32 native
858 make.bat is automagically generated from the Makefile
859 - I've reverted to using WORD for signed 16 bit etc.
860 GBDK_2_COMPAT is no longer required.
861
862 WORDS are now back to signed. GBDK_2_COMPAT is no longer needed.
863 Temporary files are created in TMP, TEMP, or TMPDIR instead of c: tmp
864 The installer is no more as it's not needed. There is a WinZip wrapped version for those with the extra bandwidth :).
865 gbdk autodetects where it is installed - no more environment variables.
866 cygwin1.dll and make are no longer required - gbdk is now compiled with mingw32.
867
868 See the ChangeLog section in the README for more information.
869
870 21st March, 2000
871 Problems with the installer. It seems that the demo of InstallVISE has an unreasonably short time limit. I had planed to use the demo until the license key came through, but there's no sign of the key yet and the 3 day evaluation is up. If anyone knows of a free Windows installer with the ability to modify environment variables, please contact me. I hear that temporarily setting you clock back to the 15th works...
872
873 18th March, 2000
874 libc5 version available / "Error creating temp file" Thanks to Rodrigo Couto there is now a Linux/libc5 version of gbdk3-2.92 available - follow the download link above. At least it will be there when the main sourceforge site comes back up... Also some people have reported a bug where the compiler reports '*** Error creating temp file'. Try typing "mkdir c: tmp" from a DOS prompt and see if that helps.
875
876 ## GBDK 2.92
877 8th March, 2000
878 Better than 2.91 :). Can now be installed anywhere. All the demos work. See the README for more.
879 * All the examples now work (with a little bit of patching :)
880 * Fixed problem with registers being cached instead of being
881 marked volatile.
882 * More register packing - should be a bit faster.
883 * You can now install somewhere except c: gbdk | /usr/lib/gbdk
884 * Arrays initialised with constant addresses a'la galaxy.c now
885 work.
886 * Fixed minor bug with 104$: labels in as.
887 * Up to 167d/s...
888
889 ## GBDK 2.91
890 27th Feb, 2000
891 Better than 2.90 and includes Linux, win32 and a source tar ball. Some notes:
892
893 Read the README first
894 Linux users need libgc-4 or above. Debian users try apt-get install libgc5.
895 All the types have changed. Again, please read the README first.
896 I prefer release early, release often. The idea is to get the bugs out there so that they can be squashed quickly.
897 I've split up the libs so that they can be used on other platforms and so that the libs can be updated without updating the compiler. One side effect is that gb specific files have been shifted into their own directory i.e. gb.h is now gb/gb.h.
898
899 23rd Feb, 2000
900 First release of gbdk/sdcc.
901 This is an early release - the only binary is for Linux and the source is only available through cvs. If your interested in the source, have a look at the cvs repository gbdk-support first, which will download all the rest of the code. Alternatively, look at gbdk-support and gbdk-lib at cvs.gbdk.sourceforge.net and sdcc at cvs.sdcc.sourceforge.net. I will be working on binaries for Win32 and a source tar ball soon. Please report any bugs through the bugs link above.
902
903 31st Jan, 2000
904 Added Dermot's far pointer spec. It's mainly here for comment. If sdcc is ported to the Gameboy then I will be looking for some way to do far calls.
905
906 8th Jan, 2000
907 Moved over to sourceforge.net. Thanks must go to David Pfeffer for gbdk's previous resting place, www.gbdev.org. The transition is not complete, but cvs and web have been shifted. Note that the cvs download instructions are stale - you should now look to cvs.gbdk.sourceforge.net.
908 I am currently working on porting sdcc over to the Z80. David Nathan is looking at porting it to the GB.
909
910 6th Jan, 2000
911 Icehawk wrote "I did write some rumble pack routines. Just make sure to remind people to add -Wl-yt0x1C or -Wl-yt0x1D or -Wl-yt0x1E depending on sram and battery usage. Find the routines on my site (as usual). =)"
912
913 18th Oct, 1999
914 Bug tracking / FAQ up. Try the link on the left to report any bugs with GBDK. It's also the first place to look if your having problems.
915
916 ## GBDK 2.1.5
917 17th Oct, 1999
918
919 The compiler is the same, but some of the libraries have been improved. memset() and memcpy() are much faster, malloc() is fixed, and a high speed fixed block alternative malloc() was added.
920
921
922
923 ## GBDK 2.0b11 (DOS binary only) - 24 November 1997
924
925 * Fixed another bug in code generation, that could happen when performing logical operations on 1-byte variables.
926
927 ## GBDK 2.0b10 (DOS binary only) - 6 November 1997
928
929 * Fixed a nasty bug in code generation, that could happen when performing arithmetic operations on 1-byte variables.
930 * Changed the name of same files of the gb-dtmf example so that it compiles on DOS.
931
932 ## GBDK 2.0b9 (DOS binary only)
933
934 * Several bug fixes in the compiler and in the libraries.
935
936 ## GBDK 2.0b8 (DOS binary only)
937
938 * Limited all file names to 8 characters to solve problems on DOS.
939 * Added communication routines that enable to send data through the link port of the GameBoy. Unfortunately, these routines do not always work; so use them with care until the next GBDK release.
940 * Added the comm.c example which illustrates how to use communication routines.
941 * It is possible to specify the name of the program (to be written in the image header) at link time using the -Wl-yn="XXX" flag (where X is the name of the program, which can contain up to 16 characters in quotes, including spaces; on Unix, depending on your shell, you must add backslashes before quotes and spaces like in -Wl-yn=\"My\ Game\").
942 * Several bug fixes in the compiler.
943
944 ## GBDK 2.0b7 (DOS binary only)
945
946 * GBDK now uses a pre-release of lcc 4.1 (DOS binary only), that fixes a couple of problems in code generation.
947 * A couple of important points have been documented in the GBDK Programming Guidelines and Known Problems sections.
948 * Several improvements and optimizations to the code generator.
949
950 ## GBDK 2.0b6
951
952 * Added a peephole optimizer (with few rules at the moment).
953 * Changed the name of the hardware registers to match the "official" names.
954 * Added support for copying complete functions to RAM or HIRAM (memcpy() and hiramcpy() functions). The compiler now automatically generates two symbol for the start and the end of each function, named start_X and end_X (where X is the name of the function). This enables to calculate the length of a function when copying it to RAM.
955 * Added the ram_fn.c example which illustrates how to copy functions to RAM and HIRAM.
956 * Added support for installing IRQ handlers.
957 * Added the irq.c example which illustrates how to install IRQ handlers.
958 * Added RAM banks support (switch_ram_bank() function). The switch_bank() function has been renamed to switch_rom_bank(). The banks.c example has been updated. The flags for generating multiple bank images have been modified.
959 * It is possible to set the sprite ram location at link time using the -Wl-g.OAM=# flag (where # is the address of the sprite ram). The sprite ram address must begin at an address multiple of 0x100, and is 0xA0 bytes long.
960
961 ## GBDK 2.0b5
962
963 * New documentation (not finished yet).
964 * Fixed a bug that could generate wrong code in switch statements.
965 * Fixed a bug in int comparison.
966 * Added a DTMF program written by Osamu Ohashi.
967 * Added a game (Deep Scan) written by a friend of Osamu.
968 * Modified the delay() function so that it takes a long parameter. It can be used to wait between 1 and 65536 milliseconds (0 = 65536). The pause() function has been removed.
969
970 ## GBDK 2.0b4
971
972 * Fixed a bug that could generate wrong code when using hexadecimal constants.
973 * A new example (galaxy.c) has been added. It is the C version of the space.s example. sprite.c has been removed.
974 * Most of the libraries have been split into small modules for reducing final code size.
975
976 ## GBDK 2.0b3
977
978 * GBDK can generate multiple-banks images, i.e. images greater than 32kB (see the banks example).
979 * It is possible to set the stack pointer at link time using the -Wl-g.STACK=# flag (where # is the address of the stack pointer).
980 Several functions (e.g. show_bkg()) have been changed into macros (e.g. SHOW_BKG).
981 The delay() function waits exactly 1 millisecond, and the pause() waits 256 milliseconds.
982 Linking with the standard libraries is no more required. The lib/gb.lib (lib\gb.lib on DOS) text file contains a list of modules in which to look for undefined symbols. The linker will parse this file, and link your code with the required modules only. The stdio library has been split in several object files, and only necessary modules will be added to your code, thus reducing its size.
983 The GBDK distribution can be located anywhere in your system if you use the -Wo-lccdir=GBDK-DIR flag when invoking lcc.
984 Bug fixes.
985
986 ## GBDK 2.0b2
987
988 * Lots of bug fixes.
989 * GBDK has to be in the `\GBDK-2.0` directory on DOS machines.
990
991 ## GBDK 2.0b1
992
993 * The code generator has been completely rewritten with the new version of lcc. It produces much smaller and more efficient code. The size of the code is generally between 20 and 50% smaller. A number of small optimizations are still to be done.
994 * The size of basic types has been changed:
995 * An int is 8 bits.
996 * A long is 16 bits.
997 * This change was required for the code generator to produce better code, because the Z80 is actually an 8-bit processor.
998 * The linker generates the complement checksum correctly now.
999 * The libraries and example programs have been modified for the new code generator.
1000
1001 ## GBDK 1.1
1002
1003 * Removed Xloadimage from the GBDK distribution. It is now available as a separate archive.
1004 * A compiled DOS version is now available (cross-compiled on my Sun Workstation!).
1005 * The libraries and the example programs have been improved.
1006 * The make script has been improved. Compiling on UNIX should be easier.
1007 * Many bugfixes.
1008
1009 ## GBDK 1.0-1 1996
1010
This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.