VOGONS


First post, by Predator99

User metadata
Rank l33t
Rank
l33t

After my success with the IBM ROM Basic...
IBM ROM Basic - option ROM for PC clones
...I made another ROM. This time it contains a CGA game I played for hours when I was young 😉 I had this game as copy of a copy-protected 360kb-floppy. This floppy needed to be booted, therefore no DOS-functions are used, only BIOS-calls.

Later I found a version on the internet where the copy-protection was removed and you could run the game from DOS. I saw its size is only 61 kb.

Therefore I took the chance and put it on a ROM to turn your PC in an arcade machine. As it doesnt run directly from ROM the loader copies its content to RAM 1000:0 (therefore not much RAM needed) and executes afterwards.

The game is fun, maybe some of you dont know it 😉

If there is some interest I can also include some kind of selector so the ROM is only started when e.g. a key is pressed.

File is provided as a single 64 KB image or 32 KB HI/LO images.

Filename
jb.rar
File size
45.49 KiB
Downloads
102 downloads
File license
Fair use/fair dealing exception

Reply 1 of 16, by reenigne

User metadata
Rank Oldbie
Rank
Oldbie

WinRAR is reporting an archive that is damaged or in unknown format (I don't think it's a download glitch as I tried twice with different browsers). What's the game?

Reply 3 of 16, by bakemono

User metadata
Rank Oldbie
Rank
Oldbie

Is there by chance a PC emulator that allows configuring arbitrary ROMs that you are using to test these? I was thinking about trying some random things with option ROMs but the process of removing a chip, programming it, and reinstalling it would be too laborius.

Reply 4 of 16, by Predator99

User metadata
Rank l33t
Rank
l33t

Indeed good question, that would speed the debugging up. PCem doesnt support this as far as I know, its only possible to implement the XT-IDE.

I have to Lo-tech ISA ROM board, but this doesnt work as expected.

As I need the ROM on the ethernet card to boot with XT-IDE the best option for me is currently to use the spare ROM sockets on this 286 board (HI/LO) which is hardwired to E000:0.
Re: Suntac 80286 Mainboards

Reply 5 of 16, by Tronix

User metadata
Rank Member
Rank
Member

Game uses int21h calls for load or create SCORE file. AMI 286 BIOS fill all unused interrupts with dummy calls, but some XT's BIOSes - not. So, if add dummy int21h handler to loader, game start on XT very well. I tested with PCem. ROM start from D000:0000.

jbird.png
Filename
jbird.png
File size
75.27 KiB
Views
1874 views
File license
Fair use/fair dealing exception

Attachments

  • Filename
    jstub.zip
    File size
    836 Bytes
    Downloads
    67 downloads
    File license
    Fair use/fair dealing exception

https://github.com/Tronix286/

Reply 6 of 16, by Predator99

User metadata
Rank l33t
Rank
l33t

Oh shit you inspected my code 🤣 It is not nice but I wrote this in debug.exe and it worked on the 1st try 😉

This...
db 09ah
dw 6,01000h
...is just a far call to 1000:6 where you copied the ROM to. Entry point is at offset 6, found this out by debugging the orginal EXE-Loader.

Now the interesting question: How did you get this running with PCem...? And how did you find out about the int21? I only tested in my AMI-286 so far. Think never would have found out that the int21 is the reason why it crashes on other machines...

Reply 7 of 16, by digger

User metadata
Rank Oldbie
Rank
Oldbie

Ah, J-Bird. That was a fun game, indeed. 😀 Supposedly, the game supported Tandy/PCJr graphics and sound, but I couldn't get the game to work in that mode in DOSBox. It would only show 4 color CGA and play one-voice internal speaker sound. Perhaps PCem would be more successful in that regard, given its more accurate hardware emulation of specific systems, such as the Tandy 1000.

Reply 8 of 16, by Tronix

User metadata
Rank Member
Rank
Member
Predator99 wrote:

Now the interesting question: How did you get this running with PCem...? And how did you find out about the int21?

I made minor changes to the old (ver 12) PCem source code and recompile it with mingw32. Most edits in mem.c :

uint8_t romext[65536];    // was 32768

static void mem_load_xtide_bios()
{
FILE *f;
// f=romfopen("roms/ide_xt.bin","rb");
f=romfopen("roms/jb.bin","rb"); // load 64K of jb.bin instead XT-IDE opt rom

if (f)
{
pclog("found jb.bin\n");
fread(romext,65536,1,f);
fclose(f);
}
}

uint8_t mem_read_romext(uint32_t addr, void *priv)
{
return romext[addr & 0xffff]; // was & 0x3fff
}
uint16_t mem_read_romextw(uint32_t addr, void *priv)
{
return *(uint16_t *)&romext[addr & 0xffff]; // was & 0x3fff
}
uint32_t mem_read_romextl(uint32_t addr, void *priv)
{
return *(uint32_t *)&romext[addr & 0xffff]; // was & 0x3fff
}
void mem_init()
{
....skip ....
mem_mapping_add(&romext_mapping, 0xd0000, 0x10000, mem_read_romext, mem_read_romextw, mem_read_romextl, NULL, NULL, NULL, romext, 0, NULL);
}
void mem_resize()
{
.... skip ....
mem_mapping_add(&romext_mapping, 0xd0000, 0x10000, mem_read_romext, mem_read_romextw, mem_read_romextl, NULL, NULL, NULL, romext, 0, NULL);

// pclog("Mem resize %i %i\n",mem_size,c);
mem_a20_key = 2;
mem_a20_recalc();
}

