Último mensaje de la página anterior:
me parece bien, a fin de cuentas , no vendrá de tres bytes ... eso espero!saludos
pere
Último mensaje de la página anterior:
me parece bien, a fin de cuentas , no vendrá de tres bytes ... eso espero!L_843A: LD A, $04 ; 843A 3E 04 ; Carga A con $04
OUT ($FE), A ; 843C D3 FE ; el valor de A se escribe en el puerto $FE
CALL GetAnyKey ; 843E CD B9 84 ; llama rutina GetAnyKey
i_8441: XOR A ; 8441 AF ; A = A XOR A ; A = 0, borra A, flag Z = 1
IN A, ($FE) ; 8442 DB FE ; lee teclado (Shift-Z-X-C-V)
AND $1F ; 8444 E6 1F ; Hace AND lógico de A con $1F
CP $1F ; 8446 FE 1F ; Compara A con $1F
JR NZ, i_8441 ; 8448 20 F7 ; Si Z = 0, Salta a i_8441
LD A, $07 ; 844A 3E 07 ; Carga A con $07
OUT ($FE), A ; 844C D3 FE ; el valor de A se escribe en el puerto $FE
JP GetB6DEJmpTable75D2 ; 844E C3 B3 82 ; salta a GetB6DEJmpTable75D2
GetAnyKey: XOR A ; 84B9 AF ; A = A XOR A ; A = 0, borra A, flag Z = 1
IN A, ($FE) ; 84BA DB FE ; lee teclado (Shift-Z-X-C-V)
AND $1F ; 84BC E6 1F ; Se queda con los 5 Bit Bajos
CP $1F ; 84BE FE 1F ; Los compara para ver si hay teclas
JR NZ, GetAnyKey ; 84C0 20 F7 ; Si hay tecla Presionada repetir
; espera por una tecla
i_84C2: XOR A ; 84C2 AF ; A = A XOR A ; A = 0, borra A, flag Z = 1
IN A, ($FE) ; 84C3 DB FE ; lee teclado (Shift-Z-X-C-V)
AND $1F ; 84C5 E6 1F ; Se queda con los 5 Bit Bajos
CP $1F ; 84C7 FE 1F ; Los compara para ver si hay teclas
JR Z, i_84C2 ; 84C9 28 F7 ; Si no hay tecla repetir
RET ; 84CB C9 ; Retorna con un AND de todas las semifilas en "A"
L_843A: LD A, $04 ; 843A 3E 04 ; Carga A con $04
OUT ($FE), A ; 843C D3 FE ; el valor de A se escribe en el puerto $FE
CALL GetAnyKey ; 843E CD B9 84 ; llama rutina GetAnyKey
i_8441: XOR A ; 8441 AF ; A = A XOR A ; A = 0, borra A, flag Z = 1
IN A, ($FE) ; 8442 DB FE ; lee teclado (Shift-Z-X-C-V)
AND $1F ; 8444 E6 1F ; Hace AND lógico de A con $1F
CP $1F ; 8446 FE 1F ; Compara A con $1F
JR NZ, i_8441 ; 8448 20 F7 ; Si Z = 0, Salta a i_8441
LD A, $07 ; 844A 3E 07 ; Carga A con $07
OUT ($FE), A ; 844C D3 FE ; el valor de A se escribe en el puerto $FE
JP GetB6DEJmpTable75D2 ; 844E C3 B3 82 ; salta a GetB6DEJmpTable75D2
GetAnyKey: XOR A ; 84B9 AF ; A = A XOR A ; A = 0, borra A, flag Z = 1
IN A, ($FE) ; 84BA DB FE ; lee teclado (Shift-Z-X-C-V)
AND $1F ; 84BC E6 1F ; Se queda con los 5 Bit Bajos
CP $1F ; 84BE FE 1F ; Los compara para ver si hay teclas
JR NZ, GetAnyKey ; 84C0 20 F7 ; Si hay tecla Presionada repetir
; espera por una tecla
i_84C2: XOR A ; 84C2 AF ; A = A XOR A ; A = 0, borra A, flag Z = 1
IN A, ($FE) ; 84C3 DB FE ; lee teclado (Shift-Z-X-C-V)
AND $1F ; 84C5 E6 1F ; Se queda con los 5 Bit Bajos
CP $1F ; 84C7 FE 1F ; Los compara para ver si hay teclas
JR Z, i_84C2 ; 84C9 28 F7 ; Si no hay tecla repetir
RET ; 84CB C9 ; Retorna con un AND de todas las semifilas en "A"
A zero in one of the five lowest bits means that the corresponding key is pressed. If more than one address line is made low, the result is the logical AND of all single inputs, so a zero in a bit means that at least one of the appropriate keys is pressed. For example, only if each of the five lowest bits of the result from reading from Port 00FE (for instance by XOR A/IN A,(FE)) is one, no key is pressed.
L_7C91: PUSH BC ; 7C91 C5 ; Guarda BC
LD C, A ; 7C92 4F ; Carga C con A
LD B, $00 ; 7C93 06 00 ; Carga B con $00
PUSH HL ; 7C95 E5 ; Guarda HL
PUSH IY ; 7C96 FD E5 ; Guarda IY
POP HL ; 7C98 E1 ; Recupera HL
ADD HL, BC ; 7C99 09 ; Adiciona BC en HL
LD BC, $0006 ; 7C9A 01 06 00 ; Carga BC con $0006
LDIR ; 7C9D ED B0 ; (DE+)=(HL+);BC- ; copia $6 bytes de HL en DE
XOR A ; 7C9F AF ; A = A XOR A ; A = 0, borra A, flag Z = 1
LD B, $06 ; 7CA0 06 06 ; Carga B con $06
i_7CA2: DEC HL ; 7CA2 2B ; Decrementa HL
OR (HL) ; 7CA3 B6 ; Hace OR lógico de A con (HL)
DJNZ i_7CA2 ; 7CA4 10 FC ; Decrementa B y si no es cero vuelve a i_7CA2
POP HL ; 7CA6 E1 ; Recupera HL
POP BC ; 7CA7 C1 ; Recupera BC
RET Z ; 7CA8 C8 ; Z = 1? ; Retorna si es cero
SET 0, (HL) ; 7CA9 CB C6 ; Pasa a 1 el bit 0 en (HL)
RET ; 7CAB C9 ; Retorna
L_7D98: LD HL, L_793E ; 7D98 21 3E 79 ; Carga HL con L_793E
BIT 0, (HL) ; 7D9B CB 46 ; Esta a 1 el bit 0 de (HL)?
JP Z, L_7E4D ; 7D9D CA 4D 7E ; Si Z = 1, Salta a L_7E4D
BIT 1, (HL) ; 7DA0 CB 4E ; Esta a 1 el bit 1 de (HL)?
LD HL, SecObj3WordPtrs ; 7DA2 21 48 79 ; apunta a SecObj3WordPtrs
LD DE, SecondObject ; 7DA5 11 E9 B6 ; apunta a SecondObject
LD BC, IsSecObjLoc ; 7DA8 01 FF B6 ; apunta a IsSecObjLoc
JR Z, L_7DFE ; 7DAB 28 51 ; Si Z = 1, Salta a L_7DFE
LD A, (L_7941) ; 7DAD 3A 41 79 ; Carga A con (L_7941)
AND A ; 7DB0 A7 ; A = A AND A ; Adecua flags
JP Z, L_7DF5 ; 7DB1 CA F5 7D ; Si Z = 1, Salta a L_7DF5
LD A, (L_7955) ; 7DB4 3A 55 79 ; Carga A con (L_7955)
LD A, (SecObj3WordPtrs) ; 7DB7 3A 48 79 ; Carga A con (SecObj3WordPtrs) - byte bajo del 1er puntero
JR i_7D89 ; 7DBA 18 CD ; Salta a i_7D89
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 ; 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 ; AÑADIDO AHORA !!!!
i_834B pshs cc ; guarda flags
dec ,u ; pasa el ID a $FF ; i_834B: LD (IX+$00), $FF ; 834B DD 36 00 FF ; pone ID = $FF en el bloque
leau 1,u ; incrementa puntero ; INC IX ; 834F DD 23 ; apunta al primer byte de datos del bloque
; 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 ; si flag Z=1, salta a e_834B (OK)
; jsr CtrlMal ; 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
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 ; OK ; AÑADIDO 19/3/2015
i_834B pshs cc ; guarda flags
dec ,u ; pasa el ID a $FF ; i_834B: LD (IX+$00), $FF ; 834B DD 36 00 FF ; pone ID = $FF en el bloque
leau 1,u ; incrementa puntero ; INC IX ; 834F DD 23 ; apunta al primer byte de datos del bloque
; 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
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
Volver a “Proyecto The Hobbit 6809 por pser1”
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado