Ayuda para convertir el Castlevania Spectral Interlude a DSK

Moderador: Fundadores

Responder
Avatar de Usuario
Hynreck
El infierno es su lugar
El infierno es su lugar
Mensajes: 162
Registrado: 03 Jul 2014, 11:56
Has thanked: 24 times
Been thanked: 34 times

Ayuda para convertir el Castlevania Spectral Interlude a DSK

Mensaje por Hynreck »

Buenas compañeros!!
Pues de eso se trata, en mi afán por conseguir tener casi todo en formato DSK, un amigo y yo nos hemos propuesto tener este juego en formato disco para el Spectrum +3... Lógicamente no es una tarea fácil, y lo único que he conseguido es una carga de snapshot con la aplicación Z80 Loader +3 de djr... Funciona muy bien, pero no queda "bonito"...
http://www.mediafire.com/file/c3ze451b2 ... erlude.rar

Hemos contactado con su autor Mikhail Sudakov (SaNchez) para ver si él podía hacer una versión limpia del juego, pero parece que anda muy ocupado ahora con la publicación de su nuevo juego... Eso sí, nos ha facilitado el Source Code y está entusiasmado con la ide de que podamos hacer una versión DSK...

Yo no tengo conocimentos de Código Máquina, así que he experimentado con muchas cosas sin éxito, por eso os pido vuestra ayuda...

He conseguido adaptar la versión en TRD al castellano cambiando los ficheros "introtxt" y "messages" por su equivalente en castellano de la versión de cinta, así que aquí tenemos una versión del juego en TRD en español...
http://www.mediafire.com/file/9u7yydnhy ... 3%B1ol.rar

Después he copiado los ficheros a una imagen DSK para poder trastear con ellos en un +3 real o emulado...
http://www.mediafire.com/file/sxcc9q10i ... 1ol%29.rar

Supongo que habría que adaptar o modificar el loader para que cargue desde +3DOS
Última edición por Hynreck el 30 Oct 2017, 21:34, editado 1 vez en total.
Avatar de Usuario
Onlyfordj
Demonio segundo orden
Demonio segundo orden
Mensajes: 1023
Registrado: 30 Dic 2016, 09:28
Ubicación: Valencia
Has thanked: 58 times
Been thanked: 27 times

Re: Ayuda para convertir el Castlevania Spectral Interlude a DSK

Mensaje por Onlyfordj »

Viajando por la red encontré esto.
El juego está en formato dsk para Spectrum.
A ver si puedes aprovechar algo.

https://mega.nz/#!nE1GSJCS!FGt0wJ-0t6_f ... RMhMDIGOOE
Avatar de Usuario
Hynreck
El infierno es su lugar
El infierno es su lugar
Mensajes: 162
Registrado: 03 Jul 2014, 11:56
Has thanked: 24 times
Been thanked: 34 times

Re: Ayuda para convertir el Castlevania Spectral Interlude a DSK

Mensaje por Hynreck »

Gracias Onlyfordj... Pero este dsk es como el primero que he compartido en mi comentario, es la carga de un snapshot, con la consecuente "suciedad" en pantalla... Este en particular parece hecho con algun tipo de Transfer como el Ramjet +3

Lo que estamos buscando es una carga limpia, con su pantalla de presentación y sin corromper la pantalla... Pero gracias por el dato ;)
Avatar de Usuario
tacha Uruguay
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 3139
Registrado: 04 Abr 2013, 20:22
Ubicación: Montevideo, Uruguay
Has thanked: 44 times
Been thanked: 30 times
Contactar:

Re: Ayuda para convertir el Castlevania Spectral Interlude a DSK

Mensaje por tacha »

Hynreck escribió: 30 Oct 2017, 21:34 Buenas compañeros!!
Pues de eso se trata, en mi afán por conseguir tener casi todo en formato DSK, un amigo y yo nos hemos propuesto tener este juego en formato disco para el Spectrum +3... Lógicamente no es una tarea fácil, y lo único que he conseguido es una carga de snapshot con la aplicación Z80 Loader +3 de djr... Funciona muy bien, pero no queda "bonito"...
http://www.mediafire.com/file/c3ze451b2 ... erlude.rar

Hemos contactado con su autor Mikhail Sudakov (SaNchez) para ver si él podía hacer una versión limpia del juego, pero parece que anda muy ocupado ahora con la publicación de su nuevo juego... Eso sí, nos ha facilitado el Source Code y está entusiasmado con la ide de que podamos hacer una versión DSK...

Yo no tengo conocimentos de Código Máquina, así que he experimentado con muchas cosas sin éxito, por eso os pido vuestra ayuda...

He conseguido adaptar la versión en TRD al castellano cambiando los ficheros "introtxt" y "messages" por su equivalente en castellano de la versión de cinta, así que aquí tenemos una versión del juego en TRD en español...
http://www.mediafire.com/file/9u7yydnhy ... 3%B1ol.rar

Después he copiado los ficheros a una imagen DSK para poder trastear con ellos en un +3 real o emulado...
http://www.mediafire.com/file/sxcc9q10i ... 1ol%29.rar

Supongo que habría que adaptar o modificar el loader para que cargue desde +3DOS, así que por si acaso, aquí dejo el Source Code completo...
http://www.mediafire.com/file/xr22axua2 ... E_CODE.rar
A mi me ha pasado algo parecido con el "The Sword Of Ianna", que aunque funcionaba en diskete no podía cargarlo en el IDE 8 BIT con el +3, me hab´ía analizado el código del Loader con mis conocimientos de asm un poco pobres, pero al fin lo conseguí.

Éste juego que mencionas... también contacté con los creadores en el momento en que salió (tal vez un par de semanas después) para felicitarlos por la realización y también para pedirles un Loader sin ASM para poder pasarlo a la CF, también me dijeron que no tenían idea...

Vamos, es un juego muy bueno, pero cagarlo desde WAV y esperar unos 10 minutos o más de carga es una put@da.

Hagamos una cosa, me pongo en campaña hoy mismo para intentar pasarlo a diskete.

