Buscar

Assembly - Cap 24

Prévia do material em texto

+---------------+¦ ASSEMBLY XXIV ¦+---------------+
 Até agora vimos os registradores MapMask, BitMask, "EnableSet/Reset" e Set/Reset. Vimos também que MapMask permite ou näomudanças nos quatro planos de bits idependentemente. BitMaskmascara os bits näo desejáveis (e esses säo lidos dos latches quandoescrevemos na memória). Ainda por cima, vimos que é possívelatualizar os quatro planos de bits ao mesmo tempo com bitsdiferentes usando "Enable Set/Reset" e Set/Reset. Isso tudo usandoo modo de escrita 0!
 ¦ Modo de escrita 1
 O modo de escrita 1 lida somente com os latches da placa VGA.Com esse modo podemos copiar o conteúdo dos quatro planos de bits deuma posiçäo para outra com uma única instruçäo em assembly!
 Como já vimos, os latches dos quatro planos säo carregadossempre que fazemos uma leitura na memória do sistema (em todos osmodos de escrita!). No modo 1 isso também vale. Só que nesse modonäo é possível escrever nada nos planos de bits!! Simplesmente,quanto mandamos escrever numa determinada posiçäo da memória dosistema, os latches é que atualizaräo essa posiçäo. No modo 1 osregistros Set/Reset, "Enable Set/Reset" e BitMask näo funcionam paranada. Assim, depois de setado o modo 1, podemos usar:
 +-----------------------------------------------------------------+ ¦ REP MOVSB ¦ +-----------------------------------------------------------------+
 Para copiarmos bytes dos quatro planos de vídeo de uma posiçäoda tela para outra. E RAPIDO! Só que tem um pequeno problema:Podemos copiar BYTES e näo pixeis individuais! Lembre-se que umbyte contém oito pixeis (com cada bit de um pixel em um plano debits!). Se sua intençäo é copiar um bloco inteiro, porém alinhadopor BYTE, entäo o modo 1 é a escolha mais sensata. Caso contrário,use outro modo de escrita (o modo 0, por exemplo!).
 Ahhh... podemos conseguir o mesmo efeito do modo de escrita 1 nomodo de escrita 0! Basta zerarmos todos os bits de BitMask! Pensebem: Se BitMask está completamente zerado, entäo os dados viräoapenas dos latches! O que nos deixa com um modo de escritaobsoleto, já que podemos fazer o mesmo trabalho no modo 0! :)
 ¦ O registrador MODE
 Para ajustar o modo de escrita precisamos de um registrador. Oregistrador MODE é descrito abaixo:
 7 6 5 4 3 2 1 0 +-Ð-Ð-Ð-Ð-Ð-Ð-Ð-+ ¦?¦ ¦ ¦ ¦ ¦?¦ ¦ ¦ +-¤-¤-¤-¤-¤-¤-¤-+ ¦ ¦ ¦ ¦ ¦ ¦ +-¦ ¦ ¦ +------- Modo de escrita ¦ ¦ +----------- Modo de leitura ¦ +------------- Odd/Even +--------------- Deslocamento
 O único campo que nos interessa no momento é o "Modo de
Página 1
escrita". Por isso, para modificar o modo, precisaremos ler oregistro MODE, setar o modo de escrita, e depois reescrevê-lo...para que näo façamos mudanças nos demais bits. Os modos de escritaválidos säo os citados anteriormente (repare que esse campo tem 2bits de tamanho!).
 O registrador MODE faz parte do circuito GC (o mesmo deBitMask, "Enable Set/Reset" e Set/Reset) da placa VGA, seu índice é5.
 Well... já que o modo 1 é obsoleto, vou colocar aqui algunsmacros para facilitar o entendimento dos próximos códigos-fonte, ok?
 +-----------------------------------------------------------------+ ¦ ; VGA.INC ¦ ¦ ; Macros para VGA! ¦ ¦ ; Todos os macros alteram dx e ax ¦ ¦ ¦ ¦ ; Macro: Ajusta o modo de escrita ¦ ¦ macro SetWriteMode mode ¦ ¦ ifdifi <mode>,<ah> ¦ ¦ mov ah,mode ¦ ¦ endif ¦ ¦ mov dx,3CEh ¦ ¦ mov al,5 ¦ ¦ out dx,al ¦ ¦ inc dx ¦ ¦ in al,dx ¦ ¦ and ax,1111111100b ¦ ¦ or al,ah ¦ ¦ out dx,al ¦ ¦ endm ¦ ¦ ¦ ¦ ; Macro: Habilita/Mascara os planos de vídeo ¦ ¦ macro MapMask plane ¦ ¦ ifdifi <plane>,<ah> ¦ ¦ mov ah,plane ¦ ¦ endif ¦ ¦ mov al,2 ¦ ¦ mov dx,3C4h ¦ ¦ out dx,ax ¦ ¦ endm ¦ ¦ ¦ ¦ ; Macro: Habilita os bits ¦ ¦ macro BitMask bit ¦ ¦ ifdifi <bit>,<ah> ¦ ¦ mov ah,bit ¦ ¦ endif ¦ ¦ mov al,8 ¦ ¦ mov dx,3CEh ¦ ¦ out dx,ax ¦ ¦ endm ¦ ¦ ¦ ¦ ; Macro: Altera "Enable Set/Reset" ¦ ¦ macro EnableSetReset bitmsk ¦ ¦ ifdifi <bitmsk>,<ah> ¦ ¦ mov ah,bitmsk ¦ ¦ endif ¦ ¦ mov al,1 ¦ ¦ mov dx,3CEh ¦ ¦ out dx,ax ¦ ¦ endm ¦ ¦ ¦ ¦ ; Macro: Ajusta Set/Reset ¦
Página 2
 ¦ macro SetReset value ¦ ¦ ifdifi <value>,<ah> ¦ ¦ mov ah,value ¦ ¦ endif ¦ ¦ sub al,al ; altera tb os flags.. ¦ ¦ mov dx,3CEh ¦ ¦ out dx,ax ¦ ¦ endm ¦ +-----------------------------------------------------------------+
Página 3

Continue navegando