Retro FC Plus 168 in 1 games list

I recently felt nostalgic and wanted to play some of the 8-bit NES games from my childhood. Having an emulator such as OpenEMU that can run NES roms is great but owning a physical device is even better.

Thanks to AliExpress I acquired a portable 8-bit game console with 168 games build in. It’s clone of Game Boy Mini called Coolbaby RS-6 A or Retro FC Plus known by the user manual. It’s a cool little gadget which I will review in details later.

Coolbaby RS-6 A Retro Portable Mini Handheld Game Console 8-Bit 3.0 Inch Color LCD Kids Color Game Player Built-in 168 games
Coolbaby RS-6 A Retro Portable Mini Handheld Game Console 8-Bit 3.0 Inch Color LCD Kids Color Game Player Built-in 168 games

The complete list of 8-bit games was nowhere to be found so here it is or at least this is what came loaded on my device:

  1. Kung Fu Panda
  2. Jackal
  3. Rush n Attack
  4. Turtle Fighter
  5. Turtles 2
  6. Silk Worm
  7. Captain American
  8. Contra
  9. Super Contra
  10. Contra Force
  11. Double Dragon 2
  12. Double Dragon 3
  13. Hot Blood Story
  14. Hot Blood Wrestle
  15. Hot Blood Soccer
  16. Snow Bros
  17. Guerrilla War
  18. Chip Dale 1
  19. Top Gun Dual Fight
  20. World Cup Soccer
  21. Tetris 2
  22. Tank A1990
  23. Street Fighter V
  24. Tiny Toon 2
  25. Super Mario Bros
  26. Super Mario Bros 3
  27. Super Mario Bros 6
  28. Super Mario 14
  29. Adventure Island
  30. Adventure Island 2
  31. Cross Fire
  32. Jackie Chan
  33. Jungle Book
  34. Juuouki
  35. Kick Master
  36. Little Nemo Dream
  37. Mighty Final Fight
  38. Ninja Gaiden 2
  39. Ninja Gaiden 3
  40. Mitsume Ga Tooru
  41. Plants Vs Zombies
  42. Power Blade 2
  43. Batman
  44. Rockman 3
  45. Spider Man
  46. Tom Jerry
  47. Pacmania
  48. RBI Baseball
  49. 1942
  50. 80 Days
  51. Adventures Of Dino
  52. Adventures Of Lolo
  53. Adventures Of Lolo 2
  54. Aether Thgher
  55. Aladdin 3
  56. Angry Bird
  57. Argus
  58. Arkanoid
  59. Astro Robo Sasa
  60. Badminton
  61. Ballistic Hayhen
  62. Baltron
  63. Bananna
  64. Porter
  65. Bicycle Race
  66. Bokosuka Wars
  67. Bomb
  68. Buggy Popper
  69. Burai Fighter
  70. Bwings
  71. Challenger
  72. Chinese Chess
  73. Chubby Cherub
  74. Boat Race
  75. Defiance
  76. Destry I
  77. Dig Dug 2
  78. Dough Boy
  79. Dragon
  80. Dr. Mario
  81. Duck
  82. Elevator Action
  83. Exed Exes
  84. F1 Race
  85. Family Jockey
  86. Fire Dragon
  87. Flappy
  88. Flipull
  89. Football
  90. Galg
  91. Geimos
  92. Goodhand
  93. Goonies
  94. Gradius
  95. Gyrodine
  96. Gyromite
  97. Gyruss
  98. Harry Potter
  99. Hassle
  100. Hello Kitty
  101. Hokutono Ken
  102. Hovercraft
  103. Hydlide
  104. Ice Hockey
  105. Keroppi No Diabo
  106. Kung Fu
  107. Ladangel
  108. Lot Lot
  109. Mach Rider
  110. MagMax
  111. Metro Cross
  112. Mickey Mouse
  113. Mighty Bomb Jack
  114. Ms Pac Man
  115. Music Moment
  116. Ninja 2
  117. Pachi Com
  118. Pac Land
  119. Paperboy
  120. Pooyan
  121. Power Soccer
  122. The Legent Of Ka
  123. Circus Charlie
  124. Solomon S Key
  125. Spartan X
  126. TwinBee
  127. Donkey Kong
  128. Donkey Kong Jr
  129. Donkey Kong 3
  130. Bomber Man
  131. ExciteBike
  132. Front Line
  133. Galaga
  134. Galaxian
  135. Lode Runner
  136. Lode Runner 2
  137. Macross
  138. Tennis
  139. Ice Climber
  140. Dig Dug
  141. Pinball
  142. Space Invaders
  143. Super Chinese
  144. Field Combat
  145. Spy Hunter
  146. Spar
  147. Star Force
  148. Star Gate
  149. Street Frenzy
  150. Super Elf
  151. Surface Fire
  152. Swirl
  153. Tactful Monkey
  154. TNT (Bomberman with skin)
  155. Top Shot (Galaga with skin)
  156. UFO Race
  157. Under World
  158. Urban Champion
  159. Village Protector
  160. WarpMan
  161. Warrior Chase
  162. Warship
  163. What s up
  164. Wrestle
  165. Wrestling champion
  166. Yie Ar Kung Fu
  167. Zero Gravity
  168. Zippy Race