B-)
66 6C 6F 70 70 69 6E 67 20 6D 61 73 63 61 20 50 30 6C 6C 34 / 6D 61 73 20 63 6F 74 69 6C 6C 61 20 73 65 72 E1 73 20 74 75 20 49 7A 61 72 6F 20 3A 70
Avatar de Usuario
tacha Uruguay
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 3139
Registrado: 04 Abr 2013, 20:22
Ubicación: Montevideo, Uruguay
Has thanked: 44 times
Been thanked: 30 times
Contactar:

Re: Ayuda para convertir el Castlevania Spectral Interlude a DSK

Mensaje por tacha »

Advertencia: no sé mucho hacerca de nada, pero las ganas de hacer las cosas me llevan a aprender y lograr mis objetivos. "si se puede"

Lo peor que pueda pasar es que, luego de logrado un cargador desde diskete teniendo todos los archivos en él, pueda haber un conflicto con la pagina 7, en la cual (creo) que se pagina parte del OS de manejo de discos (disketes y/o IDE), ya me pasó con "Maritrini Freelance Monster Slayer" hace 2 veranos, cuando logré tener todos mis archivos en la CF todo precioso y al intentar el juego se me petaba. Segun Anjuel ya le habían comentado algo de ello, aún estoy por querer tener mi Maritrini en la CF.

Como ahora tuve un rato me puse en ello, tal vez a mi me lleve unos días lograr esto. Lo veo un poco complicado pero se puede.

Bueno, empezamos con el cargador BASIC tras hacer un MERGE "" :

Código: Seleccionar todo

10 LOAD "" CODE 24576
20 RANDOMIZE USE 24576
tenemos un

Bytes: loader CODE 24576, 6750

(aqui el primer trozo de código importante)

Código: Seleccionar todo

	ld sp, 49151		 ; 24576
	di			 ; 24579
	res 4, (iy+1)		 ; 24580
	xor a			 ; 24584
	out (254), a		 ; 24585
	ld a, 31		 ; 24587
	ld bc, 32765		 ; 24589
	out (c), a		 ; 24592
	ld hl, 25472		 ; 24594
	ld de, 49152		 ; 24597
	call 24628		 ; 24600
	ld hl, 24738		 ; 24603
	ld de, 16384		 ; 24606
	ld bc, 433		 ; 24609
	ldir			 ; 24612
	ld hl, 25171		 ; 24614
	ld de, 22528		 ; 24617
	ld bc, 301		 ; 24620
	ldir			 ; 24623
	jp 16384		 ; 24625
Así, viendolo por arribita, en él tenemos la pantalla de presentación comprimida, código de descompresión de la misma. ésta es pasada a la página 5 (no estoy seguro que sea la 5) y activada (shadow screen se le dice a esto?)

A partir de la dirección 24603 se puede ver como copia dos pequeños trozos de código, el primero desde la dirección 24738 a la 16384, la cantidad de 433 bytes, el segundo copia desde la dirección 25171 a la 22528 la cantidad de 301 bytes. Luego de ésto hace un salto hacia la dirección 16384, donde se encuentra "parte" del cargador de todos los bloques desde cinta.

El código a partir de 16384 es:

Código: Seleccionar todo

	ld hl, 24576		 ; 16384
	ld de, l16747		 ; 16387
	call 16785		 ; 16390
	ld a, 64		 ; 16393
	ld (44102), a		 ; 16395
	call 38703		 ; 16398
	ld hl, 47616		 ; 16401
	ld de, l16749		 ; 16404
	call 16785		 ; 16407
	xor a			 ; 16410
	call l16805		 ; 16411
	ld hl, 49152		 ; 16414
	ld de, l16751		 ; 16417
	call 16785		 ; 16420
	ld hl, 57344		 ; 16423
	ld de, l16753		 ; 16426
	call 16785		 ; 16429
	ld hl, 64512		 ; 16432
	ld de, l16755		 ; 16435
	call 16785		 ; 16438
	ld a, 1			 ; 16441
	call l16805		 ; 16443
	ld hl, 49152		 ; 16446
	ld de, l16757		 ; 16449
	call 16785		 ; 16452
	ld hl, 62960		 ; 16455
	ld de, l16759		 ; 16458
	call 16785		 ; 16461
	ld a, 3			 ; 16464
	call l16805		 ; 16466
	ld hl, 49152		 ; 16469
	ld de, l16761		 ; 16472
	call 16785		 ; 16475
	ld hl, 54272		 ; 16478
	ld de, l16763		 ; 16481
	call 16785		 ; 16484
	ld hl, 60928		 ; 16487
	ld de, l16765		 ; 16490
	call 16785		 ; 16493
	ld hl, 61440		 ; 16496
	ld de, l16767		 ; 16499
	call 16785		 ; 16502
	ld hl, 63744		 ; 16505
	ld de, l16769		 ; 16508
	call 16785		 ; 16511
	ld a, 4			 ; 16514
	call l16805		 ; 16516
	ld hl, 49152		 ; 16519
	ld de, l16771		 ; 16522
	call 16785		 ; 16525
	ld hl, 52480		 ; 16528
	ld de, l16773		 ; 16531
	call 16785		 ; 16534
	ld hl, 61440		 ; 16537
	ld de, 16775		 ; 16540
	call 16785		 ; 16543
	ld a, 6			 ; 16546
	call l16805		 ; 16548
	ld hl, 49152		 ; 16551
	ld de, 16777		 ; 16554
	call 16785		 ; 16557
	ld hl, 62720		 ; 16560
	ld de, l16779		 ; 16563
	call 16785		 ; 16566
	ld a, 7			 ; 16569
	call l16805		 ; 16571
	ld hl, 60194		 ; 16574
	ld de, l16781		 ; 16577
	call 16785		 ; 16580
	ld hl, 56064		 ; 16583
	ld de, l16783		 ; 16586
	call 16785		 ; 16589
	xor a			 ; 16592
	out (254), a		 ; 16593
	ld bc, 2560		 ; 16595
	ld d, c			 ; 16598
l_40d7: in a, (31)		 ; 16599
	and 31			 ; 16601
	or d			 ; 16603
	ld d, a			 ; 16604
	dec bc			 ; 16605
	ld a, b			 ; 16606
	or c			 ; 16607
	jr nz, l_40d7		 ; 16608
	ld a, d			 ; 16610
	or a			 ; 16611
	ld a, 255		 ; 16612
	jr z, l_40e9		 ; 16614
	xor a			 ; 16616
