Discussion about software development for the old-school Gameboys, ranging from the "Gray brick" to Gameboy Color
(Launched in 2008)
You are not logged in.
I think it's time we leave the old gbdk behind and update it to the latest version of everything
We already knew that it is posible to use the latest SDCC and the old linker but no one has updated the tools. I tried to do it the last weekend. You can find it here
Contrary to gbdk-n this keeps all the original functionallity and files and just updates the tools (including lcc)
It's been fully tested on Windows, macOS and Linux, and finally we have all the changes in all the platforms (2.96 has been never available in windows for some reason) There are still some issues with some of the examples but I have tested it with all the games I made on ZGB and everything is working
Feel free to report bugs and fixes (and please test them before making any pr)
Last edited by Zalo (2020-04-16 04:22:35)
Offline
I think it is a proper moment to apply some patches to the library too. Well-known issues, such as: https://gbdev.gg8.se/forums/viewtopic.php?id=214 for example.
Offline
i also noticed, that there are two libraries in the release:
from sdcc: bin\SDCC\lib\gbz80\
from gbdk: lib\small\asxxxx\
it's a bit confusing. why not to unite them (or simply throw away one)?
Offline
Yes, the library that comes with SDCC will be removed in the next release (actually in the Linux version it's been removed already)
About making patches, I agree. I was just asking you all to do it via pull requests and ensuring they have been properly tested. I can't just accept any changes in the library that breaks some other stuff. I hope you guys understand it
Offline
Nice work, thanks for putting this together!
It will hopefully save people some trouble and effort.
Offline
one more improvement:
in order make headers compile with -DUSE_SFR_FOR_REG compiler option with sdcc4, modification of gb/hardware.h is needed:
#define __REG extern volatile __sfr /* was: sfr UINT8 */
smaller and faster code is generated. i tested it, it's ok.
Offline
Hi Toxa... in the docs it says that SFR is experimental https://github.com/Zal0/gbdk-2020/blob/ … /ChangeLog
and then in 2.96a a pragma directive in hardware is added "#error SFR is unteseted and disabled in 2.96"
I can't find where __sfr is defined in order to understand how this works
Offline
__sfr is defined by a compiler. please look the documentation: http://sdcc.sourceforge.net/doc/sdccman.pdf chapter "3.5.1.7 __sfr / __sfr16 / __sfr32 / __sbit". i don't know why it is "experimental", maybe it was, when gbdk 2.96 was developed, but to me this sounds strange, because in microcontroller world Special Function Registers (SFR) are quite common. it is not something special for gbz80. i tested it, sdcc4 seems to produce the correct code. i made a test and my game also runs fine.
ps: the goal is to generate:
ldh (n8), A
instead of:
ld (r16), A
that is how it looks in generated code with __sfr:
;src\mushroompie.c:471: NR52_REG = 0x80; // Enables sound, always set this first
ld a, #0x80
ldh (_NR52_REG+0),a
without:
;src\mushroompie.c:471: NR52_REG = 0x80; // Enables sound, always set this first
ld hl, #0xff26
ld (hl), #0x80
Last edited by toxa (2020-04-20 15:00:37)
Offline
GBDK 3.1 is out
https://github.com/Zal0/gbdk-2020/releases
Offline
Zalo wrote:
GBDK 3.1 is out
https://github.com/Zal0/gbdk-2020/releases
Thanks for the update!
I still have games programmed with the older version of ZGB, they compiled ok with gbdk 3.1. But the sprites have some issues, they behave as if they are skipping 1 frame when being moved.
I tried to compile the zgb sample using the new ZGB, but I had no luck.
The issue might be caused by the old ZGB, but I didn't find any difference in the sprite translate function, so I don't really know.
EDIT: yeah the issue is related to the old ZGB, I could compile the sample with the new ZGB and everything OK .
Last edited by Mills (2020-05-30 16:53:47)
Offline
Hi, I am using gbdk 2020 but I failed when writing to the wave pattern register for sound channel 3. Can someboy help and give an example? Thanks!
Offline
hm... there is a samptest.c example which is functional.
what is the exact problem? if you want to define those registers, you may declare something like this:
volatile unsigned char __at (0xFF30) wave[16];
Last edited by toxa (2020-07-10 14:07:50)
Offline
Hi toxa, thanks that fixed it!
Offline
Hi Zalo,
I am using this library for the first time, what's the best way to install it and compile?
I think I am being thrown off by the broken links in the original doc: http://gbdk.sourceforge.net/doc/html/c01.html#I(USING-GBDK)C(1,SECT1)
Offline
foxyblue- Which OS are you using, Windows or Linux?
Offline
GBDK-2020 v4.0 is released: https://github.com/Zal0/gbdk-2020/releases
- 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
Last edited by toxa (2020-10-01 09:02:15)
Offline
These look like great updates.
There seems to be a problem with calling initarand() and arand(). I opened an issue on github.
Offline
GBDK-2020 v4.0.1 is released: https://github.com/Zal0/gbdk-2020/releases
- Updated documentation, now online: https://zal0.github.io/gbdk-2020/api/
- 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
Last edited by toxa (2020-11-14 16:35:37)
Offline
GBDK-2020 4.0.2 has been released::
https://github.com/Zal0/gbdk-2020/releases/tag/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
- Including fixed overriding of default shadow_oam, stack, etc. locations
- Added BGB debug example project
There is now also a GBDK and ZGB specific Discord server.
Link is on the GBDK-2020 github front page: https://github.com/Zal0/gbdk-2020/
Last edited by bbbbbr (2021-01-21 01:44:19)
Offline
Oh, forgot about this topic, thank you, @bbbbbr!
Last edited by toxa (2021-01-21 03:08:01)
Offline
GBDK-2020 4.0.3 has been released::
https://github.com/gbdk-2020/gbdk-2020/ … /tag/4.0.3
- Updated documentation, including the PDF version:
https://gbdk-2020.github.io/gbdk-2020/d … index.html
https://gbdk-2020.github.io/gbdk-2020/d … manual.pdf
- 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
Detailed changelog:
https://gbdk-2020.github.io/gbdk-2020/d … otoc_md121
(edit, point links to changed repo location)
Last edited by bbbbbr (2021-04-04 02:04:44)
Offline
@bbbbbr
Really appreciate everyone's effort put into GBDK-2020 !
Offline