• Welcome to Videopac / Odyssey2 forum.

The Odyssey2 Revival Project

Started by Luposian, November 21, 2024, 08:40:18 AM

Previous topic - Next topic

Luposian

I recently realized that of all the main systems of the early era of gaming recreated, or at least attempted... the Magnavox Odyssey2 has fallen into almost complete obscurity over the decades.  I'd like to rectify that.

I'm interested, not in emulating this system, which has already been done (O2EM).  I want to clone it, in hardware.  Basically breathing new life into the original systems, with a replacement mainboard using currently available parts.  The bonus side potentially being better games and graphics.  The Odyssey2 never got to achieve it's true potential, to be all that it could have been.

However, I'm looking for people to assist in this endeavor, if interested.  I've created a Facebook group for this cause:

https://www.facebook.com/groups/9062321853786702

Hopefully, one of those interested individuals.... is YOU!

ANDYRYALS

Good Luck, it's probably just as cheap to buy a cheap system rather than new hardware.
I have 12"

Luposian

I am trying to disassemble/reassemble the Odyssey2 BIOS (O2ROM.BIN).  I used dis48 (part of O2EM) and there seems to be only two options when using it... the filename or the filename with -bios appended to it.  Both produce the exact same code, except the "line numbers" on the left are different.  I'm assuming I need to use it with the -bios option, correct?

Then comes reassembly... I'm using asw.  Well, more accurately, I'm running a batch file that runs asw and then p2bin.  Works great for programs, but for the BIOS, nothing I'm doing seems to work.  O2EM keeps telling me "/bios not BIOS!".  Whatever I'm assembling is not resulting in a recognizable BIOS file.

What am I doing wrong?  Can anyone tell me how to do this successfully?

TedFoolery

I haven't used either of these tools in sometime, so not sure of specifics. The disassembly already exists here, though: https://atarihq.com/danb/files/o2romsrc.txt

I would get a hex editor and compare your compiled code with a working version and see where the differences are.
As for compiling, I think asw is the complier that inserts some instructions (like sel mb0, sel mb1) for you, whether you want it to or not. These get inserted when either jumping or returning across the 1k barrier I believe, so not sure if that applies here.
The compiled code may function properly, but it might be a few bytes bigger than expected and causing an error.
Also, for the bios, make sure you are compiling to the $000 - $399 address range.

Luposian

Quote from: TedFoolery on January 16, 2025, 05:18:18 PMI haven't used either of these tools in sometime, so not sure of specifics. The disassembly already exists here, though: https://atarihq.com/danb/files/o2romsrc.txt

I would get a hex editor and compare your compiled code with a working version and see where the differences are.
As for compiling, I think asw is the complier that inserts some instructions (like sel mb0, sel mb1) for you, whether you want it to or not. These get inserted when either jumping or returning across the 1k barrier I believe, so not sure if that applies here.
The compiled code may function properly, but it might be a few bytes bigger than expected and causing an error.
Also, for the bios, make sure you are compiling to the $000 - $399 address range.

The batch file looks like this (using the code listing at danb's website):

asw.exe o2romsrc.a48
p2bin.exe  o2romsrc.p  o2romsrc.bin -r 1024-3071
pause


I'm pretty sure that range is going to cause a problem, because when I tried it, the .bin file came out to over 1K.  I've also tried it with the range being identical (-r 1024-1024) and the .bin file still won't run in O2EM.

I know something isn't being done right... just trying to figure out what it is and hoping someone can tell/show me.

At this point, I'd almost be willing to pay someone to help me get this figured out, if that would be any type of encouragement.  :)

manopac

may I ask WHY you want to compile your own BIOS? :D
sex, lies, and videopac

bataais

I use asm48 on osx, no problem with dis- and assembling the o2rom.bin..

https://github.com/daveho/asm48

it's a little different than asw, but I like it waaay more.

on mac, I disassembled with: ./8039dasm o2rom.bin 0 1024 > o2rom.a48
then added in the file:

.org 0
and at the end:
.end

assembling: ./asm48 -o o2rom_2.bin o2rom.a48

compared with hex editor, contents are the same

Luposian

Quote from: bataais on January 18, 2025, 03:26:31 PMI use asm48 on osx, no problem with dis- and assembling the o2rom.bin..

https://github.com/daveho/asm48

it's a little different than asw, but I like it waaay more.

on mac, I disassembled with: ./8039dasm o2rom.bin 0 1024 > o2rom.a48
then added in the file:

.org 0
and at the end:
.end

assembling: ./asm48 -o o2rom_2.bin o2rom.a48

compared with hex editor, contents are the same

Will the Mac version work with M1 (or greater) Macs?  I don't have an Intel Mac and there is no 32-bit Intel Mac emulation in Rosetta 2.

That being said, where do you add ".org 0"?  At the very top (above line 0000)?  I assume you add ".end at the very end of the file.

Maybe, if you showed a cut/paste of the first few and last few lines of the disassembled source code (with the changes), that would help explain it.  :)