l_40e9: ld (38478), a		 ; 16617
	ei			 ; 16620
	halt			 ; 16621
	call 44056		 ; 16622
	ld hl, 49152		 ; 16625
	ld de, 49153		 ; 16628
	ld bc, 6144		 ; 16631
	ld (hl), 0		 ; 16634
	ldir			 ; 16636
	ld bc, 767		 ; 16638
	ld (hl), 71		 ; 16641
	ldir			 ; 16643
	ld a, 64		 ; 16645
	ld (44102), a		 ; 16647
	ld hl, 12		 ; 16650
	call 43931		 ; 16653
	set 7, h		 ; 16656
	ld de, l16704		 ; 16658
	call 42835		 ; 16661
	ld a, l			 ; 16664
	add a, 32		 ; 16665
	ld l, a			 ; 16667
	call 42835		 ; 16668
l_411f: ei			 ; 16671
	halt			 ; 16672
	xor a			 ; 16673
	in a, (254)		 ; 16674
	cpl			 ; 16676
	and 31			 ; 16677
	jr nz, l_412e		 ; 16679
	call 47046		 ; 16681
	jr z, l_411f		 ; 16684
l_412e: di			 ; 16686
	im 2			 ; 16687
	ei			 ; 16689
	ld a, 4			 ; 16690
	call l16805		 ; 16692
	call 44412		 ; 16695
	jp 22528		 ; 16698
	ld hl, (4)		 ; 16701
l_4140: jr nz, l_4162		 ; 16704
	jr nz, l_4194		 ; 16706
	ld b, c			 ; 16708
	ld d, d			 ; 16709
	ld b, c			 ; 16710
	jr nz, l_4195		 ; 16711
	ld b, c			 ; 16713
	jr nz, l_418f		 ; 16714
	ld c, c			 ; 16716
	ld c, (hl)		 ; 16717
	ld d, h			 ; 16718
	ld b, c			 ; 16719
	jr nz, 16811		 ; 16720
	jr nz, l_41a4		 ; 16722
	ld d, l			 ; 16724
	ld c, h			 ; 16725
	ld d, e			 ; 16726
	ld b, c			 ; 16727
	jr nz, l_419d		 ; 16728
	ld d, l			 ; 16730
	ld b, c			 ; 16731
	ld c, h			 ; 16732
	ld d, c			 ; 16733
	ld d, l			 ; 16734
	ld c, c			 ; 16735
	ld b, l			 ; 16736
	ld d, d			 ; 16737
l_4162: jr nz, 16824		 ; 16738
	ld b, l			 ; 16740
	ld b, e			 ; 16741
	ld c, h			 ; 16742
	ld b, c			 ; 16743
	nop			 ; 16744
	nop			 ; 16745
	nop			 ; 16746
l_416b: ex de, hl		 ; 16747
	ld d, a			 ; 16748
l_416d: djnz l_4174		 ; 16749
l_416f: or d			 ; 16751
	rra			 ; 16752
l_4171: adc a, (hl)		 ; 16753
	dec de			 ; 16754
l_4173: ld a, l			 ; 16755
l_4174: inc bc			 ; 16756
l_4175: pop bc			 ; 16757
	inc (hl)		 ; 16758
l_4177: ld (hl), 9		 ; 16759
l_4179: rst 8			 ; 16761
	inc de			 ; 16762
l_417b: ret			 ; 16763
	add hl, de		 ; 16764
l_417d: rlc c			 ; 16765
l_417f: nop			 ; 16767
	add hl, bc		 ; 16768
l_4181: cp 5			 ; 16769
l_4183: ld (hl), d		 ; 16771
	ld a, (bc)		 ; 16772
l_4185: ld (55586), hl		 ; 16773
	ld c, 4			 ; 16776
	inc sp			 ; 16778
l_418b: defb 221		 ; 16779
	ld a, (bc)		 ; 16780
l_418d: sbc a, 20		 ; 16781
l_418f: ld a, c			 ; 16783
	ld bc, 56805		 ; 16784
	pop hl			 ; 16787
l_4194: ex de, hl		 ; 16788
l_4195: ld e, (hl)		 ; 16789
	inc hl			 ; 16790
	ld d, (hl)		 ; 16791
	ld a, 255		 ; 16792
	scf			 ; 16794
	inc d			 ; 16795
	ex af, af'		 ; 16796
l_419d: dec d			 ; 16797
	call 1378		 ; 16798
	xor a			 ; 16801
	out (254), a		 ; 16802
l_41a4: ret			 ; 16804
l_41a5: push af			 ; 16805
	push bc			 ; 16806
	or 24			 ; 16807
	ld bc, 32765		 ; 16809
	out (c), a		 ; 16812
	pop bc			 ; 16814
	pop af			 ; 16815
	ret			 ; 1681

Tras hacer breakpoints luego de cada CALL del código anterior, pude constatar de que ellos hacen llamadas a las rutinas de carga de cada uno de los bloques de los archivos en cinta (audio).
Quiero analizar que hay detrás de cada llamada para constatar y tener conciencia plena de "que es lo que hace cada cosa"




El código desde la dir 22528 de 301 bytes queda en assembler así:

Código: Seleccionar todo

	ld a, 64		 ; 22528
	ld (44102), a		 ; 22530
	ld a, 7			 ; 22533
	call 44070		 ; 22535
	call 44056		 ; 22538
	call l22794		 ; 22541
	ld hl, 3340		 ; 22544
	call 43931		 ; 22547
	set 7, h		 ; 22550
	ld de, l22751		 ; 22552
	call 42835		 ; 22555
	ld b, 250		 ; 22558
	call l22815		 ; 22560
	call l22794		 ; 22563
	ld hl, 3340		 ; 22566
	call 43931		 ; 22569
	set 7, h		 ; 22572
	ld de, l22759		 ; 22574
	call 42835		 ; 22577
	ld b, 250		 ; 22580
	call l22815		 ; 22582
	call l22794		 ; 22585
	ei			 ; 22588
	halt			 ; 22589
	xor a			 ; 22590
	ld (44309), a		 ; 22591
l_5842: ld a, (44309)		 ; 22594
	cp 95			 ; 22597
	jr c, l_584b		 ; 22599
	ld a, 95		 ; 22601
