Galaxian - in Space Invader clothing

biglouie

Active member
vacBacker
Credits
79CR
Still looking at the ROMs, seeing as Test ROM works. Guidance keeps me looking at this circuit of 139 and 138 chips, while I wait for a ROM board to help with testing.

I thought I would do a table of some quick Chip Enable and Output Enable readings, so I have it somewhere

I guess chips are meant to always be enabled and then pin 20 should pulse with data as the output pins are enabled to push data out. The probe "pulse" light does flash, even when the H light is constantly lit, unlike some lines that flash both H and L and pulse. If its pulsing, Id have expected to see both H/L flashing and pulse...(PROBE LINK)

ROM
CE (PIN 18)
CO (PIN 20)
C​
L​
H (but pulse light on probe)​
D​
L​
H/L (pulse light on probe)​
E​
L​
H (pulse light on probe)​
F​
L​
H (pulse light on probe)​
G​
L​
H/L (pulse light on probe)​
 

NivagSwerdna

Active member
Feedback
1 (100%)
Credits
742CR
Code:
galaxiani                       // (c) Irem

GAME( 1979, galaxiani,   galaxian, galaxian,   superg,     galaxian_state, init_galaxian,   ROT90,  "Namco (Irem license)",   "Galaxian (Irem)",         MACHINE_SUPPORTS_SAVE )

ROM_START( galaxiani )
    ROM_REGION( 0x4000, "maincpu", 0 )
    ROM_LOAD( "cp-1.8g",  0x0000, 0x0800, CRC(e8f3aa67) SHA1(a0e9576784dbe602dd9780e667f01f31defd7c00) ) // All eprom are MBM2716 EPROMs
    ROM_LOAD( "cp-2.8f",  0x0800, 0x0800, CRC(f58283e3) SHA1(edc6e72516c50fd3402281d9936574d276581ce9) )
    ROM_LOAD( "cp-3.8e",  0x1000, 0x0800, CRC(4c7031c0) SHA1(97f7ab0cedcd8eba1c8f6f516d84d672a2108258) )
    ROM_LOAD( "cp-4.8d",  0x1800, 0x0800, CRC(097d92a2) SHA1(63ef86657286a4e1fae4f795e0e6b410ca2ef06b) )
    ROM_LOAD( "cp-5.8c",  0x2000, 0x0800, CRC(5341d75a) SHA1(40bc8fcc598f58c6ff944e2a4a9288463e75a09d) )

    ROM_REGION( 0x1000, "gfx1", 0 )
    ROM_LOAD( "cp-7.1k",  0x0000, 0x0800, CRC(287159b7) SHA1(a0bcdac1f133d4386dababba36177b99a21c5872) )
    ROM_LOAD( "cp-6.1j",  0x0800, 0x0800, CRC(6fb54cb1) SHA1(485f05203d9c4b4d24ecba699c8d8cdff3eb021a) )

    ROM_REGION( 0x0020, "proms", 0 )
    ROM_LOAD( "6l.bpr",   0x0000, 0x0020, CRC(c3ac9467) SHA1(f382ad5a34d282056c78a5ec00c30ec43772bae2) )
ROM_END

sadly no schematic
 
Last edited:

biglouie

Active member
vacBacker
Credits
79CR
My graphics ROMs don't have the J and K on them for Galaxiani (I dont think) and appear to be Kamakazi3 when dumped, not the Galaxiani ROMs, different CRC values to your table.

ROM J (original from board)ROM K (original from board)
Screenshot 2024-05-31 at 09.56.37.pngScreenshot 2024-05-31 at 09.58.30.png


What's the 6l.bpr record? Always wondered about that!
 
Last edited:

biglouie

Active member
vacBacker
Credits
79CR
It seems the original CPU ROM code matches Galaxiani
The original graphics ROMs appear to be Kamakazi3, 2 of the CPU original ROMs, match Kamakazi3 ROMs also?!
All blows my mind, :)


Original ROMS
ROM NAMECRC32BCRC32
Ge8f3aa674861e269
Ff58283e39976d01e
E (think blank)c5eae348b43e0e81
D097d92a2623cc73c
C5341d75aa2a769d5
GFX1977e37cfe4f6fe04
GFX2d0ba22c9ca9f132e
KAMAKAZI3
ROM NAMECRC32BCRC32
f_b.binddeabdae8bea86ac
f_r_d.binda2d77e0554e932a
f_a.binf58283e39976d01e
f_r_a.bine8f3aa674861e269
f_r_c.binc8530a88e6e26527
r_a.bind0ba22c9ca9f132e
r_b.bin977e37cfe4f6fe04
GALAXIANI
ROM NAMECRC32BCRC32
cp-1.8ge8f3aa674861e269
cp-2.8ff58283e39976d01e
cp-3.8e4c7031c02badc8bd
cp-4.8d097d92a2623cc73c
cp-5.8c5341d75aa2a769d5
cp-6.1j6fb54cb11ad1ed7f
cp-7.1k287159b734b80055
 
