Ayuda para convertir el Castlevania Spectral Interlude a DSK
Moderador: Fundadores
- Hynreck
- El infierno es su lugar
- Mensajes: 162
- Registrado: 03 Jul 2014, 11:56
- Has thanked: 25 times
- Been thanked: 34 times
Ayuda para convertir el Castlevania Spectral Interlude a DSK
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
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.
- Onlyfordj
- Demonio segundo orden
- Mensajes: 1037
- Registrado: 30 Dic 2016, 09:28
- Ubicación: Valencia
- Has thanked: 71 times
- Been thanked: 31 times
Re: Ayuda para convertir el Castlevania Spectral Interlude a DSK
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
El juego está en formato dsk para Spectrum.
A ver si puedes aprovechar algo.
https://mega.nz/#!nE1GSJCS!FGt0wJ-0t6_f ... RMhMDIGOOE
- Hynreck
- El infierno es su lugar
- Mensajes: 162
- Registrado: 03 Jul 2014, 11:56
- Has thanked: 25 times
- Been thanked: 34 times
Re: Ayuda para convertir el Castlevania Spectral Interlude a DSK
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
Lo que estamos buscando es una carga limpia, con su pantalla de presentación y sin corromper la pantalla... Pero gracias por el dato
- tacha
- Hermano de Lucifer
- Mensajes: 3167
- Registrado: 04 Abr 2013, 20:22
- Ubicación: Montevideo, Uruguay
- Has thanked: 52 times
- Been thanked: 35 times
- Contactar:
Re: Ayuda para convertir el Castlevania Spectral Interlude a DSK
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í.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
É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.
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
- tacha
- Hermano de Lucifer
- Mensajes: 3167
- Registrado: 04 Abr 2013, 20:22
- Ubicación: Montevideo, Uruguay
- Has thanked: 52 times
- Been thanked: 35 times
- Contactar:
Re: Ayuda para convertir el Castlevania Spectral Interlude a DSK
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 "" :
tenemos un
Bytes: loader CODE 24576, 6750
(aqui el primer trozo de código importante)
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:
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í:
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.
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
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
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
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
- Hynreck
- El infierno es su lugar
- Mensajes: 162
- Registrado: 03 Jul 2014, 11:56
- Has thanked: 25 times
- Been thanked: 34 times
Re: Ayuda para convertir el Castlevania Spectral Interlude a DSK
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...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 "" :
tenemos unCódigo: Seleccionar todo
10 LOAD "" CODE 24576 20 RANDOMIZE USE 24576
Bytes: loader CODE 24576, 6750
(aqui el primer trozo de código importante)
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?)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
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í: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.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
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
-
- 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
Yo he usado este paquete de utilidades que dices para convertir muchos juegos. La verdad que va muy bien.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
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.
- Hynreck
- El infierno es su lugar
- Mensajes: 162
- Registrado: 03 Jul 2014, 11:56
- Has thanked: 25 times
- Been thanked: 34 times
Re: Ayuda para convertir el Castlevania Spectral Interlude a DSK
El problema es que con este juego ese sistema no me funciona... Me sale el error Oversize...BCH escribió:Yo he usado este paquete de utilidades que dices para convertir muchos juegos. La verdad que va muy bien.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
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.
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
- Hynreck
- El infierno es su lugar
- Mensajes: 162
- Registrado: 03 Jul 2014, 11:56
- Has thanked: 25 times
- Been thanked: 34 times
Re: Ayuda para convertir el Castlevania Spectral Interlude a DSK
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...
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...
- tacha
- Hermano de Lucifer
- Mensajes: 3167
- Registrado: 04 Abr 2013, 20:22
- Ubicación: Montevideo, Uruguay
- Has thanked: 52 times
- Been thanked: 35 times
- Contactar:
Re: Ayuda para convertir el Castlevania Spectral Interlude a DSK
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:
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:
Genial! lo miraré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...
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