Nos hemos encontrado a lo largo del programa dos puntos (por lo menos) en los cuales se modifican 2 bytes que forman parte de un mensaje.
Inicialmente teníamos declarado el mensaje dentro del área de mensajes así:
Código: Seleccionar todo
L_AFFC: DB $10,$83,$78,$16 ;You are in [0x16]
Actualmente ha sido descompuesto en tres partes ya que la parte central (2 bytes) es modificada por código, quedando sí
Código: Seleccionar todo
L_AFFC: DB $10 ;You
L_AFFD: DB $83,$78 ;are in
L_AFFF: DB $16 ;[0x16]
Las partes de código que realizan estas modificaciones son las siguientes
Lo complicado es averiguar que diablos va a poner en lugar del texto inicial "are in", determinado por los dos bytes. Cada uno de ellos corresponde a una palabra del tipo "common words"
Si alguien puede echarle un poco de luz ... se agradecerá
En caso de necesitar observar mas parte de código, utilizad, por favor, el fichero del hilo "Fuente The Hobbit V1.2 ASM Z80 ZX Spectrum 48K." en la página 39 casi al final versión 8C
Código: Seleccionar todo
Action_Look: ; (-07-): ;
CALL L_9D44 ; 8C4B CD 44 9D ; llama a (-08-); Chequeo del byte L_B6FA
LD IX, (L_B70C) ; 8C4E DD 2A 0C B7 ; IX = (L_B70C) ; Dirección de OBJ_TABLE
L_8C52: LD A, (IX+$01) ; 8C52 DD 7E 01 ; A = (IX+$01) ; A se carga con el primer byte de OBJ_TABLE
CP $FF ; 8C55 FE FF ; A = $FF? ; Lo compara con el final de tabla
JR Z, L_8C95 ; 8C57 28 3C ; Z = 1? ; Si, salta a L_8C95
LD HL, $0080 ; 8C59 21 80 00 ; HL = $0080 ;
LD (L_AFFD), HL ; 8C5C 22 FD AF ; ($AFFD), HL ; ($AFFD), HL ; modifica 2 bytes del mensaje en L_AFFC con valor en HL
LD HL, L_AFFC ; 8C5F 21 FC AF ; HL = L_AFFC ; Apunta a mensaje "You are in[0x16]" ya modificado
CALL PRT_TEXT ; 8C62 CD DD 72 ; llama rutina PRT_TEXT (047# OK)
Esta parte parece meterle a piñón $0080, no se en que orden, quedaría. "You - 0080 ó 8000 - [0x16]. En el caso de $0080 podría tomarse como puntero a palabra $6080 = BARD,
en el caso de 8000 no sale nada coherente ...
Código: Seleccionar todo
L_9630: PUSH AF ; 9630 F5
CALL L_9BB1 ; 9631 CD B1 9B ; llama rutina L_9BB1 (#22# OK)
LD A, (IX+$00) ; 9634 DD 7E 00
AND $0E ; 9637 E6 0E
LD E, A ; 9639 5F
LD D, $00 ; 963A 16 00
LD HL, L_BA80 ; 963C 21 80 BA
ADD HL, DE ; 963F 19
LD E, (HL) ; 9640 5E
INC HL ; 9641 23
LD D, (HL) ; 9642 56
LD HL, L_AFFD ; 9643 21 FD AF ; modificará 2 bytes del mensaje en L_AFFC poniendo el contenido de DE
LD (HL), D ; 9646 72
INC HL ; 9647 23
LD (HL), E ; 9648 73
POP AF ; 9649 F1
LD HL, L_AFFC ; 964A 21 FC AF ; apunta al mensaje "You are in[0x16]"
Esta parece que quiera sustituir los dos bytes por un puntero a palabra de la tabla "Preposition table"(L_Ba80), pero entonces perdemos el verbo : "You - inside - [0x16], rarillo, ¿no?
saludos
pere