Last edited:

NivagSwerdna

Active member
Feedback
1 (100%)
Credits
742CR
I thought you might be wondering why your graphics files differ from Galaxian.... my GalaxyX, which I think was sold as Galaxia (Upright was marked Space Wars) by Shoei, (Galaxian clone) so I dumped...

GalaxyX (aka Galaxia)

CaptureGalaxian.png

and

Kamakazi3

CaptureKamakazi3.png
So you see they are essentially the same but with a few tweaks (probably to avoid names of the originator!)

PS

In GalaxyX they changed the code so that the "We are the galaxians" gets replaced by "We are Galaxy X" and the NAMCO logo does not display; looks like on Kamakazi3 they blanked the NAMCO in the Graphics ROM.
 
Last edited:

cliff_poole

Active member
vacBacker
Feedback
6 (100%)
Credits
1,069CR
Do you mind me asking how you are viewing the tiles from the ROM data like that ?. I remember there used to be a DOS program called Turaco, but I never had much luck using it.
 

NivagSwerdna

Active member
Feedback
1 (100%)
Credits
742CR

NivagSwerdna

Active member
Feedback
1 (100%)
Credits
742CR
FYI.... Here's some code... it's not my best work... but you asked... Technical support available at extortionate rates only.

Python:
from time import sleep
from tkinter import *

fname = "6l.bpr"
fname2 = "r_b.bin"
fname3 = "r_a.bin"

with open(fname2, "rb") as binary_file:
# Read the whole file at once
    data_sg6 = binary_file.read()

with open(fname3, "rb") as binary_file:
# Read the whole file at once
    data_sg7 = binary_file.read()

data = list(data_sg6)
data.extend(list(data_sg7))


def get_bit(all_data, offset):
byte_offset = int(offset / 8)
bit_offset = 7 - offset % 8
    b = all_data[byte_offset]
x = 1 << bit_offset
    return 0 if b & x == 0 else 1


def _from_rgb(rgb):
"""translates an rgb tuple of int to a tkinter friendly color code
    """
    return "#%02x%02x%02x" % rgb

cell_size = 4

print("-" * 40)
root = Tk()
root.geometry("2048x1024")
canvas = Canvas(root, width=2048, height=1024)
canvas.pack()


def render_chars():
for c in range(0, 256):
row = int(c / 32)
for j in range(0, 8):
col = c % 32
            for i in range(0, 7):
b0 = get_bit(data, 64 * c + 8 * j + i)
b1 = get_bit(data, 2048*8+64 * c + 8 * j + i)

b, g, r = bits_to_colour(b0, b1)

top_left_x = col * 10*cell_size + i * cell_size
top_left_y = row * cell_size * 10 + j * cell_size
canvas.create_rectangle(top_left_x, top_left_y, top_left_x+cell_size, top_left_y+cell_size,
fill=_from_rgb((r, g, b)))


def bits_to_colour(b0, b1):
if b0 == 0 and b1 == 0:
r, g, b = (0, 0, 0)
elif b0 == 1 and b1 == 0:
r, g, b = (0xff, 0, 0)
elif b0 == 0 and b1 == 1:
r, g, b = (0, 0xff, 0)
 else:
r, g, b = (0xff, 0xff, 0xff)
return b, g, r


def render_sprites():

# { STEP8(0,1), STEP8(8*8,1) }
    x_steps = ( 0, 1, 2, 3, 4, 5, 6, 7, 8*8+0, 8*8+1, 8*8+2, 8*8+3, 8*8+4, 8*8+5, 8*8+6, 8*8+7 )
# { STEP8(0,8), STEP8(16*8,8) }
    y_steps = ( 0, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 16*8, 16*8+1*8, 16*8+2*8, 16*8+3*8, 16*8+4*8, 16*8+5*8, 16*8+6*8, 16*8+7*8 )
bits_in_plane = int((4096*8)/2)
for c in range(0, int(bits_in_plane/(16*16))):
row = int(c / 16)
for j in range(0, 16):
col = c % 16
            for i in range(0, 16):
b0 = get_bit(data, 16*16 * c + y_steps[j] + x_steps[i])
b1 = get_bit(data, 2048*8+16*16 * c + y_steps[j] + x_steps[i])

b, g, r = bits_to_colour(b0, b1)

top_left_x = col * 20*cell_size + i * cell_size
top_left_y = row * cell_size * 20 + j * cell_size
canvas.create_rectangle(top_left_x, top_left_y, top_left_x+cell_size, top_left_y+cell_size,
fill=_from_rgb((r, g, b)))


render_sprites()
#render_chars()
root.mainloop()

sleep(120.0)

PS
I notice it doesn't actual use the Colour PROM Map... Maybe I never got around to that?
 
Last edited:

cliff_poole

Active member
vacBacker
Feedback
6 (100%)
Credits
1,069CR
Thanks very much for that. I'll stare at it for a while and see if I can figure it out :). Like the way the forum has let you insert it as code, I didn't realise that was a thing.
 
Top