To search int 21h calls I used HIEW32. Load JBIRD.OVL, F7 (search) then F7 - search by assembler command - enter "int 21h" and look at search result:

hiew32.png
Filename
hiew32.png
File size
83.09 KiB
Views
1803 views
File license
Fair use/fair dealing exception

https://github.com/Tronix286/

Reply 9 of 16, by Tronix

User metadata
Rank Member
Rank
Member

And now 32Kb version! 😊

For compression i use great LZ4 program lz4_8088 by Trixter. So, original JBIRD.OVL compressed to 25795 bytes. Then insert in STUB.ASM LZ4 faster decompress and here we are! 27С256 EPROM can be used instead of 27C512.

Attachments

  • Filename
    jb_32kb.zip
    File size
    22.21 KiB
    Downloads
    73 downloads
    File license
    Fair use/fair dealing exception
  • Filename
    stub_lz4.zip
    File size
    3.06 KiB
    Downloads
    62 downloads
    File license
    Fair use/fair dealing exception

https://github.com/Tronix286/

Reply 10 of 16, by Predator99

User metadata
Rank l33t
Rank
l33t

Wow great improvements!!! 😎

Just tested in my new 386...
Bought these (retro) hardware today
...on the Lo-Tech ROM Board: Works with 32kb!!!

With this you also run it in most ISA Ethernet cards...mine only accept up to 32KB ROMs.

Good work! 😎

Also good idea with the int21. I think the crackers must have introduced this while porting to DOS. As written, the original was on a copy protected floppy withou DOS.

Regarding PCem: Too complicated to me to mess with the source...also more fun with a real PC.

Reply 11 of 16, by Tronix

User metadata
Rank Member
Rank
Member

BTW, almost all early XT/PC games can be ported to EPROM. For example, this is digger 32Kb in attachment. Original .COM file compressed with LZ4_8088, added STUB for uncompressing and move to RAM memory at 1000h:0100h. Offset is 0100h, because digger want PSP data area.
I think its possible to convert Paratrooper, Arcade Volleyboll, and so on....

UPD: And "Planet Zoom"

Attachments

  • Filename
    zoom_32k.zip
    File size
    27.13 KiB
    Downloads
    69 downloads
    File license
    Fair use/fair dealing exception
  • Filename
    digger_32k.zip
    File size
    24.72 KiB
    Downloads
    72 downloads
    File license
    Fair use/fair dealing exception
Last edited by Tronix on 2019-06-06, 14:43. Edited 2 times in total.

https://github.com/Tronix286/

Reply 12 of 16, by Predator99

User metadata
Rank l33t
Rank
l33t

Yes indeed. But not possible for games that use DOS functions. The loader is quite generic, only the entry offset maybe different

Was just a proof of concept for me, did somebody do that before?

Maybe its also possible to put the IBM Basic on a 32KB ROM with compression, maybe I try later...

Reply 13 of 16, by Tronix

User metadata
Rank Member
Rank
Member
Predator99 wrote:

Maybe its also possible to put the IBM Basic on a 32KB ROM with compression

Easy -)

Attachments

  • Filename
    ibasic_32k.zip
    File size
    26.76 KiB
    Downloads
    87 downloads
    File license
    Fair use/fair dealing exception

https://github.com/Tronix286/

Reply 14 of 16, by Predator99

User metadata
Rank l33t
Rank
l33t
Tronix wrote:
Predator99 wrote:

Maybe its also possible to put the IBM Basic on a 32KB ROM with compression

Easy -)

Hmmm...no 😉 This doesnt work on real hardware.

But for the IBM ROM its not neccessary to copy to RAM anyway. It can directly be run from ROM. Not possible with the compression of course. But if you like to run BASIC/BASICA from DOS you need to have it in ROM. But I think nobody needs this...

Reply 15 of 16, by Tronix

User metadata
Rank Member
Rank
Member

I wrote a small utility - COM2ROM.

Using:
- download LZ4_8088 archiver by Trixter here: http://www.oldskool.org/pc/lz4_8088/LZ4_8088.ZIP
- go in Win32 folder and run "compress.bat <game-name.com> . You got <game-name.com.LZ4> compressed file.
- run COM2ROM <game-name.com.LZ4> <output.bin> .
- Burn <output.bin> in EEPROM or flash.

Sources are included in /src folder.

Attachments

  • Filename
    com2rom.zip
    File size
    21.68 KiB
    Downloads
    101 downloads
    File license
    Fair use/fair dealing exception

https://github.com/Tronix286/

Reply 16 of 16, by Predator99

User metadata
Rank l33t
Rank
l33t
Predator99 wrote:
Tronix wrote:
Predator99 wrote:

Maybe its also possible to put the IBM Basic on a 32KB ROM with compression

Easy -)

Hmmm...no 😉 This doesnt work on real hardware.

But for the IBM ROM its not neccessary to copy to RAM anyway. It can directly be run from ROM. Not possible with the compression of course. But if you like to run BASIC/BASICA from DOS you need to have it in ROM. But I think nobody needs this...

Hmm, loaded your ROM in Turbo Debugger and tried to find the error but I didnt find anything wrong. Then tried to switch the ROM adress from E000 to C800...now it works. Strange. So everything OK with your file, good work!