› Foros › Retro y descatalogado › Consolas clásicas
kabazorro escribió:@msejcs Gracias por responder, formule mal mi pregunta, se que los dos son lorom, pero en que tarjeta deberia ponerlos aon01, aon 02, aon 10, etc. Pregunto por que me han dicho anteriormente que no hay problema que los arme en cualquier tarjeta pero, me ha pasado que monto las memorias y luego no funcionan hasta que las cambio.
1RX escribió:Hola, hace tiempo que quería colocar una info acá.
Hace tiempo intenté transformar una PCB 1A3M en una 1J3M para usar juegos HIROM en una PCB LOROM, el motivo, pues es más facil encontrar a buen precio la placa 1A3M.
Intenté por medio de cables, pero aunque funcionó para juegos sin saves, no funcionó para juegos con saves.
Osea: para convertir las placas 1A0N en 1J0N SI FUNCIONA recableando.
para placas con saves (Funciona pero no guarda saves):
Luego me puse en marcha para hacer una placa universal de pruebas que en si funcionó bastante bien:
]
jomjom escribió:Pues muchas gracias por contestar, a ver si en estos días la pido y de paso hago fotos del proceso para compartirlo por aquí
CoLvIN escribió:@1RX
Después de probar muchas veces en python 2.7.13 también probado en python 3.7 y el codigo, no consigo que funcione, lo he ajustado para que no de errores, cuando por fin parece que funciona, me pide el archivo .smc lo acepta y ya no hace nada mas, ni mensaje de error, ni avisos ni crea ningún archivo adicional ni modifica el original.
Podrías explicar como lo hiciste funcionar?
saludos
#!/usr/bin/python
import os, sys
if __name__ == "__main__":
if len(sys.argv) < 3:
print "Syntax should be %s <input file> <output file>" % os.path.basename(sys.argv[0])
sys.exit()
else:
# process basic checks
try:
input = open(sys.argv[1], "rb")
except:
print "Input file does not exist"
sys.exit()
try:
output = open(sys.argv[2], "wb")
except:
print "Can't write output file"
input.close()
sys.exit()
# checks were ok, let's proceed with the real work
# reading input file to a byte array
data = bytearray(input.read())
# init a 4MB empty bytearray (needed to swap, regardless of the actual rom size)
buffer = bytearray()
for i in range(2**22): buffer.append(0)
# let's do the swap
count = 0
for i in range(len(data)):
addr = (i & 0x7fff) + ((i & 0x008000) << 6) + ((i & 0x010000) >> 1) + ((i & 0x020000) >> 1) + ((i & 0x040000) >> 1) + ((i & 0x080000) >> 1) + ((i & 0x100000) >> 1) + ((i & 0x200000) >> 1)
if addr != i: count += 1
buffer[addr] = data[i]
print "Swapped %s (%s) addresses" % (count, hex(count))
# writing output file
output.write(buffer)
# close file handles
input.close()
output.close()
I:\Python2.7>python.exe swap.py Claymates.smc:\Python2.7>python.exe swap.py Claymates.smc
Swapped 1015808 (0xf8000) addressesSwapped 1015808 (0xf8000) addresses
#!/usr/bin/python
import os, sysimport os, sys
if __name__ == "__main__":if __name__ == "__main__":
if len(sys.argv) < 3:if len(sys.argv) < 3:
print "Syntax should be %s <input file> <output file>" % os.path.basename(sys.argv[0])print "Syntax should be %s <input file> <output file>" % os.path.basename(sys.argv[0])
sys.exit().exit()
else:else:
# process basic checks# process basic checks
try:try:
input = open(sys.argv[1], "rb")= open(sys.argv[1], "rb")
except:except:
print "Input file does not exist"print "Input file does not exist"
sys.exit().exit()
try:try:
output = open(sys.argv[2], "wb")= open(sys.argv[2], "wb")
except:except:
print "Can't write output file"print "Can't write output file"
input.close().close()
sys.exit().exit()
# checks were ok, let's proceed with the real work# checks were ok, let's proceed with the real work
# reading input file to a byte array# reading input file to a byte array
data = bytearray(input.read())= bytearray(input.read())
# calculating rom size in 2 exponants# calculating rom size in 2 exponants
expsize = 0= 0
bytesize = len(data)= len(data)
while bytesize > 1:while bytesize > 1:
expsize += 1+= 1
bytesize = bytesize // 2= bytesize // 2
# init a proper size empty bytearray# init a proper size empty bytearray
buffer = bytearray()= bytearray()
for i in range(2**expsize): buffer.append(0)for i in range(2**expsize): buffer.append(0)
# let's do the swap # let's do the swap
count = 0 = 0
for i in range(len(data)):for i in range(len(data)):
addr = (i & 0x7fff) + ((i & 0x008000) << (expsize - 16)) + ((i & 0x010000) >> 1) + ((i & 0x020000) >> 1) + ((i & 0x040000) >> 1) + ((i & 0x080000) >> 1) + ((i & 0x100000) >> 1) + ((i & 0x200000) >> 1)= (i & 0x7fff) + ((i & 0x008000) << (expsize - 16)) + ((i & 0x010000) >> 1) + ((i & 0x020000) >> 1) + ((i & 0x040000) >> 1) + ((i & 0x080000) >> 1) + ((i & 0x100000) >> 1) + ((i & 0x200000) >> 1)
if addr != i: count += 1if addr != i: count += 1
buffer[addr] = data[i][addr] = data[i]
print "Swapped %s (%s) addresses" % (count, hex(count))print "Swapped %s (%s) addresses" % (count, hex(count))
# writing output file# writing output file
output.write(buffer).write(buffer)
# close file handles# close file handles
input.close().close()
output.close().close()
import os, sys, tkFileDialog,Tkinter os, sys, tkFileDialog,Tkinter
root = Tkinter.Tk()= Tkinter.Tk()
root.withdraw().withdraw()
formats = [ ('Roms Super Nintendo SMC','.smc'),('Roms Super Nintendo SFC','.sfc'),('Fichier Bin','.bin'),('Roms Super Nintendo','.smc .sfc .bin') ]= [ ('Roms Super Nintendo SMC','.smc'),('Roms Super Nintendo SFC','.sfc'),('Fichier Bin','.bin'),('Roms Super Nintendo','.smc .sfc .bin') ]
input = tkFileDialog.askopenfile(parent=root,mode='rb',filetypes=formats,title='Choisissez le fichier à swapper')= tkFileDialog.askopenfile(parent=root,mode='rb',filetypes=formats,title='Choisissez le fichier à swapper')
if not input:if not input:
print "Impossible d'ouvrir le fichier!"print "Impossible d'ouvrir le fichier!"
sys.exit().exit()
output = tkFileDialog.asksaveasfile(parent=root,mode='wb',filetypes=formats,title='Choisissez le fichier de sortie')= tkFileDialog.asksaveasfile(parent=root,mode='wb',filetypes=formats,title='Choisissez le fichier de sortie')
if not output:if not output:
print "Impossible de créer le fichier de sortie!"print "Impossible de créer le fichier de sortie!"
sys.exit().exit()
# reading input file to a byte array# reading input file to a byte array
data = bytearray(input.read())= bytearray(input.read())
# calculating rom size in 2 exponants# calculating rom size in 2 exponants
expsize = 0= 0
bytesize = len(data)= len(data)
while bytesize > 1:while bytesize > 1:
expsize += 1+= 1
bytesize = bytesize // 2= bytesize // 2
# init a proper size empty bytearray# init a proper size empty bytearray
buffer = bytearray()= bytearray()
for i in range(2**expsize): buffer.append(0)for i in range(2**expsize): buffer.append(0)
# let's do the swap # let's do the swap
count = 0 = 0
for i in range(len(data)):for i in range(len(data)):
addr = (i & 0x7fff) + ((i & 0x008000) << (expsize - 16)) + ((i & 0x010000) >> 1) + ((i & 0x020000) >> 1) + ((i & 0x040000) >> 1) + ((i & 0x080000) >> 1) + ((i & 0x100000) >> 1) + ((i & 0x200000) >> 1)= (i & 0x7fff) + ((i & 0x008000) << (expsize - 16)) + ((i & 0x010000) >> 1) + ((i & 0x020000) >> 1) + ((i & 0x040000) >> 1) + ((i & 0x080000) >> 1) + ((i & 0x100000) >> 1) + ((i & 0x200000) >> 1)
if addr != i: count += 1if addr != i: count += 1
buffer[addr] = data[i][addr] = data[i]
print "Swapped %s (%s) addresses" % (count, hex(count))print "Swapped %s (%s) addresses" % (count, hex(count))
# writing output file# writing output file
output.write(buffer).write(buffer)
# close file handles# close file handles
input.close().close()
output.close().close()
Aunque sinceramente me gustaba más el antiguo:
Troopa Jr escribió:Se sabe ya qué diferencias tienen las dos roms, o tenemos que esperar unas horas más todavia?
josete2k escribió:Troopa Jr escribió:Se sabe ya qué diferencias tienen las dos roms, o tenemos que esperar unas horas más todavia?
El parche para pasar de la rom beta a la final ocupa casi 900kb, así que han tocado bastantes cosas de la rom por no decir todo. Aunque a decir verdad sólo veo diferencias gráficas, a priori jugablemente es idéntica a la beta.
Lo bueno es que sigue ocupando 8mbit y no 16mbit como (al menos yo) esperaba y la repro con el Stunt Race funciona perfectamente.
Lo malo es que esto no es la rom final ni de coña ya que siguen faltando cosas como el multijugador... diría que le han hecho un buen lavado de cara para la ocasión y punto. Eso o que con la beta aspiraban a demasiado.
https://www.youtube.com/watch?v=Tz8FixIKnq4
lito69 escribió:Joer, por lo que veo las roms no son ntsc o al menos esta no lo es.
josete2k escribió:lito69 escribió:Joer, por lo que veo las roms no son ntsc o al menos esta no lo es.
Sí, la rom es ntsc... La que lleva la snes mini y está dumpeada.
La de este hilo es una modificada a pal.
Troopa Jr escribió:@tanaka69
pon una foto de la placa abierta, posiblemente te haya modificado el cic
igual puedes instalar un cic universal en el cartucho
import os, sys, tkFileDialog,Tkinter
root = Tkinter.Tk()
root.withdraw()
formats = [ ('Roms Super Nintendo SMC','.smc'),('Roms Super Nintendo SFC','.sfc'),('Fichier Bin','.bin'),('Roms Super Nintendo','.smc .sfc .bin') ]
print "Swap HIrom to Lo rom, please select file"
print "This can take a while, please wait untill this windows closes itself."
input = tkFileDialog.askopenfile(parent=root,mode='rb',filetypes=formats,title='Select HIrom file to swap to LOrom')
if not input:
print "Error: cannot open file"
sys.exit()
output = tkFileDialog.asksaveasfile(parent=root,mode='wb',filetypes=formats,title='Create output file')
if not output:
print "Error: cannot create output file"
sys.exit()
# reading input file to a byte array
data = bytearray(input.read())
# calculating rom size in 2 exponants
expsize = 0
bytesize = len(data)
while bytesize > 1:
expsize += 1
bytesize = bytesize // 2
# init a proper size empty bytearray
buffer = bytearray()
for i in range(2**expsize): buffer.append(0)
# let's do the swap
count = 0
for i in range(len(data)):
addr = (i & 0x7fff) + ((i & 0x008000) << (expsize - 16)) + ((i & 0x010000) >> 1) + ((i & 0x020000) >> 1) + ((i & 0x040000) >> 1) + ((i & 0x080000) >> 1) + ((i & 0x100000) >> 1) + ((i & 0x200000) >> 1)
if addr != i: count += 1
buffer[addr] = data[i]
print "Swapped %s (%s) addresses" % (count, hex(count))
# writing output file
output.write(buffer)
# close file handles
input.close()
output.close()
CoLvIN escribió:@tanaka69 Podría ser que el que te vendía las repros, para no liarse en dar explicaciones o explicaciones que el considerase que no tenia que darte, retirase el Cic/SuperCic del cartucho y al tener tu SuperCic en la consola, creo que funciona sin problemas, o eso se me hizo leer en este Hilo bastante atrás, que una consola con superCic lee cartuchos sin Cic.
Esa podría ser la explicación de porque a ti si y a tus colegas no.
Otra cosa en frío sin ver fotos no se me ocurre
Saludos
lito69 escribió:jomjom escribió:Pues muchas gracias por contestar, a ver si en estos días la pido y de paso hago fotos del proceso para compartirlo por aquí
viewtopic.php?p=1743629012
Richesco1 escribió:
EDIT 2: Ahora me da cuelgues aleatorios, la música sigue pero se bloquea en ventanas de texto de diferentes momentos. Supongo que tendré que repasar las conexiones. ¿A alguien la ha pasado algo así?
Richesco1 escribió:Hola a todos. Despues de hacer repros sencillas siguiendo el tutorial con las 27c801 ahora he intentado con memorias 29F016B y me está dando problemas una repro de chrono trigger en español.
Estoy utilizando dos 29F016B en un Chrono Japones BJ3M-20. He bajado la rom con el CRC correcto, la parcheo, la pruebo en el emulador y todo correcto. Divido el archivo de 4096kB en dos partes con la opción split 2048 KB del SNES ROM UTILITY (no hago bankswap ya que es una 29F016B) y me da dos archivos .sfc.
Lo grabo en el TL866 con el adaptador TSOP40A, como tengo unas de 48 patillas levanto las 8 patas NC de arriba y abajo. Monto las dos flash en adaptadores tipo III.1 con la posición correcta y vigilando no hacer puentes. El resultado la mayoría de las veces es pantalla en negro, una sola vez he conseguido que aparezca el péndulo y se ha colgado al instante.
He comprobado continuidades y, de lo que he podido seguir, daba bien. Dejo fotos por si me podéis decir si me equivoco en algo...
https://imgur.com/tVdfUiN
https://imgur.com/CScG3mL
Esta placa tiene el MAD preparado para ver 16mb de cada memoria, que es lo que estoy haciendo. No se que puede estar mal.
He leído el tema de realizar los dos puentes en la placa tipo III, yo no lo he hecho porque, según he entendido, solo se usa para grabar si no tienes el adaptador TSOP40A de 8 bits. Igualmente, probé con los puentes y tampoco.
Muchas gracias.
EDIT: Ya lo he solucionado. He ido a por papel de lija y he limado los conectores, ya funciona
EDIT 2: Ahora me da cuelgues aleatorios, la música sigue pero se bloquea en ventanas de texto de diferentes momentos. Supongo que tendré que repasar las conexiones. ¿A alguien la ha pasado algo así?
scali escribió:Hola a todos!!!
Gracias a este hilo he podido hacer repros simples ciertamente. Ya he pedido material para dar el siguiente paso.
Mientras quiero aclarar una duda, espero me puedan ayudar.
Quiero hacer una repro de Metal Warriors utilizando la PCB la SHVC-1A0N-30 (la misma que utiliza el juego), entiendo que debo usar 02 EPROMS 27C801.
Esta PCB tiene 36 agujeros luego de retirar la MASK ROM, las dos EPROM ocuparan 32 agujeros. Sobra A20, A21, +5V y A22, que entiendo tambien se utilizan cuando la ROM es de mas de 8 Mbits (16Mbits para mi caso).
La pregunta es ¿Donde se conectarían tales?
Es obvio que si cambio la PCB a una SHVC-2A0N-20 el tema es mas simple; pero la pregunta es, se puede con la 1A0N-30?
Edito: No existe SHVC-2A0N-20, pero si SHVC-2A0N-01/10/11.
Saludos
lito69 escribió:Me duele hasta a mi, usa una goma de borrar mejor, la lija puede joder alguna pista por suave que le des y volverte loco.
juanmiglesias escribió:hola!, Alguien ya ha probado la recien salida traduccion del juego Tengai Makyou Zero, ya confirmado que puede correr en hardware original.
juanmiglesias escribió:hola!, Alguien ya ha probado la recien salida traduccion del juego Tengai Makyou Zero, ya confirmado que puede correr en hardware original.
scali escribió:Magno comentó que las PCB 1A3M no eran iguales en sus revisiones (01 pistas rutadas a 4 megas, la 02 y la 10 hasta 16 megas y la 20/30 hasta 32 megas), alguien me da una pista de como llegó a esa conclusión???
juanmiglesias escribió:@FFantasy6 pero no ha salido informacion de exactamente como particionar las roms o si?
scali escribió:Pero nos han dado muchas pistas, hasta el nombre del programa que utilizan (WINHEX)
1RX escribió:Revisando mi lab, actualizo info del script de python para hacer swap del pinout de un rom HI a un pinout LO
La version de python que uso es la 2.7.11
Este es el escript que yo uso actualmente y he probado que funciona con una rom de 4 MB y saves de 64Kb utilizando una board 1A3M:import os, sys, tkFileDialog,Tkinter
root = Tkinter.Tk()
root.withdraw()
formats = [ ('Roms Super Nintendo SMC','.smc'),('Roms Super Nintendo SFC','.sfc'),('Fichier Bin','.bin'),('Roms Super Nintendo','.smc .sfc .bin') ]
print "Swap HIrom to Lo rom, please select file"
print "This can take a while, please wait untill this windows closes itself."
input = tkFileDialog.askopenfile(parent=root,mode='rb',filetypes=formats,title='Select HIrom file to swap to LOrom')
if not input:
print "Error: cannot open file"
sys.exit()
output = tkFileDialog.asksaveasfile(parent=root,mode='wb',filetypes=formats,title='Create output file')
if not output:
print "Error: cannot create output file"
sys.exit()
# reading input file to a byte array
data = bytearray(input.read())
# calculating rom size in 2 exponants
expsize = 0
bytesize = len(data)
while bytesize > 1:
expsize += 1
bytesize = bytesize // 2
# init a proper size empty bytearray
buffer = bytearray()
for i in range(2**expsize): buffer.append(0)
# let's do the swap
count = 0
for i in range(len(data)):
addr = (i & 0x7fff) + ((i & 0x008000) << (expsize - 16)) + ((i & 0x010000) >> 1) + ((i & 0x020000) >> 1) + ((i & 0x040000) >> 1) + ((i & 0x080000) >> 1) + ((i & 0x100000) >> 1) + ((i & 0x200000) >> 1)
if addr != i: count += 1
buffer[addr] = data[i]
print "Swapped %s (%s) addresses" % (count, hex(count))
# writing output file
output.write(buffer)
# close file handles
input.close()
output.close()
VySe escribió:Llevo un tiempo pensandolo y creo que me voy a poner ya con el tema del hilo. Me interesa empezar con las reproducciones de Snes y me gustaría que me recomendarais algun programador en especial que vendan y que sea adecuado. He visto Willems por Wallapop desde 25€ hasta los 150€, y no se si fiarme o tirar de amazon o ebay.
Por el tema de electronica, soldaduras y tal no me preocupa ya que estuve unos cuantos años metido en eso, aunque si que grabé y borré memorias en su día.
Un saludo y gracias.
CoLvIN escribió:VySe escribió:Llevo un tiempo pensandolo y creo que me voy a poner ya con el tema del hilo. Me interesa empezar con las reproducciones de Snes y me gustaría que me recomendarais algun programador en especial que vendan y que sea adecuado. He visto Willems por Wallapop desde 25€ hasta los 150€, y no se si fiarme o tirar de amazon o ebay.
Por el tema de electronica, soldaduras y tal no me preocupa ya que estuve unos cuantos años metido en eso, aunque si que grabé y borré memorias en su día.
Un saludo y gracias.
Te recomendaría leerte un poco el hilo, no solo la primera pagina.
En el transcurso de este hilo se ha preguntado muchas veces sobre programador recomendado.
Aun así te voy a dar mi opinión.
Los willem son quizás un poco mas profesionales, por la compatibilidad que llegan a tener con las memorias.
Los MiniPro son por usb baratos y con mucha compatibilidad, solo que alguna memoria mas concreta no te la va a coger, pero sin complicaciones el MiniPro es el mas adecuado para comenzar o incluso para no cambiarlo.
Ahora bien si te quieres gastar 150€ en un programador porque te coges el total de las posibles memorias para snes, es un poco a decisión tuya, pero pocos juegos usan memorias "especiales" y lo pongo entre comillas, como para que te valga la pena el desembolso para 4 memoria concretas, siendo el resto de juegos otro tipo de memorias.
Las memorias esas mas concretas siempre las puedes pedir programadas ya y que solo sea soldar.
Así que por comodidad cógete un Minipro que son usb y muy simples de usar.
Saludos
Richesco1 escribió:Despues de malgastar muchas memorias 29F016B no conseguí que un Chrono Trigger que funcionará sin cuelgues (comentado un par de páginas atras).
Al final he conseguido que funcione con 4 27C801 apiladas. Para aportar mi granito de arena dejo fotos y algun comentario:
https://imgur.com/a/vUXDW
https://imgur.com/a/NW83S
La placa es una 2J3m20. Los cables negros son las OE que van a las patas 4-5-6-7 del HC139 y uno con la conexión a 5V. Los azules de la parte frontal son la conexión a A20 y A21 (esta placa es de 32 pines y hay que buscar estos puntos) y el de atrás es el ground. Los rojos son la corrección que siempre hay que hacer en las 27C801 y la conexión al mad del HC139.
He tenido que rebajar un poco la rebaba interior el cartucho para que pudiera cerrar
Gracias a todos por vuestros aportes. Ha requerido leer mucho para entender todo y me doy cuenta que he aprendido mucho y que me queda mucho por aprender.