GR8NET-BUGS.TXT GR8NET ROM BIOS bug report - _NETSYSINFO sometimes shows 32K of VRAM for the machine with 16K of VRAM (2023027); - when in composite mapper mode NETRECFG was returning fail for RAM search if RAM is in lower slot than GR8NET (e.g. slot 0) (20230507); - (1) BASIC device file access for TCP and UDP does not work, sends set of 0x04. Issue was introduced in 20210818 corrupting output char register. Fixed. (2) ensured all BREAKX routines are run with interrupts disabled. (3) catalog browser returns into wrong location when ESC or CTRL-STOP pressed because of extra invalid return address in the stack. Fixed (20230314); - _NETGETDA gets wrong adapter setup on the machines with no pull-ups on the data bus. Changed to better perform identification of the adapter existence (20220715); - when running RAM disk machine hangs when BASIC file is saved in binary format (ASCII works). Appeared to be incorrect pointer for the H$BINS firmware call (20220705); - added '?' character into the list of TELNET ESC sequence so that it is not treated as an end of the sequence (e.g. ESC [ ? 1000h) (202006602); - fixed issue when playing MP3 file from SD-card through external MP3 cart, added support for ID3 v2.2 and v2.3 (20200530); - erroneous command found in the mirrored ROM detection routine, corrected (20200321); - PSG in VG8020 requires for every access of its data register to have index register reloaded (20200223); - engine was performing integer division for identification of the counter value for Hz mode for the controlled generator, causing 22050 playing at 22075 Hz. Redesigned division (LPM_DIVIDE to serial division) and implemented 8-bit fractional part (20200104); - for the video playback BIOS was enabling PCM and then waiting for the next interrupt occurence causing floating discrepancy between audio and video. Changed to starting PCM after interrupt has happened, just before the first frame started to be displayed (20200104); - added CPU bank 1 switch to main ROM before switching mapper for CX5MII as this machine jumps to 7FE7 just at the start of its ROM (20190609); - wrong IP address value is returned by TCP/IP UNAPI for primary DNS server (20190530); - per L.Holst report changed behavior of the PCM.BSY signal from rather complex to just mirror of the START bit of register 7 (20190113); - if adatper is #3 there was no reset to the bits [3:0] of the I/O port 0x5E, and some applications did not work properly due to 0xFF being invalid value for index I/O register. Now firmware ensures that bits [3:0] are always reset after GR8NET finishes its initialization (20190108); - added placement of RET instruction into H.TIMI and H.KEYI before jumping to 0 so that if interrupts are accidentally enabled during machine initialization process (particularly in Turbo-R reboot) execution does not get lost in the possibly non-existent GR8NET subslot (20181116); - added RX_RD pointer writeback before spare RECV command in the GR8cloud implementation and RX system call to avoid incorrect RX buffer pointer handling (20181003); - now GR8cloud password in the GR8NET ROM/RAM is coded and slighty salted (20181003); - fixed bug in SETOPL command which was resetting bits [1:0], also improved GETOPL command by adding third argument and providing actually configured sample RAM size in second argument (20180920); - fixed bug in GETMMV command returning wrong value for sample RAM starting page argument; fixed GETMMV command help missing this argument; introduced partial RAM cleanup used in boot-up menu (20180919); - restoring state of SPD bit of V99xx VDP after video playback to allow sprites if they were enabled before launching video player. Also restoring original (or native for MSX1.5) frame rate (20180824); - Moved UNAPI_GET_INFO reported implementation name string to the GR8NET bank 0 which is not expected to be switched to another ROM page during normal operation (20180821); - Increased time for ADPCM calculations by one clock cycle as it would be the most probable cause for intermittent and rare creep of the ADPCM sound (20180524); - Checked all MSX BIOS console I/O calls like CHPUT/CHGET/xINLIN to ensure they are called with required registers preserved as it appeared that Korean and Arabic machines' localization ROM hook to these calls and corrupt alternate reg set and IX/IY registers. Special thanks to Alexey Podrezov for reporing the issue on MRC (20180509). - fixed bug in SCC/SCC+ mode register write select when write was in effect into subslot 3 in case LAN buffers in subslot 0 were written to (20180507); - slighty changed telnet negotiation process in order to get successful login prompt from Ubuntu (20180417); - Fixed recently introduced but in NETBLOAD when RECV command is issued without updating RX_RD pointer (20180405); - Fixed a bug in RECFG call; now it sets bit 4 or net mode register to properly identify completion of FPGA re-configuration (20180405); - Removed checking for CODE, CAPS, GRAPH, CTRL, SHIFT, RET, SELECT, BS and STOP in "Release keys..." at the adapter initialization so that ROM passes further with these keys being pressed (e.g. Disk-ROM CTRL or SHIFT modifier keys) (20180312); - Fixed bug in BASIC device support when first call was returning wrong value of A if adapter had ID other than 0 (20180309); - Fixed bug in PARURI call when file name starts with letters "SD" call was handling string length improperly (20180303); - When network interrupts or outbound ACK packet is lost, or server does no send further data NETBLOAD appeared to be hung. Improved NETBLOAD algorithm to resend lack ACK packet if nothing is received for some time and TCP connection is still established. This causes additional interaction between network devices and connection statis update (20180303); - Fixed small bug in writing sample RAM of the Y8950 when current address exceeds end address, now RAM chip is not selected while write cycle and all related flag processing remains (FPGA 20180207); - Now BUF.RDY flag is being raised when Y8950 index register is set to $0F, fix for VGMPLAY (FPGA 20180207); - Fixed issue in ADPCM when CPU was reading wrong data when start address is below 2 (FPGA 20171220); - Fixed cosmetic mistake when system was stating that there's YM2413 ROM in the expanded slot, not only when GR8NET is in mapper 8 mode (20171020); - Published flash chip firmware with datecode 20171016 was found to be defective. Replated with 20171018; - Fixed the bug caused by adding this layer of protection (see below). I changed starting EPCS16 address to all 1s, but bus clock speed is only 3 bytes, and 4th byte (of 32-bit dword) was grabbed from LSB of the EPCS address (thus FF), and clock speed was wrongly reported. Not 4th byte (LSB) of the clock speed is forcefully set to 0 (19-Oct-2017); - Added another layer of protection against sporadic EPCS16 sector 0 erase: now ASMI is hend in reset if not used, reset state released only when performing reading, writing or erasing operations (27-Sep-2017); - Solved bug in Y8950 timers (were running for one extra FM cycle) causing machine hanging when initialized with MSX-Audio BIOS (26-Sep-2017); - Forgot to set socket to listening state for passive conneciton in TCPIP_TCP_OPEN (19 Sep 2017); - added interrupt servicing routine hooking to H.TIMI in disk-ROM if it is not hooked yet because CALLF is disabling interrupts; - changed SD-card volume's sectors per cluster checking algorithm from max 40h to power of 2; - in NETPLAYVID routine added screen wipe at the end of SCREEN 2 playback routine just before palette is being reset; - redesigned SD-card data bload routine to be based on actual directory-listed file size rather than cluster chain (fix for error loading small files from large SpC SD-cards to the end of GR8NET RAM). Date: 09 May 2017 Bugs found and fixed: - DSKLDIMG removed checking for HTTP return code in case URI structure is SD-card one; - Redesigned mapper change function so that now it changes without errors on startup; - Redesigned built-in disk-ROM to work from CPU bank 1 only, most .DSK images are operational now. Date: 26 Apr 2017 Bugs found and fixed: - Fixed bug in RX system call using wrong address to copy received data from. Date: 06 Apr 2017 Bugs found and fixed: - NETCODE routine to get HTTP code string was fed correct value in wrong register. Date: 20 Feb 2017 Bugs found and fixed: - when setting 16-bit sample size in PCM engine and relatively high sampling speed (>22 kHz) CPU starts reading unstable values from PCM buffer free registers due to register timing violation. Solved by latching both low and high portions of register. Also applied same fix to generator's counter value. Date: 13 Feb 2017 Bugs found and fixed: - wrong register used (RAMTOP) instead of DSKLPG to construct DPB for loaded RAM disk image. Found it when added sample RAM for Y8950. Date: 04 Feb 2017 Bugs found and corrected: - Added "XOR A" instruction at the successful completion of RAM-disk DSKIO function. While A=0 is not documented as a requirement to provide to DOS1 kernel on successful completion of DSKIO, it seems DOS1 kernel simply passes value of A through its RDABS (2F) call to the caller, which is identifying success or failure using contents of A register instead of CY flag; - removed all interrupt enable (EI) instructions from DOS1 kernel, moving this them to GR8NET page 0 which calls DOS1 kernel. This prevents interrupts to occur while DOS1 kernel is in CPU bank 2. Date: 24 Jan 2017 Bugs found and corrected: - Recently added host name to the DHCP discover packet was overwritten within DHCP request packet - corrected, and now router shows host name "gr8net-1016000405XX" instead of just MAC address in the list of connected devices - Added identification of padding option (0) into DHCP offer/ack processing to prevent treating possible padding as field having length byte after its identifier Date: 17 Jan 2017 Bugs found and corrected: - User agent string corruption by DNS query code, moved assignment of UA string closer to GET request generation Build 20160910 Date released: 10 Sep 2016 Bugs found and corrected: - added check for zero file name length string in paruri, and reset of query string if query is not present in input URI - improved netbload routine to handle empty server response properly Build 20160206 Date released: 06 Feb 2016 **Requires offline update** Bugs found and corrected: - 20160130 WAV player did not play last packet in the communication; - 20160130 In socket release removed close command execution if disconnect command is to be executed; - 20160130 Introduced dynamic port mechanism for TCP communication because reusing same port confused sessions and caused communication failures at some circumstances; - 20160202 Serious bug, related to discrete DAC being used on the board, found in SCC implementation in the FPGA. Rewritten whole SCC module, applying 4-point moving average filter to the tone values below 128. Special thanks to Wouter Vermaelen; - 20160206 Improved FPGA configuration related to SD-card handling: (a) expanded card busy counter, changed mechanism how system sees busy card (byte-oriented), increased timeframe for maximum timeout for data read/write operation to 600 ms; - 20160206 Increased timeout for UDP communication from 1,51s to 2,98s; - 20160212 Corrected bug in NETSNDVOL which did not save values into config RAM, and did not restore them in to speical conrtol regs on boot; - 20160212 Increased timeouts for flash process 4x to run update properly on Turbo-R machines. Build 20151223 Date released: 23 Dec 2015 Bugs found and corrected: - 20151231 NETBLOAD statement handler - if URI string is not provided URI structure passed to BLOAD is not initialized properly and command fails. Corrected to use default structure pointer in case URI string is not provided; - 20160102 Fixed CALL statement processing mistake where arguments were taken from memory with GR8NET turned on in CPU bank 2(NETBLOAD, SETHOST, NETCHKS, NETGETMEM). Build 20151202 Date released: 02 Dec 2015 Bugs found and corrected: - 20151215 no initialization of the URI structure within NETPLAYWAV statement handler. Amended with copying of default URI structure before parsing input URI string; - 20151215 incorrect bank 3 page change in the socket closing routine used for device CLOSE operator; - 20151215 NETDUMP used wrong switching mechanism throughout banks, changed to bank 1 only and to full page range, also corrected helper text; - 20151218 PARURI routine had a bug when path part of the structure is not terminated with 0 (EOL); - 20151218 Was performing connection close without disconnection process, this causes some servers going crazy. Changed to DISCON and only then CLOSE; - 20151218 NETBLOAD was treating BSAVED images as executables, and was trying to move them to data locations (e.g. 0-DFFF) causing machine crash. Changed NETBLOAD behavior - now to have binary moved NETBLOAD needs argument of (1), and to be moved _and_ executed argument (2). NETBROWSE's space key hit assumes argument (0), enter key hit assumes (2); - 20151220 removed usage of W5100 socket interrupt register as it does not reflect current status of the connection. Now basing solely on status register; - 20151220 revised BASIC device support as it was frequently giving Device I/O errors - now it checks for buffer once more after checking for TCP connection termination. I also extended NETDIAG diagnostic messages onto the device OPEN execution; - 20151220 corrected bug in PARURI when it is passed empty string it hung. Now it checks for empty string and returns doing nothing with CY set; - 20151220 fixed bug in NETBROWSE when at some condition I did not return to primary register set in the link highlighting routine and highlighting was displayed incorrectly. End of GR8NET-BUGS.TXT