l_584b: ld h, a			 ; 22603
	ld l, 5			 ; 22604
	call l22767		 ; 22606
	ld a, b			 ; 22609
	add a, a		 ; 22610
	ld hl, l22711		 ; 22611
	add a, l		 ; 22614
	ld l, a			 ; 22615
	ld a, h			 ; 22616
	adc a, 0		 ; 22617
	ld h, a			 ; 22619
	ld de, 49152		 ; 22620
	ld a, (hl)		 ; 22623
	cp 7			 ; 22624
	jr nz, l_586c		 ; 22626
	call 44070		 ; 22628
	ld hl, 56064		 ; 22631
	jr l_587f		 ; 22634
l_586c: call 44070		 ; 22636
	inc hl			 ; 22639
	ld a, (hl)		 ; 22640
	add a, a		 ; 22641
	ld h, d			 ; 22642
	ld l, e			 ; 22643
	add a, l		 ; 22644
	ld l, a			 ; 22645
	ld a, h			 ; 22646
	adc a, 0		 ; 22647
	ld h, a			 ; 22649
	ld a, (hl)		 ; 22650
	inc hl			 ; 22651
	ld h, (hl)		 ; 22652
	ld l, a			 ; 22653
	add hl, de		 ; 22654
l_587f: ld de, 16384		 ; 22655
	call 46768		 ; 22658
	ld b, 1			 ; 22661
	call l22815		 ; 22663
	ld a, 7			 ; 22666
	call 44070		 ; 22668
	ld hl, 16384		 ; 22671
	ld de, 49152		 ; 22674
	ld bc, 6144		 ; 22677
	ldir			 ; 22680
	ld a, (44309)		 ; 22682
	cp 95			 ; 22685
	jr c, l_5842		 ; 22687
l_58a1: ei			 ; 22689
	halt			 ; 22690
	ld a, (44309)		 ; 22691
	cp 250			 ; 22694
	jr c, l_58a1		 ; 22696
	ld b, 250		 ; 22698
	call l22815		 ; 22700
	ld b, 15		 ; 22703
	call l22815		 ; 22705
	jp 24576		 ; 22708
l_58b7: nop			 ; 22711
	nop			 ; 22712
	nop			 ; 22713
	ld bc, 512		 ; 22714
	nop			 ; 22717
	inc bc			 ; 22718
	nop			 ; 22719
	inc b			 ; 22720
	inc bc			 ; 22721
	nop			 ; 22722
	inc bc			 ; 22723
	ld bc, 515		 ; 22724
	inc bc			 ; 22727
	inc bc			 ; 22728
	inc bc			 ; 22729
	inc b			 ; 22730
	inc bc			 ; 22731
	dec b			 ; 22732
	inc bc			 ; 22733
	ld b, 0			 ; 22734
	dec b			 ; 22736
	nop			 ; 22737
	ld b, 0			 ; 22738
	rlca			 ; 22740
	nop			 ; 22741
	ex af, af'		 ; 22742
	nop			 ; 22743
	add hl, bc		 ; 22744
	nop			 ; 22745
	ld a, (bc)		 ; 22746
	rlca			 ; 22747
	nop			 ; 22748
	rlca			 ; 22749
	nop			 ; 22750
l_58df: jr nz, l_5901		 ; 22751
	ld (12592), a		 ; 22753
	dec (hl)		 ; 22756
	jr nz, l_58e7		 ; 22757
l_58e7: ld b, a			 ; 22759
	ld b, c			 ; 22760
	ld c, l			 ; 22761
	ld b, l			 ; 22762
	jr nz, 22831		 ; 22763
	ld e, c			 ; 22765
	nop			 ; 22766
l_58ef: push af			 ; 22767
	push de			 ; 22768
	push hl			 ; 22769
	ld bc, 2048		 ; 22770
	ld d, 0			 ; 22773
l_58f7: rl h			 ; 22775
	ld a, c			 ; 22777
	rla			 ; 22778
	sub l			 ; 22779
	jr nc, l_58ff		 ; 22780
	add a, l		 ; 22782
l_58ff: ld c, a			 ; 22783
	ccf			 ; 22784
l_5901: rl d			 ; 22785
	djnz l_58f7		 ; 22787
	ld b, d			 ; 22789
	pop hl			 ; 22790
	pop de			 ; 22791
	pop af			 ; 22792
	ret			 ; 22793
l_590a: ld hl, 49152		 ; 22794
	ld de, 49153		 ; 22797
	ld bc, 6144		 ; 22800
	ld (hl), 0		 ; 22803
	ldir			 ; 22805
	ld bc, 767		 ; 22807
	ld (hl), 71		 ; 22810
	ldir			 ; 22812
	ret			 ; 22814
l_591f: ei			 ; 22815
	halt			 ; 22816
	call 47056		 ; 22817
	jr z, l_592a		 ; 22820
	pop bc			 ; 22822
	jp 24657		 ; 22823
l_592a: djnz l_591f		 ; 22826
	ret			 ; 22828
Si alguien más se quiere meter bienvenido sea. Por lo pronto lo voy a dejar por aqui para seguir mañana analizando y haciendo pruebas. Seguro que en pocos días lo tenemos.
66 6C 6F 70 70 69 6E 67 20 6D 61 73 63 61 20 50 30 6C 6C 34 / 6D 61 73 20 63 6F 74 69 6C 6C 61 20 73 65 72 E1 73 20 74 75 20 49 7A 61 72 6F 20 3A 70
Avatar de Usuario
Hynreck
El infierno es su lugar
El infierno es su lugar
Mensajes: 162
Registrado: 03 Jul 2014, 11:56
Has thanked: 24 times
Been thanked: 34 times

Re: Ayuda para convertir el Castlevania Spectral Interlude a DSK

Mensaje por Hynreck »

tacha escribió:Advertencia: no sé mucho hacerca de nada, pero las ganas de hacer las cosas me llevan a aprender y lograr mis objetivos. "si se puede"

