• Jueves 14 de Noviembre de 2024, 16:43

Autor Tema:  Ayudenme De Ustedes Dependo  (Leído 1383 veces)

cinkey

  • Miembro activo
  • **
  • Mensajes: 83
    • Ver Perfil
Ayudenme De Ustedes Dependo
« en: Lunes 27 de Septiembre de 2004, 23:47 »
0
hola denuevo
bueno les comento que me meti en camisa de 11 baras me refiero esuqe tengo que hacer un programa pra ralentizar  un equipo AT con el dma bueno eso es lo facil pero lo dificil es que tengo que programarlo de tal forma que pueda utilizar cualquier de las metodologias me refiero a
dma modo rafaga
dma modo robo de ciclo
por fa les suplico les imploro (y es enserio lo necesito urgente par arqui. del computador)bueno sin mas les mando parte del codigo que tengo.

#include <dos.h>
#include <string.h>

void
  dmacnt(), dmako3(), dmako7(), dmaok3(), dmaok7();

void main(int argc, char **argv)
{
  unsigned nivel;

  printf ("\nDMAKO 1.1 + AT-Ralentizador por DMA  © 1992 CiriSOFT");

  if ((peekb(0xF000,0xFFFE)!=-4) && (peekb(0xF000,0xFFFE)!=-8)) {
    printf("\n  Este programa necesita máquina AT o superior\n");
    exit (1);
    }

  if ((argc<2) || ((nivel=atoi(argv[1]))>3)) {
    printf("\n   ");
    printf("Indicar nivel de freno (1, 2 ó 3) ó 0 para acelerar.\n");
    exit (2);
    }

  dmacnt();
  if (nivel==1) {
    dmaok3(); dmaok7(); dmako7();
    printf ("\n  Ralentización moderada activa.\n");
    }
  else if (nivel==2) {
    dmaok3(); dmaok7(); dmako3();
    printf ("\n  Ralentización elevada activa.\n");
    }
  else if (nivel==3) {
    dmako3(); dmako7();
    printf ("\n  Ralentización máxima activa.\n");
    }
  else {
    dmaok3(); dmaok7();
    printf ("\n  Ralentización desactivada.\n");
    }
}

void dmacnt()
{
  outportb(0x07, 0xFF);  /* cuenta del canal 3 a 0xFFFF */
  outportb(0x07, 0xFF);
  outportb(0xCE, 0xFF);  /* cuenta del canal 7 a 0xFFFF */
  outportb(0xCE, 0xFF);
}

void dmako3 (void)
{
  outportb (0x0B, 0x5B);  /* canal 3: autoinic., read */
  outportb (0x0A, 3);     /* desenmascarar */
}

void dmaok3 (void)
{
  outportb (0x0A, 7);     /* enmascarar */
  outportb (0x0B, 0x43);  /* canal 3: modo normal */
}

void dmako7 (void)
{
  outportb (0xD6, 0x5B);  /* canal 7: autoinic., read */
  outportb (0xD4, 3);     /* desenmascarar */
}

void dmaok7 (void)
{
  outportb (0xD4, 7);     /* enmascarar */
  outportb (0xD6, 0x43);  /* canal 7: modo normal */
}

 

Velocidad estimada
tras la ejecución
de DMAKO.C en un
AT 386-25. Datos
calculados con el
test de LANDMARK

Les agradesco de antemano cualquier colaboracion
porfa ayudenme
jorge
 :comp:

cinkey

  • Miembro activo
  • **
  • Mensajes: 83
    • Ver Perfil
Re: Ayudenme De Ustedes Dependo
« Respuesta #1 en: Miércoles 29 de Septiembre de 2004, 02:12 »
0
porfa ayudenme no  se que mas hacer l oe intentado pero mi maquina se tiro tengo que reinstalar .taves no me explique bien>
1.-programar un programa de tal forma que manipular el tipo de transporte ya se RAFAGA o ROBO
espero su ayuda

cinkey

  • Miembro activo
  • **
  • Mensajes: 83
    • Ver Perfil
Re: Ayudenme De Ustedes Dependo
« Respuesta #2 en: Jueves 30 de Septiembre de 2004, 14:54 »
0
bueno encontre algo pero no se como aplicarlo porfa solo tengo 3 dias mas

Operación por DMA
1.- Programar la operación de DMA en el periférico: instrucciones de salida (OUT)
1. Dir. Comienzo zona de Memoria: Dir. ¾® DIR
2. Tamaño del bloque: Nº datos . ¾® CONT
3. E ó S: E ó S ¾® E/S
· A partir de ese momento la CPU se dedicará a “sus labores”
2.- Cuando el periférico está listo para la transferencia de un dato, solicita los
buses:
Activa BUSREQ
· La CPU “cederá” los buses cuando acabe la “fase” actual de la instrucción
que está ejecutando:
· “Congela” la ejecución de la instrucción (no ejecuta la
siguiente Fase).
· Pone en “alta impedancia” sus conexiones a:
· Bus de Datos (DB)
· Bus de Direcciones (AB)
· Señales de control de Memoria (RD, WR, etc.)
· Activa BUSACK
3.- El periférico:
1. Transfiere el dato a/desde M activando las ss. de control y dirección
pertinentes y usando el Bus de Datos.
2. CONT ¬¾ CONT - 1
3. DIR ¬¾ DIR + 1
4.- Si CONT ¹0 (* faltan más datos por transferir *)
entonces
Si perif. listo para transferir siguiente dato
entonces (*modo RÁFAGA*)
· Mantiene activa BUSREQ
· GO TO 3
si no (*robo de ciclo aislado*)
· Desactiva BUSREQ
· la CPU:
· desactiva BUSACK
· continúa ejecutando Fase siguiente
· GO TO 2
Si no (* CONT = 0: bloque de datos transferido *)
· Desactiva BUSREQ
· “avisa” a la CPU de que ha terminado la operación de DMA:
solicita Interrupción:
Activa INT