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)
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.