Lo peor que pueda pasar es que, luego de logrado un cargador desde diskete teniendo todos los archivos en él, pueda haber un conflicto con la pagina 7, en la cual (creo) que se pagina parte del OS de manejo de discos (disketes y/o IDE), ya me pasó con "Maritrini Freelance Monster Slayer" hace 2 veranos, cuando logré tener todos mis archivos en la CF todo precioso y al intentar el juego se me petaba. Segun Anjuel ya le habían comentado algo de ello, aún estoy por querer tener mi Maritrini en la CF.

Como ahora tuve un rato me puse en ello, tal vez a mi me lleve unos días lograr esto. Lo veo un poco complicado pero se puede.

Bueno, empezamos con el cargador BASIC tras hacer un MERGE "" :

Código: Seleccionar todo

10 LOAD "" CODE 24576
20 RANDOMIZE USE 24576
tenemos un

Bytes: loader CODE 24576, 6750

(aqui el primer trozo de código importante)

Código: Seleccionar todo

	ld sp, 49151		 ; 24576
	di			 ; 24579
	res 4, (iy+1)		 ; 24580
	xor a			 ; 24584
	out (254), a		 ; 24585
	ld a, 31		 ; 24587
	ld bc, 32765		 ; 24589
	out (c), a		 ; 24592
	ld hl, 25472		 ; 24594
	ld de, 49152		 ; 24597
	call 24628		 ; 24600
	ld hl, 24738		 ; 24603
	ld de, 16384		 ; 24606
	ld bc, 433		 ; 24609
	ldir			 ; 24612
	ld hl, 25171		 ; 24614
	ld de, 22528		 ; 24617
	ld bc, 301		 ; 24620
	ldir			 ; 24623
	jp 16384		 ; 24625
Así, viendolo por arribita, en él tenemos la pantalla de presentación comprimida, código de descompresión de la misma. ésta es pasada a la página 5 (no estoy seguro que sea la 5) y activada (shadow screen se le dice a esto?)

A partir de la dirección 24603 se puede ver como copia dos pequeños trozos de código, el primero desde la dirección 24738 a la 16384, la cantidad de 433 bytes, el segundo copia desde la dirección 25171 a la 22528 la cantidad de 301 bytes. Luego de ésto hace un salto hacia la dirección 16384, donde se encuentra "parte" del cargador de todos los bloques desde cinta.

El código a partir de 16384 es:

Código: Seleccionar todo

	ld hl, 24576		 ; 16384
	ld de, l16747		 ; 16387
	call 16785		 ; 16390
	ld a, 64		 ; 16393
	ld (44102), a		 ; 16395
	call 38703		 ; 16398
	ld hl, 47616		 ; 16401
	ld de, l16749		 ; 16404
	call 16785		 ; 16407
	xor a			 ; 16410
	call l16805		 ; 16411
	ld hl, 49152		 ; 16414
	ld de, l16751		 ; 16417
	call 16785		 ; 16420
	ld hl, 57344		 ; 16423
	ld de, l16753		 ; 16426
	call 16785		 ; 16429
	ld hl, 64512		 ; 16432
	ld de, l16755		 ; 16435
	call 16785		 ; 16438
	ld a, 1			 ; 16441
	call l16805		 ; 16443
	ld hl, 49152		 ; 16446
	ld de, l16757		 ; 16449
	call 16785		 ; 16452
	ld hl, 62960		 ; 16455
	ld de, l16759		 ; 16458
	call 16785		 ; 16461
	ld a, 3			 ; 16464
	call l16805		 ; 16466
	ld hl, 49152		 ; 16469
	ld de, l16761		 ; 16472
	call 16785		 ; 16475
	ld hl, 54272		 ; 16478
	ld de, l16763		 ; 16481
	call 16785		 ; 16484
	ld hl, 60928		 ; 16487
	ld de, l16765		 ; 16490
	call 16785		 ; 16493
	ld hl, 61440		 ; 16496
	ld de, l16767		 ; 16499
	call 16785		 ; 16502
	ld hl, 63744		 ; 16505
	ld de, l16769		 ; 16508
	call 16785		 ; 16511
	ld a, 4			 ; 16514
	call l16805		 ; 16516
	ld hl, 49152		 ; 16519
	ld de, l16771		 ; 16522
	call 16785		 ; 16525
	ld hl, 52480		 ; 16528
	ld de, l16773		 ; 16531
	call 16785		 ; 16534
	ld hl, 61440		 ; 16537
	ld de, 16775		 ; 16540
	call 16785		 ; 16543
	ld a, 6			 ; 16546
	call l16805		 ; 16548
	ld hl, 49152		 ; 16551
	ld de, 16777		 ; 16554
	call 16785		 ; 16557
	ld hl, 62720		 ; 16560
	ld de, l16779		 ; 16563
	call 16785		 ; 16566
	ld a, 7			 ; 16569
	call l16805		 ; 16571
	ld hl, 60194		 ; 16574
	ld de, l16781		 ; 16577
	call 16785		 ; 16580
	ld hl, 56064		 ; 16583
	ld de, l16783		 ; 16586
	call 16785		 ; 16589
	xor a			 ; 16592
	out (254), a		 ; 16593
	ld bc, 2560		 ; 16595
	ld d, c			 ; 16598
l_40d7: in a, (31)		 ; 16599
	and 31			 ; 16601
	or d			 ; 16603
	ld d, a			 ; 16604
	dec bc			 ; 16605
	ld a, b			 ; 16606
	or c			 ; 16607
	jr nz, l_40d7		 ; 16608
	ld a, d			 ; 16610
	or a			 ; 16611
	ld a, 255		 ; 16612
	jr z, l_40e9		 ; 16614
	xor a			 ; 16616
l_40e9: ld (38478), a		 ; 16617
	ei			 ; 16620
	halt			 ; 16621
	call 44056		 ; 16622
	ld hl, 49152		 ; 16625
	ld de, 49153		 ; 16628
	ld bc, 6144		 ; 16631
	ld (hl), 0		 ; 16634
	ldir			 ; 16636
	ld bc, 767		 ; 16638
	ld (hl), 71		 ; 16641
	ldir			 ; 16643
	ld a, 64		 ; 16645
	ld (44102), a		 ; 16647
	ld hl, 12		 ; 16650
	call 43931		 ; 16653
	set 7, h		 ; 16656
	ld de, l16704		 ; 16658
	call 42835		 ; 16661
	ld a, l			 ; 16664
	add a, 32		 ; 16665
	ld l, a			 ; 16667
	call 42835		 ; 16668
