Menus

Algoritmos para Display da Tela

  Para trocar o algoritmo de abertura, basta substituir a linha 470 do código do programa principal, ou seja, de "TELA:" em diante.
  Para testar o algoritimo, utilize a imagem MATCH00.SCR, disponível no pacote. O inicio do algoritimo de exibição da tela é em &HAE65.
  A localização da tela na memória RAM é: 4000H-47FFH (pattern) e 4800H-5FFFH (color), onde o tamanho de cada parte é 1800H.
  Endereços fixos não devem ser utilizados uma vez que a localização deste algoritimo depende do tamanho da tela compactada. Portanto, utilize sempre saltos relativos (JR).

  Direto - Autor: Marcelo Silveira

  470 TELA:	LD   BC,&H1800		; Tamanho do bloco
  480 		LD   DE,0		; Endereço inicial da VRAM
  490 		LD   HL,&H4000		; Endereço inicial da RAM
  500 		CALL &H5C		; LDIRVM - Cópia de bloco da RAM para VRAM
  510 		LD   BC,&H1800		; Tamanho do bloco
  520 		LD   DE,&H2000		; Endereço inicial da VRAM
  530 		LD   HL,&H5800		; Endereço inicial da RAM
  540 		CALL &H5C		; LDIRVM - Cópia de bloco da RAM para VRAM
  550 		RET 			; Retorna


  Top-Down - Autor: Marcelo Silveira

  470 TELA:	LD   DE,&H4000		; Endereço inicial da RAM
  480 		LD   HL,0		; Endereço inicial da VRAM
  490 		EXX 			; Muda para BC', DE' e HL'
  500 		LD   DE,&H5800		; Endereço inicial da RAM
  510 		LD   HL,&H2000		; Endereço incial da VRAM
  520 LT1:	XOR  A			; Zera A
  530 		CP   H			; Compara com H
  540 		JR   Z,FIMT		; Se H=0, fimt
  550 		LD   A,&H38		; 
  560 		CP   H			; 
  570 		JR   Z,FIMT		; Se H=38, fim (HL atingiu 3800H)
  580 COL:	LD   A,(DE)		;
  590 		CALL &H4D		; WRTVRM - Rotina de escrita na tela
  600 		INC  HL			; HL=HL+1
  610 		INC  DE			; DE=DE+1
  620 		EXX 			; Troca
  630 PAT:	LD   A,(DE)		;
  640 		CALL &H4D		;
  650 		INC  HL			; Idem anterior
  660 		INC  DE			;
  670 		EXX 			;
  680 		JR   LT1		; Loop
  690 FIMT:	RET 


  Left-Right - Autor: Marcelo Silveira

   10 		ORG  &HAE65		; Endereço inicial para testes com MATCH00.SCR
   20 		LD   HL,&H4000		; Endereço incial da RAM
   30 		LD   DE,0		; Endereço inicial da VRAM
   40 		PUSH HL			; Salva HL (aaaa)
   50 		PUSH DE			; Salva DE (bbbb aaaa)
   60 		PUSH HL			; Salva HL (cccc bbbb aaaa)
   70 		PUSH DE			; Salva DE (dddd cccc bbbb aaaa)
   80 LE:	POP  DE			; # Recupera DE (DE=dddd)
   90 		POP  HL			; # Recupera HL (HL=cccc) - Pilha: (bbbb aaaa)
   91 		XOR  A			; # A=00
   92 		CP   E			; # 
   93 		JR   NZ,GO		; # Se e<>0, pule para GO
   94 		LD   A,1		; # A=1
   95 		CP   D			; # 
   96 		JR   NZ,GO		; # Se d<>1, pule para GO
   97 		POP  DE			; # Esvazia pilha (aaaa)
   98 		POP  HL			; # Esvazia pilha (-)
   99 		RET 			; # Acaba
  100 GO:	LD   B,24		; # $ Rotina para desenhay blocos em y (24 linhas)
  105 LI:	PUSH BC			; # $ Salva BC (cccc bbbb aaaa)
  110 		PUSH HL			; # $ Salva HL (dddd cccc bbbb aaaa)
  120 		PUSH DE			; # $ Salva DE (eeee dddd cccc bbbb aaaa)
  130 		JR   BLOCO		; # $ Escreve bloco
  140 VB:	POP  DE			; # $ DE= eeee
  150 		LD   HL,&H100		; # $ 
  160 		ADD  HL,DE		; # $ 
  170 		LD   D,H		; # $ 
  175 		LD   E,L		; # $ DE = DE + 100H
  180 		POP  HL			; # $ HL= dddd
  190 		LD   BC,&H100		; # $ 
  200 		ADD  HL,BC		; # $ HL = HL + 100H
  210 		POP  BC			; # $ BC= cccc - Pilha: (bbbb aaaa)
  220 		DJNZ LI			; # $ Enquanto B>0, pule para LI
  230 		POP  DE			; # DE= bbbb
  240 		LD   HL,8		; # 
  250 		ADD  HL,DE		; #  
  260 		LD   D,H		; # 
  265 		LD   E,L		; # DE = DE + 8
  270 		POP  HL			; # HL = aaaa - Pilha (-)
  280 		LD   BC,8		; # 
  290 		ADD  HL,BC		; # Hl = HL + 8
  295		PUSH HL			; # Salva HL (aaaa)
  296		PUSH DE			; # Salva DE (bbbb aaaa)
  300 		PUSH HL			; # Salva HL (cccc bbbb aaaa)
  301 		PUSH DE			; # Salva DE (dddd cccc bbbb aaaa)
  302 		JR   LE			; # 
  310 BLOCO:	LD   BC,8		; 8 bytes consecutivos (1 bloco 8x8)
  315 		PUSH HL			; Salva HL (xxxx)
  316 		PUSH DE			; Salva DE (yyyy xxxx)
  320 		CALL &H5C		; Copia bloco RAM->VRAM (modifica alguns regs)
  325 		POP  DE			; Recupera DE (xxxx)
  326 		POP  HL			; Recupera HL
  330 		LD   BC,&H1800		; *
  340 		ADD  HL,BC		; * HL = HL + 1800H
  350 		PUSH HL			; *
  360 		LD   HL,&H2000		; %
  370 		ADD  HL,DE		; % DE = DE + 2000H
  380 		PUSH HL			; %
  390 		POP  DE			; Recupera DE (DE+2000)
  400 		POP  HL			; Recupera HL (HL+1800)
  410 		LD   BC,8		; 8 bytes consecutivos (1 bloco 8x8)
  420 		CALL &H5C		; Copia bloco RAM->VRAM (modifica alguns regs)
  430 		JR   VB			; Volta para a linha seguinte (pilha na posição inicial)


  Diagonal - Autor: Marcelo Silveira