Luposian

Quote from: manopac on January 18, 2025, 01:16:19 PMmay I ask WHY you want to compile your own BIOS? :D
Because, the original BIOS won't work with what I'm attempting.  Literally not at all (except for the processor, which will be compatible).  But, I need a framework to modify, to the hardware I plan to use.  And, I believe, the significant differences in code/hardware will avoid any legal issues, should Philips get wind of this project.

bataais

there is also a win version in that asm48 release package.. or compile it yourself for M1, source is included.

  .org 0x000

jmp  $0400
nop
jmp  $0402
nop
nop
jmp  $0404
sel  rb0
...

  .end
I took the disassembly generated with the included 8039dasm.

(You will have to edit your g7000.h file for your games code,
asm48 directives and hex / bin numbers are different compared to asw.)
Try and Error is your friend.

good luck with your project

Luposian

I've discovered that the disassembler works fine on my M1 Mac Mini.  I also downloaded O2EM for the Mac and it runs fine, too... except when I tried giving it the o2rom.bin file, when it asked for a ROM, I got a screen with four 0's in the upper left corner.  When I ran a regular game .bin file, it ran fine!  But... how can it operate without a BIOS?!?  I couldn't find anything hidden in the package, so I have no idea how it's doing this.

Luposian

I tried the BIOS with the changes suggested and the build worked fine in the Windows version of O2EM.  Then I tried the build WITHOUT the changes suggested and it ALSO worked fine!  The Mac version of the disassembler/assembler are simply better than the Windows version, but the two changes aren't apparently necessary.

Now I need to figure out how to change O2EM so that it doesn't give you an error message when you give it a game .bin file that isn't in the ROM folder, but the BIOS tells you the error message instead.  Essentially, when you give O2EM a filename that isn't in the ROM folder, it's the same as no cartridge being inserted in the Odyssey2 console, correct?

manopac

no, if you give O2EM a filename thats not in the ROM folder, it will tell you that the file is not found ;-) but if you change O2EM to be able to run without a ROM being given, it will do that ... minus the "garbage" that will be in read from the cartridge port, which could or could not be the same of what O2EM has in memory then ...
sex, lies, and videopac

Luposian

Quote from: manopac on January 22, 2025, 11:42:36 AMno, if you give O2EM a filename thats not in the ROM folder, it will tell you that the file is not found ;-) but if you change O2EM to be able to run without a ROM being given, it will do that ... minus the "garbage" that will be in read from the cartridge port, which could or could not be the same of what O2EM has in memory then ...
When the Odyssey2 console is turned on, without a cartridge inserted, there are only two places it can get "video garbage" from... the BIOS on the Intel 8048 or the ROM of the video chip.  O2EM is prevented from operating exactly like this by having a "check" in place, that makes sure the .bin file ("cartridge") is present, before running.  I want a version of O2EM that simply runs under the assumption the .bin file you specify actually exists (is in the ROM folder).  Would O2EM do the exact same thing as a physical Odyssey2 console under that condition?  I don't see why it wouldn't.

Now, your question is... WHY?  Why would I want to do this?  What would be served by doing this?  This is the only way to test a particular initial change I wish to make to the O2ROM.BIN (BIOS) file.  Instead of producing "garbage", it would produce a very simple graphical "error code".  Instead of the emulator preventing such a scenario from occurring (stopping you from using a non-existent filename), the BIOS itself produces a controlled end result, rather than a visual glitch (which is it not knowing how to deal with no cartridge being present).  Assuming there is enough room to make such a change.  But we'll cross that bridge when we come to it.

manopac

actually the O2 gets data from the cartridge bus - because the processor is initialized and starts running and jumping at one point to $400 - if there is no cartridge there it will try to run with whatever garbage it gets from the cartride port ... it might be 0 if there is no cartridge or it might be something else - I dont know ... in any way O2EM does not "emulate" an empty cartridge port - if you deactivate the check for a ROM, the memory region that is used to save the ROM might either be uninitialized (=garbage) or 0 if its set to 0 when setting up the variable its stored in.

so basically the actual console does not check if a cartridge is present - it just jumps to the address occupied by the cartridge, and if nothing is there it produces garbage.
sex, lies, and videopac