Último mensaje de la página anterior:
muchas gracias, ChemaVoy a cambiar de página para consultar lo que hacen los opcodes, he encontrado ésta que explica esta casuística del ADD para 16 bits:
http://z80-heaven.wikidot.com/instructions-set
Espero que cositas de este tipo no duelan mas adelante, cuando el programa ya sea muuuy grande!
Corrijo el código y lo dejaré como se mas abajo.
A ver que te parece ahora
saludos
pere
ldb #8 ; numero de bloques a buscar ; LD B, $08 ; 833F 06 08 ; número de bloques a revisar
i_8341 lda ,u ; recupera ID del bloque ; i_8341: LD A, (IX+$00) ; 8341 DD 7E 00 ; recupera ID del bloque apuntado
; AND A ; 8344 A7 ; es 0 (está libre)?
beq i_834B ; si 0, salta a i_834B ; JR Z, i_834B ; 8345 28 04 ; si, salta a i_834B (ya encontramos uno libre!)
; leax +$19,u ;ERROR ; suma 25, apunta al siguiente bloque ; ADD IX, DE ; 8347 DD 19 ; apunta al siguiente bloque
leau +$19,u ; OK ; suma 25, apunta al siguiente bloque ; ADD IX, DE ; 8347 DD 19 ; apunta al siguiente bloque
decb ; decrementa contador
bne i_8341 ; si no es cero, vuelve a i_8341 ; DJNZ i_8341 ; 8349 10 F6 ; decrementa contador y si todavía quedan bloques, mira el siguiente
; cmpx #$0000 ;ERROR
; cmpu #$0000 ; MAL ; AÑADIDO 19/3/2015
andcc #$11111011 ;20-3-15; fuerza flag Z=0 (no es cero)
i_834B pshs cc ; guarda flags
ldb #$FF ; pone $FF ; i_834B: LD (IX+$00), $FF ; 834B DD 36 00 FF ; pone ID = $FF en el bloque
stb ,u+ ; en el ID del bloque ; INC IX ; 834F DD 23 ; apunta al primer byte de datos del bloque
; e incrementa puntero ; POP BC ; 8351 C1 ; Recupera BC
puls cc ; recupera flags ; POP DE ; 8352 D1 ; Recupera DE (-24)
bne i_8378 ; si flag Z=0, salta a i_8378 ; JR NZ, i_8378 ; 8353 20 23 ; si no encontró un bloque libre, sale via i_8378
; beq e_834B ;SOBRA ; si flag Z=1, salta a e_834B (OK)
; jsr CtrlMal ;SOBRA ; derivado a un Break! ; JR NZ, i_8378 ; 8353 20 23 ; si no encontró un bloque libre, sale via i_8378
e_834B ldb ,y ; recupera (IY) --- CAMBIO ---
andb #%01000000 ; está el bit6 a 1? ; BIT 6, (IY+$01) ; 8355 FD CB 01 76 ; Está a 1 el bit 6 de (IY+$01)? es el byte alto de la primera palabra