ENDEREÇOS FIXOS:

8FF0 - HL do loop externo
8FF2 - DE do loop externo
8FF4 - HL do loop interno
8FF6 - DE do loop interno
8FF8 - BC geral
8FFA - BC do momento

   10 		ORG  &HAE65		; Endereço inicial para testes com MATCH00.SCR
   20 		LD   HL,&H4000		; Endereço incial da RAM
   30 		LD   DE,0		; Endereço inicial da VRAM
   40 		LD   (&H8FF0),HL	; Salva HL
   50 		LD   (&H8FF2),DE	; Salva DE
   60 		LD   (&H8FF4),HL	; Salva HL
   70 		LD   (&H8FF6),DE	; Salva DE
   75 		LD   B,0		; B é o numero de pontos da vez
   76		LD   (&H8FF8),BC	; Salva BC
   80 LE:	LD   BC,(&H8FF8)	; # Recupera BC
   85 		LD   DE,(&H8FF6)	; # Recupera DE
   90 		LD   HL,(&H8FF4)	; # Recupera HL
  130 LY:	EX   AF,AF'		; # $ Troca para AF' 
  131		XOR  A			; # $ Flag=0
  132		EX   AF,AF'		; # $ Volta ao normal
  133		LD   (&H8FFA),BC	; # $ Salva BC atual
  135 		JR   BL			; # $ Desenha bloco na direção de Y
  136 VY:	EX   AF,AF'		; # $ Retorna condição inicial de AF
  140 		LD   DE,(&H8FF6)	; # $ Recupera DE
  143		LD   BC,&H0100		; # $ 
  144		LD   H,D		; # $ Cópia de DE para HL
  145		LD   L,E		; # $ 
  146		ADD  HL,BC		; # $ DE = DE + 0100H
  147		LD   (&H8FF6),HL	; # $ Salva DE
  148		LD   DE,(&H8FF6)	; # $ Copia resultado em DE
  150		LD   HL,(&H8FF4)	; # $ Recupera HL
  170		ADD  HL,BC		; # $ HL = HL + 0100H
  180		LD   (&H8FF4),HL	; # $ Salva HL
  202		LD   BC,(&H8FFA)	; # $ Recupera contador B
  203		DJNZ LY			; # $ 
  204 		LD   DE,(&H8FF6)	; # Recupera DE
  205		LD   BC,&H0100		; # 
  210		LD   H,D		; # Cópia de DE para HL
  211		LD   L,E		; # 
  212		SBC  HL,BC		; # DE = DE - 0100H
  215		LD   (&H8FF6),HL	; # Salva DE
  216		LD   DE,(&H8FF6)	; # Copia resultado em DE
  217		LD   HL,(&H8FF4)	; # Recupera HL
  218		SBC  HL,BC		; # HL = HL - 0100H
  219		LD   (&H8FF4),HL	; # Salva HL (cccc bbbb aaaa)
  222		LD   BC,(&H8FF8)	; # Inicia BC
  223		JR   LX			; # Recurso de salto curto
  224 VLE:	JR   LE			; Atalho para a volta de LE (salto original longo)
  225 VVY:	JR   VY			; Atalho para a volta de VY (salto original longo)
  230 LX:	EX   AF,AF'		; # $ Troca para AF' 
  231		LD   A,1		; # $ Flag=1
  232		EX   AF,AF'		; # $ Volta ao normal
  233		LD   (&H8FFA),BC	; # $ Salva BC atual
  235 BL:	JR   BLOCO		; # $ Desenha bloco na direção de Y
  236 VX:	EX   AF,AF'		; # $ Retorna condição inicial de AF
  240 		LD   DE,(&H8FF6)	; # $ Recupera DE
  241		LD   HL,(&H8FF4)	; # $ Recupera HL
  243		LD   BC,8		; # $ 
  244		SBC  HL,BC		; # $ HL = HL - 8
  245		LD   (&H8FF4),HL	; # $ Salva HL
  246		LD   H,D		; # $ Copia DE para HL
  247		LD   L,E		; # $ 
  248		SBC  HL,BC		; # $ DE = DE - 8
  249		LD   D,H		; # $ Cópia de HL para DE
  250		LD   E,L		; # $ 
  251		LD   (&H8FF6),DE	; # $ Salva DE
  252		LD   HL,(&H8FF4)	; # $ Recupera HL
  253		LD   BC,(&H8FFA)	; # $ Recupera contador B
  254		DJNZ LX			; # $
  262		LD   BC,(&H8FF8)	; # Recupera BC Geral
  263		INC  B			; # B=B+1
  264		LD   A,B		; # A = A - 24 (Afeta flag S, se A < 24)
  265		CP   25			; # Se contador B der a volta, encerre
  266		JR   NZ,VQ		; # Se menor que 24, grave alteração
  267		LD   B,24		; # Senão, forçar 24
  268 VQ:	LD   (&H8FF8),BC	; # Salva BC
  269 		LD   DE,(&H8FF2)	; # Recupera DE principal
  270		LD   A,&HF8		; #  
  271		CP   E			; # 
  272		JR   Z,FIM		; # Se DE=00F8, termine
  276 		LD   HL,8		; #  
  277 		ADD  HL,DE		; # DE = DE + 8 
  278		LD   (&H8FF2),HL	; # Salva DE
  279		LD   DE,(&H8FF2)	; # Recupera DE
  280 		LD   HL,(&H8FF0)	; # Recupera HL principal
  281 		LD   BC,8		; # 
  282 		ADD  HL,BC		; # HL = HL + 8
  283		LD   (&H8FF0),HL	; # Salva HL
  284		LD   (&H8FF6),DE	; # Salva DE em loop interno
  285		LD   (&H8FF4),HL	; # Salva HL em loop interno
  287 		JR   LE			; # 
  290 FIM:	RET			; Fim
  295 VVY2:	JR   VVY		; Problema de salto curto!
  310 BLOCO:	LD   BC,8		; 8 bytes consecutivos (1 bloco 8x8)
  315 		PUSH HL			; Salva HL (xxxx)
  316 		PUSH DE			; Salva DE (yyyy xxxx)
  320 		CALL &H5C		; Copia bloco RAM->VRAM (modifica alguns regs)
  325 		POP  DE			; Recupera DE (xxxx)
  326 		POP  HL			; Recupera HL
  330 		LD   BC,&H1800		; *
  340 		ADD  HL,BC		; * HL = HL + 1800H
  350 		PUSH HL			; *
  360 		LD   HL,&H2000		; %
  370 		ADD  HL,DE		; % DE = DE + 2000H
  380 		PUSH HL			; %
  390 		POP  DE			; Recupera DE (DE+2000)
  400 		POP  HL			; Recupera HL (HL+1800)
  410 		LD   BC,8		; 8 bytes consecutivos (1 bloco 8x8)
  420 		CALL &H5C		; Copia bloco RAM->VRAM (modifica alguns regs)
  430 		EX   AF,AF'		; Troca para AF'
  440		CP   00			; Compare com 0
  450		JR   Z,VVY2		; Se 0, volta para primeiro bloco
  460		JR   VX			; Senão, volta para VX


  Snail In - Autor: Marcelo Silveira