l_411f: ei			 ; 16671
	halt			 ; 16672
	xor a			 ; 16673
	in a, (254)		 ; 16674
	cpl			 ; 16676
	and 31			 ; 16677
	jr nz, l_412e		 ; 16679
	call 47046		 ; 16681
	jr z, l_411f		 ; 16684
l_412e: di			 ; 16686
	im 2			 ; 16687
	ei			 ; 16689
	ld a, 4			 ; 16690
	call l16805		 ; 16692
	call 44412		 ; 16695
	jp 22528		 ; 16698
	ld hl, (4)		 ; 16701
l_4140: jr nz, l_4162		 ; 16704
	jr nz, l_4194		 ; 16706
	ld b, c			 ; 16708
	ld d, d			 ; 16709
	ld b, c			 ; 16710
	jr nz, l_4195		 ; 16711
	ld b, c			 ; 16713
	jr nz, l_418f		 ; 16714
	ld c, c			 ; 16716
	ld c, (hl)		 ; 16717
	ld d, h			 ; 16718
	ld b, c			 ; 16719
	jr nz, 16811		 ; 16720
	jr nz, l_41a4		 ; 16722
	ld d, l			 ; 16724
	ld c, h			 ; 16725
	ld d, e			 ; 16726
	ld b, c			 ; 16727
	jr nz, l_419d		 ; 16728
	ld d, l			 ; 16730
	ld b, c			 ; 16731
	ld c, h			 ; 16732
	ld d, c			 ; 16733
	ld d, l			 ; 16734
	ld c, c			 ; 16735
	ld b, l			 ; 16736
	ld d, d			 ; 16737
l_4162: jr nz, 16824		 ; 16738
	ld b, l			 ; 16740
	ld b, e			 ; 16741
	ld c, h			 ; 16742
	ld b, c			 ; 16743
	nop			 ; 16744
	nop			 ; 16745
	nop			 ; 16746
l_416b: ex de, hl		 ; 16747
	ld d, a			 ; 16748
l_416d: djnz l_4174		 ; 16749
l_416f: or d			 ; 16751
	rra			 ; 16752
l_4171: adc a, (hl)		 ; 16753
	dec de			 ; 16754
l_4173: ld a, l			 ; 16755
l_4174: inc bc			 ; 16756
l_4175: pop bc			 ; 16757
	inc (hl)		 ; 16758
l_4177: ld (hl), 9		 ; 16759
l_4179: rst 8			 ; 16761
	inc de			 ; 16762
l_417b: ret			 ; 16763
	add hl, de		 ; 16764
l_417d: rlc c			 ; 16765
l_417f: nop			 ; 16767
	add hl, bc		 ; 16768
l_4181: cp 5			 ; 16769
l_4183: ld (hl), d		 ; 16771
	ld a, (bc)		 ; 16772
l_4185: ld (55586), hl		 ; 16773
	ld c, 4			 ; 16776
	inc sp			 ; 16778
l_418b: defb 221		 ; 16779
	ld a, (bc)		 ; 16780
l_418d: sbc a, 20		 ; 16781
l_418f: ld a, c			 ; 16783
	ld bc, 56805		 ; 16784
	pop hl			 ; 16787
l_4194: ex de, hl		 ; 16788
l_4195: ld e, (hl)		 ; 16789
	inc hl			 ; 16790
	ld d, (hl)		 ; 16791
	ld a, 255		 ; 16792
	scf			 ; 16794
	inc d			 ; 16795
	ex af, af'		 ; 16796
l_419d: dec d			 ; 16797
	call 1378		 ; 16798
	xor a			 ; 16801
	out (254), a		 ; 16802
l_41a4: ret			 ; 16804
l_41a5: push af			 ; 16805
	push bc			 ; 16806
	or 24			 ; 16807
	ld bc, 32765		 ; 16809
	out (c), a		 ; 16812
	pop bc			 ; 16814
	pop af			 ; 16815
	ret			 ; 1681

Tras hacer breakpoints luego de cada CALL del código anterior, pude constatar de que ellos hacen llamadas a las rutinas de carga de cada uno de los bloques de los archivos en cinta (audio).
Quiero analizar que hay detrás de cada llamada para constatar y tener conciencia plena de "que es lo que hace cada cosa"




El código desde la dir 22528 de 301 bytes queda en assembler así:

Código: Seleccionar todo

	ld a, 64		 ; 22528
	ld (44102), a		 ; 22530
	ld a, 7			 ; 22533
	call 44070		 ; 22535
	call 44056		 ; 22538
	call l22794		 ; 22541
	ld hl, 3340		 ; 22544
	call 43931		 ; 22547
	set 7, h		 ; 22550
	ld de, l22751		 ; 22552
	call 42835		 ; 22555
	ld b, 250		 ; 22558
	call l22815		 ; 22560
	call l22794		 ; 22563
	ld hl, 3340		 ; 22566
	call 43931		 ; 22569
	set 7, h		 ; 22572
	ld de, l22759		 ; 22574
	call 42835		 ; 22577
	ld b, 250		 ; 22580
	call l22815		 ; 22582
	call l22794		 ; 22585
	ei			 ; 22588
	halt			 ; 22589
	xor a			 ; 22590
	ld (44309), a		 ; 22591
l_5842: ld a, (44309)		 ; 22594
	cp 95			 ; 22597
	jr c, l_584b		 ; 22599
	ld a, 95		 ; 22601
l_584b: ld h, a			 ; 22603
	ld l, 5			 ; 22604
	call l22767		 ; 22606
	ld a, b			 ; 22609
	add a, a		 ; 22610
	ld hl, l22711		 ; 22611
	add a, l		 ; 22614
	ld l, a			 ; 22615
	ld a, h			 ; 22616
	adc a, 0		 ; 22617
	ld h, a			 ; 22619
	ld de, 49152		 ; 22620
	ld a, (hl)		 ; 22623
	cp 7			 ; 22624
	jr nz, l_586c		 ; 22626
	call 44070		 ; 22628
	ld hl, 56064		 ; 22631
	jr l_587f		 ; 22634
