OpenCores
URL https://opencores.org/ocsvn/1664/1664/trunk

Subversion Repositories 1664

[/] [1664/] [trunk/] [c/] [cpu_1664/] [cpu_1664_asm_ajunta__cadena.c] - Rev 2

Compare with Previous | Blame | View Log

#include "cpu_1664.h"
 
void cpu_1664_asm_ajunta__cadena(struct cpu_1664 *cpu, n1 *cadena, nN cuantia)
{
 const n1 sinia_braso_clui[] = {cpu_1664_asm_table_clui};
 const n1 sinia_braso_inclui[] ={cpu_1664_asm_table_sinia_inclui_brasos};
 struct lista *lista_parametre;
 n1 *fini=cadena+cuantia;
 n1 *cadena_;
 struct lista *lista_eticeta_cadena;
 nN i;
 struct lista *model_cadena;
 cpu_1664_asm_sinia_t sinia;
 
 while(cadena<fini)
 {
 
  if(cpu->asm_eror!=0)
  {
   break;
  }
 
  cpu->asm_eror=0;
 
  switch(*cadena)
  {
   default:
    lista_parametre=cpu_1664_asm_lista_parametre__cadena(cadena);
    sinia=cpu_1664_asm_sinia_t_sinia__cadena(((struct lista **)(lista_parametre->datos))[0]->datos,((struct lista **)(lista_parametre->datos))[0]->contador);
 
    for(model_cadena=0, i=0;i<cpu->lista_model_sinia->contador/sizeof(cpu_1664_asm_sinia_t);i++)
    {
 
     if(((cpu_1664_asm_sinia_t *)(cpu->lista_model_sinia->datos))[i]==sinia)
     {
      model_cadena=((struct lista **)(cpu->lista_model->datos))[i]; break;
     }
    }
 
    if(model_cadena!=0)
    {
     cpu_1664_asm_asm_model__lista(cpu, model_cadena, lista_parametre, 1);
 
     while((*cadena!=cpu_1664_asm_sinia_fini)&&(*(cadena-1)!='\\')&&(cadena<fini)) 
     { 
 
      switch(*cadena)
      {
       default:
        cadena++; 
        break;
 
       case '"':
       case '[':
       case '(':
       case '{':
        cadena+=nN_cuantia_brasetida__cadena(cadena, *cadena, sinia_braso_clui[*cadena]);
        break;
      }
     }
    }
    else
    {
     cpu_1664_asm_asm_opera__lista_2(cpu, lista_parametre);
     while((*cadena!=cpu_1664_asm_sinia_fini)&&(cadena<fini)) { cadena++; }
    }
 
    lista_2_libri(lista_parametre);
    break;
 
   case cpu_1664_asm_sinia_comenta:
    while((*cadena!=cpu_1664_asm_sinia_fini)&&(cadena<fini)) { cadena++; }
    break;
 
   //case 0x0a:
   case cpu_1664_asm_sinia_fini:
   case 0x09:
   case ' ':
    cadena++;
    break;
 
   case cpu_1664_asm_sinia_opera:
    cadena++;
    cpu_1664_asm_asm_opera__cadena(cpu, cadena);
    while((*cadena!=cpu_1664_asm_sinia_fini)&&(cadena<fini)) { cadena++; }
    break;
 
   case cpu_1664_asm_sinia_eticeta:
    cadena_=++cadena;
    while((sinia_braso_inclui[*cadena]==1)&&(cadena<fini)) { cadena++; }
    cpu_1664_asm_defina_valua(cpu, cpu_1664_asm_sinia_t_sinia__cadena(cadena_,cadena-cadena_), cpu->lista_imaje_asm->contador);
    lista_libri(cpu->lista_eticeta_cadena);
    cpu->lista_eticeta_cadena=lista_nova__datos(cadena_, cadena-cadena_);
    break;
 
   case cpu_1664_asm_sinia_eticeta_su:
    cadena_=cadena;
    while((sinia_braso_inclui[*cadena]==1)&&(cadena<fini)) { cadena++; }
    lista_eticeta_cadena=lista_nova__lista(cpu->lista_eticeta_cadena);
    lista_ajunta__datos(lista_eticeta_cadena, cadena_, cadena-cadena_);
    cpu_1664_asm_defina_valua(cpu, cpu_1664_asm_sinia_t_sinia__cadena(lista_eticeta_cadena->datos, lista_eticeta_cadena->contador), cpu->lista_imaje_asm->contador);
    lista_libri(lista_eticeta_cadena);
    break;
 
   case '{': //pasaladal ".m"
    cpu_1664_asm_asm_comanda__m(cpu, cadena);
    cadena+=nN_cuantia_brasetida__cadena(cadena, *cadena, sinia_braso_clui[*cadena]);
 
    while((*cadena!=cpu_1664_asm_sinia_fini)&&(*(cadena-1)!='\\')&&(cadena<fini)) 
    { 
 
     switch(*cadena)
     {
      default:
       cadena++; 
       break;
 
      case '"':
      case '[':
      case '(':
      case '{':
       cadena+=nN_cuantia_brasetida__cadena(cadena, *cadena, sinia_braso_clui[*cadena]);
       break;
     }
    }
    break;
 
   case cpu_1664_asm_sinia_comanda:
    cpu_1664_asm_asm_comanda(cpu, cadena+1);
 
    while((*cadena!=cpu_1664_asm_sinia_fini)&&(*(cadena-1)!='\\')&&(cadena<fini)) 
    { 
 
     switch(*cadena)
     {
      default:
       cadena++; 
       break;
 
      case '"':
      case '[':
      case '(':
      case '{':
       cadena+=nN_cuantia_brasetida__cadena(cadena, *cadena, sinia_braso_clui[*cadena]);
       break;
     }
    }
    break;
 
  }
 }
// taxe
 if(cpu->lista_taxe->contador!=0)
 {
  nN i;
  cpu_1664_sinia_t desloca_;
  struct lista *lista_taxe_=lista_nova(0);
  struct cpu_1664_asm_taxe *taxe;
  for(i=0;i<cpu->lista_taxe->contador/sizeof(P);i++)
  {
   cpu->avisa__no_definida=0;
   taxe=((struct cpu_1664_asm_taxe *)((struct lista **)(cpu->lista_taxe->datos))[i]);
   desloca_=cpu->lista_imaje_asm->contador;
   cpu->lista_imaje_asm->contador=taxe->desloca;
   taxe->parola=(taxe->parola&0xff)|taxe->asm_opera_parametre_funsiona(cpu, taxe->lista)<<8;
   *((cpu_1664_opera_t *)(cpu->lista_imaje_asm->datos+taxe->desloca))=taxe->parola;
   if(cpu->avisa__no_definida!=0)
   {
//    cadena__f((P)scrive_stdout, "avisa : taxe [%.*x] no definida\n",8,taxe->desloca);
    lista_ajunta__P(lista_taxe_, (P)taxe);
   }
   else
   { 
    lista_2_libri(taxe->lista);
    memoria_libri((P)taxe);
   }
   cpu->lista_imaje_asm->contador=desloca_;
  }
  lista_libri(cpu->lista_taxe);
  cpu->lista_taxe=lista_taxe_;
 }
 
// taxe_d
 if(cpu->lista_taxe_d->contador!=0)
 {
  struct lista *lista_taxe_d_=lista_nova(0);
  struct cpu_1664_asm_taxe_d *taxe_d;
  cpu_1664_sinia_t valua[1];
  nN i,j;
  for(i=0;i<cpu->lista_taxe_d->contador/sizeof(P);i++)
  {
   cpu->avisa__no_definida=0;
   taxe_d=((struct cpu_1664_asm_taxe_d *)((struct lista **)(cpu->lista_taxe_d->datos))[i]);
   valua[0]=cpu_1664_asm_n8_valua__lista(cpu, taxe_d->lista);
 
   for(j=0;j<taxe_d->cuantia;j++)
   {
    ((n1 *)(cpu->lista_imaje_asm->datos+taxe_d->desloca))[j]=((n1 *)(valua))[j];
   }
 
   if(cpu->avisa__no_definida!=0)
   {
//    cadena__f((P)scrive_stdout, "avisa : taxe_d [%.*x] no definida\n",8,taxe_d->desloca);
    lista_ajunta__P(lista_taxe_d_, (P)taxe_d);
   }
   else
   {
    lista_libri(taxe_d->lista);
    memoria_libri((P)taxe_d);
   }
  }
  lista_libri(cpu->lista_taxe_d);
  cpu->lista_taxe_d=lista_taxe_d_;
 }
}
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.