I brought myself a Christmas present

After being upgraded to June 2017 iMac 27″ 5k Retina at work, and using it for a week, I decided it’s about time to purchase myself an iMac. My first impression with this machine is fantastic, everything just works (fast and smooth) and the 5K Retina is amazing.

Today (after being financially stable, after some time 🙂 ) I ordered 27″ iMac 5K Retina equipped with 4.2GHz Quad-Core Intel Core i7, 16GB 2400MHz DDR4 (will be upgraded to 32 or 64 GB later), 2TB Fusion Drive and Radeon Pro 580 with 8GB VRAM.

It will arrive around 20 Jan 2018. It will be a nice time to start developing apps for iOS and bring VMSoft to the app store as well. Also a lot of my clients were asking me when will I start developing for iOS.

LCD buzzing noise and screen going completely black from time to time

27.10.2016 UPDATE: The method below fixed the monitor for a little while, it finally gave up!

Lately one of my LCD monitors was doing some strange things, like loud buzzing noises when turning on, to screen flashing and going completely black. I through it was a time for a new one, because this LCD was manufactured way back in 2007.

Being on a tight indie game developer budget it is not the right time for a replacement, so consulting google about the problem revealed some clues varying from opening the monitor and putting epoxy around the capacitors to changing the refresh rate of the monitor.

Changing the refresh rate from 75Hz to 60Hz and muting the build in speakers fixed the problem for me.

I hope that this solution will last at least until releasing my next game, which if successful will help me put aside some money for replacing my 3 monitor setup (all 3 manufactured 2007.) with 3 Dell U2415 monitors 🙂

Connecting my PC XT clone to the network: Part 1 – Ethernet adapter

I currently work on connecting my PC XT clone to my home network. But why? What are the benefits of connecting a 30 years old machine to the network?

It gives me one more reason to fire up my Pravetz 16 🙂 It would be cool chatting on IRC on that monochrome (green and black) monitor, running an FTP server for file transfers between the PC XT and other PC’s on the network or an HTTP server, etc…

The PC XT will be connected to the network using the so called ‘Thin Ethernet‘ (10Base2) using a coaxial cable and BNC connectors. Why? Because finding 8-bit ISA compatible Ethernet card is extremely rare nowadays, and chances to find one with RJ45 connector are close to zero.

My long search for 8-bit ISA network adapter finally gave results and for 10$ I’m an owner of PLUS & PLUS PCN-001.

Plus & Plus PNC-001 Ethernet adpater
Plus & Plus PNC-001 Ethernet adpater

It’s 10Mbps Ethernet card with support for coaxial and DIX transceiver wiring. It has an option for a boot ROM but mine don’t have a chip. This card is a clone of AMERICAN RESEARCH CORPORATION PNC-001, it’s NE1000 compatible and supported by the NE1000 driver for DOS available in the many-other-drivers.zip along with many other packet drives, thanks to Crynwr Software!

After a bit of googling I found the required information on how to configure the adapter here. That exact same information is copy / pasted at the end of this post for future references.