ENDEREÇOS FIXOS:

8FF0 - 0008 - Direita -> Soma
     - 0100 - Baixo
     - FFFF - Esquerda
     - FF00 - Cima
8FF2 - Extensão da linha atual
8FF4 - 31 - Blocos em X -> Extensão da linha
8FF6 - 23 - Blocos em Y -> Extensão da linha
8FF8 - Lado da moldura
8FFA - Para dentro

   10 		ORG  &HAE65		; Endereço inicial para testes com MATCH00.SCR
   20 		LD   HL,&H4000		; Endereço incial da RAM
   30 		LD   DE,0		; Endereço inicial da VRAM
   31		LD   BC,&H1F00		;
   32		LD   (&H8FF4),BC	; X inicial = 31
   33		LD   BC,&H1700		;
   34		LD   (&H8FF6),BC	; Y inicial = 23
   35		LD   BC,&H0C00		; Repetição Externa
   36 LE:	LD   (&H8FFA),BC	; Salva a repetição externa (para dentro)
   40 		LD   BC,&H0008		; Contador BC
   50 		LD   (&H8FF0),BC	; Salva o valor da soma inicial
   60 		LD   BC,(&H8FF4)	;
   70 		LD   (&H8FF2),BC	; Salva Extenção inicial da linha
   80		LD   BC,&H0400		; @ Moldura tem 4 lados
   90 LI:	LD   (&H8FF8),BC	; @ # Salva na memória
   91		LD   BC,(&H8FF2)	; @ # Recupera Extensão inicial da linha
  130 LY:	PUSH BC			; @ # $ Salva BC (aaaa)
  131		PUSH HL			; @ # $ Salva HL (bbbb aaaa)
  132		PUSH DE			; @ # $ Salva DE (cccc bbbb aaaa)
  135 		JR   BL			; @ # $ Desenha bloco na direção de Y
  136 VY:	POP  DE			; @ # $ Recupera DE (bbbb aaaa)
  143		LD   BC,(&H8FF0)	; @ # $ Valor da soma
  144		LD   H,D		; @ # $ Cópia de DE para HL
  145		LD   L,E		; @ # $ 
  146		ADD  HL,BC		; @ # $ DE = DE + 0100H
  147		LD   D,H		; @ # $ 
  148		LD   E,L		; @ # $ 
  150		POP  HL			; @ # $ Recupera HL (aaaa)
  170		ADD  HL,BC		; @ # $ HL = HL + 0100H
  202		POP  BC			; @ # $ Recupera contador B (-)
  203		DJNZ LY			; @ # $ 
  204		LD   BC,(&H8FF8)	; @ # Recupera moldura
  205		PUSH BC			; @ # Salva BC
  206		LD   A,4		; @ # 
  207		CP   B			; @ # 
  208		JR   Z,M3		; @ # Se moldura for 4, a proxima é a 3
  209		DEC  A			; @ # 
  210		CP   B			; @ # 
  211		JR   Z,M2		; @ # Se moldura for 3, a proxima é a 2 
  212		DEC  A			; @ # 
  213		CP   B			; @ # 
  214		JR   Z,M1		; @ # Se moldura for 2, a proxima é a 1 
  215		POP  BC			; @ Acerta a pilha
  216		LD   BC,(&H8FF4)	; @
  217		DEC  B			; @
  218		DEC  B			; @
  219		LD   (&H8FF4),BC	; @ Diminui o tamanho do eixo X
  220		LD   BC,(&H8FF6)	; @
  221		DEC  B			; @
  222		DEC  B			; @
  223		LD   (&H8FF6),BC	; @ Diminui o tamanho do eixo Y
  224		PUSH HL			; @ 
  225		LD   H,D		; @ 
  226		LD   L,E		; @ 
  227		LD   BC,&H0108		; @ Avança em diagonal
  228		ADD  HL,BC		; @ 
  229		LD   D,H		; @ 
  230		LD   E,L		; @ 
  231		POP  HL			; @ 
  232		ADD  HL,BC		; @
  233		LD   BC,(&H8FFA)	; @
  234		DJNZ LE			; @
  235		RET			; FIM
  236 LLI:	JR   LI			; Atalho para salto curto
  237 VVY:	JR   VY			; Atalho para salto curto
  238 BL:	JR   BLOCO		; Atalho para salto curto
  250 M3:	LD   BC,&0100		;
  251		LD   (&H8FF0),BC	;
  252		LD   BC,(&H8FF6)	;
  253		LD   (&H8FF2),BC	;
  254		POP  BC			;
  255		DJNZ LLI		;
  256 M2:	LD   BC,&FFF8		;
  257		LD   (&H8FF0),BC	;
  258		LD   BC,(&H8FF4)	;
  259		LD   (&H8FF2),BC	;
  260		POP  BC			;
  261		DJNZ LLI		;
  262 M1:	LD   BC,&FF00		;
  263		LD   (&H8FF0),BC	;
  264		LD   BC,(&H8FF6)	;
  265		LD   (&H8FF2),BC	;
  266		POP  BC			;
  267		DJNZ LLI		;
  310 BLOCO:	LD   BC,8		; 8 bytes consecutivos (1 bloco 8x8)
  315 		PUSH HL			; Salva HL (xxxx)
  316 		PUSH DE			; Salva DE (yyyy xxxx)
  320 		CALL &H5C		; Copia bloco RAM->VRAM (modifica alguns regs)
  325 		POP  DE			; Recupera DE (xxxx)
  326 		POP  HL			; Recupera HL
  330 		LD   BC,&H1800		; *
  340 		ADD  HL,BC		; * HL = HL + 1800H
  350 		PUSH HL			; *
  360 		LD   HL,&H2000		; %
  370 		ADD  HL,DE		; % DE = DE + 2000H
  380 		PUSH HL			; %
  390 		POP  DE			; Recupera DE (DE+2000)
  400 		POP  HL			; Recupera HL (HL+1800)
  410 		LD   BC,8		; 8 bytes consecutivos (1 bloco 8x8)
  420 		CALL &H5C		; Copia bloco RAM->VRAM (modifica alguns regs)
  430		LD   B,&H02		; %
  431 BE:	LD   C,B		; %
  432		LD   B,&h30		; %
  433 BI:	ADD  HL,DE		; % TEMPORIZADOR
  434		ADD  HL,DE		; %
  435		ADD  HL,DE		; %
  436		ADD  HL,DE		; %
  437		DJNZ BI			; %
  438		LD   B,C		; %
  439		DJNZ BE			; %
  460		JR   VVY		; Volta para VY


  Frame in - Autor: Marcelo Silveira