l_586c: call 44070		 ; 22636
	inc hl			 ; 22639
	ld a, (hl)		 ; 22640
	add a, a		 ; 22641
	ld h, d			 ; 22642
	ld l, e			 ; 22643
	add a, l		 ; 22644
	ld l, a			 ; 22645
	ld a, h			 ; 22646
	adc a, 0		 ; 22647
	ld h, a			 ; 22649
	ld a, (hl)		 ; 22650
	inc hl			 ; 22651
	ld h, (hl)		 ; 22652
	ld l, a			 ; 22653
	add hl, de		 ; 22654
l_587f: ld de, 16384		 ; 22655
	call 46768		 ; 22658
	ld b, 1			 ; 22661
	call l22815		 ; 22663
	ld a, 7			 ; 22666
	call 44070		 ; 22668
	ld hl, 16384		 ; 22671
	ld de, 49152		 ; 22674
	ld bc, 6144		 ; 22677
	ldir			 ; 22680
	ld a, (44309)		 ; 22682
	cp 95			 ; 22685
	jr c, l_5842		 ; 22687
l_58a1: ei			 ; 22689
	halt			 ; 22690
	ld a, (44309)		 ; 22691
	cp 250			 ; 22694
	jr c, l_58a1		 ; 22696
	ld b, 250		 ; 22698
	call l22815		 ; 22700
	ld b, 15		 ; 22703
	call l22815		 ; 22705
	jp 24576		 ; 22708
l_58b7: nop			 ; 22711
	nop			 ; 22712
	nop			 ; 22713
	ld bc, 512		 ; 22714
	nop			 ; 22717
	inc bc			 ; 22718
	nop			 ; 22719
	inc b			 ; 22720
	inc bc			 ; 22721
	nop			 ; 22722
	inc bc			 ; 22723
	ld bc, 515		 ; 22724
	inc bc			 ; 22727
	inc bc			 ; 22728
	inc bc			 ; 22729
	inc b			 ; 22730
	inc bc			 ; 22731
	dec b			 ; 22732
	inc bc			 ; 22733
	ld b, 0			 ; 22734
	dec b			 ; 22736
	nop			 ; 22737
	ld b, 0			 ; 22738
	rlca			 ; 22740
	nop			 ; 22741
	ex af, af'		 ; 22742
	nop			 ; 22743
	add hl, bc		 ; 22744
	nop			 ; 22745
	ld a, (bc)		 ; 22746
	rlca			 ; 22747
	nop			 ; 22748
	rlca			 ; 22749
	nop			 ; 22750
l_58df: jr nz, l_5901		 ; 22751
	ld (12592), a		 ; 22753
	dec (hl)		 ; 22756
	jr nz, l_58e7		 ; 22757
l_58e7: ld b, a			 ; 22759
	ld b, c			 ; 22760
	ld c, l			 ; 22761
	ld b, l			 ; 22762
	jr nz, 22831		 ; 22763
	ld e, c			 ; 22765
	nop			 ; 22766
l_58ef: push af			 ; 22767
	push de			 ; 22768
	push hl			 ; 22769
	ld bc, 2048		 ; 22770
	ld d, 0			 ; 22773
l_58f7: rl h			 ; 22775
	ld a, c			 ; 22777
	rla			 ; 22778
	sub l			 ; 22779
	jr nc, l_58ff		 ; 22780
	add a, l		 ; 22782
l_58ff: ld c, a			 ; 22783
	ccf			 ; 22784
l_5901: rl d			 ; 22785
	djnz l_58f7		 ; 22787
	ld b, d			 ; 22789
	pop hl			 ; 22790
	pop de			 ; 22791
	pop af			 ; 22792
	ret			 ; 22793
l_590a: ld hl, 49152		 ; 22794
	ld de, 49153		 ; 22797
	ld bc, 6144		 ; 22800
	ld (hl), 0		 ; 22803
	ldir			 ; 22805
	ld bc, 767		 ; 22807
	ld (hl), 71		 ; 22810
	ldir			 ; 22812
	ret			 ; 22814
l_591f: ei			 ; 22815
	halt			 ; 22816
	call 47056		 ; 22817
	jr z, l_592a		 ; 22820
	pop bc			 ; 22822
	jp 24657		 ; 22823
l_592a: djnz l_591f		 ; 22826
	ret			 ; 22828
Si alguien más se quiere meter bienvenido sea. Por lo pronto lo voy a dejar por aqui para seguir mañana analizando y haciendo pruebas. Seguro que en pocos días lo tenemos.
Excelente tacha!!! Al cargador BASIC no le hagas mucho caso, lo hice yo para ver si el juego cargaba tal cual así a lo bruto...
El Maritrini lo tengo convertido con las utilidades de nuggetreggae, supongo que te funcionará en la CF...

http://www.mediafire.com/file/jk6hg4zgx ... _1_y_2.rar

En el paquete de utilidades del mismo había un programa en Basic que en teoría te genera un cargador en Código Máquina preparado para funcionar en +3e y me suena que con la opción de preservar la página 7... Nunca lo he usado porque no termino de entenderlo, pero en cuanto llegue a casa lo subo para que le eches un vistazo...

Enviado desde mi VIE-L09 mediante Tapatalk

BCH
Demonio tercer orden
Demonio tercer orden
Mensajes: 973
Registrado: 06 Sep 2014, 12:10
Ubicación: Barcelona
Been thanked: 4 times

Re: Ayuda para convertir el Castlevania Spectral Interlude a DSK

Mensaje por BCH »

Hynreck escribió: 31 Oct 2017, 09:38 Excelente tacha!!! Al cargador BASIC no le hagas mucho caso, lo hice yo para ver si el juego cargaba tal cual así a lo bruto...
El Maritrini lo tengo convertido con las utilidades de nuggetreggae, supongo que te funcionará en la CF...

http://www.mediafire.com/file/jk6hg4zgx ... _1_y_2.rar

En el paquete de utilidades del mismo había un programa en Basic que en teoría te genera un cargador en Código Máquina preparado para funcionar en +3e y me suena que con la opción de preservar la página 7... Nunca lo he usado porque no termino de entenderlo, pero en cuanto llegue a casa lo subo para que le eches un vistazo...

Enviado desde mi VIE-L09 mediante Tapatalk
Yo he usado este paquete de utilidades que dices para convertir muchos juegos. La verdad que va muy bien.

En general hay que buscar la direccion de ejecucion del juego una vez cargado (esto lo hacia buscando un breakpoint justo despues que termina la carga del bloque principal del juego y antes de que se ejecute). Luego con las utilidades haces un backup de toda la ram, incluyendo paginas y estados de los registros. Si el juego luego tiene niveles que se cargan uno por uno, hay que encontrar la rutina de carga dentro del juego y reemplazarla por llamadas +3DOS que cargaran los diferentes niveles desde disco. Por supuesto hay que convertir cada nivel de la cinta a bloques de datos guardados en el disco. Lo bueno de utilizar llamadas a las rutinas del DOS es que luego los juegos funcionan desde diskettes, interface IDE, etc sin problema.
Avatar de Usuario
Hynreck
El infierno es su lugar
El infierno es su lugar
Mensajes: 162
Registrado: 03 Jul 2014, 11:56
Has thanked: 24 times
Been thanked: 34 times

Re: Ayuda para convertir el Castlevania Spectral Interlude a DSK

Mensaje por Hynreck »

BCH escribió:
Hynreck escribió: 31 Oct 2017, 09:38 Excelente tacha!!! Al cargador BASIC no le hagas mucho caso, lo hice yo para ver si el juego cargaba tal cual así a lo bruto...
El Maritrini lo tengo convertido con las utilidades de nuggetreggae, supongo que te funcionará en la CF...

http://www.mediafire.com/file/jk6hg4zgx ... _1_y_2.rar

En el paquete de utilidades del mismo había un programa en Basic que en teoría te genera un cargador en Código Máquina preparado para funcionar en +3e y me suena que con la opción de preservar la página 7... Nunca lo he usado porque no termino de entenderlo, pero en cuanto llegue a casa lo subo para que le eches un vistazo...

Enviado desde mi VIE-L09 mediante Tapatalk
Yo he usado este paquete de utilidades que dices para convertir muchos juegos. La verdad que va muy bien.

En general hay que buscar la direccion de ejecucion del juego una vez cargado (esto lo hacia buscando un breakpoint justo despues que termina la carga del bloque principal del juego y antes de que se ejecute). Luego con las utilidades haces un backup de toda la ram, incluyendo paginas y estados de los registros. Si el juego luego tiene niveles que se cargan uno por uno, hay que encontrar la rutina de carga dentro del juego y reemplazarla por llamadas +3DOS que cargaran los diferentes niveles desde disco. Por supuesto hay que convertir cada nivel de la cinta a bloques de datos guardados en el disco. Lo bueno de utilizar llamadas a las rutinas del DOS es que luego los juegos funcionan desde diskettes, interface IDE, etc sin problema.
El problema es que con este juego ese sistema no me funciona... Me sale el error Oversize...

Por eso creo que lo más sencillo sería adaptar la versión de TRD-DOS...

O probar con lo que estamos comentando...

He intentado contactar con nuggetreggae, pero hace tiempo que está "desaparecido"...

Enviado desde mi VIE-L09 mediante Tapatalk

Avatar de Usuario
Hynreck
El infierno es su lugar
El infierno es su lugar
Mensajes: 162
Registrado: 03 Jul 2014, 11:56
Has thanked: 24 times
Been thanked: 34 times

Re: Ayuda para convertir el Castlevania Spectral Interlude a DSK

Mensaje por Hynreck »

Bien, aquí está el paquete de utilidades de nuggetreggae....
http://www.mediafire.com/file/vulrawmsk ... reggae.rar

El programa en cuestión que le estaba comentando a tacha se llama DOSKLOAD... Es un programa en Basic en el que hay que modificar las variables y el nombre del fichero que tendrá el loader... Luego genera un loader en Codigo Maquina que se salva en cinta... Está pensado para ser usado en un emulador y así facilmente volverlo a copiar a disco... Como dije, yo no termino de entenderlo, pero aquellos que tengais nociones de las llamadas al +3DOS le podais sacar partido...
Avatar de Usuario
tacha Uruguay
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 3139
Registrado: 04 Abr 2013, 20:22
Ubicación: Montevideo, Uruguay
Has thanked: 44 times
Been thanked: 30 times
Contactar:

Re: Ayuda para convertir el Castlevania Spectral Interlude a DSK

Mensaje por tacha »

Hola cracks!

Por lo que comentan hay una herramienta que lo facilita todo! no tengo ni idea, no la he visto y no sé como funciona. Hynreck, se me ocurre una cosa: Si ese programa te da un error Oversize, tal vez deba ser porque el juego carga un total de 18 bloques pasandolos a los 128k, dejando el bloque 19 de 11560 bytes que, supongo será para cuando te terminas el juego (cuando lo das vuelta, decimos los uruguayos). Leyendo al capo de BCH, veo que hablamos mismo idioma, se me ocurrió buscar dentro del juego (y espero no esté comprimido) el CALL 1378 antecedido con las "variables" para cargar un bloque de 11560 bytes y reemplazar esto por el llamado a la rom del +3e(por ej) para cargar ese mismo archivo pero desde disco.

Me toca currar ahora, en unas horas vuelvo a ver que resolvimos. Me entusiasma este hilo.

Salu2!

Edito:
Hynreck escribió: 31 Oct 2017, 15:03 Bien, aquí está el paquete de utilidades de nuggetreggae....
http://www.mediafire.com/file/vulrawmsk ... reggae.rar

El programa en cuestión que le estaba comentando a tacha se llama DOSKLOAD... Es un programa en Basic en el que hay que modificar las variables y el nombre del fichero que tendrá el loader... Luego genera un loader en Codigo Maquina que se salva en cinta... Está pensado para ser usado en un emulador y así facilmente volverlo a copiar a disco... Como dije, yo no termino de entenderlo, pero aquellos que tengais nociones de las llamadas al +3DOS le podais sacar partido...
Genial! lo miraré :-]
66 6C 6F 70 70 69 6E 67 20 6D 61 73 63 61 20 50 30 6C 6C 34 / 6D 61 73 20 63 6F 74 69 6C 6C 61 20 73 65 72 E1 73 20 74 75 20 49 7A 61 72 6F 20 3A 70
Responder

Volver a “Sinclair”