Setting the IRQ to 2, the I/O base address to 200h, and disabling the boot ROM and DMA settings, changing the cable type jumpers from ‘DIX transceiver via DB-15 port’ to ‘RG-58A/U 50ohm coaxial’ I booted the PC, loaded the NE1000 driver

C:\>ne1000 0x7E 2 0x200

UPDATE 16/02/2016: I was having problems receiving network packets, changing the IRQ to 5 and I/O base address to 0x280h resolved the problem.

NE1000 packet driver loaded
NE1000 packet driver loaded

and success! The card is working! 10$ well spend 🙂

NOTE: Installation instructions for packet drivers are in INSTALL.DOC (many-other-drivers.zip)

The Ethernet adapter is now configured and working properly. This concludes Part 1 of the series of articles about connecting my PC XT to the network. Later I will review other vital network component. The Surecom Ether Perfect 517T hub with BNC connector.

PLUS & PLUS (AMERICAN RESEARCH CORPORATION) PNC-001 Jumper settings (Information taken from Total Hardware 1999 page on the topic available here.)

40191-1

I/O BASE ADDRESS

Address SW1/1 SW1/2 SW1/3 SW1/4 SW1/5
200h Off On On On On
220h Off On On On Off
240h Off On On Off On
260h Off On On Off Off
280h Off On Off On On
2A0h Off On Off On Off
2C0h Off On Off Off On
2E0h Off On Off Off Off
300h (default) Off Off On On On
320h Off Off On On Off
340h Off Off On Off On
360h Off Off On Off Off
380h Off Off Off On On
3A0h Off Off Off On Off
3C0h Off Off Off Off On
3E0h Off Off Off Off Off

BOOT ROM

Setting SW1/6
Disabled (default) Off
Enabled On

BOOT ROM ADDRESS

Address SW1/7 SW1/8 SW1/9 SW1/10
C0000h On On On On
C4000h On On On Off
C8000h On On Off On
CC000h On On Off Off
D0000h On Off On On
D4000h On Off On Off
D8000h On Off Off On
DC000h (default) On Off Off Off
E0000h Off On On On
E4000h Off On On Off
E8000h Off On Off On
EC000h Off On Off Off
F0000h Off Off On On
F4000h Off Off On Off
F8000h Off Off Off On
FC000h Off Off Off Off

INTERRUPT REQUEST

IRQ JP1A JP1B JP1C JP1D
2 Closed Open Open Open
3 (default) Open Closed Open Open
4 Open Open Closed Open
5 Open Open Open Closed

DMA CHANNEL

Channel JP1F JP1G JP1H JP1I
DMA1 (default) Closed Open Closed Open
DMA3 Open Closed Open Closed

CABLE TYPE

Type JP2A – JP2F
RG-58A/U 50ohm coaxial (default) Pins 1 & 2 closed
DIX transceiver via DB-15 port Pins 2 & 3 closed

FACTORY CONFIGURED SETTINGS

Jumper Setting
JP1E Open

Digital clock for my PC XT compatible, or having fun with Borland Graphics Interface (BGI)

The clock in action

Yet another day “wasted” playing with my Pravetz 16. Really I should sit on my … and do some real work, but the battery of my wall clock died and I decided to code myself a digital one 🙂

The clock in action
The clock in action

The clock is written on C using Borland Graphics Interfaces also knows as BGI. The most easy and video hardware independent option for doing graphics under DOS. BGI comes bundled with drivers for common back then graphic adapters (CGA, VGA and EGA) and vector fonts.

There are other options such as using interrupt 10h or writing directly to the graphics hardware like most of the games were doing back then.

To build the code fire up the Turbo C IDE, go to Options->Linker and check “Graphics library”, then proceed as usual.

Turbo C Linker options
Turbo C Linker options

Compiled version of the CLOCK.EXE can be obtained from here and the source code (if you don’t like Ctrl + C & Ctrl + V) is here.

Wen I got some free time and motivation I will probably enhance the clock with some neat options such as 12/24 hours mode, moving objects in the background, drawing the “Pravetz” logo in the upper left corner of the screen, command line parameters for setting an alarm etc…

If you wan’t to learn more about BGI review the examples that comes with Turbo C such as BARCHART.C. View the GRAPHICS.H header. Also take a look here.

Code listing a.k.a “The Digital Clock” source 🙂

#include <stdio.h>
#include <dos.h>
#include <graphics.h>
 
#define TIME_BUF_LEN 6
#define DATE_BUF_LEN 10
 
#define TIME_TEXT_TEMPLATE "00:00"
#define DATE_TEXT_TEMPLATE "00.00.0000"
 
#define NOTE_TEXT "Press any key to exit..."
 
#define BGI_LOCATION "C:\\TC\\bgi"
 
int gl_nMaxX = 0;
int gl_nMaxY = 0;
 
int gl_nCenterX = 0;
int gl_nCenterY = 0;
 
char gl_szTimeBuff[TIME_BUF_LEN];
char gl_szDateBuff[DATE_BUF_LEN];
 
int initGraphics( void )
{
	int nGraphicDriver = DETECT; 
	int nGraphMode;
	int nErrorCode;
 
	/* Initialize graphics system */
	initgraph(&nGraphicDriver, &nGraphMode, BGI_LOCATION);
	nErrorCode = graphresult();
 
	if (nErrorCode != grOk)
	{
	   return -1;
	}        
 
	/* Graphics OK, so return "true" */
	return 1; 
}
 
void drawNote()
{
	int textWidth, textHeight;
 
	settextstyle(DEFAULT_FONT, HORIZ_DIR, 0);
 
	textWidth = textwidth(NOTE_TEXT);
	textHeight = textheight(NOTE_TEXT);
 
	outtextxy(gl_nMaxX - textWidth,
			  gl_nMaxY - textHeight,
			  NOTE_TEXT);
}
 
void drawTime(struct time *pTime)
{
	int textWidth, textHeight;
 
	settextstyle(SANS_SERIF_FONT, HORIZ_DIR, 8);
 
	textWidth = textwidth(TIME_TEXT_TEMPLATE);
	textHeight = textheight(TIME_TEXT_TEMPLATE);
 
	sprintf(gl_szTimeBuff, "%02d:%02d", pTime->ti_hour, pTime->ti_min);
 
	outtextxy(gl_nCenterX - (textWidth / 2), 
			  gl_nCenterY - textHeight, 
			  gl_szTimeBuff);
}
 
void drawDate(struct date *pDate)
{
	int textWidth;
 
	settextstyle(SANS_SERIF_FONT, HORIZ_DIR, 6);
 
	textWidth = textwidth(DATE_TEXT_TEMPLATE);
 
	sprintf(gl_szDateBuff, 
			"%02d.%02d.%d", 
			pDate->da_day, 
			pDate->da_mon, 
			pDate->da_year);
 
	outtextxy(gl_nCenterX - (textWidth / 2), gl_nCenterY, gl_szDateBuff);
}
 
int main(void)
{
	struct time sysTime, startTime;
	struct date sysDate, startDate;	
 
	if(initGraphics() == -1)
	{
		printf("Error initializing BGI!\n");
		return 0;
	}
 
	gl_nMaxX = getmaxx();
	gl_nMaxY = getmaxy();
 
	gl_nCenterX = (getmaxx() / 2);
	gl_nCenterY = (getmaxy() / 2);		
 
	drawNote();
 
	gettime(&startTime);
	drawTime(&startTime);
 
	getdate(&sysDate);
	drawDate(&sysDate);
 
	while(!kbhit())
	{										
		gettime(&sysTime);
 
		/*
		 * To avoid flickering, redraw the screen only if there are 
		 * changes in the hour or minute values. Only some VGA and EGA
		 * drivers support 'setactivepage()' and 'setvisualpage()'.
		 */
		if(sysTime.ti_hour > startTime.ti_hour || 
		   sysTime.ti_min > startTime.ti_min)
		{
			cleardevice();
			getdate(&sysDate);
 
			drawNote();
			drawTime(&sysTime);
			drawDate(&sysDate);
 
			gettime(&startTime);
		}
	}
 
	closegraph();
 
	return 0;
}