ENDEREÇOS FIXOS:

8FF0 - 0008 - Direita -> Soma
     - 0100 - Baixo
     - FFFF - Esquerda
     - FF00 - Cima
8FF2 - Extensão da linha atual
8FF4 - 31 - Blocos em X -> Extensão da linha
8FF6 - 23 - Blocos em Y -> Extensão da linha
8FF8 - Lado da moldura
8FFA - Para dentro

RSC II MSX 1.0                                                

   10 		ORG  &HAE65		; Endereço inicial para testes com MATCH00.SCR
   20 		LD   HL,&H4000		; Endereço incial da RAM
   30 		LD   DE,0		; Endereço inicial da VRAM
   31		LD   BC,&H1F00		;
   32		LD   (&H8FF4),BC	; X inicial = 31
   33		LD   BC,&H1700		;
   34		LD   (&H8FF6),BC	; Y inicial = 23
   35		LD   BC,&H0C00		; Repetição Externa
   36 LE:	LD   (&H8FFA),BC	; Salva a repetição externa (para dentro)
   40 		LD   BC,&H0008		; Contador BC
   50 		LD   (&H8FF0),BC	; Salva o valor da soma inicial
   60 		LD   BC,(&H8FF4)	;
   70 		LD   (&H8FF2),BC	; Salva Extenção inicial da linha
   80		LD   BC,&H0400		; @ Moldura tem 4 lados
   90 LI:	LD   (&H8FF8),BC	; @ # Salva na memória
   91		LD   BC,(&H8FF2)	; @ # Recupera Extensão inicial da linha
  130 LY:	PUSH BC			; @ # $ Salva BC (aaaa)
  131		PUSH HL			; @ # $ Salva HL (bbbb aaaa)
  132		PUSH DE			; @ # $ Salva DE (cccc bbbb aaaa)
  135 		JR   BL			; @ # $ Desenha bloco na direção de Y
  136 VY:	POP  DE			; @ # $ Recupera DE (bbbb aaaa)
  143		LD   BC,(&H8FF0)	; @ # $ Valor da soma
  144		LD   H,D		; @ # $ Cópia de DE para HL
  145		LD   L,E		; @ # $ 
  146		ADD  HL,BC		; @ # $ DE = DE + 0100H
  147		LD   D,H		; @ # $ 
  148		LD   E,L		; @ # $ 
  150		POP  HL			; @ # $ Recupera HL (aaaa)
  170		ADD  HL,BC		; @ # $ HL = HL + 0100H
  202		POP  BC			; @ # $ Recupera contador B (-)
  203		DJNZ LY			; @ # $ 
  204		LD   BC,(&H8FF8)	; @ # Recupera moldura
  205		PUSH BC			; @ # Salva BC
  206		LD   A,4		; @ # 
  207		CP   B			; @ # 
  208		JR   Z,M3		; @ # Se moldura for 4, a proxima é a 3
  209		DEC  A			; @ # 
  210		CP   B			; @ # 
  211		JR   Z,M2		; @ # Se moldura for 3, a proxima é a 2 
  212		DEC  A			; @ # 
  213		CP   B			; @ # 
  214		JR   Z,M1		; @ # Se moldura for 2, a proxima é a 1 
  215		POP  BC			; @ Acerta a pilha
  216		LD   BC,(&H8FF4)	; @
  217		DEC  B			; @
  218		DEC  B			; @
  219		LD   (&H8FF4),BC	; @ Diminui o tamanho do eixo X
  220		LD   BC,(&H8FF6)	; @
  221		DEC  B			; @
  222		DEC  B			; @
  223		LD   (&H8FF6),BC	; @ Diminui o tamanho do eixo Y
  224		PUSH HL			; @ 
  225		LD   H,D		; @ 
  226		LD   L,E		; @ 
  227		LD   BC,&H0108		; @ Avança em diagonal
  228		ADD  HL,BC		; @ 
  229		LD   D,H		; @ 
  230		LD   E,L		; @ 
  231		POP  HL			; @ 
  232		ADD  HL,BC		; @
  233		LD   BC,(&H8FFA)	; @
  234		DJNZ LE			; @
  235		RET			; FIM
  236 LLI:	JR   LI			; Atalho para salto curto
  237 VVY:	JR   VY			; Atalho para salto curto
  238 BL:	JR   BLOCO		; Atalho para salto curto
  250 M3:	LD   BC,&0100		;
  251		LD   (&H8FF0),BC	;
  252		LD   BC,(&H8FF6)	;
  253		LD   (&H8FF2),BC	;
  254		POP  BC			;
  255		DJNZ LLI		;
  256 M2:	LD   BC,&FFF8		;
  257		LD   (&H8FF0),BC	;
  258		LD   BC,(&H8FF4)	;
  259		LD   (&H8FF2),BC	;
  260		POP  BC			;
  261		DJNZ LLI		;
  262 M1:	LD   BC,&FF00		;
  263		LD   (&H8FF0),BC	;
  264		LD   BC,(&H8FF6)	;
  265		LD   (&H8FF2),BC	;
  266		POP  BC			;
  267		DJNZ LLI		;
  310 BLOCO:	LD   BC,8		; 8 bytes consecutivos (1 bloco 8x8)
  315 		PUSH HL			; Salva HL (xxxx)
  316 		PUSH DE			; Salva DE (yyyy xxxx)
  320 		CALL &H5C		; Copia bloco RAM->VRAM (modifica alguns regs)
  325 		POP  DE			; Recupera DE (xxxx)
  326 		POP  HL			; Recupera HL
  330 		LD   BC,&H1800		; *
  340 		ADD  HL,BC		; * HL = HL + 1800H
  350 		PUSH HL			; *
  360 		LD   HL,&H2000		; %
  370 		ADD  HL,DE		; % DE = DE + 2000H
  380 		PUSH HL			; %
  390 		POP  DE			; Recupera DE (DE+2000)
  400 		POP  HL			; Recupera HL (HL+1800)
  410 		LD   BC,8		; 8 bytes consecutivos (1 bloco 8x8)
  420 		CALL &H5C		; Copia bloco RAM->VRAM (modifica alguns regs)
  430		JR   VVY		; Volta para VY


Marcelo Teixeira Silveira
Engenheiro de Sistemas e Computação - UERJ
Mestre em Engenharia de Computação - UERJ

© MarMSX 1999-2017