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

Subversion Repositories 1664

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /1664/trunk
    from Rev 1 to Rev 2
    Reverse comparison

Rev 1 → Rev 2

/c/linux/consola_leje_carater.c
0,0 → 1,19
#include "sospesifada.h"
#include <termios.h>
 
char consola_leje_carater()
{
char carater = 0;
struct termios old = {0};
tcgetattr(0, &old);
old.c_lflag &= ~ICANON;
old.c_lflag &= ~ECHO;
old.c_cc[VMIN] = 1;
old.c_cc[VTIME] = 0;
tcsetattr(0, TCSANOW, &old);
read(0, &carater, 1);
old.c_lflag |= ICANON;
old.c_lflag |= ECHO;
tcsetattr(0, TCSADRAIN, &old);
return carater;
}
/c/linux/memoria_move.c
0,0 → 1,10
#include "sospesifada.h"
 
void memoria_move(n1 *dst, n1 *fnt, nN cuantia)
{
sN i;
for(i=cuantia;i>=0;i--)
{
dst[i]=fnt[i];
}
}
/c/linux/memoria_copia.c
0,0 → 1,10
#include "sospesifada.h"
 
void memoria_copia(n1 *dst,n1 *fnt,nN cuantia)
{
nN conta;
for(conta = 0;conta<cuantia;conta++)
{
dst[conta]=fnt[conta];
}
}
/c/linux/sospesifada.h
0,0 → 1,16
#include "tipodef.h"
#define _GNU_SOURCE
#include "sys/types.h"
#include "sys/stat.h"
#include "sys/mman.h"
#include <fcntl.h>
#include <unistd.h>
 
void * memoria_nova (nN);
void * memoria_crese (n1 *, nN);
void memoria_libri (n1 *);
void memoria_copia (n1 *,n1 *,nN);
void memoria_move (n1 *,n1 *,nN);
 
void scrive_stdout(char *, nN);
char consola_leje_carater();
/c/linux/memoria_libri.c
0,0 → 1,9
#include "sospesifada.h"
#include "sys/mman.h"
 
void memoria_libri(n1 * _mapa)
{
nN * mapa = (nN *)(_mapa-sizeof(P));
nN cuantia = *mapa;
munmap(mapa, cuantia);
}
/c/linux/memoria_crese.c
0,0 → 1,9
#include "sospesifada.h"
 
void * memoria_crese(n1 *memoria, nN grandia)
{
nN *mapa=(nN *)(memoria-sizeof(nN));
n1 *remapa=mremap(mapa,*mapa,grandia+sizeof(nN),MREMAP_MAYMOVE);
*(nN *)remapa=grandia;
return remapa+sizeof(nN);
}
/c/linux/memoria_nova.c
0,0 → 1,8
#include "sospesifada.h"
 
void * memoria_nova(nN cuantia)
{
n1 * mapa = mmap(0,cuantia+sizeof(P),PROT_READ|PROT_WRITE,MAP_ANONYMOUS|MAP_PRIVATE,0,0);
*(nN *)mapa=cuantia;
return mapa+sizeof(nN);
}
/c/linux/Makefile
0,0 → 1,62
arci = amd64
#crus = arm-linux-gnu-
intende_nom = sospesifada
intende_fix = lib$(intende_nom).a
 
radi = ../..
 
fonte = $(radi)
fonte_arci = $(radi)/arci/$(arci)/fonte
fonte_linux = $(radi)/linux
compilador_inclui = -I$(fonte_arci)/../inclui -I../linux
 
instala_curso = /usr/local/lib
 
compilador = $(crus)gcc
 
compilador_sinia = -Wall -Werror -std=c99 -O2 -c $(compilador_inclui)
#linker = ld
 
arcivador = $(crus)ar
arcivador_sinia = crus
 
asembledor_s = $(crus)as
 
asembledor_asm = yasm
asembledor_asm_sinia = -f elf64
 
ojetos_otra =
ojetos = $(ojetos_otra)\
memoria_nova.o memoria_crese.o memoria_libri.o memoria_move.o\
$(fonte_arci)/memoria/memoria_copia.o\
scrive_stdout.o\
consola_leje_carater.o\
%.o : %.c
@echo $(compilador) $^
@$(compilador) $(compilador_sinia) -o $@ $<
 
%.o : %.s
@echo $(asembledor_s) $^
@$(asembledor_s) $(asembledor_s_sinia) -o $@ $<
 
%.o : %.asm
@echo $(asembledor_asm) $^
@$(asembledor_asm) $(asembledor_asm_sinia) -o $@ $<
 
$(intende_fix) : $(ojetos)
@echo $(arcivador) $@
@$(arcivador) $(arcivador_sinia) $@ $^
 
instala: $(intende_fix)
@echo instala $(intende_fix)
@cp $(intende_fix) $(instala_curso)
 
sutrae:
@echo sutrae $(intende_fix)
@-rm $(instala_curso)/$(intende_fix)
 
limpa:
# @-rm $(intende_fix) $(ojetos)
@-rm $(ojetos) $(intende_fix)
 
/c/linux/scrive_stdout.c
0,0 → 1,7
#include "sospesifada.h"
#include <unistd.h>
 
void scrive_stdout(char *cadena, nN cuantia)
{
write(1, cadena, cuantia);
}
/c/cpu_1664/cpu_1664_opera__eor.c
0,0 → 1,13
#include "cpu_1664.h"
 
void cpu_1664_opera__eor(struct cpu_1664 *cpu, n1 bait)
{
cpu->opera_sicle=cpu_1664_sicle_opera_eor;
cpu->sinia[bait&((1<<cpu_1664_bitio_rd)-1)]^=cpu->sinia[bait>>cpu_1664_bitio_rd];
if (cpu->depende[cpu_1664_depende_bitio_depende_influe]!=0)
{
cpu->depende[cpu_1664_depende_z] = (cpu->sinia[bait&((1<<cpu_1664_bitio_rd)-1)]==0);
cpu->depende[cpu_1664_depende_n] = cpu->depende[cpu_1664_depende_z]==0;
}
}
/c/cpu_1664/cpu_1664_dev_opera_parametre_funsiona__3e3e2e.c
0,0 → 1,44
#include "cpu_1664.h"
 
struct lista * cpu_1664_dev_opera_parametre_funsiona__3e3e2e(struct cpu_1664 * cpu, n1 bait)
{
 
char opera_eor[]={"eor"};
char opera_and[]={"and"};
char opera_or[]={"or"};
char opera_cam[]={"cam"};
char *opera[4]={opera_eor,opera_and,opera_or,opera_cam};
struct lista *lista_2=lista_nova(0);
struct lista *lista_parametre=lista_nova(0);
struct lista *lista_informa=lista_nova(0);
n1 A=bait&0x07;;
n1 B=(bait>>3)&0x07;;
n1 C=bait>>6;
lista_ajunta_asciiexadesimal__n1(lista_parametre, A);
lista_ajunta__dato(lista_parametre, ' ');
lista_ajunta_asciiexadesimal__n1(lista_parametre, B);
lista_ajunta__dato(lista_parametre, ' ');
lista_ajunta_asciiexadesimal__n1(lista_parametre, C);
if(C<3)
{
lista_ajunta__dato(lista_informa, (cpu->depende[A]!=0)|'0');
lista_ajunta__dato(lista_informa, ' ');
lista_ajunta__ccadena(lista_informa, opera[C]);
lista_ajunta__dato(lista_informa, ' ');
lista_ajunta__dato(lista_informa, (cpu->depende[B]!=0)|'0');
}
else
{
lista_ajunta__dato(lista_informa, (cpu->depende[A]!=0)|'0');
lista_ajunta__ccadena(lista_informa, " -> <- ");
lista_ajunta__dato(lista_informa, (cpu->depende[B]!=0)|'0');
}
lista_ajunta__P(lista_2, (P)lista_parametre);
lista_ajunta__P(lista_2, (P)lista_informa);
return lista_2;
}
/c/cpu_1664/cpu_1664_asm_ajunta__cadena.c
0,0 → 1,215
#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_;
}
}
/c/cpu_1664/cpu_1664_asm_asm_comanda__m.c
0,0 → 1,32
#include "cpu_1664.h"
 
void cpu_1664_asm_asm_comanda__m(struct cpu_1664 *cpu, n1 *cadena)
{
struct lista *lista_parametre=cpu_1664_asm_lista_parametre__cadena(cadena);
struct lista *model=0;
if(((struct lista **)(lista_parametre->datos))[0]->datos[0]==cpu_1664_asm_sinia_model_abri)
{
model=((struct lista **)(lista_parametre->datos))[0];
}
else
{
cpu_1664_asm_sinia_t sinia=cpu_1664_asm_sinia_t_sinia__cadena(((struct lista **)(lista_parametre->datos))[0]->datos,((struct lista **)(lista_parametre->datos))[0]->contador);
nN i;
for(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=((struct lista **)(cpu->lista_model->datos))[i]; break;
}
}
}
if(model!=0)
{
cpu_1664_asm_asm_model__lista(cpu, model, lista_parametre, 1);
}
lista_2_libri(lista_parametre);
}
/c/cpu_1664/cpu_1664_asm.c
0,0 → 1,35
#include "cpu_1664.h"
#include <stdio.h>
 
int main(nN argc, n1 **argv)
{
if (argc>2)
{
struct cpu_1664 *cpu=cpu_1664_nova(0);
FILE *fix=fopen(argv[1], "wb");
nN contador_ante=0;
nN i;
for(i=2;i<(argc);i++)
{
struct lista *lista_enflue=lista_nova__ccadena(".inclui ");
lista_ajunta__ccadena(lista_enflue, argv[i]);
cpu_1664_asm_ajunta__cadena(cpu, lista_enflue->datos, lista_enflue->contador);
lista_libri(lista_enflue);
printf("[0x%.*llx] %s\n",16,cpu->lista_imaje_asm->contador-contador_ante,argv[i]);
contador_ante=cpu->lista_imaje_asm->contador;
}
printf("[0x%.*llx] %s\n",16,cpu->lista_imaje_asm->contador,argv[1]);
fwrite(cpu->lista_imaje_asm->datos, 1, cpu->lista_imaje_asm->contador, fix);
fclose(fix);
cpu_1664_libri(cpu);
return 0;
}
else
{
printf("asm_1664 lista_enflue esflue\n");
return 0;
}
}
/c/cpu_1664/cpu_1664_asm_opera_parametre_funsiona__6r2r.c
0,0 → 1,34
#include "cpu_1664.h"
 
n1 cpu_1664_asm_opera_parametre_funsiona__6r2r(struct cpu_1664 *cpu, struct lista *lista)
{
nN lista_cuantia=lista->contador/sizeof(P);
nN Ar,Br;
if(lista_cuantia>=2)
{
Ar=cpu_1664_asm_n8_valua__lista(cpu, ((struct lista **)(lista->datos))[lista_cuantia-2]);
Br=cpu_1664_asm_n8_valua__lista(cpu, ((struct lista **)(lista->datos))[lista_cuantia-1]);
if(((Ar>=64)))
{
//eror parametre Ar
cpu->asm_eror=1;
return 0;
}
if((Br>=4))
{
//eror parametre Br
cpu->asm_eror=1;
return 0;
}
}
else
{
//error parametre cuantia
cpu->asm_eror=1;
return 0;
}
return Ar|(Br<<6);
}
/c/cpu_1664/cpu_1664_asm_opera_parametre_funsiona__2r6r.c
0,0 → 1,34
#include "cpu_1664.h"
 
n1 cpu_1664_asm_opera_parametre_funsiona__2r6r(struct cpu_1664 *cpu, struct lista *lista)
{
nN lista_cuantia=lista->contador/sizeof(P);
nN Ar,Br;
if(lista_cuantia>=2)
{
Ar=cpu_1664_asm_n8_valua__lista(cpu, ((struct lista **)(lista->datos))[lista_cuantia-2]);
Br=cpu_1664_asm_n8_valua__lista(cpu, ((struct lista **)(lista->datos))[lista_cuantia-1]);
if(((Ar>=(1<<cpu_1664_bitio_rd))))
{
//eror parametre Ar
cpu->asm_eror=1;
return 0;
}
if((Br>=(1<<(8-cpu_1664_bitio_rd))))
{
//eror parametre Br
cpu->asm_eror=1;
return 0;
}
}
else
{
//error parametre cuantia
cpu->asm_eror=1;
return 0;
}
return Ar|(Br<<cpu_1664_bitio_rd);
}
/c/cpu_1664/cpu_1664_imaje_ajunta__lista.c
0,0 → 1,6
#include "cpu_1664.h"
 
void cpu_1664_imaje_ajunta__lista(struct cpu_1664 *cpu, struct lista *lista)
{
cpu_1664_imaje_ajunta__datos(cpu, lista->datos, lista->contador);
}
/c/cpu_1664/cpu_1664_dev_opera_parametre_funsiona__8ylr.c
0,0 → 1,40
#include "cpu_1664.h"
 
struct lista * cpu_1664_dev_opera_parametre_funsiona__8ylr(struct cpu_1664 * cpu, n1 bait)
{
struct lista *lista_2=lista_nova(0);
struct lista *lista_parametre=lista_nova(0);
struct lista *lista_informa=lista_nova(0);
n1 A=bait&((1<<cpu_1664_bitio_r)-1);
n1 B=bait>>cpu_1664_bitio_r;
n1 bool_indise=B>2;
n1 bool_nondireta=B&1;
if(bool_nondireta!=0)
{
lista_ajunta__dato(lista_parametre, '[');
}
if(bool_indise!=0)
{
lista_ajunta__dato(lista_parametre, '+');
}
lista_ajunta_asciiexadesimal__n1(lista_parametre, A);
if(bool_nondireta!=0)
{
lista_ajunta__dato(lista_parametre, ']');
}
if(bool_indise!=0)
{
lista_ajunta_asciiexadesimal__n8(lista_informa, cpu->sinia[A]+cpu->sinia[cpu_1664_sinia_IP]);
}
else
{
lista_ajunta_asciiexadesimal__n8(lista_informa, cpu->sinia[A]);
}
lista_ajunta__P(lista_2, (P)lista_parametre);
lista_ajunta__P(lista_2, (P)lista_informa);
return lista_2;
}
/c/cpu_1664/cpu_1664_dev_opera_parametre_funsiona__nd.c
0,0 → 1,12
#include "cpu_1664.h"
//no definida
struct lista * cpu_1664_dev_opera_parametre_funsiona__nd(struct cpu_1664 * cpu, n1 bait)
{
struct lista *lista_2=lista_nova(0);
struct lista *lista_parametre=lista_nova(0);
struct lista *lista_informa=lista_nova(0);
lista_ajunta__P(lista_2, (P)lista_parametre);
lista_ajunta__P(lista_2, (P)lista_informa);
return lista_2;
}
/c/cpu_1664/cpu_1664_asm_n1_opera_valua__lista.c
0,0 → 1,19
#include "cpu_1664.h"
 
n1 cpu_1664_asm_n1_opera_valua__lista(struct cpu_1664 *cpu, struct lista *lista)
{
n1 opera=0xff;
cpu_1664_asm_sinia_t sinia_opera=cpu_1664_asm_sinia_t_sinia__cadena(lista->datos,lista->contador);
nN i;
for(i=0;i<(cpu->lista_opera_sinia->contador/sizeof(cpu_1664_asm_sinia_t));i++)
{
if(((cpu_1664_asm_sinia_t *)(cpu->lista_opera_sinia->datos))[i]==sinia_opera)
{
opera=i;
break;
}
}
return opera;
}
/c/cpu_1664/cpu_1664_opera__and.c
0,0 → 1,14
#include "cpu_1664.h"
 
void cpu_1664_opera__and(struct cpu_1664 *cpu, n1 bait)
{
cpu->sinia[bait&((1<<cpu_1664_bitio_rd)-1)]&=cpu->sinia[bait>>cpu_1664_bitio_rd];
if (cpu->depende[cpu_1664_depende_bitio_depende_influe]!=0)
{
cpu->depende[cpu_1664_depende_z] = (cpu->sinia[bait&((1<<cpu_1664_bitio_rd)-1)]==0);
cpu->depende[cpu_1664_depende_n] = cpu->depende[cpu_1664_depende_z]==0;
}
 
cpu->opera_sicle=cpu_1664_sicle_opera_and;
}
/c/cpu_1664/cpu_1664_dev_dev_libri.c
0,0 → 1,17
#include "cpu_1664.h"
 
void cpu_1664_dev_dev_libri(struct lista *lista_dev)
{
if(lista_dev!=0)
{
if(((struct lista **)(lista_dev->datos))[0]!=0)
{
lista_libri(((struct lista **)(lista_dev->datos))[0]);
}
lista_2_libri(((struct lista **)(lista_dev->datos))[1]);
lista_2_libri(((struct lista **)(lista_dev->datos))[2]);
lista_libri(lista_dev);
}
}
/c/cpu_1664/cpu_1664_opera__ldi.c
0,0 → 1,7
#include "cpu_1664.h"
 
void cpu_1664_opera__ldi(struct cpu_1664 *cpu, n1 bait)
{
cpu->opera_sicle=cpu_1664_sicle_opera_ldi;
cpu->sinia[0]=(((cpu->sinia[0]|0xff)^0xff)|bait);
}
/c/cpu_1664/cpu_1664_asm_asm_opera__cadena.c
0,0 → 1,8
#include "cpu_1664.h"
 
void cpu_1664_asm_asm_opera__cadena(struct cpu_1664 *cpu, n1 *cadena)
{
struct lista *lista=cpu_1664_asm_lista_parametre__cadena(cadena);
cpu_1664_asm_asm_opera__lista_2(cpu, lista);
lista_2_libri(lista);
}
/c/cpu_1664/cpu_1664_opera__ldm.c
0,0 → 1,21
#include "cpu_1664.h"
 
void cpu_1664_opera__ldm(struct cpu_1664 *cpu, n1 bait)
{
cpu->opera_sicle=cpu_1664_sicle_opera_ldm;
nN sinia=(bait&((1<<cpu_1664_opera_ldm_sinia)-1));
cpu_1664_sinia_t cuantia = 1<<((bait&(3<<cpu_1664_opera_ldm_bitio_estende0))>>cpu_1664_opera_ldm_bitio_estende0);
cpu_1664_sinia_t desloca=cpu->sinia[sinia];
if(((bait&(1<<cpu_1664_opera_ldm_bitio_ajusta))!=0))
{
cpu->sinia[sinia]+=((bait&(1<<cpu_1664_opera_ldm_bitio_orienta))==0) ? -cuantia : cuantia;
if((bait&(1<<cpu_1664_opera_ldm_bitio_ordina))==0)
{
desloca=cpu->sinia[sinia];
}
}
cpu->sinia[0]=cpu_1664_umm(cpu, desloca, (1<<cpu_1664_umm_usor_mapa_permete_leje), cuantia, 0);
}
/c/cpu_1664/cpu_1664_eseta.c
0,0 → 1,9
#include "cpu_1664.h"
 
void cpu_1664_eseta(struct cpu_1664 *cpu, cpu_1664_sinia_t eseta)
{
cpu->sinia_vantaje[cpu_1664_sinia_reveni_eseta]=cpu->sinia[cpu_1664_sinia_IP];
cpu->sinia_vantaje[cpu_1664_sinia_IP]=cpu_1664_desloca_eseta;
cpu_1664_vantaje(cpu, 1);
cpu->sinia[cpu_1664_sinia_eseta]=eseta<<cpu_1664_sinia_t_bitio;
}
/c/cpu_1664/cpu_1664_asm_opera_parametre_funsiona__8e.c
0,0 → 1,8
#include "cpu_1664.h"
 
n1 cpu_1664_asm_opera_parametre_funsiona__8e(struct cpu_1664 * cpu, struct lista *lista)
{
n1 bait=cpu_1664_asm_n8_valua__lista(cpu, ((struct lista **)(lista->datos))[(lista->contador/sizeof(P))-1]);
return bait;
}
/c/cpu_1664/cpu_1664_asm_asm_comanda_ajunta.c
0,0 → 1,7
#include "cpu_1664.h"
 
void cpu_1664_asm_asm_comanda_ajunta(struct cpu_1664 *cpu, char *ccadena, cpu_1664_asm_asm_comanda_funsiona)
{
lista_ajunta__cpu_1664_asm_sinia_t(cpu->lista_asm_comanda_sinia, cpu_1664_asm_sinia_t_sinia__cadena((n1 *)ccadena, nN_cuantia__ccadena(ccadena)));
lista_ajunta__P(cpu->lista_asm_comanda_funsiona, asm_comanda_funsiona);
}
/c/cpu_1664/Makefile
0,0 → 1,107
arci = amd64
#crus = arm-linux-gnu-
intende_fix = lib1664.a
 
radi = ../..
 
fonte = $(radi)
fonte_linux = $(radi)/linux
compilador_inclui = -I$(radi)/arci/$(arci)/inclui -I../linux -I../lista
 
instala_curso = /usr/local/lib
 
compilador_varia =
compilador = $(crus)gcc$(compilador_varia)
 
compilador_sinia = -Dimita -Wall -Werror -std=c99 -O2 -c $(compilador_inclui)
libs = -l1664 -llista -lsospesifada
arcivador = $(crus)ar
arcivador_sinia = crus
 
asembledor = $(crus)as
ojetos_otra =
ojetos = $(ojetos_otra)\
cpu_1664_nova.o cpu_1664_libri.o\
cpu_1664__pasi.o cpu_1664__desifri.o\
cpu_1664_imaje_ajunta__lista.o cpu_1664_imaje_ajunta__datos.o cpu_1664_reinisia.o\
\
cpu_1664_opera___.o\
cpu_1664_opera__ajusta.o\
cpu_1664_opera__rev.o\
cpu_1664_opera__yli.o cpu_1664_opera__ylr.o cpu_1664_opera__dep.o\
cpu_1664_opera__stb.o cpu_1664_opera__ldb.o cpu_1664_opera__cmp.o\
cpu_1664_opera__stm.o cpu_1664_opera__ldm.o cpu_1664_opera__ldi.o cpu_1664_opera__ldis.o\
cpu_1664_opera__str.o cpu_1664_opera__ldr.o cpu_1664_opera__cam.o\
cpu_1664_opera__and.o cpu_1664_opera__or.o cpu_1664_opera__eor.o\
cpu_1664_opera__sar.o cpu_1664_opera__shr.o cpu_1664_opera__shl.o\
cpu_1664_opera__plu.o cpu_1664_opera__sut.o cpu_1664_opera__sutr.o\
cpu_1664_opera__mul.o cpu_1664_opera__div.o\
cpu_1664_opera__bit.o\
cpu_1664_vantaje.o cpu_1664_eseta.o\
cpu_1664_umm.o cpu_1664_umm_tradui_desloca.o\
\
cpu_1664_asm_asm_comanda_ajunta.o\
cpu_1664_asm_ajunta__cadena.o cpu_1664_asm_ajunta__ccadena.o\
cpu_1664_asm_asm_comanda.o\
cpu_1664_asm_asm_comanda__model.o cpu_1664_asm_asm_comanda__m.o\
cpu_1664_asm_asm_model__lista.o\
cpu_1664_asm_asm_comanda__opera.o cpu_1664_asm_asm_comanda__ajusta.o\
cpu_1664_asm_asm_comanda__implicada.o\
cpu_1664_asm_asm_comanda__defina.o cpu_1664_asm_asm_comanda__inclui.o\
cpu_1664_asm_asm_comanda__nodefina.o\
cpu_1664_asm_asm_comanda__ds.o cpu_1664_asm_asm_comanda__d4.o \
cpu_1664_asm_asm_comanda__d2.o\
cpu_1664_asm_asm_comanda__do.o cpu_1664_asm_asm_comanda__d1.o\
cpu_1664_asm_lista_parametre__cadena.o\
cpu_1664_asm_n8_valua__lista.o\
cpu_1664_asm_n1_opera_valua__lista.o cpu_1664_asm_n8_valua__cadena.o\
cpu_1664_asm_asm_opera__lista_2.o cpu_1664_asm_asm_opera__cadena.o\
cpu_1664_asm_defina_valua.o\
cpu_1664_asm_opera_parametre_funsiona_ajunta.o\
cpu_1664_asm_taxe_d_ajunta.o\
cpu_1664_asm_opera_parametre_funsiona__m.o\
cpu_1664_asm_opera_parametre_funsiona__8e.o\
cpu_1664_asm_opera_parametre_funsiona__8y.o\
cpu_1664_asm_opera_parametre_funsiona__8ylr.o\
cpu_1664_asm_opera_parametre_funsiona__2r6r.o\
cpu_1664_asm_opera_parametre_funsiona__6r2r.o\
cpu_1664_asm_opera_parametre_funsiona__3e3e2e.o\
\
cpu_1664_dev_dev.o cpu_1664_dev_dev_libri.o\
cpu_1664_dev_opera_parametre_funsiona__m.o\
cpu_1664_dev_opera_parametre_funsiona__8e.o\
cpu_1664_dev_opera_parametre_funsiona__8y.o\
cpu_1664_dev_opera_parametre_funsiona__8ylr.o\
cpu_1664_dev_opera_parametre_funsiona__2r6r.o\
cpu_1664_dev_opera_parametre_funsiona__6r2r.o\
cpu_1664_dev_opera_parametre_funsiona__3e3e2e.o\
cpu_1664_dev_opera_parametre_funsiona__nd.o\
\
\
cpu_1664_opera__imita.o
%.o : %.c
@echo $(compilador) $^
@$(compilador) $(compilador_sinia) -o $@ $<
 
%.o : %.s
@echo $(asembledor) $^
@$(asembledor) $(asembledor_sinia) -o $@ $<
 
$(intende_fix) : $(ojetos)
@echo $(arcivador) $@
@$(arcivador) $(arcivador_sinia) $@ $^
 
1664: 1664.o
@g++ $< -O2 $(libs) -s -o $@
 
instala: $(intende_fix)
@echo instala $(intende_fix)
@cp $(intende_fix) $(instala_curso)
 
sutrae:
@echo sutrae $(intende_fix)
@-rm $(instala_curso)/$(intende_fix)
 
limpa:
@-rm $(ojetos) $(intende_fix)
/c/cpu_1664/cpu_1664_opera__or.c
0,0 → 1,13
#include "cpu_1664.h"
 
void cpu_1664_opera__or(struct cpu_1664 *cpu, n1 bait)
{
cpu->opera_sicle=cpu_1664_sicle_opera_or;
cpu->sinia[bait&((1<<cpu_1664_bitio_rd)-1)]|=cpu->sinia[bait>>cpu_1664_bitio_rd];
if (cpu->depende[cpu_1664_depende_bitio_depende_influe]!=0)
{
cpu->depende[cpu_1664_depende_z] = (cpu->sinia[bait&((1<<cpu_1664_bitio_rd)-1)]==0);
cpu->depende[cpu_1664_depende_n] = cpu->depende[cpu_1664_depende_z]==0;
}
}
/c/cpu_1664/cpu_1664_asm_n8_valua__lista.c
0,0 → 1,8
#include "cpu_1664.h"
 
cpu_1664_sinia_t cpu_1664_asm_n8_valua__lista(struct cpu_1664 *cpu, struct lista *lista)
{
cpu_1664_sinia_t valua=cpu_1664_asm_n8_valua__cadena(cpu, lista->datos, lista->contador);
return valua;
}
/c/cpu_1664/cpu_1664_asm_asm_comanda__ajusta.c
0,0 → 1,33
#include "cpu_1664.h"
 
void cpu_1664_asm_asm_comanda__ajusta(struct cpu_1664 *cpu, n1 *cadena)
{
struct lista *lista_parametre=cpu_1664_asm_lista_parametre__cadena(cadena);
cpu_1664_asm_sinia_t sinia=cpu_1664_asm_sinia_t_sinia__cadena(((struct lista **)(lista_parametre->datos))[1]->datos,((struct lista **)(lista_parametre->datos))[1]->contador);
n1 ajusta=cpu_1664_asm_n8_valua__lista(cpu, ((struct lista **)(lista_parametre->datos))[0]);
if((ajusta<16)||(ajusta>31))
{
cadena__f((P)scrive_stdout, ".ajusta %s 0x%x no legal @ %x\n", ((struct lista **)(lista_parametre->datos))[0]->datos, ajusta, cpu->lista_imaje_asm->contador);
}
else
{
if(ajusta<(1<<cpu_1664_bitio_ao))
{
nN i;
for(i=0;i<(cpu->lista_opera_sinia->contador/sizeof(cpu_1664_asm_sinia_t));i++)
{
if(((cpu_1664_asm_sinia_t *)(cpu->lista_opera_sinia->datos))[i]==sinia)
{
cpu->opera_ajusta_asm[i]=ajusta;
break;
}
}
}
}
lista_2_libri(lista_parametre);
}
/c/cpu_1664/cpu_1664_asm_defina_valua.c
0,0 → 1,19
#include "cpu_1664.h"
 
void cpu_1664_asm_defina_valua(struct cpu_1664 *cpu, cpu_1664_asm_sinia_t sinia, cpu_1664_sinia_t valua)
{
nN i=0;
for(i=0;i<(cpu->lista_defina_valua->contador/sizeof(nN));i++)
{
if(((cpu_1664_asm_sinia_t *)(cpu->lista_defina_sinia->datos))[i]==sinia)
{
((cpu_1664_sinia_t *)(cpu->lista_defina_valua->datos))[i]=valua;
return;
}
}
lista_ajunta__cpu_1664_asm_sinia_t(cpu->lista_defina_sinia, sinia);
lista_ajunta__cpu_1664_sinia_t(cpu->lista_defina_valua, valua);
}
/c/cpu_1664/cpu_1664_imaje_ajunta__datos.c
0,0 → 1,7
#include "cpu_1664.h"
 
void cpu_1664_imaje_ajunta__datos(struct cpu_1664 *cpu, n1 *datos, nN cuantia)
{
lista_ajunta__datos(cpu->lista_imaje, datos, cuantia);
cpu_1664_reinisia(cpu);
}
/c/cpu_1664/cpu_1664_dev_opera_parametre_funsiona__m.c
0,0 → 1,43
#include "cpu_1664.h"
 
struct lista * cpu_1664_dev_opera_parametre_funsiona__m(struct cpu_1664 * cpu, n1 bait)
{
struct lista *lista_2=lista_nova(0);
struct lista *lista_parametre=lista_nova(0);
struct lista *lista_informa=lista_nova(0);
nN sinia=(bait&((1<<cpu_1664_opera_ldm_sinia)-1));
n1 ajusta=(bait&(1<<cpu_1664_opera_ldm_bitio_ajusta))!=0;
n1 ordina=(bait&(1<<cpu_1664_opera_ldm_bitio_ordina))!=0;
n1 orienta=(bait&(1<<cpu_1664_opera_ldm_bitio_orienta))!=0;
n1 estende=1<<((bait&(3<<cpu_1664_opera_ldm_bitio_estende0))>>cpu_1664_opera_ldm_bitio_estende0);
n1 estende_c=(estende|'0');
n1 orienta_c=(orienta==0) ? '-' : '+';
lista_ajunta__dato(lista_parametre, '[');
if(ajusta&&!ordina)
{
lista_ajunta__dato(lista_parametre, orienta_c);
}
lista_ajunta__dato(lista_parametre, sinia|'0');
if(ajusta&&ordina)
{
lista_ajunta__dato(lista_parametre, orienta_c);
}
lista_ajunta__dato(lista_parametre, ']');
if(estende!=0)
{
lista_ajunta__dato(lista_parametre, ' ');
lista_ajunta__dato(lista_parametre, estende_c);
}
lista_ajunta__P(lista_2, (P)lista_parametre);
lista_ajunta__P(lista_2, (P)lista_informa);
return lista_2;
}
/c/cpu_1664/cpu_1664_opera__yli.c
0,0 → 1,15
#include "cpu_1664.h"
 
void cpu_1664_opera__yli(struct cpu_1664 *cpu, n1 bait)
{
cpu->opera_sicle=cpu_1664_sicle_opera_yli;
cpu->sinia[cpu_1664_sinia_reveni]=cpu->sinia[cpu_1664_sinia_IP];
cpu_1664_sinia_t desloca=bait<<1;
if(desloca>=0x100)
{
desloca=(((-1)-0x1ff)|desloca);
}
cpu->sinia[cpu_1664_sinia_IP]+=desloca-sizeof(cpu_1664_opera_t);
}
/c/cpu_1664/cpu_1664_asm_opera_parametre_funsiona__m.c
0,0 → 1,117
#include "cpu_1664.h"
 
n1 cpu_1664_asm_opera_parametre_funsiona__m(struct cpu_1664 *cpu, struct lista *lista)
{
const n1 sinia_m[] = {cpu_1664_asm_table_sinia_m};
struct lista *m;
nN lista_cuantia=lista->contador/sizeof(P);
nN indise_m;
n1 bitio_ajusta=0;
n1 bitio_estende=0;
n1 bitio_ordina=0;
n1 bitio_orienta=0;
nN estende;
nN Ar=-1;
if(lista_cuantia==0)
{
cadena__f((P)scrive_stdout, "eror ylr -\n");
cpu->asm_eror=1;
return 0;
}
else
{
if((((struct lista **)(lista->datos))[lista_cuantia-1])->datos[0]!='[')
{
estende=cpu_1664_asm_n8_valua__lista(cpu,((struct lista **)(lista->datos))[lista_cuantia-1]);
indise_m=lista_cuantia-2;
}
else
{
estende=sizeof(cpu_1664_sinia_t);
indise_m=lista_cuantia-1;
}
 
m=((struct lista **)(lista->datos))[indise_m];
nN i=1;
nN j;
while(m->datos[i]!=']')
{
switch(m->datos[i])
{
default:
if(bitio_ajusta==0) bitio_ordina=1;
for(j=0; sinia_m[m->datos[i+j]]==1; j++) { }
Ar=(cpu_1664_asm_n8_valua__cadena(cpu, m->datos+i, j));
i+=j;
break;
case '+':
bitio_ajusta=1;
bitio_orienta=1;
i++;
break;
case '-':
bitio_ajusta=1;
i++;
break;
case ',':
case 0x09:
case ' ':
i++;
break;
}
}
if(bitio_ajusta==0)
{
bitio_orienta=0;
bitio_ordina=0;
}
switch(estende)
{
default:
bitio_estende=4;
break;
case 8:
bitio_estende=3;
break;
case 4:
bitio_estende=2;
break;
case 2:
bitio_estende=1;
break;
case 1:
bitio_estende=0;
break;
}
if((Ar>=(1<<cpu_1664_opera_ldm_sinia))||(bitio_estende>3))
{
cadena__f((P)scrive_stdout, "eror ylr [%x] %x\n",Ar,1<<bitio_estende);
cpu->asm_eror=1;
return 0;
}
else
{
n1 bait= Ar|(bitio_estende<<cpu_1664_opera_ldm_bitio_estende0)|\
(bitio_ajusta<<cpu_1664_opera_ldm_bitio_ajusta)|\
(bitio_ordina<<cpu_1664_opera_ldm_bitio_ordina)|\
(bitio_orienta<<cpu_1664_opera_ldm_bitio_orienta);
return bait;
}
}
}
/c/cpu_1664/cpu_1664__desifri.c
0,0 → 1,19
#include "cpu_1664.h"
 
void cpu_1664__desifri(struct cpu_1664 *cpu, cpu_1664_opera_t parola)
{
n1 c=(parola>>cpu_1664_bitio_opera)&((1<<cpu_1664_bitio_c)-1);
n1 opera_sifri=(parola&((1<<cpu_1664_bitio_opera)-1));
n1 opera_desifri=cpu->opera_ajusta[opera_sifri];
if(opera_desifri==cpu_1664_opera_ajusta)
{
cpu_1664_opera__ajusta(cpu, parola);
}
else if((cpu->depende[c]==1)||(c==7))
{
n1 bait=parola>>(cpu_1664_bitio_opera+cpu_1664_bitio_c)&\
((1<<(16-((cpu_1664_bitio_opera+cpu_1664_bitio_c))))-1);
cpu->opera_lista[opera_desifri](cpu, bait);
}
}
/c/cpu_1664/cpu_1664_opera__plu.c
0,0 → 1,18
#include "cpu_1664.h"
 
void cpu_1664_opera__plu(struct cpu_1664 *cpu, n1 bait)
{
cpu->opera_sicle=cpu_1664_sicle_opera_plu;
n1 rd=bait&((1<<cpu_1664_bitio_rd)-1);
n1 rf=bait>>cpu_1664_bitio_rd;
cpu_1664_sinia_t dest=cpu->sinia[rd];
cpu->sinia[rd]+=cpu->sinia[rf];
if (cpu->depende[cpu_1664_depende_bitio_depende_influe]!=0)
{
cpu->depende[cpu_1664_depende_z] = (cpu->sinia[rd]==0);
cpu->depende[cpu_1664_depende_c] = (cpu->sinia[rd]<dest);
cpu->depende[cpu_1664_depende_n] = cpu->depende[cpu_1664_depende_z]==0;
}
}
/c/cpu_1664/cpu_1664_asm_asm_comanda__d1.c
0,0 → 1,34
#include "cpu_1664.h"
 
void cpu_1664_asm_asm_comanda__d1(struct cpu_1664 *cpu, n1 *cadena)
{
struct lista *lista=cpu_1664_asm_lista_parametre__cadena(cadena);
n8 valua;
nN i;
for(i=0;i<lista->contador/sizeof(P);i++)
{
cpu->avisa__no_definida=0;
switch(((struct lista **)(lista->datos))[i]->datos[0])
{
case '"':
case '\'':
lista_ajunta__datos(cpu->lista_imaje_asm, ((struct lista **)(lista->datos))[i]->datos+1, ((struct lista **)(lista->datos))[i]->contador-2);
break;
default:
valua=cpu_1664_asm_n8_valua__lista(cpu, ((struct lista **)(lista->datos))[i]);
if(cpu->avisa__no_definida!=0)
{
cpu_1664_asm_taxe_d_ajunta(cpu, ((struct lista **)(lista->datos))[i], 1);
}
lista_ajunta__dato(cpu->lista_imaje_asm, valua);
break;
}
}
lista_2_libri(lista);
}
/c/cpu_1664/cpu_1664.h
0,0 → 1,490
#define ojeto_64
 
#include "sospesifada.h"
 
#include "tipodef.h"
#include "lista.h"
 
#define cpu_1664__dest_bitio 2
//5.o 3.c 2.rd 6.r
#define cpu_1664_bitio_rd 2
#define cpu_1664_bitio_r 6
#define cpu_1664_bitio_ao 7
#define cpu_1664_bitio_co 4
#define cpu_1664_bitio_opera 5
#define cpu_1664_bitio_c 3
 
typedef n2 cpu_1664_opera_t;
 
#ifdef ojeto_64
typedef n8 cpu_1664_sinia_t;
#define cpu_1664_sinia_t_bitio 3
#define lista_ajunta__cpu_1664_sinia_t lista_ajunta__n8
#define lista_ajunta__SPR_t lista_ajunta__n8
#endif
 
#ifdef ojeto_32
typedef n4 cpu_1664_sinia_t;
#define cpu_1664_sinia_t_bitio 2
#define lista_ajunta__cpu_1664_sinia_t lista_ajunta__n4
#define lista_ajunta__SPR_t lista_ajunta__n4
#endif
 
#ifdef ojeto_16
typedef n2 cpu_1664_sinia_t;
#define cpu_1664_sinia_t_bitio 1
#define lista_ajunta__cpu_1664_sinia_t lista_ajunta__n2
#define lista_ajunta__SPR_t lista_ajunta__n2
#endif
 
typedef cpu_1664_sinia_t SPR_t;
 
#define lista_ajunta__cpu_1664_parola_t lista_ajunta__n2
#define cpu_1664_sinia_t_di ((((cpu_1664_sinia_t)(-1))>>1)+1)
#define cpu_1664_sinia_t_masima ((((cpu_1664_sinia_t)(-1))>>0)+0)
 
typedef n4 cpu_1664_asm_sinia_t;
#define cpu_1664_asm_sinia_t_sinia__ccadena n4_sinia__ccadena
#define cpu_1664_asm_sinia_t_sinia__cadena n4_sinia__cadena
#define lista_ajunta__cpu_1664_asm_sinia_t lista_ajunta__n4
#define lista_ajunta__cpu_1664_asm_parola_t lista_ajunta__n2
 
#define cpu_1664_opera_ajusta 0x00
#define cpu_1664_opera_ldi 0x01
#define cpu_1664_opera_ldis 0x02
#define cpu_1664_opera_ldm 0x03
#define cpu_1664_opera_stm 0x04
#define cpu_1664_opera_ldr 0x05
#define cpu_1664_opera_str 0x06
#define cpu_1664_opera_cam 0x07 //intercambia
 
#define cpu_1664_opera_yli 0x08
#define cpu_1664_opera_ylr 0x09
 
#define cpu_1664_opera_ldb 0x0a
#define cpu_1664_opera_stb 0x0b
#define cpu_1664_opera_cmp 0x0c
#define cpu_1664_opera_dep 0x0d
#define cpu_1664_opera_bit 0x0e
#define cpu_1664_opera_rev 0x0f
 
#define cpu_1664_opera_and 0x10
#define cpu_1664_opera_or 0x11
#define cpu_1664_opera_eor 0x12
#define cpu_1664_opera_shl 0x13
#define cpu_1664_opera_shr 0x14
#define cpu_1664_opera_sar 0x15
#define cpu_1664_opera_plu 0x16
#define cpu_1664_opera_sut 0x17
#define cpu_1664_opera_sutr 0x18
#define cpu_1664_opera_mul 0x19
#define cpu_1664_opera_div 0x1a
 
#define cpu_1664_opera_final cpu_1664_opera_div
 
#define cpu_1664_sicle_opera_ajusta 0x01
#define cpu_1664_sicle_opera_ldi 0x01
#define cpu_1664_sicle_opera_ldis 0x01
#define cpu_1664_sicle_opera_ldm 0x03
#define cpu_1664_sicle_opera_stm 0x03
#define cpu_1664_sicle_opera_ldr 0x01
#define cpu_1664_sicle_opera_str 0x01
#define cpu_1664_sicle_opera_cam 0x01
 
#define cpu_1664_sicle_opera_yli 0x02
#define cpu_1664_sicle_opera_ylr 0x03
 
#define cpu_1664_sicle_opera_ldb 0x01
#define cpu_1664_sicle_opera_stb 0x01
#define cpu_1664_sicle_opera_cmp 0x01
#define cpu_1664_sicle_opera_dep 0x01
#define cpu_1664_sicle_opera_bit 0x01
#define cpu_1664_sicle_opera_rev 0x0a //*
 
#define cpu_1664_sicle_opera_and 0x01
#define cpu_1664_sicle_opera_or 0x01
#define cpu_1664_sicle_opera_eor 0x01
#define cpu_1664_sicle_opera_shl 0x01
#define cpu_1664_sicle_opera_shr 0x01
#define cpu_1664_sicle_opera_sar 0x01
#define cpu_1664_sicle_opera_plu 0x01
#define cpu_1664_sicle_opera_sut 0x01
#define cpu_1664_sicle_opera_sutr 0x01
#define cpu_1664_sicle_opera_mul 0x05
#define cpu_1664_sicle_opera_div 0x08
 
#define cpu_1664_sinia_eseta 0
#define cpu_1664_sinia_pila 6
#define cpu_1664_sinia_IP 7
#define cpu_1664_sinia_reveni 63
#define cpu_1664_sinia_reveni_eseta 62
#define cpu_1664_sinia_desloca 59
#define cpu_1664_sinia_minima 60
#define cpu_1664_sinia_masima 61
#define cpu_1664_sinia_RETENI_0 8
#define cpu_1664_sinia_RETENI_cuantia 32
#define cpu_1664_sinia_TEMPORA_0 (cpu_1664_sinia_RETENI0 + cpu_1664_sinia_RETENI_cuantia)
#define cpu_1664_sinia_TEMPORA_cuantia 16
 
#define cpu_1664_depende_z 0
#define cpu_1664_depende_n 1
#define cpu_1664_depende_c 2
#define cpu_1664_depende_o 3
#define cpu_1664_depende_1 7
#define cpu_1664_depende_bitio_depende_influe 8
//#define cpu_1664_depende_bitio_opera_ajusta_protejeda 9
 
#define cpu_1664_opera_bit_masima 0
#define cpu_1664_opera_bit_minima 1
#define cpu_1664_opera_bit_set 2
#define cpu_1664_opera_bit_vacua 3
 
#define cpu_1664_desloca_reinisia 0x00
#define cpu_1664_desloca_eseta cpu_1664_desloca_reinisia //0x0a
 
//ldm,stm
#define cpu_1664_opera_ldm_bitio_orienta 7
#define cpu_1664_opera_ldm_bitio_ordina 6
#define cpu_1664_opera_ldm_bitio_ajusta 5
#define cpu_1664_opera_ldm_bitio_estende1 4
#define cpu_1664_opera_ldm_bitio_estende0 3
#define cpu_1664_opera_ldm_sinia 3
 
//"rev"
#define cpu_1664_opera_rev_reveni 0x00
#define cpu_1664_opera_rev_eseta 0x01
#define cpu_1664_opera_rev_ajusta_protejeda 0x03
#define cpu_1664_opera_rev_ajusta_permete 0x04
#define cpu_1664_opera_rev_depende_influe 0x05
#define cpu_1664_opera_rev_depende_inoria 0x06
#define cpu_1664_opera_rev_state_usor_reteni 0x07
#define cpu_1664_opera_rev_state_usor_restora 0x08
#define cpu_1664_opera_rev_entra 0x09
#define cpu_1664_opera_rev_departi 0x0a
#define cpu_1664_opera_rev_sicle_intercambia 0x10
#define cpu_1664_opera_rev_sicle_usor_intercambia 0x11
#define cpu_1664_opera_rev_sicle_usor_limite_intercambia 0x12
#define cpu_1664_opera_rev_bp 0xf0
#define cpu_1664_opera_rev_ajusta_reinisia 0xff
 
#define cpu_1664_umm_desloca (((-0xff)-1))
#define cpu_1664_umm_desloca_masca ((-cpu_1664_umm_desloca)-1)
#define cpu_1664_umm_desloca_usor_mapa 0x00
#define cpu_1664_umm_usor_mapa_cuantia (0x00)
#define cpu_1664_umm_usor_mapa_desloca_usor (0x01)
#define cpu_1664_umm_usor_mapa_desloca_real (0x02)
#define cpu_1664_umm_usor_mapa_permete_leje 0
#define cpu_1664_umm_usor_mapa_permete_scrive 1
#define cpu_1664_umm_usor_mapa_permete_esecuta 2
#define cpu_1664_umm_desloca_interompe_capasi 0x01
#define cpu_1664_umm_desloca_interompe_masca 0x02
#define cpu_1664_umm_desloca_interompe_ativa 0x03
#define cpu_1664_umm_contador_instrui 0xfe
 
#define cpu_1664_eseta_reinisia 0x00
#define cpu_1664_eseta_opera_nonlegal 0x01
#define cpu_1664_eseta_usor 0x02
//
#define cpu_1664_eseta_sicle_usor_limite 0x04
#define cpu_1664_eseta_div_zero 0x05
#define cpu_1664_eseta_bp_usor 0x06
#define cpu_1664_eseta_bp_vantaje 0x07
//
#define cpu_1664_eseta_umm_leje 0x09
#define cpu_1664_eseta_umm_scrive 0x09
#define cpu_1664_eseta_umm_esecuta 0x09
#define cpu_1664_eseta_umm_limite 0x09
#define cpu_1664_eseta_umm_interompe 0x0a
 
//
#define cpu_1664_dev_opera_parametre_funsiona struct lista * (*dev_opera_parametre_funsiona)(struct cpu_1664 *, n1)
#define cpu_1664_asm_opera_parametre_funsiona n1 (*asm_opera_parametre_funsiona)(struct cpu_1664 *, struct lista *)
#define cpu_1664_asm_asm_comanda_funsiona void (*asm_comanda_funsiona)(struct cpu_1664 *, n1 *)
 
#define cpu_1664_asm_sinia_fini 0x0a
#define cpu_1664_asm_sinia_opera ('~')
#define cpu_1664_asm_sinia_model_abri ('{')
#define cpu_1664_asm_sinia_model_opera ('%')
#define cpu_1664_asm_sinia_comenta (';')
#define cpu_1664_asm_sinia_comanda ('.')
#define cpu_1664_asm_sinia_eticeta (':')
#define cpu_1664_asm_sinia_eticeta_su ('@')
 
#define cpu_1664_asm_m_indise 1
#define cpu_1664_asm_m_indise_c ('0'|cpu_1664_asm_m_indise)
 
struct cpu_1664
{
void (*opera_lista[1<<cpu_1664_bitio_ao])(struct cpu_1664 *,n1);
cpu_1664_sinia_t *sinia;
cpu_1664_sinia_t sinia_vantaje[(1<<cpu_1664_bitio_r)+1];
cpu_1664_sinia_t sinia_usor[(1<<cpu_1664_bitio_r)+1];
n1 *opera_ajusta;
n1 opera_ajusta_vantaje[1<<cpu_1664_bitio_opera];
n1 opera_ajusta_usor[1<<cpu_1664_bitio_opera];
n1 *depende;
n1 depende_vantaje[32];
n1 depende_usor[32];
 
n1 vantaje;
n1 opera_ajusta_protejeda;
struct lista *lista_imaje;
// nN umm; //desloca unia mapa memoria
cpu_1664_sinia_t umm_memoria[(1<<8)];
cpu_1664_sinia_t opera_sicle;
cpu_1664_sinia_t contador_sicle;
cpu_1664_sinia_t contador_sicle_usor;
cpu_1664_sinia_t contador_sicle_usor_limite;
 
//asm
n1 asm_eror;
n1 opera_ajusta_asm[1<<cpu_1664_bitio_ao];
struct lista *lista_imaje_asm;
struct lista *lista_defina_sinia;
struct lista *lista_defina_valua;
struct lista *lista_opera_sinia; //a ordina
struct lista *lista_asm_opera_parametre_funsiona;
struct lista *lista_opera_parametre_sinia; // 8.i
struct lista *lista_asm_opera_parametre_referi; //->funsiona
struct lista *lista_asm_comanda_sinia;
struct lista *lista_asm_comanda_funsiona;
struct lista *lista_taxe;
struct lista *lista_taxe_d;
struct lista *lista_eticeta_cadena;
n1 avisa__no_definida;
struct lista *lista_model;
struct lista *lista_model_sinia;
struct lista *lista_inclui_curso;
//aida developa "dev"
struct lista *lista_dev_asm_desloca;
struct lista *lista_dev_asm_cadena;
struct lista *lista_dev_opera_cadena;
struct lista *lista_dev_opera_parametre_funsiona;
struct lista *lista_dev_opera_parametre_referi; //->funsiona
 
#ifdef imita
//aida imita
int imita_argc;
char **imita_argv;
#endif
};
 
struct cpu_1664_asm_taxe
{
cpu_1664_opera_t parola;
cpu_1664_asm_opera_parametre_funsiona;
cpu_1664_sinia_t desloca;
struct lista *lista;
};
 
struct cpu_1664_asm_taxe_d
{
cpu_1664_sinia_t desloca;
struct lista *lista;
nN cuantia;
};
 
struct cpu_1664 * cpu_1664_nova(nN); //memoria
cpu_1664_sinia_t cpu_1664_umm_tradui_desloca(struct cpu_1664 *, cpu_1664_sinia_t);
cpu_1664_sinia_t cpu_1664_umm(struct cpu_1664 *, cpu_1664_sinia_t, n1, n1, cpu_1664_sinia_t);
void cpu_1664_vantaje(struct cpu_1664 *, n1);
void cpu_1664_eseta(struct cpu_1664 *, cpu_1664_sinia_t);
void cpu_1664_libri(struct cpu_1664 *);
void cpu_1664__pasi(struct cpu_1664 *, n8);
void cpu_1664__desifri(struct cpu_1664 *, cpu_1664_opera_t); //sifri
void cpu_1664_reinisia(struct cpu_1664 *);
void cpu_1664_imaje_ajunta__lista(struct cpu_1664 *, struct lista *);
void cpu_1664_imaje_ajunta__datos(struct cpu_1664 *, n1 *, nN);
 
void cpu_1664_opera___(struct cpu_1664 *, n1);
 
void cpu_1664_opera__ajusta(struct cpu_1664 *, cpu_1664_opera_t);
 
void cpu_1664_opera__ldi(struct cpu_1664 *, n1);
void cpu_1664_opera__ldis(struct cpu_1664 *, n1);
void cpu_1664_opera__ldm(struct cpu_1664 *, n1);
void cpu_1664_opera__stm(struct cpu_1664 *, n1);
void cpu_1664_opera__ldr(struct cpu_1664 *, n1);
void cpu_1664_opera__str(struct cpu_1664 *, n1);
void cpu_1664_opera__ldb(struct cpu_1664 *, n1);
void cpu_1664_opera__stb(struct cpu_1664 *, n1);
void cpu_1664_opera__cam(struct cpu_1664 *, n1);
void cpu_1664_opera__dep(struct cpu_1664 *, n1);
void cpu_1664_opera__cmp(struct cpu_1664 *, n1);
void cpu_1664_opera__yli(struct cpu_1664 *, n1);
void cpu_1664_opera__ylr(struct cpu_1664 *, n1);
 
void cpu_1664_opera__rev(struct cpu_1664 *, n1);
 
void cpu_1664_opera__bit(struct cpu_1664 *, n1);
void cpu_1664_opera__and(struct cpu_1664 *, n1);
void cpu_1664_opera__or(struct cpu_1664 *, n1);
void cpu_1664_opera__plu(struct cpu_1664 *, n1);
void cpu_1664_opera__sut(struct cpu_1664 *, n1);
void cpu_1664_opera__sutr(struct cpu_1664 *, n1);
void cpu_1664_opera__shl(struct cpu_1664 *, n1);
void cpu_1664_opera__shr(struct cpu_1664 *, n1);
void cpu_1664_opera__sar(struct cpu_1664 *, n1);
void cpu_1664_opera__div(struct cpu_1664 *, n1);
void cpu_1664_opera__mul(struct cpu_1664 *, n1);
void cpu_1664_opera__eor(struct cpu_1664 *, n1);
 
#ifdef imita
void cpu_1664_opera__imita(struct cpu_1664 *, n1);
#define cpu_1664_imita_argc 0
#define cpu_1664_imita_argv 1
#define cpu_1664_imita_open 2
#define cpu_1664_imita_close 3
#define cpu_1664_imita_read 4
#define cpu_1664_imita_write 5
#define cpu_1664_imita_lseek 6
#define cpu_1664_imita_ftruncate 7
#define cpu_1664_imita_time 8
#define cpu_1664_imita_nanosleep 254
#define cpu_1664_imita_exit 255
#define cpu_1664_opera_imita (cpu_1664_opera_final+1)
#endif
//asm
 
struct lista * cpu_1664_asm_lista_parametre__cadena(n1 *);
 
struct cpu_1664 * cpu_1664_asm_nova();
void cpu_1664_asm_libri(struct cpu_1664 *);
void cpu_1664_asm_asm_opera__lista_2(struct cpu_1664 *, struct lista *);
void cpu_1664_asm_asm_opera__cadena(struct cpu_1664 *, n1 *);
n1 cpu_1664_asm_n1_opera_valua__lista(struct cpu_1664 *, struct lista *);
void cpu_1664_asm_defina_valua(struct cpu_1664 *, cpu_1664_asm_sinia_t, cpu_1664_sinia_t);
void cpu_1664_asm_taxe_d_ajunta(struct cpu_1664 *, struct lista *, nN);
 
void cpu_1664_asm_asm_model__lista(struct cpu_1664 *, struct lista *, struct lista *, nN);
 
void cpu_1664_asm_asm_comanda_ajunta(struct cpu_1664 *, char *, cpu_1664_asm_asm_comanda_funsiona);
void cpu_1664_asm_asm_comanda(struct cpu_1664 *, n1 *);
void cpu_1664_asm_asm_comanda__model(struct cpu_1664 *, n1 *);
void cpu_1664_asm_asm_comanda__m(struct cpu_1664 *, n1 *);
void cpu_1664_asm_asm_comanda__opera(struct cpu_1664 *, n1 *);
void cpu_1664_asm_asm_comanda__ajusta(struct cpu_1664 *, n1 *);
void cpu_1664_asm_asm_comanda__implicada(struct cpu_1664 *, n1 *);
void cpu_1664_asm_asm_comanda__defina(struct cpu_1664 *, n1 *);
void cpu_1664_asm_asm_comanda__nodefina(struct cpu_1664 *, n1 *);
void cpu_1664_asm_asm_comanda__inclui(struct cpu_1664 *, n1 *);
void cpu_1664_asm_asm_comanda__ds(struct cpu_1664 *, n1 *);
void cpu_1664_asm_asm_comanda__d4(struct cpu_1664 *, n1 *);
void cpu_1664_asm_asm_comanda__d2(struct cpu_1664 *, n1 *);
void cpu_1664_asm_asm_comanda__do(struct cpu_1664 *, n1 *);
void cpu_1664_asm_asm_comanda__d1(struct cpu_1664 *, n1 *);
 
void cpu_1664_asm_ajunta__ccadena(struct cpu_1664 *, char *);
void cpu_1664_asm_ajunta__cadena(struct cpu_1664 *, n1 *, nN cuantia);
nN cpu_1664_asm_depende__lista(struct cpu_1664 *, struct lista *);
cpu_1664_sinia_t cpu_1664_asm_n8_valua__lista(struct cpu_1664 *, struct lista *);
cpu_1664_sinia_t cpu_1664_asm_n8_valua__cadena(struct cpu_1664 *, n1 *, nN);
 
void cpu_1664_asm_opera_parametre_funsiona_ajunta(struct cpu_1664 *, char *, cpu_1664_asm_opera_parametre_funsiona, cpu_1664_dev_opera_parametre_funsiona);
 
n1 cpu_1664_asm_opera_parametre_funsiona__m(struct cpu_1664 *, struct lista *);
n1 cpu_1664_asm_opera_parametre_funsiona__8e(struct cpu_1664 *, struct lista *);
n1 cpu_1664_asm_opera_parametre_funsiona__8y(struct cpu_1664 *, struct lista *);
n1 cpu_1664_asm_opera_parametre_funsiona__8ylr(struct cpu_1664 *, struct lista *);
n1 cpu_1664_asm_opera_parametre_funsiona__2r6r(struct cpu_1664 *, struct lista *);
n1 cpu_1664_asm_opera_parametre_funsiona__6r2r(struct cpu_1664 *, struct lista *);
n1 cpu_1664_asm_opera_parametre_funsiona__3e3e2e(struct cpu_1664 *, struct lista *);
 
//dev
struct lista * cpu_1664_dev_dev(struct cpu_1664 *, cpu_1664_sinia_t, cpu_1664_opera_t);
void cpu_1664_dev_dev_libri(struct lista *);
 
struct lista * cpu_1664_dev_opera_parametre_funsiona__m(struct cpu_1664 *, n1);
struct lista * cpu_1664_dev_opera_parametre_funsiona__8e(struct cpu_1664 *, n1);
struct lista * cpu_1664_dev_opera_parametre_funsiona__8y(struct cpu_1664 *, n1);
struct lista * cpu_1664_dev_opera_parametre_funsiona__8ylr(struct cpu_1664 *, n1);
struct lista * cpu_1664_dev_opera_parametre_funsiona__2r6r(struct cpu_1664 *, n1);
struct lista * cpu_1664_dev_opera_parametre_funsiona__6r2r(struct cpu_1664 *, n1);
struct lista * cpu_1664_dev_opera_parametre_funsiona__3e3e2e(struct cpu_1664 *, n1);
 
struct lista * cpu_1664_dev_opera_parametre_funsiona__nd(struct cpu_1664 *, n1);
 
#define cpu_1664_asm_table_sinia \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
 
#define cpu_1664_asm_table_sinia_inclui_brasos \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
 
#define cpu_1664_asm_table_sinia_m \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
 
#define cpu_1664_asm_table_clui \
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\
' ', ' ', '"', ' ', ' ', ' ', ' ', '\'', ')', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ']', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '}', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
/c/cpu_1664/cpu_1664_asm_opera_parametre_funsiona__8y.c
0,0 → 1,63
#include "cpu_1664.h"
 
n1 cpu_1664_asm_opera_parametre_funsiona__8y(struct cpu_1664 * cpu, struct lista *lista)
{
n8 desloca=cpu_1664_asm_n8_valua__lista(cpu, ((struct lista **)(lista->datos))[(lista->contador/sizeof(P))-1]);
n1 c=((struct lista **)(lista->datos))[(lista->contador/sizeof(P))-1]->datos[0];
if(((c>'9')||(c<'0'))&&(c!='-'))
{
if(desloca>=cpu->lista_imaje_asm->contador)
{
desloca-=cpu->lista_imaje_asm->contador;
if((desloca&0x01)!=0)
{
if(cpu->avisa__no_definida==0)
{
cadena__f((P)scrive_stdout, "avisa : \"desloca no alinia [%*x]\"\n",8,cpu->lista_imaje_asm->contador);
cpu->asm_eror=1;
}
}
desloca>>=1;
if(desloca>=0x80)
{
if(cpu->avisa__no_definida==0)
{
cadena__f((P)scrive_stdout, "avisa : \"desloca plu masima [%*x]\"\n",8,cpu->lista_imaje_asm->contador);
cpu->asm_eror=1;
}
}
}
else
{
desloca-=cpu->lista_imaje_asm->contador;
if((desloca&0x01)!=0)
{
if(cpu->avisa__no_definida==0)
{
cadena__f((P)scrive_stdout, "avisa : \"desloca no alinia [%*x]\"\n",8,cpu->lista_imaje_asm->contador);
cpu->asm_eror=1;
}
}
desloca=(desloca>>1)&0xff;
if(desloca<0x80)
{
if(cpu->avisa__no_definida==0)
{
cadena__f((P)scrive_stdout, "avisa : \"desloca plu masima [%*x]\"\n",8,cpu->lista_imaje_asm->contador);
cpu->asm_eror=1;
}
}
}
}
n1 bait=desloca;
return bait;
}
/c/cpu_1664/cpu_1664_asm_asm_comanda__opera.c
0,0 → 1,24
#include "cpu_1664.h"
 
void cpu_1664_asm_asm_comanda__opera(struct cpu_1664 *cpu, n1 *cadena)
{
struct lista *lista_parametre=cpu_1664_asm_lista_parametre__cadena(cadena);
lista_ajunta__cpu_1664_asm_sinia_t(cpu->lista_opera_sinia, cpu_1664_asm_sinia_t_sinia__cadena(((struct lista **)(lista_parametre->datos))[0]->datos,((struct lista **)(lista_parametre->datos))[0]->contador));
cpu_1664_asm_sinia_t opera_parametre_funsiona_sinia=cpu_1664_asm_sinia_t_sinia__cadena(((struct lista **)(lista_parametre->datos))[1]->datos,((struct lista **)(lista_parametre->datos))[1]->contador);
struct lista *lista_opera_cadena=lista_nova__datos(((struct lista **)(lista_parametre->datos))[0]->datos,((struct lista **)(lista_parametre->datos))[0]->contador);
lista_ajunta__P(cpu->lista_dev_opera_cadena, lista_opera_cadena);
nN i;
for(i=0;i<(cpu->lista_asm_opera_parametre_referi->contador/sizeof(P));i++)
{
if(((cpu_1664_asm_sinia_t *)(cpu->lista_opera_parametre_sinia->datos))[i]==opera_parametre_funsiona_sinia)
{
lista_ajunta__P(cpu->lista_asm_opera_parametre_funsiona, ((P *)(cpu->lista_asm_opera_parametre_referi->datos))[i]);
lista_ajunta__P(cpu->lista_dev_opera_parametre_funsiona, ((P *)(cpu->lista_dev_opera_parametre_referi->datos))[i]);
break;
}
}
lista_2_libri(lista_parametre);
}
/c/cpu_1664/cpu_1664_vantaje.c
0,0 → 1,22
#include "cpu_1664.h"
 
void cpu_1664_vantaje(struct cpu_1664 *cpu, n1 vantaje)
{
if(vantaje==1)
{
// cpu->sinia_vantaje[0]=cpu->sinia_usor[0];
cpu->sinia=cpu->sinia_vantaje;
cpu->depende=cpu->depende_vantaje;
cpu->opera_ajusta=cpu->opera_ajusta_vantaje;
}
else
{
// cpu->sinia_usor[0]=cpu->sinia_vantaje[0];
cpu->sinia=cpu->sinia_usor;
cpu->depende=cpu->depende_usor;
cpu->opera_ajusta=cpu->opera_ajusta_usor;
}
cpu->vantaje=vantaje;
}
/c/cpu_1664/cpu_1664_opera__stm.c
0,0 → 1,21
#include "cpu_1664.h"
 
void cpu_1664_opera__stm(struct cpu_1664 *cpu, n1 bait)
{
cpu->opera_sicle=cpu_1664_sicle_opera_stm;
nN sinia=(bait&((1<<cpu_1664_opera_ldm_sinia)-1));
cpu_1664_sinia_t cuantia = 1<<((bait&(3<<cpu_1664_opera_ldm_bitio_estende0))>>cpu_1664_opera_ldm_bitio_estende0);
cpu_1664_sinia_t desloca=cpu->sinia[sinia];
if(((bait&(1<<cpu_1664_opera_ldm_bitio_ajusta))!=0))
{
cpu->sinia[sinia]+=((bait&(1<<cpu_1664_opera_ldm_bitio_orienta))==0) ? -cuantia : cuantia;
if((bait&(1<<cpu_1664_opera_ldm_bitio_ordina))==0)
{
desloca=cpu->sinia[sinia];
}
}
cpu_1664_umm(cpu, desloca, (1<<cpu_1664_umm_usor_mapa_permete_scrive), cuantia, cpu->sinia[0]);
}
/c/cpu_1664/cpu_1664_opera__dep.c
0,0 → 1,32
#include "cpu_1664.h"
 
void cpu_1664_opera__dep(struct cpu_1664 *cpu, n1 bait)
{
cpu->opera_sicle=cpu_1664_sicle_opera_dep;
n1 dest=bait&0x07;
n1 fonte=(bait>>3)&0x07;
n1 eleje=bait>>6;
n1 dep;
cpu->depende[7]=1;
switch(eleje)
{
case 0: //eor
cpu->depende[dest]^=cpu->depende[fonte];
break;
case 1: //and
cpu->depende[dest]&=cpu->depende[fonte];
break;
case 2: //or
cpu->depende[dest]|=cpu->depende[fonte];
break;
case 3: //intercambia
dep=cpu->depende[dest];
cpu->depende[dest]=cpu->depende[fonte];
cpu->depende[fonte]=dep;
break;
}
}
/c/cpu_1664/cpu_1664_asm_asm_comanda.c
0,0 → 1,21
#include "cpu_1664.h"
 
void cpu_1664_asm_asm_comanda(struct cpu_1664 *cpu, n1 *cadena)
{
const n1 sinia[] = {cpu_1664_asm_table_sinia};
nN i=0;
while(sinia[*(n1 *)(cadena+i)]==1){ i++; }
cpu_1664_asm_sinia_t comanda_sinia = cpu_1664_asm_sinia_t_sinia__cadena(cadena, i);
cadena+=i;
for(i=0;i<(cpu->lista_asm_comanda_funsiona->contador/sizeof(P));i++)
{
if (((cpu_1664_asm_sinia_t *)(cpu->lista_asm_comanda_sinia->datos))[i]==comanda_sinia)
{
((void (**)(struct cpu_1664 *,n1 *)) (cpu->lista_asm_comanda_funsiona->datos))[i](cpu,cadena);
}
}
}
/c/cpu_1664/cpu_1664_opera___.c
0,0 → 1,7
#include "cpu_1664.h"
 
void cpu_1664_opera___(struct cpu_1664 *cpu, n1 bait)
{
cpu->sinia_vantaje[0]=cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_IP],(1<<cpu_1664_umm_usor_mapa_permete_leje), 2, 0);
cpu_1664_eseta(cpu, cpu_1664_eseta_opera_nonlegal);
}
/c/cpu_1664/cpu_1664_opera__bit.c
0,0 → 1,62
#include "cpu_1664.h"
 
void cpu_1664_opera__bit(struct cpu_1664 *cpu, n1 bait)
{
cpu_1664_sinia_t dest=cpu->sinia[bait&((1<<cpu_1664_bitio_rd)-1)];
cpu_1664_sinia_t opera=bait>>cpu_1664_bitio_r;
cpu_1664_sinia_t sinia=-1;
nN i;
cpu_1664_sinia_t masca;
switch(opera)
{
case cpu_1664_opera_bit_masima:
for(masca=cpu_1664_sinia_t_di, i=0;((dest&masca)==0)&&(i<(sizeof(cpu_1664_sinia_t)*8)); i++)
{
masca>>=1;
}
sinia=i;
break;
case cpu_1664_opera_bit_minima:
for(masca=1, i=0;((dest&masca)==0)&&(i<(sizeof(cpu_1664_sinia_t)*8)); i++)
{
masca<<=1;
}
sinia=i;
break;
case cpu_1664_opera_bit_set:
for(sinia=0, masca=1, i=0; i<(sizeof(cpu_1664_sinia_t)*8); i++)
{
if((dest&masca)!=0) { sinia++; }
masca<<=1;
}
break;
case cpu_1664_opera_bit_vacua:
for(sinia=0, masca=1, i=0; i<(sizeof(cpu_1664_sinia_t)*8); i++)
{
if((dest&masca)==0) { sinia++; }
masca<<=1;
}
break;
}
 
cpu->sinia[0]=sinia;
cpu->opera_sicle=cpu_1664_sicle_opera_bit;
if (cpu->depende[cpu_1664_depende_bitio_depende_influe]!=0)
{
cpu->depende[cpu_1664_depende_z] = (dest==0);
cpu->depende[cpu_1664_depende_n] = cpu->depende[cpu_1664_depende_z]==0;
}
}
/c/cpu_1664/cpu_1664_nova.c
0,0 → 1,140
#include "cpu_1664.h"
 
struct cpu_1664 * cpu_1664_nova(nN cuantia)
{
struct cpu_1664 *cpu=(struct cpu_1664 *)memoria_nova(sizeof(struct cpu_1664));
cpu->lista_imaje=lista_nova(cuantia);
nN i;
for(i=0;i<(1<<cpu_1664_bitio_opera);i++)
{
cpu->opera_ajusta_vantaje[i]=i;
cpu->opera_ajusta_usor[i]=i;
}
//cpu->opera_lista[cpu_1664_opera_ajusta]=cpu_1664_opera__ajusta;
for(i=1; i<(1<<cpu_1664_bitio_ao); i++)
{
cpu->opera_lista[i]=cpu_1664_opera___; //opera nonlegal
}
cpu->opera_lista[cpu_1664_opera_yli]=cpu_1664_opera__yli;
cpu->opera_lista[cpu_1664_opera_ylr]=cpu_1664_opera__ylr;
cpu->opera_lista[cpu_1664_opera_ldi]=cpu_1664_opera__ldi;
cpu->opera_lista[cpu_1664_opera_ldis]=cpu_1664_opera__ldis;
cpu->opera_lista[cpu_1664_opera_ldm]=cpu_1664_opera__ldm;
cpu->opera_lista[cpu_1664_opera_stm]=cpu_1664_opera__stm;
cpu->opera_lista[cpu_1664_opera_ldr]=cpu_1664_opera__ldr;
cpu->opera_lista[cpu_1664_opera_str]=cpu_1664_opera__str;
cpu->opera_lista[cpu_1664_opera_cam]=cpu_1664_opera__cam;
cpu->opera_lista[cpu_1664_opera_ldb]=cpu_1664_opera__ldb;
cpu->opera_lista[cpu_1664_opera_stb]=cpu_1664_opera__stb;
cpu->opera_lista[cpu_1664_opera_cmp]=cpu_1664_opera__cmp;
cpu->opera_lista[cpu_1664_opera_dep]=cpu_1664_opera__dep;
cpu->opera_lista[cpu_1664_opera_bit]=cpu_1664_opera__bit;
cpu->opera_lista[cpu_1664_opera_rev]=cpu_1664_opera__rev;
cpu->opera_lista[cpu_1664_opera_and]=cpu_1664_opera__and;
cpu->opera_lista[cpu_1664_opera_or]=cpu_1664_opera__or;
cpu->opera_lista[cpu_1664_opera_eor]=cpu_1664_opera__eor;
cpu->opera_lista[cpu_1664_opera_mul]=cpu_1664_opera__mul;
cpu->opera_lista[cpu_1664_opera_plu]=cpu_1664_opera__plu;
cpu->opera_lista[cpu_1664_opera_sut]=cpu_1664_opera__sut;
cpu->opera_lista[cpu_1664_opera_sutr]=cpu_1664_opera__sutr;
cpu->opera_lista[cpu_1664_opera_div]=cpu_1664_opera__div;
cpu->opera_lista[cpu_1664_opera_shl]=cpu_1664_opera__shl;
cpu->opera_lista[cpu_1664_opera_shr]=cpu_1664_opera__shr;
cpu->opera_lista[cpu_1664_opera_sar]=cpu_1664_opera__sar;
cpu_1664_vantaje(cpu,1);
for(i=0;i<1<<cpu_1664_bitio_r;i++)
{
cpu->sinia_vantaje[i]=0;
cpu->sinia_usor[i]=0;
}
for(i=0;i<32;i++)
{
cpu->depende[i]=0;
}
for(i=0;i<32;i++)
{
cpu->opera_ajusta_vantaje[i]=i;
cpu->opera_ajusta_usor[i]=i;
cpu->opera_ajusta_asm[i]=i;
}
// cpu->opera_ajusta_protejeda=0;
// cpu->depende_opera_influe_vantaje=0;
// cpu->depende_opera_influe_usor=0;
// cpu->sinia[cpu_1664_sinia_eseta]=0;
cpu->opera_sicle=0;
cpu->contador_sicle=0;
cpu->contador_sicle_usor=0;
cpu->contador_sicle_usor_limite=0;
 
//asm
cpu->asm_eror=0;
cpu->lista_imaje_asm=lista_nova(0);
cpu->lista_defina_sinia=lista_nova(0);
cpu->lista_defina_valua=lista_nova(0);
cpu->lista_opera_sinia=lista_nova(0);
// cpu->lista_opera_ajusta=lista_nova(0);
cpu->lista_opera_parametre_sinia=lista_nova(0);
cpu->lista_asm_opera_parametre_referi=lista_nova(0);
cpu->lista_asm_opera_parametre_funsiona=lista_nova(0);
cpu->lista_asm_comanda_sinia=lista_nova(0);
cpu->lista_asm_comanda_funsiona=lista_nova(0);
cpu->lista_taxe=lista_nova(0);
cpu->lista_taxe_d=lista_nova(0);
cpu->lista_eticeta_cadena=lista_nova(0);
//inclui
cpu->lista_inclui_curso=lista_nova(0);
lista_ajunta__P(cpu->lista_inclui_curso, lista_nova__ccadena("/"));
//model
cpu->lista_model=lista_nova(0);
cpu->lista_model_sinia=lista_nova(0);
 
cpu->avisa__no_definida=0;
//dev
cpu->lista_dev_asm_desloca=lista_nova(0);
cpu->lista_dev_asm_cadena=lista_nova(0);
cpu->lista_dev_opera_cadena=lista_nova(0);
cpu->lista_dev_opera_parametre_referi=lista_nova(0);
cpu->lista_dev_opera_parametre_funsiona=lista_nova(0);
//a ordina frecuentia
cpu_1664_asm_opera_parametre_funsiona_ajunta(cpu, "2r6r", cpu_1664_asm_opera_parametre_funsiona__2r6r, cpu_1664_dev_opera_parametre_funsiona__2r6r);
cpu_1664_asm_opera_parametre_funsiona_ajunta(cpu, "8e", cpu_1664_asm_opera_parametre_funsiona__8e, cpu_1664_dev_opera_parametre_funsiona__8e);
cpu_1664_asm_opera_parametre_funsiona_ajunta(cpu, "8y", cpu_1664_asm_opera_parametre_funsiona__8y, cpu_1664_dev_opera_parametre_funsiona__8y);
cpu_1664_asm_opera_parametre_funsiona_ajunta(cpu, "8ylr", cpu_1664_asm_opera_parametre_funsiona__8ylr, cpu_1664_dev_opera_parametre_funsiona__8ylr);
cpu_1664_asm_opera_parametre_funsiona_ajunta(cpu, "m", cpu_1664_asm_opera_parametre_funsiona__m, cpu_1664_dev_opera_parametre_funsiona__m);
cpu_1664_asm_opera_parametre_funsiona_ajunta(cpu, "6r2r", cpu_1664_asm_opera_parametre_funsiona__6r2r, cpu_1664_dev_opera_parametre_funsiona__6r2r);
cpu_1664_asm_opera_parametre_funsiona_ajunta(cpu, "3e3e2e", cpu_1664_asm_opera_parametre_funsiona__3e3e2e, cpu_1664_dev_opera_parametre_funsiona__3e3e2e);
cpu_1664_asm_opera_parametre_funsiona_ajunta(cpu, "ajusta_vacua", 0, 0);
//a ordina frecuentia
cpu_1664_asm_asm_comanda_ajunta(cpu, "m", cpu_1664_asm_asm_comanda__m);
cpu_1664_asm_asm_comanda_ajunta(cpu, "defina", cpu_1664_asm_asm_comanda__defina);
cpu_1664_asm_asm_comanda_ajunta(cpu, "ajusta", cpu_1664_asm_asm_comanda__ajusta);
cpu_1664_asm_asm_comanda_ajunta(cpu, "implicada", cpu_1664_asm_asm_comanda__implicada);
cpu_1664_asm_asm_comanda_ajunta(cpu, "ds", cpu_1664_asm_asm_comanda__ds);
cpu_1664_asm_asm_comanda_ajunta(cpu, "d1", cpu_1664_asm_asm_comanda__d1);
cpu_1664_asm_asm_comanda_ajunta(cpu, "d4", cpu_1664_asm_asm_comanda__d4);
cpu_1664_asm_asm_comanda_ajunta(cpu, "do", cpu_1664_asm_asm_comanda__do);
cpu_1664_asm_asm_comanda_ajunta(cpu, "d2", cpu_1664_asm_asm_comanda__d2);
cpu_1664_asm_asm_comanda_ajunta(cpu, "model", cpu_1664_asm_asm_comanda__model);
cpu_1664_asm_asm_comanda_ajunta(cpu, "inclui", cpu_1664_asm_asm_comanda__inclui);
cpu_1664_asm_asm_comanda_ajunta(cpu, "opera", cpu_1664_asm_asm_comanda__opera);
cpu_1664_asm_ajunta__ccadena(cpu, ".opera ajusta ajusta_vacua"); //opera 'falsa' - pseudo op
return cpu;
}
/c/cpu_1664/cpu_1664_asm_asm_comanda__inclui.c
0,0 → 1,74
#include "cpu_1664.h"
#ifndef linux
#include <stdio.h>
#endif
 
void cpu_1664_asm_asm_comanda__inclui(struct cpu_1664 *cpu, n1 *cadena)
{
struct lista *lista_parametre=cpu_1664_asm_lista_parametre__cadena(cadena);
#ifdef linux
sN fix_enflue=-1;
#else
FILE *fix_enflue=0;
#endif
nN i;
for(i=0;((fix_enflue<=0)&&(i<(cpu->lista_inclui_curso->contador/sizeof(P))));i++)
{
struct lista *curso=lista_nova__lista(((struct lista **)(cpu->lista_inclui_curso->datos))[i]);
if((curso->datos[curso->contador-1]!='/')&&(((struct lista **)(lista_parametre->datos))[0]->datos[0]!='/'))
{
lista_ajunta__dato(curso, '/');
}
lista_ajunta__lista(curso, ((struct lista **)(lista_parametre->datos))[0]);
#ifdef linux
fix_enflue=open(curso->datos, O_RDONLY);
#else
fix_enflue=fopen((char *)curso->datos, "r");
#endif
lista_libri(curso);
}
if(fix_enflue<=0)
{
// eror fix_enflue
cadena__f((P)scrive_stdout, "\neror fix_enflue inclui %s\n",((struct lista **)(lista_parametre->datos))[0]->datos);
}
else
{
#ifdef linux
nN grandia_fix_enflue=lseek(fix_enflue, 0, SEEK_END);
lseek(fix_enflue, 0, SEEK_SET);
#else
fseek(fix_enflue, 0, SEEK_END);
nN grandia_fix_enflue=ftell(fix_enflue);
rewind(fix_enflue);
#endif
if(grandia_fix_enflue>0)
{
#ifdef linux
n1 *mmap_fix_enflue=(n1 *)memoria_nova(grandia_fix_enflue);
read(fix_enflue, mmap_fix_enflue, grandia_fix_enflue);
//n1 *mmap_fix_enflue=mmap(0, grandia_fix_enflue, PROT_READ, MAP_SHARED, fix_enflue, 0);
cpu_1664_asm_ajunta__cadena(cpu, mmap_fix_enflue, grandia_fix_enflue);
//munmap(mmap_fix_enflue, grandia_fix_enflue);
#else
n1 *fix_m=(n1 *)memoria_nova(grandia_fix_enflue);
grandia_fix_enflue=fread(fix_m, 1, grandia_fix_enflue, fix_enflue);
cpu_1664_asm_ajunta__cadena(cpu, fix_m, grandia_fix_enflue);
memoria_libri(fix_m);
#endif
}
#ifdef linux
close(fix_enflue);
#else
fclose(fix_enflue);
#endif
}
lista_2_libri(lista_parametre);
}
/c/cpu_1664/cpu_1664_opera__cmp.c
0,0 → 1,12
#include "cpu_1664.h"
 
void cpu_1664_opera__cmp(struct cpu_1664 *cpu, n1 bait)
{
cpu->opera_sicle=cpu_1664_sicle_opera_cmp;
cpu_1664_sinia_t dest=cpu->sinia[bait&((1<<cpu_1664_bitio_rd)-1)];
cpu_1664_sinia_t fonte=cpu->sinia[bait>>cpu_1664_bitio_rd];
cpu->depende[cpu_1664_depende_z]=(dest==fonte);
cpu->depende[cpu_1664_depende_c]=(dest>fonte);
cpu->depende[cpu_1664_depende_o]=(dest<fonte);
cpu->depende[cpu_1664_depende_n]=(dest!=fonte);
}
/c/cpu_1664/cpu_1664_asm_asm_comanda__implicada.c
0,0 → 1,12
#include "cpu_1664.h"
 
void cpu_1664_asm_asm_comanda__implicada(struct cpu_1664 *cpu, n1 *cadena)
{
//valua inisial ajusta 16..31
nN i;
for(i=0x10;i<(1<<cpu_1664_bitio_opera);i++)
{
cpu->opera_ajusta_asm[i]=i;
}
}
/c/cpu_1664/cpu_1664_asm_asm_comanda__defina.c
0,0 → 1,19
#include "cpu_1664.h"
 
void cpu_1664_asm_asm_comanda__defina(struct cpu_1664 *cpu, n1 *cadena)
{
struct lista *lista_parametre=cpu_1664_asm_lista_parametre__cadena(cadena);
cpu_1664_asm_sinia_t sinia=cpu_1664_asm_sinia_t_sinia__cadena(((struct lista **)(lista_parametre->datos))[0]->datos,((struct lista **)(lista_parametre->datos))[0]->contador);
cpu_1664_sinia_t valua;
if(lista_parametre->contador/sizeof(P)>1)
{
valua=cpu_1664_asm_n8_valua__lista(cpu, ((struct lista **)(lista_parametre->datos))[1]);
}
else
{
valua=1;
}
cpu_1664_asm_defina_valua(cpu, sinia, valua);
lista_2_libri(lista_parametre);
}
/c/cpu_1664/cpu_1664_asm_n8_valua__cadena.c
0,0 → 1,439
#include "cpu_1664.h"
 
SPR_t cpu_1664_asm_n8_valua__cadena(struct cpu_1664 *cpu, n1 *cadena, nN cuantia)
{
const n1 sinia_no_braso[] = {cpu_1664_asm_table_sinia};
const n1 sinia_braso_clui[] = {cpu_1664_asm_table_clui};
SPR_t valua=0;
cpu_1664_asm_sinia_t sinia;
nN i;
n1 bool_negativa=0;
n1 loca=0;
SPR_t masca=-1;
struct lista *lista;
nN bitio_masca;
if(*cadena=='-')
{
bool_negativa=1;
cadena++;
cuantia--;
}
 
n1 *fini=cadena+cuantia;
nN cuantia_braso;
nN j,k;
struct lista *pila;
nN evalua_braso_cuantia;
SPR_t f,f0,f1;
SPR_t e0,e1;
n1 *cadena_;
while(cadena<fini)
{
switch(*cadena)
{
case 0x09:
case ' ':
cadena++;
break;
case '\"':
cuantia_braso=nN_cuantia_brasetida__cadena(cadena, *cadena, sinia_braso_clui[*cadena]);
cadena+=cuantia_braso;
break;
case '{': //simboles polsce reversa
pila=lista_nova(sizeof(SPR_t)*8);
evalua_braso_cuantia=nN_cuantia_brasetida__cadena(cadena, *cadena, sinia_braso_clui[*cadena]);
for(j=1;j<(evalua_braso_cuantia-1);j++)
{
switch(cadena[j])
{
default:
cadena_=cadena+j;
while(sinia_no_braso[cadena[j]]!=0){ j++; }
f=cpu_1664_asm_n8_valua__cadena(cpu, cadena_,(cadena+j)-cadena_);
lista_ajunta__SPR_t(pila, f);
break;
case 0x09:
case ' ':
break;
case '{':
k=nN_cuantia_brasetida__cadena(cadena+j, cadena[j], sinia_braso_clui[*cadena]);
f=cpu_1664_asm_n8_valua__cadena(cpu, cadena+j, k);
lista_ajunta__SPR_t(pila, f);
j+=k;
break;
case '.':
switch(cadena[++j])
{
case '-': //negativa
if((pila->contador/sizeof(SPR_t))>=1)
{
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1]=-((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
}
j++;
break;
case '+': //asoluta
if((pila->contador/sizeof(SPR_t))>=1)
{
f0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
if(f0<0.0) { ((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1]=-f0; }
}
j++;
break;
case '/': //invertida
if((pila->contador/sizeof(SPR_t))>=1)
{
f0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1]=1.0/f0;
}
j++;
break;
case 'd': //dupli
if((pila->contador/sizeof(SPR_t))>=2)
{
f0=(((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1])+1;
if((pila->contador/sizeof(SPR_t))>=f0)
{
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1]=((SPR_t *)(pila->datos))[f0];
}
}
j++;
break;
case 'x': //intercambia
if((pila->contador/sizeof(SPR_t))>=2)
{
f1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
f0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=f0;
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1]=f1;
}
j++;
break;
case '<': //cade
if((pila->contador/sizeof(SPR_t))>=2)
{
f0=(((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1])+1;
if((pila->contador/sizeof(SPR_t))>=f0)
{
pila->contador-=sizeof(SPR_t)*f0;
}
}
j++;
break;
default:
//zero funsiona
break;
}
break;
case '>':
switch(cadena[++j])
{
case '>': //loca
if((pila->contador/sizeof(SPR_t))>=2)
{
e1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
e0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
e1>>=e0;
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=e1;
pila->contador-=sizeof(SPR_t);
}
j++;
break;
case '=': //lojica
if((pila->contador/sizeof(SPR_t))>=2)
{
f1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
f0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=f1>=f0;
pila->contador-=sizeof(SPR_t);
}
break;
default: //lojica
if((pila->contador/sizeof(SPR_t))>=2)
{
f1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
f0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=f1>f0;
pila->contador-=sizeof(SPR_t);
}
break;
}
break;
case '<':
switch(cadena[++j])
{
case '<': //loca
if((pila->contador/sizeof(SPR_t))>=2)
{
e1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
e0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
e1<<=e0;
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=e1;
pila->contador-=sizeof(SPR_t);
}
j++;
break;
case '=': //lojica
if((pila->contador/sizeof(SPR_t))>=2)
{
f1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
f0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=f1<=f0;
pila->contador-=sizeof(SPR_t);
}
break;
default: //lojica
if((pila->contador/sizeof(SPR_t))>=2)
{
f1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
f0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=f1<f0;
pila->contador-=sizeof(SPR_t);
}
break;
}
break;
case '&':
switch(cadena[++j])
{
default: //bitio
if((pila->contador/sizeof(SPR_t))>=2)
{
e1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
e0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
e1&=e0;
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=e1;
pila->contador-=sizeof(SPR_t);
}
break;
case '&': //lojica
if((pila->contador/sizeof(SPR_t))>=2)
{
e1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
e0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
e1=(SPR_t)e1&&(SPR_t)e0;
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=e1;
pila->contador-=sizeof(SPR_t);
}
j++;
break;
}
break;
case '|':
switch(cadena[++j])
{
default: //bitio
if((pila->contador/sizeof(SPR_t))>=2)
{
e1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
e0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
e1|=e0;
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=e1;
pila->contador-=sizeof(SPR_t);
}
break;
case '|': //lojica
if((pila->contador/sizeof(SPR_t))>=2)
{
e1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
e0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
e1=(SPR_t)e1||(SPR_t)e0;
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=e1;
pila->contador-=sizeof(SPR_t);
}
j++;
break;
}
break;
case '!':
switch(cadena[++j])
{
case '=': //lojica
if((pila->contador/sizeof(SPR_t))>=2)
{
f1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
f0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=f1!=f0;
pila->contador-=sizeof(SPR_t);
}
break;
}
break;
case '=': //lojica
if((pila->contador/sizeof(SPR_t))>=2)
{
f1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
f0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=(f1==f0);
pila->contador-=sizeof(SPR_t);
}
break;
case '+':
if((pila->contador/sizeof(SPR_t))>=2)
{
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]+=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
pila->contador-=sizeof(SPR_t);
}
j++;
break;
case '-':
if(sinia_no_braso[cadena[j+1]]==1)
{
cadena_=cadena+j;
while(sinia_no_braso[cadena[j]]==1) { j++; }
f=cpu_1664_asm_n8_valua__cadena(cpu, cadena_,(cadena+j)-cadena_);
lista_ajunta__SPR_t(pila, f);
}
else
{
if((pila->contador/sizeof(SPR_t))>=2)
{
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]-=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
pila->contador-=sizeof(SPR_t);
}
j++;
}
break;
case '*':
if((pila->contador/sizeof(SPR_t))>=2)
{
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]*=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
pila->contador-=sizeof(SPR_t);
}
j++;
break;
case '/':
if((pila->contador/sizeof(SPR_t))>=2)
{
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]/=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
pila->contador-=sizeof(SPR_t);
}
j++;
break;
}
}
if(pila->contador!=0)
{
valua=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
}
cadena+=evalua_braso_cuantia;
lista_libri(pila);
break;
case '(':
cuantia_braso=nN_cuantia_brasetida__cadena(cadena, *cadena, sinia_braso_clui[*cadena]);
valua=cpu_1664_asm_n8_valua__cadena(cpu, cadena+1, cuantia_braso-2);
cadena+=cuantia_braso;
break;
case '}': // dev
case ']': // dev
case ')':
cadena++;
break;
case '[':
cuantia_braso=nN_cuantia_brasetida__cadena(cadena, *cadena, sinia_braso_clui[*cadena]);
lista=cpu_1664_asm_lista_parametre__cadena(cadena+1);
bitio_masca=8;
if((lista->contador/sizeof(P)>0)&&(lista->contador/sizeof(P)<3))
{
loca=cpu_1664_asm_n8_valua__cadena(cpu, ((struct lista **)(lista->datos))[0]->datos,((struct lista **)(lista->datos))[0]->contador);
if((lista->contador/sizeof(P)>1)) bitio_masca=cpu_1664_asm_n8_valua__cadena(cpu, ((struct lista **)(lista->datos))[1]->datos,((struct lista **)(lista->datos))[1]->contador);
masca=(1<<bitio_masca)-1;
}
lista_2_libri(lista);
cadena+=cuantia_braso;
break;
case '0':
if(*(cadena+1)=='x')
{
nN j;
cadena+=2;
for(j=0;(sinia_no_braso[cadena[j]]==1)&&((cadena+j)<fini);j++){}
valua=n8__exadesimal_cadena(cadena, j);
cadena+=j;
break;
}
else if (cuantia>1)
{
//octal
}
case '1' ... '9':
for(j=1;(sinia_no_braso[cadena[j]]==1)&&((cadena+j)<fini);j++){}
valua=n8__desimal_cadena(cadena, j);
cadena+=j;
break;
default:
for(j=0;(sinia_no_braso[cadena[j]]==1)&&((cadena+j)<fini);j++){}
sinia=cpu_1664_asm_sinia_t_sinia__cadena(cadena, j);
cadena+=j;
for(i=0;i<(cpu->lista_defina_sinia->contador/sizeof(cpu_1664_asm_sinia_t));i++)
{
if(((cpu_1664_asm_sinia_t *)(cpu->lista_defina_sinia->datos))[i]==sinia)
{
valua=((cpu_1664_sinia_t *)(cpu->lista_defina_valua->datos))[i];
break;
}
}
if (i>=(cpu->lista_defina_sinia->contador/sizeof(cpu_1664_asm_sinia_t)))
{
cpu->avisa__no_definida=1;
}
break;
}
}
if(bool_negativa!=0)
{
valua=(-valua);
}
valua=(valua>>loca)&masca;
return valua;
}
/c/cpu_1664/cpu_1664_opera__div.c
0,0 → 1,63
#include "cpu_1664.h"
 
void cpu_1664_opera__div(struct cpu_1664 *cpu, n1 bait)
{
cpu->opera_sicle=cpu_1664_sicle_opera_div;
cpu_1664_sinia_t masima=cpu->sinia[bait&((1<<cpu_1664_bitio_rd)-1)];
cpu_1664_sinia_t minima=cpu->sinia[bait>>cpu_1664_bitio_rd];
cpu_1664_sinia_t desloca_masima;
cpu_1664_sinia_t desloca_minima;
cpu_1664_sinia_t masca;
if(minima==0)
{
cpu_1664_eseta(cpu, cpu_1664_eseta_div_zero);
return;
}
else
{
nN i;
for(masca=-1, i=0;((masima&masca)!=0);i++)
{
masca<<=1;
}
desloca_masima=(sizeof(cpu_1664_sinia_t)*8)-i;
for(masca=1, i=0; ((minima&masca)==0); i++)
{
masca<<=1;
}
desloca_minima=i;
 
//x86-64
for(i=desloca_masima; i>31; i-=31)
{
masima<<=31;
}
masima<<=i;
for(i=desloca_minima; i>31; i-=31)
{
minima>>=31;
}
minima>>=i;
cpu_1664_sinia_t loca_div;
cpu_1664_sinia_t div=masima/minima;
for(masca=-1, i=0; ((div&masca)!=0); i++)
{
masca<<=1;
}
loca_div=(sizeof(cpu_1664_sinia_t)*8)-i;
for(i=loca_div; i>31; i-=31)
{
div<<=31;
}
div<<=i;
cpu->sinia[bait&((1<<cpu_1664_bitio_rd)-1)]=div;
cpu->sinia[cpu_1664_sinia_desloca]+=loca_div+desloca_minima+desloca_masima;
}
}
/c/cpu_1664/cpu_1664_asm_asm_comanda__m__lista.c
0,0 → 1,173
#include "cpu_1664.h"
#include <stdio.h>
 
void cpu_1664_asm_asm_comanda__m__lista(struct cpu_1664 *cpu, struct lista *lista_parametre)
{
const n1 sinia_no_braso[] = {cpu_1664_asm_table_sinia};
const n1 sinia_braso_clui[] = {cpu_1664_asm_table_clui};
nN indise_limite=lista_parametre->contador/sizeof(P);
struct lista *m=((struct lista **)(lista_parametre->datos))[0];
nN indise_desloca;
if(m->datos[0]!='{')
{
m=0;
cpu_1664_asm_sinia_t sinia=cpu_1664_asm_sinia_t_sinia__cadena(((struct lista **)(lista_parametre->datos))[0]->datos,((struct lista **)(lista_parametre->datos))[0]->contador);
indise_desloca=1;
nN i;
for(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)
{
m=((struct lista **)(cpu->lista_model->datos))[i];
}
}
}
else
{
// printf("\n* %s %s [%x] *\n",m->datos, ((struct lista **)(lista_parametre->datos))[1]->datos, m->contador);
indise_desloca=1;
}
if(m!=0)
{
struct lista *lista;
struct lista *lista_inisial=lista_nova(0);
struct lista *lista_redise=lista_nova(0);
lista=lista_inisial;
nN k;
n8 valua;
nN indise;
nN j=0;
while(j<m->contador)
{
switch(m->datos[j])
{
default:
lista_ajunta__dato(lista, m->datos[j++]);
break;
case '\\':
j++;
if(m->datos[j-2]!='\\')
{
lista_ajunta__dato(lista, m->datos[j++]);
}
break;
case cpu_1664_asm_sinia_model:
j++;
switch(m->datos[j])
{
default:
lista_ajunta__dato(lista, cpu_1664_asm_sinia_model);
lista_ajunta__dato(lista, m->datos[j++]);
break;
 
case '@': //asm_desloca
lista_ajunta__ccadena(lista, "0x");
lista_ajunta_asciiexadesimal__n8(lista, cpu->lista_imaje_asm->contador);
j++;
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
indise=indise_desloca+m->datos[j]&0x0f;
if(indise<indise_limite) { lista_ajunta__datos(lista, ((struct lista **)(lista_parametre->datos))[indise]->datos,((struct lista **)(lista_parametre->datos))[indise]->contador); }
j++;
break;
case '{': //parametre sustitua
k=nN_cuantia_brasetida__cadena(m->datos+j, m->datos[j], sinia_braso_clui[m->datos[j]]);
indise=indise_desloca+cpu_1664_asm_n8_valua__cadena(cpu, m->datos+j, k);
if(indise<indise_limite) { lista_ajunta__datos(lista, ((struct lista **)(lista_parametre->datos))[indise]->datos,((struct lista **)(lista_parametre->datos))[indise]->contador); }
j+=k;
break;
}
break;
}
}
j=1;
m=lista_inisial;
lista=lista_redise;
while(j<m->contador-1)
{
switch(m->datos[j])
{
default:
lista_ajunta__dato(lista, m->datos[j++]);
break;
case cpu_1664_asm_sinia_model:
j++;
if(m->datos[j-2]!='\\')
{
switch(m->datos[j])
{
default: //parametre sustitua
indise=indise_desloca+m->datos[j]&0x0f;
if(indise<indise_limite) { lista_ajunta__datos(lista, ((struct lista **)(lista_parametre->datos))[indise]->datos,((struct lista **)(lista_parametre->datos))[indise]->contador); }
j++;
break;
case '-': //comenta si evalua no zero
j++;
k=nN_cuantia_brasetida__cadena(m->datos+j, m->datos[j], sinia_braso_clui[m->datos[j]]);
valua=cpu_1664_asm_n8_valua__cadena(cpu, m->datos+j, k);
if(valua!=0) { lista_ajunta__dato(lista, cpu_1664_asm_sinia_comenta); }
j+=k;
break;
case '+': //comenta si evalua zero
j++;
k=nN_cuantia_brasetida__cadena(m->datos+j, m->datos[j], sinia_braso_clui[m->datos[j]]);
valua=cpu_1664_asm_n8_valua__cadena(cpu, m->datos+j, k);
if(valua==0) { lista_ajunta__dato(lista, cpu_1664_asm_sinia_comenta); }
j+=k;
break;
case '>': //avansa 1 si evalua no zero
j++;
k=nN_cuantia_brasetida__cadena(m->datos+j, m->datos[j], sinia_braso_clui[m->datos[j]]);
valua=cpu_1664_asm_n8_valua__cadena(cpu, m->datos+j, k);
j+=k+(valua!=0);
break;
case '{': //parametre sustitua
k=nN_cuantia_brasetida__cadena(m->datos+j, m->datos[j], sinia_braso_clui[m->datos[j]]);
indise=indise_desloca+cpu_1664_asm_n8_valua__cadena(cpu, m->datos+j, k);
if(indise<indise_limite) { lista_ajunta__datos(lista, ((struct lista **)(lista_parametre->datos))[indise]->datos,((struct lista **)(lista_parametre->datos))[indise]->contador); }
j+=k;
break;
}
}
break;
}
}
// if(((struct lista **)(lista_parametre->datos))[0]->datos[0]=='{') { printf("<%s>\n",lista->datos); }
cpu_1664_asm_ajunta__cadena(cpu, lista->datos, lista->contador);
lista_libri(lista_inisial);
lista_libri(lista_redise);
}
}
/c/cpu_1664/cpu_1664_asm_opera_parametre_funsiona_ajunta.c
0,0 → 1,8
#include "cpu_1664.h"
 
void cpu_1664_asm_opera_parametre_funsiona_ajunta(struct cpu_1664 *cpu, char *ccadena, cpu_1664_asm_opera_parametre_funsiona, cpu_1664_dev_opera_parametre_funsiona)
{
lista_ajunta__cpu_1664_asm_sinia_t(cpu->lista_opera_parametre_sinia, cpu_1664_asm_sinia_t_sinia__cadena((n1 *)ccadena, nN_cuantia__ccadena(ccadena)));
lista_ajunta__P(cpu->lista_asm_opera_parametre_referi, asm_opera_parametre_funsiona);
lista_ajunta__P(cpu->lista_dev_opera_parametre_referi, dev_opera_parametre_funsiona);
}
/c/cpu_1664/cpu_1664_opera__sar.c
0,0 → 1,60
#include "cpu_1664.h"
 
void cpu_1664_opera__sar(struct cpu_1664 *cpu, n1 bait)
{
cpu->opera_sicle=cpu_1664_sicle_opera_sar;
n1 sinia_destina=bait&((1<<cpu_1664_bitio_rd)-1);
n1 sinia_fonte=bait>>cpu_1664_bitio_rd;
cpu_1664_sinia_t dest=cpu->sinia[sinia_destina];
cpu_1664_sinia_t desloca;
n1 bool_sinia=(cpu->sinia[sinia_destina]>=cpu_1664_sinia_t_di);
n1 bool_depende_c=0;
if(sinia_destina==sinia_fonte)
{
desloca=1;
}
else
{
desloca=cpu->sinia[sinia_fonte]&((sizeof(cpu_1664_sinia_t)*8)-1);
}
if(desloca!=0)
{
nN i;
for(i=desloca-1;i>31;i-=31)
{
dest>>=31;
}
dest>>=i;
bool_depende_c=dest&1;
dest>>=1;
}
if(bool_sinia!=0)
{
cpu_1664_sinia_t masca=-1;
nN i;
for(i=(sizeof(cpu_1664_sinia_t)*8)-desloca;i>31;i-=31)
{
masca<<=31;
}
masca<<=i;
dest|=masca;
}
cpu->sinia[bait&((1<<cpu_1664_bitio_rd)-1)]=dest;
 
if (cpu->depende[cpu_1664_depende_bitio_depende_influe]!=0)
{
cpu->depende[cpu_1664_depende_c] = bool_depende_c;
cpu->depende[cpu_1664_depende_z] = (dest==0);
cpu->depende[cpu_1664_depende_n] = cpu->depende[cpu_1664_depende_z]==0;
}
}
/c/cpu_1664/cpu_1664_asm_opera_parametre_funsiona__3e3e2e.c
0,0 → 1,41
#include "cpu_1664.h"
 
n1 cpu_1664_asm_opera_parametre_funsiona__3e3e2e(struct cpu_1664 *cpu, struct lista *lista)
{
nN lista_cuantia=lista->contador/sizeof(P);
nN Ae,Be,Ce;
if(lista_cuantia>=3)
{
Ae=cpu_1664_asm_n8_valua__lista(cpu, ((struct lista **)(lista->datos))[lista_cuantia-3]);
Be=cpu_1664_asm_n8_valua__lista(cpu, ((struct lista **)(lista->datos))[lista_cuantia-2]);
Ce=cpu_1664_asm_n8_valua__lista(cpu, ((struct lista **)(lista->datos))[lista_cuantia-1]);
if(((Ae>=8)))
{
//eror parametre Ae
cpu->asm_eror=1;
return 0;
}
if((Be>=8))
{
//eror parametre Be
cpu->asm_eror=1;
return 0;
}
if((Ce>=4))
{
//eror parametre Ce
cpu->asm_eror=1;
return 0;
}
}
else
{
//error parametre cuantia
cpu->asm_eror=1;
return 0;
}
return Ae|(Be<<3)|(Ce<<6);
}
/c/cpu_1664/cpu_1664_dev_opera_parametre_funsiona__6r2r.c
0,0 → 1,22
#include "cpu_1664.h"
 
struct lista * cpu_1664_dev_opera_parametre_funsiona__6r2r(struct cpu_1664 * cpu, n1 bait)
{
struct lista *lista_2=lista_nova(0);
struct lista *lista_parametre=lista_nova(0);
struct lista *lista_informa=lista_nova(0);
n1 A=bait&((1<<cpu_1664_bitio_r)-1);
n1 B=bait>>cpu_1664_bitio_r;
lista_ajunta_asciiexadesimal__n1(lista_parametre, A);
lista_ajunta__dato(lista_parametre, ' ');
lista_ajunta_asciiexadesimal__n1(lista_parametre, B);
lista_ajunta_asciiexadesimal__n8(lista_informa, cpu->sinia[A]);
lista_ajunta__dato(lista_informa, ' ');
lista_ajunta_asciiexadesimal__n8(lista_informa, cpu->sinia[B]);
lista_ajunta__P(lista_2, (P)lista_parametre);
lista_ajunta__P(lista_2, (P)lista_informa);
return lista_2;
}
/c/cpu_1664/cpu_1664_dev_opera_parametre_funsiona__2r6r.c
0,0 → 1,21
#include "cpu_1664.h"
 
struct lista * cpu_1664_dev_opera_parametre_funsiona__2r6r(struct cpu_1664 * cpu, n1 bait)
{
struct lista *lista_2=lista_nova(0);
struct lista *lista_parametre=lista_nova(0);
struct lista *lista_informa=lista_nova(0);
n1 A=bait&((1<<cpu_1664_bitio_rd)-1);
n1 B=bait>>cpu_1664_bitio_rd;
lista_ajunta_asciiexadesimal__n1(lista_parametre, A);
lista_ajunta__dato(lista_parametre, ' ');
lista_ajunta_asciiexadesimal__n1(lista_parametre, B);
lista_ajunta_asciiexadesimal__n8(lista_informa, cpu->sinia[A]);
lista_ajunta__dato(lista_informa, ' ');
lista_ajunta_asciiexadesimal__n8(lista_informa, cpu->sinia[B]);
lista_ajunta__P(lista_2, (P)lista_parametre);
lista_ajunta__P(lista_2, (P)lista_informa);
return lista_2;
}
/c/cpu_1664/cpu_1664_opera__rev.c
0,0 → 1,199
#include "cpu_1664.h"
 
void cpu_1664_opera__rev(struct cpu_1664 *cpu, n1 bait)
{
cpu->opera_sicle=cpu_1664_sicle_opera_rev;
cpu_1664_sinia_t sinia_0;
nN i;
cpu_1664_sinia_t desloca;
switch(bait)
{
case cpu_1664_opera_rev_reveni:
cpu->sinia[cpu_1664_sinia_IP]=cpu->sinia[cpu_1664_sinia_reveni];
break;
case cpu_1664_opera_rev_eseta: //interompe /reveni
if(cpu->vantaje==1)
{
cpu_1664_vantaje(cpu, 0);
cpu->sinia[cpu_1664_sinia_IP]=cpu->sinia_vantaje[cpu_1664_sinia_reveni_eseta];
}
else
{
cpu_1664_eseta(cpu, cpu_1664_eseta_usor);
}
break;
case cpu_1664_opera_rev_ajusta_protejeda:
if(cpu->vantaje==1)
{
cpu->opera_ajusta_protejeda=1;
}
break;
case cpu_1664_opera_rev_ajusta_permete:
if(cpu->vantaje==1)
{
cpu->opera_ajusta_protejeda=0;
}
break;
case cpu_1664_opera_rev_depende_influe:
cpu->depende[cpu_1664_depende_bitio_depende_influe]=1;
break;
case cpu_1664_opera_rev_depende_inoria:
cpu->depende[cpu_1664_depende_bitio_depende_influe]=0;
break;
case cpu_1664_opera_rev_sicle_intercambia:
if(cpu->vantaje==1)
{
sinia_0=cpu->sinia[0];
cpu->sinia[0]=cpu->contador_sicle;
cpu->contador_sicle=sinia_0;
}
break;
case cpu_1664_opera_rev_sicle_usor_limite_intercambia:
if(cpu->vantaje==1)
{
sinia_0=cpu->sinia[0];
cpu->sinia[0]=cpu->contador_sicle_usor_limite;
cpu->contador_sicle_usor_limite=sinia_0;
}
else
{
cpu->sinia[0]=cpu->contador_sicle_usor_limite;
}
break;
case cpu_1664_opera_rev_sicle_usor_intercambia:
if(cpu->vantaje==1)
{
sinia_0=cpu->sinia[0];
cpu->sinia[0]=cpu->contador_sicle_usor;
cpu->contador_sicle_usor=sinia_0;
}
else
{
cpu->sinia[0]=cpu->contador_sicle_usor;
}
break;
case cpu_1664_opera_rev_state_usor_restora:
cpu->opera_sicle=16+64;
if(cpu->vantaje==1)
{
desloca=cpu->sinia[0];
for(i=0;i<(1<<cpu_1664_bitio_r);i++, desloca+=sizeof(cpu_1664_sinia_t))
{
cpu->sinia_usor[i]=cpu_1664_umm(cpu, desloca, (1<<cpu_1664_umm_usor_mapa_permete_leje), sizeof(cpu_1664_sinia_t), 0);
}
for(i=0x10;i<=0x1f;i++, desloca++)
{
cpu->opera_ajusta_usor[i]=cpu_1664_umm(cpu, desloca, (1<<cpu_1664_umm_usor_mapa_permete_leje), 1, 0);
}
sinia_0=cpu_1664_umm(cpu, desloca, (1<<cpu_1664_umm_usor_mapa_permete_leje), 4, 0);
for(i=0; i<32; i++)
{
cpu->depende_usor[i]|=(sinia_0&1);
sinia_0>>=1;
}
desloca+=4;
cpu->contador_sicle_usor=cpu_1664_umm(cpu, desloca, (1<<cpu_1664_umm_usor_mapa_permete_leje), sizeof(cpu_1664_sinia_t), 0);
desloca+=sizeof(cpu_1664_sinia_t);
cpu->contador_sicle_usor_limite=cpu_1664_umm(cpu, desloca, (1<<cpu_1664_umm_usor_mapa_permete_leje), sizeof(cpu_1664_sinia_t), 0);
}
break;
case cpu_1664_opera_rev_state_usor_reteni:
cpu->opera_sicle=16+64;
if(cpu->vantaje==1)
{
desloca=cpu->sinia[0];
for(i=0;i<(1<<cpu_1664_bitio_r);i++, desloca+=sizeof(cpu_1664_sinia_t))
{
cpu_1664_umm(cpu, desloca, (1<<cpu_1664_umm_usor_mapa_permete_scrive), sizeof(cpu_1664_sinia_t), cpu->sinia_usor[i]);
}
for(i=0x10;i<=0x1f;i++, desloca++)
{
cpu_1664_umm(cpu, desloca, (1<<cpu_1664_umm_usor_mapa_permete_scrive), 1, cpu->opera_ajusta_usor[i]);
}
for(sinia_0=0,i=0; i<32; i++)
{
sinia_0|=cpu->depende_usor[i]!=0;
sinia_0<<=1;
}
cpu_1664_umm(cpu, desloca, (1<<cpu_1664_umm_usor_mapa_permete_scrive), 4, sinia_0);
desloca+=4;
cpu_1664_umm(cpu, desloca, (1<<cpu_1664_umm_usor_mapa_permete_scrive), sizeof(cpu_1664_sinia_t), cpu->contador_sicle_usor);
desloca+=sizeof(cpu_1664_sinia_t);
cpu_1664_umm(cpu, desloca, (1<<cpu_1664_umm_usor_mapa_permete_scrive), sizeof(cpu_1664_sinia_t), cpu->contador_sicle_usor_limite);
}
break;
case cpu_1664_opera_rev_bp:
if(cpu->vantaje==1)
{
cpu_1664_eseta(cpu, cpu_1664_eseta_bp_vantaje);
}
else
{
cpu_1664_eseta(cpu, cpu_1664_eseta_bp_usor);
}
break;
case cpu_1664_opera_rev_entra:
cpu->opera_sicle=8+32;
cpu->sinia[cpu_1664_sinia_pila]-=32*sizeof(cpu_1664_sinia_t);
for(i=0; i<32; i++)
{
cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_pila]+i*sizeof(cpu_1664_sinia_t), (1<<cpu_1664_umm_usor_mapa_permete_scrive), sizeof(cpu_1664_sinia_t), cpu->sinia[cpu_1664_sinia_RETENI_0+i]);
}
break;
case cpu_1664_opera_rev_departi:
cpu->opera_sicle=8+32;
for(i=0; i<32; i++)
{
cpu->sinia[cpu_1664_sinia_RETENI_0+i]=cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_pila]+i*sizeof(cpu_1664_sinia_t), (1<<cpu_1664_umm_usor_mapa_permete_leje), sizeof(cpu_1664_sinia_t), 0);
}
cpu->sinia[cpu_1664_sinia_pila]+=32*sizeof(cpu_1664_sinia_t);
break;
case cpu_1664_opera_rev_ajusta_reinisia:
if(cpu->vantaje==1||cpu->opera_ajusta_protejeda==0)
{
for(i=16;i<32;i++)
{
cpu->opera_ajusta[i]=i;
}
}
break;
default:
cpu_1664_eseta(cpu, cpu_1664_eseta_opera_nonlegal);
break;
}
}
/c/cpu_1664/cpu_1664_asm_asm_opera__lista_2.c
0,0 → 1,92
#include "cpu_1664.h"
 
void cpu_1664_asm_asm_opera__lista_2(struct cpu_1664 *cpu, struct lista *lista_parametre)
{
cpu_1664_opera_t parola;
n1 depende;
n1 opera_sifri,opera_desifri;
nN opera_parametre_indise;
n1 parametre;
cpu->avisa__no_definida=0;
opera_desifri=cpu_1664_asm_n1_opera_valua__lista(cpu, ((struct lista **)(lista_parametre->datos))[0]);
if (opera_desifri!=0xff)
{
depende=0x07;
opera_parametre_indise=1;
}
else if((lista_parametre->contador/sizeof(P))>1)
{
depende=cpu_1664_asm_n8_valua__lista(cpu,((struct lista **)(lista_parametre->datos))[0]);
opera_desifri=cpu_1664_asm_n1_opera_valua__lista(cpu, ((struct lista **)(lista_parametre->datos))[1]);
opera_parametre_indise=2;
}
if(opera_desifri!=0xff)
{
opera_sifri=cpu->opera_ajusta_asm[opera_desifri];
if(opera_sifri==0)
{
n1 opera_ajusta=cpu_1664_asm_n8_valua__lista(cpu, ((struct lista **)(lista_parametre->datos))[(lista_parametre->contador/sizeof(P))-2]);
if((opera_ajusta<0x10)||(opera_ajusta>0x1f))
{
cadena__f((P)scrive_stdout, "eror opera ajusta %x 0x00..0x10\n",opera_ajusta);
cpu->asm_eror=1;
}
else
{
opera_ajusta-=0x10;
}
n1 opera_sustitua=cpu_1664_asm_n1_opera_valua__lista(cpu, ((struct lista **)(lista_parametre->datos))[(lista_parametre->contador/sizeof(P))-1]);
if (opera_sustitua==0xff)
{
opera_sustitua=cpu_1664_asm_n8_valua__lista(cpu, ((struct lista **)(lista_parametre->datos))[(lista_parametre->contador/sizeof(P))-1]);
}
parola=opera_sifri+(opera_ajusta<<(cpu_1664_bitio_opera))+(opera_sustitua<<(cpu_1664_bitio_opera+cpu_1664_bitio_co));
}
else
{
lista_ajunta__cpu_1664_sinia_t(cpu->lista_dev_asm_desloca, cpu->lista_imaje_asm->contador); //*__ ? + imaje->contador
lista_ajunta__P(cpu->lista_dev_asm_cadena, lista_2_nova__lista_2(lista_parametre));
parametre=(((n1 (**)(struct cpu_1664 *, struct lista *))(cpu->lista_asm_opera_parametre_funsiona->datos))[opera_desifri](cpu, lista_parametre));
parola=(opera_sifri|(depende<<cpu_1664_bitio_opera))|(parametre<<8);
}
if(cpu->avisa__no_definida!=0)
{
struct cpu_1664_asm_taxe *taxe=(struct cpu_1664_asm_taxe *)memoria_nova(sizeof(struct cpu_1664_asm_taxe));
taxe->parola=parola;
taxe->asm_opera_parametre_funsiona=((n1 (**)(struct cpu_1664 *, struct lista *))(cpu->lista_asm_opera_parametre_funsiona->datos))[opera_desifri];
taxe->desloca=cpu->lista_imaje_asm->contador;
taxe->lista=lista_2_nova__lista_2(lista_parametre);
lista_ajunta__P(cpu->lista_taxe, (P)taxe);
}
lista_ajunta__cpu_1664_asm_parola_t(cpu->lista_imaje_asm, parola);
}
else
{
cpu_1664_asm_sinia_t sinia=cpu_1664_asm_sinia_t_sinia__cadena(((struct lista **)(lista_parametre->datos))[0]->datos,((struct lista **)(lista_parametre->datos))[0]->contador);
cpu_1664_asm_sinia_t valua;
if((lista_parametre->contador/sizeof(P))>1)
{
valua=cpu_1664_asm_n8_valua__lista(cpu, ((struct lista **)(lista_parametre->datos))[1]);
}
else
{
valua=cpu->lista_imaje_asm->contador;
}
cpu_1664_asm_defina_valua(cpu, sinia, valua);
//eror opera_sifri
//cadena__f((P)scrive_stdout, "\neror opera_sifri\n");
//cpu->asm_eror=1;
}
}
/c/cpu_1664/cpu_1664_opera__sutr.c
0,0 → 1,16
#include "cpu_1664.h"
 
void cpu_1664_opera__sutr(struct cpu_1664 *cpu, n1 bait)
{
cpu->opera_sicle=cpu_1664_sicle_opera_sutr;
cpu_1664_sinia_t dest=cpu->sinia[bait&((1<<cpu_1664_bitio_rd)-1)];
cpu_1664_sinia_t fonte=cpu->sinia[bait>>cpu_1664_bitio_rd];
cpu->sinia[bait&((1<<cpu_1664_bitio_rd)-1)]=fonte-dest;
if (cpu->depende[cpu_1664_depende_bitio_depende_influe]!=0)
{
cpu->depende[cpu_1664_depende_z] = fonte==dest;
cpu->depende[cpu_1664_depende_c] = fonte<dest;
cpu->depende[cpu_1664_depende_n] = cpu->depende[cpu_1664_depende_z]==0;
}
}
/c/cpu_1664/cpu_1664_opera__mul.c
0,0 → 1,110
#include "cpu_1664.h"
 
void cpu_1664_opera__mul(struct cpu_1664 *cpu, n1 bait)
{
cpu->opera_sicle=cpu_1664_sicle_opera_mul;
#define sz_sinia sizeof(cpu_1664_sinia_t)
#define masca_di ((((cpu_1664_sinia_t)(-1))>>((sz_sinia*4)-1))>>1)
#define desloca_di ((sz_sinia*4)-1)
n1 rd=bait&((1<<cpu_1664_bitio_rd)-1);
n1 rf=bait>>cpu_1664_bitio_rd;
cpu_1664_sinia_t A=cpu->sinia[rd];
cpu_1664_sinia_t B=cpu->sinia[rf];
 
#ifdef ojeto_64
cpu_1664_sinia_t m0=(A&masca_di)*(B&masca_di);
cpu_1664_sinia_t m1=(A&masca_di)*((B>>desloca_di)>>1);
cpu_1664_sinia_t m2=((A>>desloca_di)>>1)*(B&masca_di);
cpu_1664_sinia_t m3=((A>>desloca_di)>>1)*((B>>desloca_di)>>1);
cpu_1664_sinia_t masima = m3 + ((m1>>desloca_di)>>1) + ((m2>>desloca_di)>>1);
cpu_1664_sinia_t minima = m0 + ((m1<<desloca_di)<<1);
masima+=(minima<m0);
minima+=((m2<<desloca_di)<<1);
masima+=(minima<((m2<<desloca_di)<<1));
#endif
 
#ifdef ojeto_32
n8 produi=A*B;
cpu_1664_sinia_t masima = ((produi>>31)>>1);
cpu_1664_sinia_t minima = produi&0xffffffff;
#endif
#ifdef ojeto_16
n4 produi=A*B;
cpu_1664_sinia_t masima = (produi>>16);
cpu_1664_sinia_t minima = produi&0xffff;
#endif
#ifdef ojeto_8
n2 produi=A*B;
cpu_1664_sinia_t masima = (produi>>8);
cpu_1664_sinia_t minima = produi&0xff;
#endif
{
//?salva
cpu->sinia[cpu_1664_sinia_masima]=masima;
cpu->sinia[cpu_1664_sinia_minima]=minima;
}
cpu_1664_sinia_t desloca_masima;
cpu_1664_sinia_t desloca_minima=0;
cpu_1664_sinia_t masca;
nN i;
for(masca=-1, i=0;((masima&masca)!=0);i++)
{
masca<<=1;
}
desloca_masima=(sizeof(cpu_1664_sinia_t)*8)-i;
if(desloca_masima==(sz_sinia*8))
{
for(masca=-1, i=0; ((minima&masca)!=0); i++)
{
masca<<=1;
}
desloca_minima=(sizeof(cpu_1664_sinia_t)*8)-i;
}
#ifdef ojeto_32
masima<<=desloca_masima;
minima>>=(sz_sinia*8)-desloca_masima;
minima<<=desloca_minima;
#endif
 
#ifdef ojeto_64
//x86-64
// nN i;
for(i=desloca_masima;i>desloca_di;i-=desloca_di)
{
masima<<=desloca_di;
}
masima<<=i;
for(i=(sz_sinia*8)-desloca_masima;i>desloca_di;i-=desloca_di)
{
minima>>=desloca_di;
}
minima>>=i;
for(i=desloca_minima;i>desloca_di;i-=desloca_di)
{
minima<<=desloca_di;
}
minima<<=i;
#endif
 
cpu->sinia[cpu_1664_sinia_desloca]+=desloca_masima+desloca_minima-sizeof(cpu_1664_sinia_t)*8;
cpu->sinia[rd]=masima|minima; //x86-64
if (cpu->depende[cpu_1664_depende_bitio_depende_influe]!=0)
{
cpu->depende[cpu_1664_depende_z] = (cpu->sinia[rd]==0);
cpu->depende[cpu_1664_depende_n] = cpu->depende[cpu_1664_depende_z]==0;
}
}
/c/cpu_1664/cpu_1664_asm_opera_parametre_funsiona__8ylr.c
0,0 → 1,38
#include "cpu_1664.h"
 
n1 cpu_1664_asm_opera_parametre_funsiona__8ylr(struct cpu_1664 * cpu, struct lista *lista)
{
struct lista *parametre=((struct lista **)(lista->datos))[(lista->contador/sizeof(P))-1];
n1 bool_nondireta;
n1 bool_indise=0;
nN i=0,j;
n1 sinia;
if(parametre->datos[0]=='[')
{
bool_nondireta=1;
i++;
}
else
{
bool_nondireta=0;
}
j=i;
while(j<parametre->contador)
{
if(parametre->datos[j++]=='+')
{
bool_indise=1;
i=j;
break;
}
}
j=i;
while(parametre->datos[i]!=']'&&i<parametre->contador) { i++; }
sinia=cpu_1664_asm_n8_valua__cadena(cpu, parametre->datos+j, i-j);
return sinia+((bool_nondireta+(bool_indise<<1))<<6);
}
/c/cpu_1664/cpu_1664_opera__ldb.c
0,0 → 1,19
#include "cpu_1664.h"
 
void cpu_1664_opera__ldb(struct cpu_1664 *cpu, n1 bait)
{
cpu->opera_sicle=cpu_1664_sicle_opera_ldb;
n1 sinia_destina=bait&((1<<cpu_1664_bitio_rd)-1);
n1 desloca=bait>>cpu_1664_bitio_rd;
cpu_1664_sinia_t masca;
nN i;
for(masca=1,i=desloca; i>31; i-=31)
{
masca<<=31;
}
masca<<=i;
 
cpu->depende[0]=(cpu->sinia[sinia_destina]&masca)!=0;
}
/c/cpu_1664/cpu_1664_opera__imita.c
0,0 → 1,128
#ifdef imita
#include "cpu_1664.h"
#include <time.h>
#include <stdio.h>
 
void cpu_1664_opera__imita(struct cpu_1664 *cpu, n1 bait)
{
cpu->opera_sicle=2;
n8 c;
nN desloca;
nN indise;
struct lista *fix_nom;
n1 *datos;
struct timespec *reg;
 
switch (bait)
{
case cpu_1664_imita_argc:
cpu->sinia[0]=cpu->imita_argc;
break;
case cpu_1664_imita_argv:
cpu_1664_umm(cpu, cpu->sinia[0], (1<<cpu_1664_umm_usor_mapa_permete_scrive), 1, 0);
desloca=cpu->sinia[0];
indise=cpu->sinia[1];
if (indise<cpu->imita_argc)
{
nN i=0;
do
{
cpu_1664_umm(cpu, desloca++, (1<<cpu_1664_umm_usor_mapa_permete_scrive), 1, cpu->imita_argv[indise][i]);
} while(cpu->imita_argv[indise][i++]!=0); //inclui zero final
}
break;
case cpu_1664_imita_open:
fix_nom=lista_nova(128);
indise=0;
do
{
c=cpu_1664_umm(cpu, cpu->sinia[0]+indise++, (1<<cpu_1664_umm_usor_mapa_permete_leje), sizeof(n1), 0);
lista_ajunta__dato(fix_nom, c);
} while(c!=0);
cpu->sinia[0]=open((const char *)fix_nom->datos, O_RDWR);
lista_libri(fix_nom);
break;
case cpu_1664_imita_close:
close(cpu->sinia[0]);
break;
case cpu_1664_imita_read:
datos=memoria_nova(cpu->sinia[2]);
read(cpu->sinia[0],datos,cpu->sinia[2]);
indise=0;
while(indise<cpu->sinia[1])
{
cpu_1664_umm(cpu, cpu->sinia[1]+indise, (1<<cpu_1664_umm_usor_mapa_permete_scrive), 1, datos[indise]);
indise++;
}
memoria_libri(datos);
break;
case cpu_1664_imita_write:
indise=0;
datos=memoria_nova(cpu->sinia[2]);
indise=0;
while(indise<cpu->sinia[2])
{
datos[indise]=cpu_1664_umm(cpu, cpu->sinia[1]+indise, (1<<cpu_1664_umm_usor_mapa_permete_leje), 1, 0);
indise++;
}
write(cpu->sinia[0],datos,cpu->sinia[2]);
memoria_libri(datos);
break;
case cpu_1664_imita_ftruncate:
cpu->sinia[0]=ftruncate(cpu->sinia[0],cpu->sinia[1]);
break;
case cpu_1664_imita_lseek:
cpu->sinia[0]=lseek(cpu->sinia[0],cpu->sinia[1],cpu->sinia[2]);
break;
case cpu_1664_imita_time:
cpu->sinia[0]=time(0);
break;
case cpu_1664_imita_nanosleep:
reg=(struct timespec *)memoria_nova(sizeof(struct timespec));
if(cpu->sinia[0]>=1000000000)
{
reg->tv_sec=cpu->sinia[0]/1000000000;
reg->tv_nsec=0;
}
else
{
reg->tv_nsec=cpu->sinia[0];
}
cpu->sinia[0]=nanosleep(reg, 0);
memoria_libri((n1 *)reg);
break;
case cpu_1664_imita_exit:
_exit(cpu->sinia[0]);
break;
default:
break;
};
}
#endif
/c/cpu_1664/cpu_1664__pasi.c
0,0 → 1,53
#include "cpu_1664.h"
 
void cpu_1664__pasi(struct cpu_1664 *cpu, n8 pasi)
{
n8 i;
cpu_1664_opera_t parola;
for(i=0;i<pasi;i++)
{
if(cpu->umm_memoria[cpu_1664_umm_desloca_interompe_capasi]!=0)
{
cpu_1664_sinia_t masca=cpu->umm_memoria[cpu_1664_umm_desloca_interompe_masca];
cpu_1664_sinia_t ativa=cpu->umm_memoria[cpu_1664_umm_desloca_interompe_ativa];
if((ativa&masca)!=0)
{
cpu->umm_memoria[cpu_1664_umm_desloca_interompe_capasi]=0;
cpu_1664_eseta(cpu, cpu_1664_eseta_umm_interompe);
}
}
parola=cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_IP], (1<<cpu_1664_umm_usor_mapa_permete_esecuta), sizeof(cpu_1664_opera_t), 0);
cpu->sinia[cpu_1664_sinia_IP]+=sizeof(cpu_1664_opera_t);
cpu->opera_sicle=1;
cpu_1664__desifri(cpu, parola);
cpu_1664_sinia_t sicle=cpu->opera_sicle;
if(cpu->vantaje==1)
{
cpu->contador_sicle+=sicle;
}
else
{
if(cpu->contador_sicle_usor_limite!=cpu_1664_sinia_t_di)
{
if(cpu->contador_sicle_usor_limite<cpu_1664_sinia_t_di)
{
cpu->contador_sicle_usor+=sicle;
cpu->contador_sicle_usor_limite-=sicle;
}
else
{
cpu_1664_eseta(cpu, cpu_1664_eseta_sicle_usor_limite);
}
}
}
}
}
/c/cpu_1664/cpu_1664_asm_asm_model__lista.c
0,0 → 1,195
#include "cpu_1664.h"
 
void cpu_1664_asm_asm_model__lista(struct cpu_1664 *cpu, struct lista *model, struct lista *lista_parametre, nN indise_desloca)
{
const n1 sinia_braso_clui[] = {cpu_1664_asm_table_clui};
nN indise_limite=lista_parametre->contador/sizeof(P);
 
if(model!=0)
{
struct lista *lista;
struct lista *lista_inisial=lista_nova(256);
struct lista *lista_redise=lista_nova(256);
lista=lista_inisial;
nN k;
n8 valua;
nN indise;
nN j=0;
while(j<model->contador)
{
switch(model->datos[j])
{
default:
lista_ajunta__dato(lista, model->datos[j++]);
break;
case '\\':
j++;
if(model->datos[j-2]!='\\')
{
lista_ajunta__dato(lista, model->datos[j++]);
}
break;
case cpu_1664_asm_sinia_model_opera:
j++;
switch(model->datos[j])
{
default:
lista_ajunta__dato(lista, cpu_1664_asm_sinia_model_opera);
lista_ajunta__dato(lista, model->datos[j++]);
break;
 
case '@': //asm_desloca
lista_ajunta__ccadena(lista, "0x");
lista_ajunta_asciiexadesimal__n8(lista, cpu->lista_imaje_asm->contador);
j++;
break;
case 'c': //parametre contador
lista_ajunta__ccadena(lista, "0x");
lista_ajunta_asciiexadesimal__n8(lista, indise_limite-1);
j++;
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
indise=indise_desloca+(model->datos[j]&0x0f);
if(indise<indise_limite) { lista_ajunta__datos(lista, ((struct lista **)(lista_parametre->datos))[indise]->datos,((struct lista **)(lista_parametre->datos))[indise]->contador); }
j++;
break;
case '{': //parametre sustitua
k=nN_cuantia_brasetida__cadena(model->datos+j, model->datos[j], sinia_braso_clui[model->datos[j]]);
indise=indise_desloca+cpu_1664_asm_n8_valua__cadena(cpu, model->datos+j, k);
if(indise<indise_limite) { lista_ajunta__datos(lista, ((struct lista **)(lista_parametre->datos))[indise]->datos,((struct lista **)(lista_parametre->datos))[indise]->contador); }
j+=k;
break;
}
break;
}
}
j=1;
model=lista_inisial;
lista=lista_redise;
while(j<model->contador-1)
{
switch(model->datos[j])
{
default:
lista_ajunta__dato(lista, model->datos[j++]);
break;
case cpu_1664_asm_sinia_model_opera:
j++;
if(model->datos[j-2]!='\\')
{
switch(model->datos[j])
{
default: //parametre sustitua
indise=indise_desloca+(model->datos[j]&0x0f);
if(indise<indise_limite) { lista_ajunta__datos(lista, ((struct lista **)(lista_parametre->datos))[indise]->datos,((struct lista **)(lista_parametre->datos))[indise]->contador); }
j++;
break;
case '-': //comenta si evalua no zero
j++;
k=nN_cuantia_brasetida__cadena(model->datos+j, model->datos[j], sinia_braso_clui[model->datos[j]]);
valua=cpu_1664_asm_n8_valua__cadena(cpu, model->datos+j, k);
if(valua!=0) { lista_ajunta__dato(lista, cpu_1664_asm_sinia_comenta); }
j+=k;
break;
case '+': //comenta si evalua zero
j++;
k=nN_cuantia_brasetida__cadena(model->datos+j, model->datos[j], sinia_braso_clui[model->datos[j]]);
valua=cpu_1664_asm_n8_valua__cadena(cpu, model->datos+j, k);
if(valua==0) { lista_ajunta__dato(lista, cpu_1664_asm_sinia_comenta); }
j+=k;
break;
case '>': //avansa 1 si evalua no zero
j++;
k=nN_cuantia_brasetida__cadena(model->datos+j, model->datos[j], sinia_braso_clui[model->datos[j]]);
valua=cpu_1664_asm_n8_valua__cadena(cpu, model->datos+j, k);
j+=k+(valua!=0);
break;
case '.':
j++;
k=nN_cuantia_brasetida__cadena(model->datos+j, model->datos[j], sinia_braso_clui[model->datos[j]]);
valua=cpu_1664_asm_n8_valua__cadena(cpu, model->datos+j, k);
if(valua!=0)
{
j=model->contador;
}
else
{
j+=k;
}
break;
case '!':
j++;
k=nN_cuantia_brasetida__cadena(model->datos+j, model->datos[j], sinia_braso_clui[model->datos[j]]);
valua=cpu_1664_asm_n8_valua__cadena(cpu, model->datos+j, k);
j+=k;
while(model->datos[j]!='"') { j++; }
k=nN_cuantia_brasetida__cadena(model->datos+j, model->datos[j], sinia_braso_clui[model->datos[j]]);
if(valua!=0)
{
cpu->asm_eror=1;
cadena__f((P)scrive_stdout,"%*s\n", k-2, model->datos+j+1);
j=model->contador;
}
else
{
j+=k;
}
break;
case 'I': //informa
j++;
while(model->datos[j]!='"') { j++; }
k=nN_cuantia_brasetida__cadena(model->datos+j, model->datos[j], sinia_braso_clui[model->datos[j]]);
cadena__f((P)scrive_stdout,"%*s\n", k-2, model->datos+j+1);
j+=k;
break;
case '{': //parametre sustitua
k=nN_cuantia_brasetida__cadena(model->datos+j, model->datos[j], sinia_braso_clui[model->datos[j]]);
indise=indise_desloca+cpu_1664_asm_n8_valua__cadena(cpu, model->datos+j, k);
if(indise<indise_limite) { lista_ajunta__datos(lista, ((struct lista **)(lista_parametre->datos))[indise]->datos,((struct lista **)(lista_parametre->datos))[indise]->contador); }
j+=k;
break;
}
}
break;
}
}
cpu_1664_asm_ajunta__cadena(cpu, lista->datos, lista->contador);
lista_libri(lista_inisial);
lista_libri(lista_redise);
}
}
/c/cpu_1664/cpu_1664_asm_opera_parametre_funsiona__ylr.c
0,0 → 1,12
#include "cpu_1664.h"
 
n1 cpu_1664_asm_opera_parametre_funsiona__8ylr(struct cpu_1664 * cpu, struct lista *lista)
{
// cadena__f((P)scrive_stdout, "<8e> %s %x\n",((struct lista **)(lista->datos))[(lista->contador/sizeof(P))-1]->datos,(lista->contador/sizeof(P))-1);
// n1 bait=cpu_1664_asm_n8_valua__lista(cpu, ((struct lista **)(lista->datos))[(lista->contador/sizeof(P))-1]);
if(((struct lista **)(lista->datos))[(lista->contador/sizeof(P))-1]->datos[0]=='[')
{
}
return bait;
}
/c/cpu_1664/cpu_1664_umm.c
0,0 → 1,147
#include "cpu_1664.h"
 
cpu_1664_sinia_t cpu_1664_umm(struct cpu_1664 *cpu, cpu_1664_sinia_t desloca_esije, n1 permete_esije, n1 cuantia, cpu_1664_sinia_t valua)
{
cpu_1664_sinia_t valua_leje[1]={0};
cpu_1664_sinia_t valua_scrive[1]={valua};
cpu_1664_sinia_t *mapa;
cpu_1664_sinia_t desloca_real;
n1 permete_leje=(cpu->vantaje!=0);
n1 permete_scrive=(cpu->vantaje!=0);
n1 permete_esecuta=(cpu->vantaje!=0);
n1 esije_leje=((permete_esije&(1<<cpu_1664_umm_usor_mapa_permete_leje))!=0);
n1 esije_scrive=((permete_esije&(1<<cpu_1664_umm_usor_mapa_permete_scrive))!=0);
n1 esije_esecuta=((permete_esije&(1<<cpu_1664_umm_usor_mapa_permete_esecuta))!=0);
if(cpu->vantaje!=0)
{
desloca_real=desloca_esije;
if((desloca_esije&cpu_1664_umm_desloca)==cpu_1664_umm_desloca)
{
if (esije_scrive!=0)
{
cpu->umm_memoria[desloca_esije&cpu_1664_umm_desloca_masca]=valua;
return 0;
}
else
{
return cpu->umm_memoria[desloca_esije&cpu_1664_umm_desloca_masca];
}
}
}
else
{
mapa=(cpu_1664_sinia_t *)(cpu->lista_imaje->datos+cpu->umm_memoria[cpu_1664_umm_desloca_usor_mapa]);
if((cpu->umm_memoria[cpu_1664_umm_desloca_usor_mapa]+sizeof(cpu_1664_sinia_t)*3)>=cpu->lista_imaje->capasia)
{
cadena__f((P)scrive_stdout, "\neseta usor : memoria asede sin mapa usor [%.*x] %.*x -> IP %x\n",sizeof(cpu_1664_sinia_t)*2,(n8)desloca_esije,sizeof(cpu_1664_sinia_t)*2,mapa,(n8)cpu->sinia[cpu_1664_sinia_IP]);
cpu_1664_eseta(cpu, cpu_1664_eseta_umm_limite);
return 0;
}
while(*mapa!=0)
{
n1 permete=mapa[cpu_1664_umm_usor_mapa_cuantia]&0x07;
cpu_1664_sinia_t mapa_cuantia=(mapa[cpu_1664_umm_usor_mapa_cuantia]>>3)<<3;
if((desloca_esije>=mapa[cpu_1664_umm_usor_mapa_desloca_usor])&&(desloca_esije<(mapa[cpu_1664_umm_usor_mapa_desloca_usor]+mapa_cuantia)))
{
desloca_real=desloca_esije-mapa[cpu_1664_umm_usor_mapa_desloca_usor]+mapa[cpu_1664_umm_usor_mapa_desloca_real];
if((permete&permete_esije)!=permete_esije)
{
cadena__f((P)scrive_stdout, "\neseta asede esije [%.*x] no permete [%.*x] desloca real [%.*x] IP %.*x\n",sizeof(cpu_1664_sinia_t)*2,(n8)permete_esije,sizeof(cpu_1664_sinia_t)*2,(n8)permete,sizeof(cpu_1664_sinia_t)*2,(n8)desloca_real,sizeof(cpu_1664_sinia_t)*2,(n8)cpu->sinia[cpu_1664_sinia_IP]);
cpu_1664_eseta(cpu, cpu_1664_eseta_umm_limite);
return 0;
}
permete_leje=((permete&(1<<cpu_1664_umm_usor_mapa_permete_leje))!=0);
permete_scrive=((permete&(1<<cpu_1664_umm_usor_mapa_permete_scrive))!=0);
permete_esecuta=((permete&(1<<cpu_1664_umm_usor_mapa_permete_esecuta))!=0);
break;
}
mapa+=3;
}
if(*mapa==0)
{
cadena__f((P)scrive_stdout, "\neseta usor : memoria asede sin mapa usor desloca [%.*x] -> IP %.*x\n",sizeof(cpu_1664_sinia_t)*2,(n8)desloca_esije,sizeof(cpu_1664_sinia_t)*2,(n8)cpu->sinia[cpu_1664_sinia_IP]);
cpu_1664_eseta(cpu, cpu_1664_eseta_umm_limite);
return 0;
}
}
if((nN)(desloca_real+cuantia)>=cpu->lista_imaje->capasia) // *__ : (nN <- cpu_1664_sinia_t) >= nN
{
cadena__f((P)scrive_stdout, "\neseta : memoria asede : desloca [%.*x] suprapasa capasia (%x) -> IP %.*x\n",sizeof(cpu_1664_sinia_t)*2,(n8)(desloca_real+cuantia),(n8)cpu->lista_imaje->capasia,sizeof(cpu_1664_sinia_t)*2,(n8)cpu->sinia[cpu_1664_sinia_IP]);
cpu_1664_eseta(cpu, cpu_1664_eseta_umm_limite);
return 0;
}
else
{
nN i;
if(esije_leje)
{
if(permete_leje)
{
for(i=0;i<cuantia;i++)
{
((n1 *)(valua_leje))[i]=((n1 *)(cpu->lista_imaje->datos+desloca_real))[i];
}
return valua_leje[0];
}
else
{
cadena__f((P)scrive_stdout, "\neseta asede leje no permete @ %.*x\n",sizeof(cpu_1664_sinia_t)*2,cpu->sinia[cpu_1664_sinia_IP]);
cpu_1664_eseta(cpu, cpu_1664_eseta_umm_leje);
return 0;
}
}
if(esije_esecuta)
{
if(permete_esecuta)
{
for(i=0;i<cuantia;i++)
{
((n1 *)(valua_leje))[i]=((n1 *)(cpu->lista_imaje->datos+desloca_real))[i];
}
return valua_leje[0];
}
else
{
cadena__f((P)scrive_stdout, "\neseta asede esecuta no permete @ %.*x\n",sizeof(cpu_1664_sinia_t)*2,cpu->sinia[cpu_1664_sinia_IP]);
cpu_1664_eseta(cpu, cpu_1664_eseta_umm_esecuta);
return 0;
}
}
if(esije_scrive)
{
if(permete_scrive)
{
for(i=0;i<cuantia;i++)
{
((n1 *)(cpu->lista_imaje->datos+desloca_real))[i]=((n1 *)(valua_scrive))[i];
}
return 0;
}
else
{
cadena__f((P)scrive_stdout, "\neseta asede escrive no permete @ %.*x\n",sizeof(cpu_1664_sinia_t)*2,cpu->sinia[cpu_1664_sinia_IP]);
cpu_1664_eseta(cpu, cpu_1664_eseta_umm_scrive);
return 0;
}
}
}
cadena__f((P)scrive_stdout, "\n**-\n"); return 0;
}
/c/cpu_1664/cpu_1664_opera__sut.c
0,0 → 1,16
#include "cpu_1664.h"
 
void cpu_1664_opera__sut(struct cpu_1664 *cpu, n1 bait)
{
cpu->opera_sicle=cpu_1664_sicle_opera_sut;
cpu_1664_sinia_t dest=cpu->sinia[bait&((1<<cpu_1664_bitio_rd)-1)];
cpu_1664_sinia_t fonte=cpu->sinia[bait>>cpu_1664_bitio_rd];
cpu->sinia[bait&((1<<cpu_1664_bitio_rd)-1)]-=cpu->sinia[bait>>cpu_1664_bitio_rd];
if (cpu->depende[cpu_1664_depende_bitio_depende_influe]!=0)
{
cpu->depende[cpu_1664_depende_z] = fonte==dest;
cpu->depende[cpu_1664_depende_c] = fonte>dest;
cpu->depende[cpu_1664_depende_n] = cpu->depende[cpu_1664_depende_z]==0;
}
}
/c/cpu_1664/cpu_1664_umm_tradui_desloca.c
0,0 → 1,36
#include "cpu_1664.h"
 
cpu_1664_sinia_t cpu_1664_umm_tradui_desloca(struct cpu_1664 *cpu, cpu_1664_sinia_t desloca_esije)
{
cpu_1664_sinia_t *mapa=(cpu_1664_sinia_t *)(cpu->lista_imaje->datos+cpu->umm_memoria[cpu_1664_umm_desloca_usor_mapa]);
cpu_1664_sinia_t desloca_real=-1;
if((cpu->umm_memoria[cpu_1664_umm_desloca_usor_mapa]+sizeof(cpu_1664_sinia_t)*3)>=cpu->lista_imaje->capasia)
{
cadena__f((P)scrive_stdout, "\neseta usor : memoria asede sin mapa usor [%.*x] %*.x -> IP %.*x\n",sizeof(cpu_1664_sinia_t)*2,desloca_esije,sizeof(cpu_1664_sinia_t)*2,mapa,sizeof(cpu_1664_sinia_t)*2,cpu->sinia[cpu_1664_sinia_IP]);
cpu_1664_eseta(cpu, cpu_1664_eseta_umm_limite);
return -1;
}
while(*mapa!=0)
{
cpu_1664_sinia_t cuantia=(mapa[cpu_1664_umm_usor_mapa_cuantia]&(((cpu_1664_sinia_t)(-1))-0x07));
if((desloca_esije>=mapa[cpu_1664_umm_usor_mapa_desloca_usor])&&(desloca_esije<(mapa[cpu_1664_umm_usor_mapa_desloca_usor]+cuantia)))
{
desloca_real=desloca_esije-mapa[cpu_1664_umm_usor_mapa_desloca_usor]+mapa[cpu_1664_umm_usor_mapa_desloca_real];
break;
}
mapa+=3;
}
if(*mapa==0)
{
cadena__f((P)scrive_stdout, "\neseta usor : memoria asede sin mapa usor desloca esije [%.*x] -> IP %.*x\n",sizeof(cpu_1664_sinia_t)*2,desloca_esije,sizeof(cpu_1664_sinia_t)*2,cpu->sinia[cpu_1664_sinia_IP]);
cpu_1664_eseta(cpu, cpu_1664_eseta_umm_limite);
return -1;
}
return desloca_real;
}
/c/cpu_1664/cpu_1664_libri.c
0,0 → 1,50
#include "cpu_1664.h"
 
void cpu_1664_libri(struct cpu_1664 *cpu)
{
lista_libri(cpu->lista_imaje);
 
//asm
lista_libri(cpu->lista_imaje_asm);
lista_libri(cpu->lista_defina_sinia);
lista_libri(cpu->lista_defina_valua);
lista_libri(cpu->lista_opera_sinia);
lista_libri(cpu->lista_opera_parametre_sinia);
lista_libri(cpu->lista_asm_opera_parametre_referi);
lista_libri(cpu->lista_asm_opera_parametre_funsiona);
lista_libri(cpu->lista_asm_comanda_sinia);
lista_libri(cpu->lista_asm_comanda_funsiona);
lista_2_libri(cpu->lista_inclui_curso);
lista_libri(cpu->lista_eticeta_cadena);
//model
lista_2_libri(cpu->lista_model);
lista_libri(cpu->lista_model_sinia);
nN i;
for(i=0;i<cpu->lista_taxe->contador/sizeof(P);i++)
{
lista_2_libri(((struct cpu_1664_asm_taxe *)((struct lista **)(cpu->lista_taxe->datos))[i])->lista);
memoria_libri((P)((struct cpu_1664_asm_taxe *)((struct lista **)(cpu->lista_taxe->datos))[i]));
}
lista_libri(cpu->lista_taxe);
 
for(i=0;i<cpu->lista_taxe_d->contador/sizeof(P);i++)
{
lista_libri(((struct cpu_1664_asm_taxe_d *)((struct lista **)(cpu->lista_taxe_d->datos))[i])->lista);
memoria_libri((P)((struct cpu_1664_asm_taxe_d *)((struct lista **)(cpu->lista_taxe_d->datos))[i]));
}
lista_libri(cpu->lista_taxe_d);
//dev
lista_libri(cpu->lista_dev_asm_desloca);
lista_2_libri(cpu->lista_dev_asm_cadena);
lista_2_libri(cpu->lista_dev_opera_cadena);
lista_libri(cpu->lista_dev_opera_parametre_referi);
lista_libri(cpu->lista_dev_opera_parametre_funsiona);
 
//cpu
memoria_libri((void *)cpu);
}
/c/cpu_1664/cpu_1664_dev_opera_parametre_funsiona__8e.c
0,0 → 1,14
#include "cpu_1664.h"
 
struct lista * cpu_1664_dev_opera_parametre_funsiona__8e(struct cpu_1664 * cpu, n1 bait)
{
struct lista *lista_2=lista_nova(0);
struct lista *lista_parametre=lista_nova(0);
struct lista *lista_informa=lista_nova(0);
lista_ajunta_asciiexadesimal__n1(lista_parametre, bait);
lista_ajunta__P(lista_2, (P)lista_parametre);
lista_ajunta__P(lista_2, (P)lista_informa);
return lista_2;
}
/c/cpu_1664/cpu_1664_imita.c
0,0 → 1,395
#include "cpu_1664.h"
#include <stdio.h>
 
#define filo_cuantia 10
#define scrive (P)scrive_stdout
 
int main(int argc, char **argv)
{
if (argc>1)
{
char fix_imaje_model[]="1664.imaje";
char fix_jornal_cadena[]="1664.jornal";
nM memoria_cuantia=0;
struct lista *lista_enflue;
struct cpu_1664 *cpu = cpu_1664_nova(1024*1024*2);
char *cadena_fix_esflue=fix_imaje_model;
char *cadena_fix_enflue;
nN contador_ante=0;
nN a=1;
nN i;
nN bool_debug=0;
nN bool_parolos=0;
nN bool_core=0;
cpu->opera_lista[cpu_1664_opera_imita]=cpu_1664_opera__imita;
cpu->imita_argc=argc;
cpu->imita_argv=argv;
FILE *fix_esflue;
FILE *fix_enflue;
n1 *fix_enflue_datos;
n8 fix_enflue_datos_cuantia;
while(a<argc)
{
switch(argv[a][0])
{
default:
a++;
break;
case '+': //parametre arg imita
a++;
break;
case '-':
switch(argv[a][1])
{
case 'v':
a++;
bool_parolos=1;
break;
case 'f':
a++;
lista_enflue=lista_nova__ccadena(".inclui ");
lista_ajunta__ccadena(lista_enflue, argv[a]);
cpu_1664_asm_ajunta__cadena(cpu, lista_enflue->datos, lista_enflue->contador);
lista_libri(lista_enflue);
if(bool_parolos) cadena__f(scrive, "[0x%.*x] %s\n",sizeof(cpu_1664_sinia_t)*2, (n8)(cpu->lista_imaje_asm->contador-contador_ante), argv[a]);
contador_ante=cpu->lista_imaje_asm->contador;
a++;
break;
case 'I':
a++;
lista_ajunta__P(cpu->lista_inclui_curso, lista_nova__ccadena(argv[a++]));
break;
case 'm':
a++;
memoria_cuantia=nN__desimal_cadena((n1 *)argv[a], nN_cuantia__ccadena(argv[a]));
lista_crese(cpu->lista_imaje, memoria_cuantia);
a++;
break;
case 'd':
bool_debug=1;
bool_core=1;
a++;
break;
case 'B':
a++;
cadena_fix_enflue=argv[a];
fix_enflue=fopen(cadena_fix_enflue, "r");
fseek(fix_enflue, 0, SEEK_END);
fix_enflue_datos_cuantia=ftell(fix_enflue);
rewind(fix_enflue);
fix_enflue_datos=(n1*)memoria_nova(fix_enflue_datos_cuantia);
fread(fix_enflue_datos, 1, fix_enflue_datos_cuantia, fix_enflue);
if(bool_parolos) cadena__f(scrive, "imaje [0x%x] << %s [0x%x]",(n8)cpu->lista_imaje->contador, cadena_fix_enflue, fix_enflue_datos_cuantia); fflush(0);
cpu_1664_imaje_ajunta__datos(cpu, fix_enflue_datos, fix_enflue_datos_cuantia);
if(bool_parolos) cadena__f(scrive,"\n");
memoria_libri(fix_enflue_datos);
fclose(fix_enflue);
a++;
break;
case 'b':
a++;
cadena_fix_esflue=argv[a];
if(bool_parolos) cadena__f(scrive, "imaje > %s",cadena_fix_esflue); fflush(0);
fix_esflue=fopen(cadena_fix_esflue, "w");
cadena__f(scrive, " [0x%x]\n", (n8)cpu->lista_imaje_asm->contador);
fwrite(cpu->lista_imaje_asm->datos, 1, cpu->lista_imaje_asm->contador, fix_esflue);
fclose(fix_esflue);
a++;
break;
case 'e':
bool_core=1;
a++;
break;
}
break;
}
}
if(cpu->asm_eror!=0)
{
cadena__f(scrive,"aborte: eror asm\n");
return 1;
}
if(!bool_core) _exit(0);
cpu_1664_imaje_ajunta__lista(cpu, cpu->lista_imaje_asm);
if(!bool_debug)
{
cpu_1664__pasi(cpu, (n8)-1);
}
 
struct lista *lista_jornal_opera=lista_nova(0);
struct lista *lista_jornal_desloca=lista_nova(0);
struct lista *lista_jornal_mapa=lista_nova(0);
cpu_1664_sinia_t *sinia_ante;
cpu_1664_sinia_t sinia_ante_usor[1<<cpu_1664_bitio_r];
cpu_1664_sinia_t sinia_ante_vantaje[1<<cpu_1664_bitio_r];
cpu_1664_opera_t parola;
cpu_1664_sinia_t sIP_egali=(cpu_1664_sinia_t)-1;
nN pasi_cuantia=1;
for(i=0;i<1<<cpu_1664_bitio_r;i++)
{
sinia_ante_usor[i]=0;
sinia_ante_vantaje[i]=0;
}
n1 bool_sicle_fini=0;
n1 bool_pausa=0;
n1 bool_bp=0;
n1 bool_depende;
n1 bool_eseta;
while(bool_sicle_fini==0)
{
bool_eseta=0;//cpu->sinia[cpu_1664_sinia_IP]==0;
bool_pausa=(cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_IP], (1<<cpu_1664_umm_usor_mapa_permete_esecuta), sizeof(cpu_1664_opera_t), 0)==(cpu_1664_opera_t)(-1));
n1 opera_depende=(cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_IP], (1<<cpu_1664_umm_usor_mapa_permete_esecuta), 1, 0)>>5)&0x07;
bool_depende=opera_depende==7||cpu->depende[opera_depende]!=0;
bool_bp=bool_depende&&((cpu_1664_opera_t)(cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_IP], (1<<cpu_1664_umm_usor_mapa_permete_esecuta), sizeof(cpu_1664_opera_t), 0))&0xff1f)==(cpu_1664_opera_t)(cpu_1664_opera_rev|(cpu_1664_opera_rev_bp<<8));
if(cpu->vantaje==1)
{
sinia_ante=sinia_ante_vantaje;
}
else
{
sinia_ante=sinia_ante_usor;
}
if ((bool_eseta&&(cpu->contador_sicle!=0))||bool_sicle_fini||bool_pausa||bool_bp)
{
pasi_cuantia=1;
}
if ((sIP_egali!=(cpu_1664_sinia_t)-1)&&(cpu->sinia[cpu_1664_sinia_IP]==sIP_egali))
{
sIP_egali=(cpu_1664_sinia_t)-1;
pasi_cuantia=1;
}
if(pasi_cuantia<=1)
{
//consola_leje_carater();
fflush(stdout);cadena_ANSI__atribuida(scrive,40);
fflush(stdout);cadena_ANSI_limpa(scrive);
fflush(stdout);cadena_ANSI_cursor_orijin(scrive);
nN j;
nN s;
for(s=0; s<(1<<(cpu_1664_bitio_r-2));s++)
{
for(j=0;j<(1<<2);j++)
{
nN indise=(s<<2)+j;
if(indise==cpu_1664_sinia_IP)
{
fflush(stdout);cadena_ANSI__3atribuida(scrive,1,40,32);
}
else if(sinia_ante[indise]!=cpu->sinia[indise])
{
fflush(stdout);cadena_ANSI__3atribuida(scrive,1,40,36);
}
else
{
fflush(stdout);cadena_ANSI__3atribuida(scrive,2,40,37);
}
sinia_ante[indise]=cpu->sinia[indise];
cadena__f(scrive, "%.*x ",sizeof(cpu_1664_sinia_t)*2,(n8)cpu->sinia[indise]);
}
scrive_stdout("\n",1);
}
fflush(stdout);cadena_ANSI__atribuida(scrive,11);
j=-1;
parola=cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_IP]+(2*(j+1)), (1<<cpu_1664_umm_usor_mapa_permete_esecuta), sizeof(cpu_1664_opera_t), 0);
cadena__f(scrive, "sicle %.*x usor %.*x limite %.*x\n",sizeof(cpu_1664_sinia_t)*2,cpu->contador_sicle,sizeof(cpu_1664_sinia_t)*2,cpu->contador_sicle_usor,sizeof(cpu_1664_sinia_t)*2,(n8)cpu->contador_sicle_usor_limite);
fflush(stdout);cadena_ANSI__2atribuida(scrive,1,36);
if(cpu->depende[cpu_1664_depende_bitio_depende_influe]!=0)
{
cadena__f(scrive, "(esflue) ");
}
else
{
cadena__f(scrive, "(inoria) ");
}
cadena__f(scrive, "depende : ");
cadena__f(scrive, "%c",('0')&0xff*(cpu->depende[0]!=0));
cadena__f(scrive, "%c",('1')&0xff*(cpu->depende[1]!=0));
cadena__f(scrive, "%c",('2')&0xff*(cpu->depende[2]!=0));
cadena__f(scrive, "%c",('3')&0xff*(cpu->depende[3]!=0));
cadena__f(scrive, "%c",('4')&0xff*(cpu->depende[4]!=0));
cadena__f(scrive, "%c",('5')&0xff*(cpu->depende[5]!=0));
cadena__f(scrive, "%c",('6')&0xff*(cpu->depende[6]!=0));
cadena__f(scrive, "\n");
fflush(stdout);cadena_ANSI__3atribuida(scrive,1,40,37);
fflush(stdout);cadena_ANSI__cursor_desende(scrive,filo_cuantia-1);
for(j=0;j<filo_cuantia;j++)
{
fflush(stdout);cadena_ANSI__cursor_sinistra(scrive,100);
cpu_1664_sinia_t mapa=0;
cpu_1664_sinia_t desloca=0;
cpu_1664_opera_t parola=0;
{
//mapa=((cpu_1664_sinia_t *)(lista_jornal_mapa->datos))[(lista_jornal_mapa->contador/sizeof(cpu_1664_sinia_t))-j-1];
desloca=((cpu_1664_sinia_t *)(lista_jornal_desloca->datos))[(lista_jornal_desloca->contador/sizeof(cpu_1664_sinia_t))-j-1];
parola=((cpu_1664_opera_t *)(lista_jornal_opera->datos))[(lista_jornal_opera->contador/sizeof(cpu_1664_opera_t))-j-1];
}
cadena__f(scrive, "%.*x : ",4,mapa);
cadena__f(scrive, "%.*x %.*x ",sizeof(cpu_1664_sinia_t)*2,desloca,4,parola);
struct lista *lista_dev=cpu_1664_dev_dev(cpu, cpu->sinia[cpu_1664_sinia_IP], parola);
struct lista *_lista_dev_dev_depende=((struct lista **)(((struct lista **)(lista_dev->datos))[1]->datos))[0];
struct lista *_lista_dev_dev_opera=((struct lista **)(((struct lista **)(lista_dev->datos))[1]->datos))[1];
struct lista *_lista_dev_parametre=((struct lista **)(((struct lista **)(lista_dev->datos))[2]->datos))[0];
printf("%s ",_lista_dev_dev_depende->datos);
printf("%s ",_lista_dev_dev_opera->datos);
printf("%s ",_lista_dev_parametre->datos);
fflush(stdout);cadena_ANSI__cursor_asende(scrive, 1);
}
fflush(stdout);cadena_ANSI__cursor_desende(scrive,filo_cuantia+1); fflush(stdout);cadena_ANSI__cursor_sinistra(scrive,100);
for(j=0;j<filo_cuantia;j++)
{
if(j==0)
{
fflush(stdout);cadena_ANSI__3atribuida(scrive,40,1,36);
}
else
{
fflush(stdout);cadena_ANSI__3atribuida(scrive,2,40,37);
}
parola=cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_IP]+(2*(j+0-0)), (1<<cpu_1664_umm_usor_mapa_permete_esecuta), sizeof(cpu_1664_opera_t), 0);
cadena__f(scrive, "%.*x : ",4,cpu->umm_memoria[0]*!cpu->vantaje);
cadena__f(scrive, "%.*x %.*x ",sizeof(cpu_1664_sinia_t)*2,cpu->sinia[cpu_1664_sinia_IP]+(2*(j+0-0)),4,parola);
struct lista *lista_dev=cpu_1664_dev_dev(cpu, cpu->sinia[cpu_1664_sinia_IP], parola);
struct lista *_lista_dev_dev_depende=((struct lista **)(((struct lista **)(lista_dev->datos))[1]->datos))[0];
struct lista *_lista_dev_dev_opera=((struct lista **)(((struct lista **)(lista_dev->datos))[1]->datos))[1];
struct lista *_lista_dev_parametre=((struct lista **)(((struct lista **)(lista_dev->datos))[2]->datos))[0];
struct lista *_lista_dev_informa=((struct lista **)(((struct lista **)(lista_dev->datos))[2]->datos))[1];
printf("%s ",_lista_dev_dev_depende->datos);
printf("%s ",_lista_dev_dev_opera->datos);
printf("%s ",_lista_dev_parametre->datos);
if(j==0)
{
if(pasi_cuantia<=1)printf("; %s",_lista_dev_informa->datos);
}
if(pasi_cuantia<=1)printf("\n");
cpu_1664_dev_dev_libri(lista_dev);
}
}
#define limite_jornal 1000000
if((lista_jornal_opera->contador/sizeof(cpu_1664_opera_t))<limite_jornal)
{
lista_ajunta__cpu_1664_parola_t(lista_jornal_opera, cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_IP], (1<<cpu_1664_umm_usor_mapa_permete_esecuta), sizeof(cpu_1664_opera_t), 0));
lista_ajunta__cpu_1664_sinia_t(lista_jornal_desloca, cpu->sinia[cpu_1664_sinia_IP]);
lista_ajunta__cpu_1664_sinia_t(lista_jornal_mapa, cpu->umm_memoria[0]*!cpu->vantaje);
}
if (--pasi_cuantia>0)
{
cpu_1664__pasi(cpu, 1);
continue;
}
else
{
pasi_cuantia=1;
}
n1 c=consola_leje_carater();
switch (c)
{
case 'n':
default:
cpu_1664__pasi(cpu, 1);
break;
case 'm':
sIP_egali=cpu->sinia[cpu_1664_sinia_IP]+sizeof(cpu_1664_opera_t);
cpu_1664__pasi(cpu, 1);
pasi_cuantia=-1;
break;
case 'N':
cpu->sinia[cpu_1664_sinia_IP]+=sizeof(cpu_1664_opera_t);
break;
case 'c':
cpu_1664__pasi(cpu, 1);
pasi_cuantia=-1;
break;
case 'q':
bool_sicle_fini=1;
fflush(stdout);cadena_ANSI__atribuida(scrive,0);
break;
case ':':
fflush(stdout);cadena_ANSI__3atribuida(scrive,40,1,36);
cadena__f(scrive, "comanda : ");fflush(0);
switch(consola_leje_carater())
{
case 'd':
cadena__f(scrive, "imaje > %s",cadena_fix_esflue); fflush(0);
fix_esflue=fopen(cadena_fix_esflue, "w");
cadena__f(scrive, " [0x%x]\n", cpu->lista_imaje_asm->contador);
fwrite(cpu->lista_imaje_asm->datos, 1, cpu->lista_imaje_asm->contador, fix_esflue);
fclose(fix_esflue);
consola_leje_carater(); //pausa
break;
case 'j':
cadena__f(scrive, "jornal > %s",fix_jornal_cadena); fflush(0);
fix_esflue=fopen(fix_jornal_cadena, "w");
cadena__f(scrive, " [0x%x]\n", cpu->lista_imaje_asm->contador);
fwrite(cpu->lista_imaje_asm->datos, 1, cpu->lista_imaje_asm->contador, fix_esflue);
fclose(fix_esflue);
consola_leje_carater(); //pausa
break;
}
break;
}
}
cadena__f(scrive, "> [%.*x] %.*x\n",6,cpu->sinia[cpu_1664_sinia_IP],sizeof(cpu_1664_opera_t)*2,cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_IP], (1<<cpu_1664_umm_usor_mapa_permete_esecuta), sizeof(cpu_1664_opera_t), 0));
lista_libri(lista_jornal_opera);
lista_libri(lista_jornal_desloca);
lista_libri(lista_jornal_mapa);
cpu_1664_libri(cpu);
return 0;
}
else
{
cadena__f(scrive, " <-v> parolas\n <-d> desdefetador\n <-e> imita\n <-I inclui_curso>\n <-f fonte.1664>\n <-B binario_enflue>\n <-b binario_esflue>\n <-m memoria_cuantia>\n");
return 0;
}
}
/c/cpu_1664/cpu_1664_asm_asm_comanda__nodefina.c
0,0 → 1,21
#include "cpu_1664.h"
 
void cpu_1664_asm_asm_comanda__nodefina(struct cpu_1664 *cpu, n1 *cadena)
{
struct lista *lista_parametre=cpu_1664_asm_lista_parametre__cadena(cadena);
cpu_1664_asm_sinia_t sinia=cpu_1664_asm_sinia_t_sinia__cadena(((struct lista **)(lista_parametre->datos))[0]->datos,((struct lista **)(lista_parametre->datos))[0]->contador);
nN i;
for(i=0;i<(cpu->lista_defina_valua->contador/sizeof(nN));i++)
{
if(((cpu_1664_asm_sinia_t *)(cpu->lista_defina_sinia->datos))[i]==sinia)
{
((cpu_1664_asm_sinia_t *)(cpu->lista_defina_sinia->datos))[i]=0;
((cpu_1664_sinia_t *)(cpu->lista_defina_valua->datos))[i]=0;
return;
}
}
lista_2_libri(lista_parametre);
}
/c/cpu_1664/cpu_1664_asm_taxe_d_ajunta.c
0,0 → 1,10
#include "cpu_1664.h"
 
void cpu_1664_asm_taxe_d_ajunta(struct cpu_1664 *cpu, struct lista *lista, nN cuantia)
{
struct cpu_1664_asm_taxe_d *taxe_d=(struct cpu_1664_asm_taxe_d *)memoria_nova(sizeof(struct cpu_1664_asm_taxe_d));
taxe_d->cuantia=cuantia;
taxe_d->desloca=cpu->lista_imaje_asm->contador;
taxe_d->lista=lista_nova__datos(lista->datos, lista->contador);
lista_ajunta__P(cpu->lista_taxe_d,(P)taxe_d);
}
/c/cpu_1664/cpu_1664_opera__ldr.c
0,0 → 1,7
#include "cpu_1664.h"
 
void cpu_1664_opera__ldr(struct cpu_1664 *cpu, n1 bait)
{
cpu->opera_sicle=cpu_1664_sicle_opera_ldr;
cpu->sinia[bait&((1<<cpu_1664_bitio_rd)-1)]=cpu->sinia[bait>>cpu_1664_bitio_rd];
}
/c/cpu_1664/documentos/1664.tex
0,0 → 1,634
\documentclass[a4paper,11pt]{article}
 
\begin{document}
\title{1664}
\author{public domain}
\date{\today}
\maketitle
\tableofcontents
\pagebreak
 
\part{Architecture}
This document briefly outlines the working of the '1664' processor, the assembler and the simulator/debugger.
 
\section{Instruction set}
 
\subsection{Opcode encoding}
All instructions are conditional with the exception of \bf ajusta \rm.\\
All instructions are encoded with 16 bits. With the exception of \bf ajusta \rm the least significant 8 bits determine the operation and the condition. The most significant 8 bits, the parameter(s). \\
 
[0..4] opcode bits \\
 
[5..7] condition bits \\
 
[8..15] parameter bits (the specific decoding depends on the instruction). \\
 
(*) \bf ajusta \rm opcode: \\
 
[0..4] opcode bits. \\
 
[5..8] destination opcode (+ 0x10).\\
 
[9..15] opcode to be mapped from complete instruction set. \\
 
\subsection{Condition bits}
There are 8 condition bits, 'condition 7' is always read as 1, the others are modifiable using the condition manipulation instructions: ldb, stb, cmp, dep. \\
The \bf rev opera\_rev\_depende\_influe \rm instruction allows other instructions to affect the condition bits. In this mode, the first four bits have a determined meaning. \\
Condition 0 indicates a zero result. \\
Condition 1 is the inverse of bit condition 0. \\
Condition 2 indicates a carry. \\
Condition 3 indicates an underflow. \\
 
\subsection{Fixed instructions}
 
\subsubsection{ajusta : configure opcode}
Parameter range : $<$0x10..0x1f$>$ $<$0x00..0x7f$>$
After execution of \bf ajusta \rm the opcode specified by the second parameter is mapped to the opcode specified by the first parameter. \\
The 16 configurable opcodes allow access to all 128 instructions.\\
The first 16 non-configurable instructions can be duplicated in the 16 configurable slots providing a means of code obfuscation on a system where the translation table is not visible.\\
The ajusta instruction is optionally a protected instruction. Protect via \bf rev \rm instruction.\\
See assembler directives \sl .opera \rm and \sl .ajusta \rm
\begin{verbatim}
ajusta 0x10 and ; opcode '0x10' interpreted
; as 'and' instruction
 
;equivalent of '7 and 1 3'
.d1 {0x10 7 5 <<} {1 3 2 <<}
 
;fictional instruction 'new <0..3> <0..63>'
.opera new 2r6r ; declare instruction name and parameter interpretation as '2r6r'
ajusta 0x11 new ; opcode '0x11' interpreted as 'new' instruction
.ajusta 0x11 new ; inform assembler of change to opcode value.
0 new 0 0 ; assembled as '0x0011'
\end{verbatim}
 
\subsubsection{ldi : load 8b constant}
Parameter format: $<$0..255$>$
Least significant 8 bits of register 0 is replaced with parameter. Remaining bits are unaffected.
\begin{verbatim}
eor 0 0 ; 0 == '0x0000'
ldi 0x12 ; 0 == '0x0012'
ldi 0x34 ; 0 == '0x0034'
\end{verbatim}
 
\subsubsection{ldis : load 8b constant with post 8b shift}
Parameter format : $<$0..255$>$\\
Least significant 8 bits of register 0 is replaced with parameter and register is shifted left 8 bits.\\
Together with \bf ldi \rm instruction, a 64 bit value can be loaded using 128 bits of code.\\
See memory load instruction \bf ldm \rm for an alternative to loading register 0 with a constant.\\
 
\begin{verbatim}
eor 0 0 ; 0 == '0x0000'
ldis 0x12 ; 0 == '0x1200'
ldi 0x34 ; 0 == '0x1234'
\end{verbatim}
 
\subsubsection{ldm : memory load}
Parameter format : $<$[(+-)0..7(+-)]$>$ ($<$size$>$)\\
$<$size$>$ 1, 2 or an even multiple of 2 to size of register. (optional) Defaults to size of register.\\
+ increment (optional)\\
- decrement (optional)\\
(+-) before the register modifies the register by $<$size$>$ before.\\
(+-) after the register modifies the register by $<$size$>$ after.\\
Register 0 is loaded register with $<$size$>$ element from memory pointed to by A.\\
If the specified register is 7 (\sl sIP\rm) then the offset is calculated adding (unsigned) register 0.\\
\begin{verbatim}
ldm [sIP+] 4
.d4 0x12345678
;execution continues here. 0 == '0x12345678'
 
ldm [6+] ;register 0 is loaded from stack.
;The size of the element loaded is
;the size of the register
;(the default when the <size> is omitted).
\end{verbatim}
\subsubsection{stm : memory store}
store complement to \bf ldm \rm instruction.
 
\begin{verbatim}
ldi 0x12
stm [-6] 1 ;stack register is pre decremented by '1'
;and 0x12 is stored to
;location pointed by register 6.
\end{verbatim}
 
\subsubsection{ldr : register load}
Parameter format: $<$A0..3$>$ $<$B0..63$>$\\
Load register A with B
 
\subsubsection{str : register store}
Parameter format: $<$A0..3$>$ $<$B0..63$>$\\
Store register A to B
 
\subsubsection{cam : register swap}
Parameter format: $<$A0..3$>$ $<$B0..63$>$\\
Swap registers A, B
\subsubsection{yli : relative branch by signed 8b constant}
Parameter format: $<$-127..128$>$\\
return register (\sl sREVENI \rm) is loaded with address after \bf yli\rm\\
branch instruction pointer + 8b constant shifted left by 1.\\
Assembler parameter format: $<$label$>$\\
The assembler will calculate the relative offset from the instruction, which must be a multiple of 2.\\
 
\subsubsection{ylr : absolute branch via register or relative via sIP}
Return register (\sl sREVENI \rm) is loaded with address after \bf ylr\rm
A any register\\
Parameter format: $<$[A0..63]$>$\\
Branch to address pointed to by address in register A\\
Parameter format: $<$[+A0..63]$>$\\
Branch to (address pointed to by address in register A) relative to \sl sIP \rm\\
Parameter format: $<$A0..63$>$\\
Branch to address in register A\\
Parameter format: $<$+A0..63$>$\\
Branch to (address in register A) relative to \sl sIP \rm\\
 
\subsubsection{ldb : bit load}
Parameter format: $<$A0..3$>$ $<$B0..63$>$\\
Copy bit B of register A to z (condition bit 0)
 
\subsubsection{stb : bit store}
Parameter format: $<$A0..3$>$ $<$B0..63$>$\\
Copy bit z (condition bit 0) to bit B of register A
 
\subsubsection{cmp : register compare}
Parameter format: $<$A0..3$>$ $<$B0..63$>$ ; set condition bits\\
condition bit 0 (alias z) = $A==B$\\
condition bit 1 (alias n) = $A\neg B$
condition bit 2 (alias c) = $A>B$
condition bit 3 (alias o) = $A<B$
\subsubsection{dep : condition bit logic}
Parameter format: $<$A0..7$>$ $<$B0..7$>$ $<$C0..3$>$\\
The function performed on condition bits A, B are determined by the value of C:\\
0: $A = A \oplus B$\\
1: $A = A \wedge B$\\
2: $A = A \vee B$\\
3: A swapped with B\\
 
Macro alias: \sl dep\_eor,dep\_and,dep\_or,dep\_cam \rm\\
clear bit : beor c c\\
set bit : bor c 7
 
\subsubsection{bit : register bit statistics}
Parameter format: $<$A0..63$>$ $<$CODE0..3$>$\\
Result is stored in register 0.\\
CODE 0: count of clear bits in register A before first set bit counting from most significant bit\\
1: count of clear bits in register A before first set bit counting from least significant bit\\
2: count of set bits in register A\\
3: count of clear bits in register A\\
Macro aliases: \sl msb, lsb, ones, zeros \rm\\
 
\subsubsection{rev : multiple functions specified by 8b constant}
Parameter format: $<$0..255$>$\\
The function performed by rev is determined by the parameter.
\paragraph{opera\_rev\_reveni}
\sl sIP=sREVENI \rm
\paragraph{opera\_rev\_eseta}
If executed while in protected mode, execution returns to user mode and the user instruction pointer is loaded from \sl sREVENI\_ESETA\rm.\\
From user mode, protected \sl sREVENI\_ESETA \rm is loaded with user instruction pointer and a user exception is executed. Register 0 contains the exception offset. See example source code.
\paragraph{opera\_rev\_ajusta\_reinisia}
Operation translations set by \bf ajusta \rm are set to defaults: 16,17,..,31\\
\paragraph{opera\_rev\_ajusta\_protejeda}
Protected mode instruction. Prevents user code from configuring opcodes.
\paragraph{opera\_rev\_ajusta\_permete}
Protected mode instruction. Allows user code to configure opcodes.
\paragraph{opera\_rev\_depende\_influe}
Allows instructions to influence condition bits.
\paragraph{opera\_rev\_depende\_inoria}
Prevents instructions (apart from bit instruction) from changing condition bits
\paragraph{opera\_rev\_sicle\_intercambia}
Protected mode instruction. Register 0 and CPU cycle counter are swapped
\paragraph{opera\_rev\_sicle\_usor\_limite\_intercambia}
Protected mode instruction. Register 0 and user cycle limit are swapped\\
The user cycle limit, limits user code cycle usage before an exception returns control to protected mode code.
\paragraph{opera\_rev\_sicle\_usor\_intercambia}
From protected mode, register 0 and user cycle counter are swapped.\\
From user code, register 0 is loaded with user cycle counter.
\paragraph{opera\_rev\_state\_reteni\_usor}
Protected mode instruction. Save user state to memory pointed by register 0.\\
64 registers; 128 opcode translation (presently, stored as 8 bit per opcode), 4 byte CPU flags and conditions, a register size for user cycle counter and cycle limit, each.
\paragraph{opera\_rev\_state\_restora\_usor}
Protected mode instruction. Load user state to memory pointed by register 0.
\paragraph{opera\_rev\_bp}
Break point exception. Protected and user mode are distinguished
 
\paragraph{opera\_rev\_entra}
Save \sl RETENI \rm (\sl sR0..31 \rm) registers to (decrease before write) stack
 
\paragraph{opera\_rev\_departi}
Load \sl RETENI \rm (\sl sR0..31 \rm) registers from (increase after read) stack
 
\subsection{Configurable instructions}
Logic and arithmetic functions that operate on registers only.
 
\subsubsection{and : register logical and}
Parameter format : $<$A0..3$>$ $<$B0..63$>$\\
condition bits : z,n
\subsubsection{or : register logical or}
Parameter format : $<$A0..3$>$ $<$B0..63$>$\\
condition bits: z,n
\subsubsection{eor : register logical exclusive or}
Parameter format : $<$A0..3$>$ $<$B0..63$>$\\
condition bits : z,n
\subsubsection{shl : register logical shift left}
Parameter format : $<$A0..3$>$ $<$B0..63$>$\\
condition bits : z,n, c=last bit shifted
\subsubsection{shr : register logical shift right}
Parameter format : $<$A0..3$>$ $<$B0..63$>$\\
condition bits : z,n, c=last bit shifted
\subsubsection{sar : register arithmetic shift right}
Parameter format : $<$A0..3$>$ $<$B0..63$>$\\
condition bits : z,n, c=last bit shifted
 
\subsubsection{plu : register addition}
Parameter format : $<$A0..3$>$ $<$B0..63$>$\\
$A = A + B$
 
\subsubsection{sut : register subtraction}
Parameter format : $<$A0..3$>$ $<$B0..63$>$ \\
$A = A - B$
 
\subsubsection{sutr : register reverse subtraction}
Parameter format : $<$A0..3$>$ $<$B0..63$>$ \\
$A = B - A$
 
\subsubsection{mul : register multiply (integer/floating point)}
Parameter format: $<$A0..3$>$ $<$B0..63$>$\\
Register 0 contains the most significant bits of product with adjustment. \\
Adjusted so the most significant bit of product (\sl sMASIMA \rm) occupies the most significant bit of register 0.\\
Least significant bits shift from \sl sMINIMA \rm.\\
\sl sDESLOCA \rm contains the number of bits register 0 need to be shifted to produce correct result\\
if value is unsigned, ($A*B$) = (register\_0)$<<$\sl sDESLOCA \rm\\
if value is signed (two's complement), ($A*B$) = (register\_0)$>>$\sl sDESLOCA \rm\\
\sl sMASIMA \rm contains most significant bits of product\\
\sl sMINIMA \rm contains least significant bits of product\\
\bf mul \rm and \bf div \rm operations are cumulative on \sl sDESLOCA \rm. See software FPU implementation (f2) for an example.
\subsubsection{div : register divide (integer/floating point)}
Parameter format: $<$A0..3$>$ $<$B0..63$>$\\
Register 0 contains the most significant bits of division with adjustment.\\
Adjusted so the most significant bit of product (\sl sMASIMA \rm) occupies the most significant bit of register 0.\\
\sl sDESLOCA \rm contains the number of bits register 0 need to be shifted to produce correct result\\
if value is unsigned, ($A*B$) = (register\_0)$<<$\sl sDESLOCA \rm\\
if value is signed (two's complement), ($A*B$) = (register\_0)$>>$\sl sDESLOCA \rm\\
\sl sMINIMA \rm = $A/B$\\
\bf mul \rm and \bf div \rm operations are cumulative on \sl sDESLOCA\rm. See software FPU implementation (f2) for an example.\\
\subsection{Registers}
The processor may be configured with up to 64 registers.
 
\subsubsection{6 stack pointer}
Register 6 \sl sPILA \rm is used as the the stack pointer by the example code.
 
\subsubsection{7 instruction pointer}
Register 7 \sl sIP \rm the instruction pointer. When read it points to the instruction's address+2.
 
\subsubsection{59 }
Register 59 \sl sDESLOCA \rm See arithmetic instructions \bf mul\rm, \bf div\rm.
 
\subsubsection{60}
Register 60 \sl sMINIMA \rm See arithmetic instructions \bf mul\rm, \bf div\rm.
 
\subsubsection{61}
Register 61 \sl sMASIMA \rm See arithmetic instructions \bf mul\rm, \bf div\rm.
 
\subsubsection{62 exception return pointer}
Register 62 \sl sREVENI\_ESETA \rm contains the address, following the instruction, that caused and exception.\\
It is used as the return address for the instruction \bf rev opera\_rev\_eseta \rm when executed as a 'privileged' instruction. See instruction \bf rev\rm.
 
\subsubsection{63 branch return pointer}
Register 63 \sl sREVENI \rm contains the link address. See branch instructions \bf yli, ylr\rm. \\
The instruction \bf rev opera\_rev\_reveni \rm assigns the value of \sl sREVENI \rm to the instruction pointer.
 
\pagebreak
\section{Memory mapped peripherals (simulator)}
Peripheral configuration registers are mapped to a reserved memory block that are accessible from system code or user code provided the register address are mapped to the user code memory space. See memory management unit.
 
\subsection{Memory management unit}
A simple MMU is included in the simulator that provides configurable access rights per mapped area of memory. The MMU translates the requested address via a translation table with the following format (1664 assembler syntax):\\
 
\begin{verbatim}
.ds {SIZE PERMISSION |} ;least significant bits determine access.
.ds VIRTUAL_OFFSET
.ds REAL_OFFSET
 
;... further entries
 
.ds 0 ;end
\end{verbatim}
 
Permission bits are as follows:\\
0 : read operation allowed when set to 1\\
1 : write operation allowed when set to 1\\
2 : execute operation allowed when set to 1\\
 
The first word contains the size of the mapped area (most significant bits) and 3 access permission bits (least significant bits). As a consequence \sl SIZE \rm is 8 bytes aligned.\\
 
\pagebreak
\part{Assembler}
The assembler requires, at the minimum, a file with an instruction declaration. (See directive \sl .opera \rm). \\
 
\section{Syntax}
 
\subsection{Instructions}
(condition) instruction\_name (parameter\_1) (parameter\_2) (..)
The condition does not need to be specified as it is assumed to be 7 (always true) if left out.\\
All instructions are conditional, with the exception of the instruction \bf ajusta\rm.
Example of using conditional instructions:\\
\begin{verbatim}
eor 1 1
eor 0 0
ldi 1 ;register 0 == 1
cmp 0 1
z ldi 2 ;register 0 == 1
n ldi 3 ;register 0 == 3
c ldi 4 ;register 0 == 4
o ldi 5 ;register 0 == 4
\end{verbatim}
 
\subsection{Labels}
Labels are declared simply by placing the name on a new line.\\
To create a local label, the label declaration must begin with a \sl : \rm. The local label is then preceded with an \sl @ \rm. And is referenced by the name of the \sl :\rm label concatinated with the local label.\\
Example of a loop and local label:\\
\begin{verbatim}
rev 5 ;instructions afect condition bits.
label0
eor 0 0
ldi 2
eor 1 1
ldi 1
:label1
label2
@local
sut 0 1
n yli label1@local
yli label2
\end{verbatim}
 
\pagebreak
\section{Directives}
 
\subsection{.inclui $<$file name$>$}
Include \sl filename\rm and assemble immediately.
 
\subsection{.opera $<$instruction name$>$ $<$parameter function name$>$}
Before an instruction can be identified and assembled the name must be declared and the parameter format specified from hard-coded functions. The opcode is inferred from the order which the instructions are declared.\\
See \sl base.opera.1664 \rm.
 
\begin{verbatim}
.opera instruction_name parameter_function
;instruction_name is given opcode 0x01 (ajusta is always 0x00)
;subsequent .opera .. are given + 1 from the previous
\end{verbatim}
 
\subsection{.ajusta $<$instruction opcode 0x10..0x1f$>$ $<$instruction name$>$}
Interpret \bf instruction name \rm as having the specified opcode.\\
Used to inform assembler that the \bf ajusta \rm instruction has changed the decoding.\\
See the instruction \bf ajusta \rm.
\subsection{.defina $<$tag$>$ $<$value$>$}
Assign a value to a tag. Undefined tags evaluate as 0.
 
\subsection{.nodefina $<$tag$>$}
Undefine a tag. Undefined tags evaluate as 0.
 
\subsection{.d1 $<$value0$>$ ($<$value1$>$) (...)}
Interpret values as 8 bit and output directly to image.
 
\subsection{.d2 $<$value0$>$ ($<$value1$>$) (...)}
Interpret values as 16 bit and output directly to image.\\
\sl .do, .d2 \rm are equivalent in current implementation
 
\subsection{.do $<$value0$>$ ($<$value1$>$) (...)}
Interpret values as instruction word (16 bit) values\\
\sl .do, .d2 \rm are equivalent in current implementation.
 
\subsection{.d4 $<$value0$>$ ($<$value1$>$) (...)}
Interpret values as 32 bit and output directly to image\\
(\sl .ds, .d4 \rm are equivalent when the CPU is configured with 32 bit registers)
 
\subsection{.ds $<$value0$>$ ($<$value1$>$) (...)}
Interpret values as register (up to 64bit) size and output directly to image.
\pagebreak
\section{Arithmetic}
Equations (including directives) are evaluated using reverse polish notation (RPN) method enclosed between \{\}.Nested \{\}\ evaluated.\\
Values are treated as 64 bit unsigned integer. Each value is added to a 'last in first out' stack.
 
example
\begin{verbatim}
.defina a {100 1 +} ;tag 'a' defined as 101
.defina b {a 2 -} ;tag 'b' defined as 99.
\end{verbatim}
 
\subsection{RPN Directives}
 
\subsubsection{.x}
Exchange last two values on stack
 
\subsubsection{.d}
Duplicate value on RPN stack indexed by last value (not included in count)
 
\subsubsection{.$<$}
Drop n values from stack, n is determined by last value and is dropped additionally.
 
\subsubsection{.-}
Unary function: twos compliment
 
\subsubsection{.+}
Unary function: absolute value
 
\subsubsection{./}
Unary function: $1/x$\\
Arithmetic performed as 64 bit integers.\\
 
\subsection{RPN functions}
$-$ ;subtract\\
$+$ ;add\\
$*$ ;multiply\\
$/$ ;divide\\
$>>$ ;shift right second last value by last value\\
$<<$ ;shift left second last value by last value\\
\& ;logic: and\\
$|$ ;logic: or\\
\^ ;logic: exclusive or\\
 
Boolean functions evaluate 1 if true otherwise 0. Last two values are replaced with result.\\
$>$ ;boolean: compare last two values: greater than\\
$<$ ;boolean: compare last two values: less than\\
$>=$ ;boolean: compare last two values: greater than or equal\\
$<=$ ;boolean: compare last two values: less than or equal\\
$=$ ;boolean: compare last two values: equal\\
!= ;boolean: compare last two values: not equal\\
$||$ ;boolean: (or) values and compare with 0\\
\&\& ;boolean: (and) values and compare with 0\\
^^ ;boolean: (exclusive or) values and compare with 0\\
 
\pagebreak
\section{Examples}
 
\subsection{Loading constants}
 
\begin{verbatim}
;24bits 0xaabbcc to register sT0
 
;using ldis and ldi 8 bytes
eor 0 0 ;0x0000000000000000
ldis 0xaa ;0x000000000000aa00
ldis 0xbb ;0x0000000000aabb00
ldi 0xcc ;0x0000000000aabbcc
 
;using ldm 6 bytes
ldm [sIP+] 4
.d4 0x00aabbcc
;execution continues
\end{verbatim}
 
\subsection{Configuring instruction}
 
\begin{verbatim}
ajusta 0x1f and ;configure 'and' in to last slot
.ajusta 0x1f and ;inform assembler to interpret 'and' as 0x1f
0 and 0 0 ;encoded as 0x001f
rev opera\_rev\_ajusta\_reinisia ;return to default configuration
.implicada ;inform assembler operations has default encoding
0 and 0 0 ;0x0010
\end{verbatim}
 
\pagebreak
\section{Macros}
 
\subsection{Macro definition}
.model $<$tag$>$ \{\} parameter0 parameter1 ... ;Named macro. Output when invoked by name.\\
\{\} ;Single line macros are evaluated in place.
 
\subsection{Macro functions}
Use within a macro definition \{\}.
 
\subsubsection{\%0..9}
Substituted with corresponding macro parameter.
 
\subsubsection{\%\{\}}
Substituted with corresponding macro parameter indexed as evaluated between \{\}.
 
\subsubsection{\%I"$<$text$>$"}
Macro information $<$text$>$ printed to console.
 
\subsubsection{\%!\{\}"$<$text$>$"}
Assembler error flagged and $<$text$>$ printed to console if \{\} evaluates !=0.
 
\subsubsection{\%.\{\}}
Macro expansion will stop at this evaluation if \{\} evaluates !=0.
 
\subsubsection{\%+\{\} $<$line$>$}
Include $<$line$>$ (the remaining text) if \{\} evaluates !=0
 
\subsubsection{\%-\{\} $<$line$>$}
Remove $<$line$>$ (the remaining text) line if \{\} evaluates !=0
 
\subsubsection{\%$>$\{\} $<$c$>$}
Skip character $<$c$>$ (advance one character) if \{\} evaluates !=0
 
\subsubsection{\%@}
Replace with current instruction pointer
 
\subsubsection{\%c}
Replace with parameter count
 
\subsection{Macro examples}
\begin{verbatim}
;Single line macro. Output 0
;(size of register) if instruction pointer
; evaluates greater or equal to 1001
{%+{%@ %0 >=}.ds 0} 1001
\end{verbatim}
 
\subsubsection{Named macro}
\begin{verbatim}
.model named {
%+{%@ %0 >=}.ds 0
}
;code
named 1001 ;Output 0 (size of register) if instruction pointer
;evaluates greater or equal to 1001
\end{verbatim}
 
\subsubsection{Recursive macro}
'something' repeated \%0 (10) times.\\
Each evaluation the parameter is decreased by 1 and passed to the named macro \sl reveni \rm after executing 'something'.\\
After 10 passes \%+ evaluates false and the next iteration is skipped.\\
 
\begin{verbatim}
.model revinente {
.defina contador {%0 1 -}
something
%+{contador 0 !=} revinente contador
}
;code
reveni 10
 
\end{verbatim}
 
\pagebreak
\part{Simulator}
Parameters intended for the simulated 1664 (See the instruction \bf imita\rm) are distinguished by starting with a \bf + \rm character (convention).\\
 
\section{Command line}
\subsection{-v : verbose}
\subsection{-d : start in debugger (execute)}
\subsection{-e : execute after assemble}
\subsection{-f : assemble file}
\subsection{-I : search path}
\subsection{-m : memory allocate in MB to CPU}
\subsection{-b : write binary image}
\subsection{-B : read binary image}
 
\pagebreak
\section{Debugger}
Fo the debugger to display the correct instruction names and decode the parameters correctly, the instruction delcarations that where used to assemble the file need to be supplied. (See assembler directive \sl .opera\rm).\\
\subsection{Key commands}
\subsubsection{c : run}
\subsubsection{n : step in}
\subsubsection{N : step over}
\subsubsection{m : break after}
 
\pagebreak
\section{Additional instruction}
To provide a way for the simulator to be used as an interpreter for 1664 code/binaries an additional instruction is included that provides an interface with some system calls (presently limited to GNU/Linux).\\
The example code uses \bf imita \rm at the 'operating system' level. The user code invokes the function by using the native user exception mechanism \bf rev opera\_rev\_eseta \rm.\\
 
\subsection{imita : simulate operating system call}
Parameter format: $<$0..255$>$\\
See \sl imita.inclui.1664 \rm for specific definition\\
See \sl imita.0.1664 \rm for code example.\\
\end{document}
/c/cpu_1664/documentos/Makefile
0,0 → 1,10
intende_fix = 1664
pdf: $(intende_fix).tex
@echo "LaTeX -> PDF"
@-rm $(intende_fix).pdf
@latex $^
@latex -output-format=pdf $^
 
limpa:
@-rm $(intende_fix).aux $(intende_fix).pdf $(intende_fix).dvi $(intende_fix).log $(intende_fix).toc
/c/cpu_1664/ASID/1664.c
0,0 → 1,402
#include "cpu_1664.h"
#include <stdio.h>
 
#define scrive (P)scrive_stdout
 
int main(int argc, char **argv)
{
if (argc>1)
{
char fix_imaje_model[]="1664.imaje";
char fix_jornal_cadena[]="1664.jornal";
nM memoria_cuantia=0;
struct lista *lista_enflue;
struct cpu_1664 *cpu = cpu_1664_nova(1024*1024*2);
char *cadena_fix_esflue=fix_imaje_model;
char *cadena_fix_enflue;
nN contador_ante=0;
nN a=1;
nN i;
nN bool_debug=0;
nN bool_parolos=0;
nN bool_core=0;
cpu->opera_lista[cpu_1664_opera_imita]=cpu_1664_opera__imita;
cpu->imita_argc=argc;
cpu->imita_argv=argv;
FILE *fix_esflue;
FILE *fix_enflue;
n1 *fix_enflue_datos;
n8 fix_enflue_datos_cuantia;
nN filo_cuantia=3;
while(a<argc)
{
switch(argv[a][0])
{
default:
a++;
break;
case '+': //parametre arg imita
a++;
break;
case '-':
switch(argv[a][1])
{
case 'v':
a++;
bool_parolos=1;
break;
case 'f':
a++;
lista_enflue=lista_nova__ccadena(".inclui ");
lista_ajunta__ccadena(lista_enflue, argv[a]);
cpu_1664_asm_ajunta__cadena(cpu, lista_enflue->datos, lista_enflue->contador);
lista_libri(lista_enflue);
if(bool_parolos) cadena__f(scrive, "[0x%.*x] %s\n",sizeof(cpu_1664_sinia_t)*2, (n8)(cpu->lista_imaje_asm->contador-contador_ante), argv[a]);
contador_ante=cpu->lista_imaje_asm->contador;
a++;
break;
case 'I':
a++;
lista_ajunta__P(cpu->lista_inclui_curso, lista_nova__ccadena(argv[a++]));
break;
case 'm':
a++;
memoria_cuantia=nN__desimal_cadena((n1 *)argv[a], nN_cuantia__ccadena(argv[a]));
lista_crese(cpu->lista_imaje, memoria_cuantia);
a++;
break;
case 'd':
bool_debug=1;
bool_core=1;
a++;
break;
case 'B':
a++;
cadena_fix_enflue=argv[a];
fix_enflue=fopen(cadena_fix_enflue, "r");
fseek(fix_enflue, 0, SEEK_END);
fix_enflue_datos_cuantia=ftell(fix_enflue);
rewind(fix_enflue);
fix_enflue_datos=(n1*)memoria_nova(fix_enflue_datos_cuantia);
fread(fix_enflue_datos, 1, fix_enflue_datos_cuantia, fix_enflue);
if(bool_parolos) cadena__f(scrive, "imaje [0x%x] << %s [0x%x]",(n8)cpu->lista_imaje->contador, cadena_fix_enflue, fix_enflue_datos_cuantia); fflush(0);
cpu_1664_imaje_ajunta__datos(cpu, fix_enflue_datos, fix_enflue_datos_cuantia);
if(bool_parolos) cadena__f(scrive,"\n");
memoria_libri(fix_enflue_datos);
fclose(fix_enflue);
a++;
break;
case 'b':
a++;
cadena_fix_esflue=argv[a];
if(bool_parolos) cadena__f(scrive, "imaje > %s",cadena_fix_esflue); fflush(0);
fix_esflue=fopen(cadena_fix_esflue, "w");
cadena__f(scrive, " [0x%x]\n", (n8)cpu->lista_imaje_asm->contador);
fwrite(cpu->lista_imaje_asm->datos, 1, cpu->lista_imaje_asm->contador, fix_esflue);
fclose(fix_esflue);
a++;
break;
case 'e':
bool_core=1;
a++;
break;
case 'L':
a++;
filo_cuantia=nN__desimal_cadena((n1 *)argv[a], nN_cuantia__ccadena(argv[a]));
a++;
break;
}
break;
}
}
if(cpu->asm_eror!=0)
{
cadena__f(scrive,"aborte: eror asm\n");
return 1;
}
if(!bool_core) _exit(0);
cpu_1664_imaje_ajunta__lista(cpu, cpu->lista_imaje_asm);
if(!bool_debug)
{
cpu_1664__pasi(cpu, (n8)-1);
}
 
struct lista *lista_jornal_opera=lista_nova(0);
struct lista *lista_jornal_desloca=lista_nova(0);
struct lista *lista_jornal_mapa=lista_nova(0);
cpu_1664_sinia_t *sinia_ante;
cpu_1664_sinia_t sinia_ante_usor[1<<cpu_1664_bitio_r];
cpu_1664_sinia_t sinia_ante_vantaje[1<<cpu_1664_bitio_r];
cpu_1664_opera_t parola;
cpu_1664_sinia_t sIP_egali=(cpu_1664_sinia_t)-1;
nN pasi_cuantia=1;
for(i=0;i<1<<cpu_1664_bitio_r;i++)
{
sinia_ante_usor[i]=0;
sinia_ante_vantaje[i]=0;
}
n1 bool_sicle_fini=0;
n1 bool_pausa=0;
n1 bool_bp=0;
n1 bool_depende;
n1 bool_eseta;
while(bool_sicle_fini==0)
{
bool_eseta=0;//cpu->sinia[cpu_1664_sinia_IP]==0;
bool_pausa=(cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_IP], (1<<cpu_1664_umm_usor_mapa_permete_esecuta), sizeof(cpu_1664_opera_t), 0)==(cpu_1664_opera_t)(-1));
n1 opera_depende=(cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_IP], (1<<cpu_1664_umm_usor_mapa_permete_esecuta), 1, 0)>>5)&0x07;
bool_depende=opera_depende==7||cpu->depende[opera_depende]!=0;
bool_bp=bool_depende&&((cpu_1664_opera_t)(cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_IP], (1<<cpu_1664_umm_usor_mapa_permete_esecuta), sizeof(cpu_1664_opera_t), 0))&0xff1f)==(cpu_1664_opera_t)(cpu_1664_opera_rev|(cpu_1664_opera_rev_bp<<8));
if(cpu->vantaje==1)
{
sinia_ante=sinia_ante_vantaje;
}
else
{
sinia_ante=sinia_ante_usor;
}
if ((bool_eseta&&(cpu->contador_sicle!=0))||bool_sicle_fini||bool_pausa||bool_bp)
{
pasi_cuantia=1;
}
if ((sIP_egali!=(cpu_1664_sinia_t)-1)&&(cpu->sinia[cpu_1664_sinia_IP]==sIP_egali))
{
sIP_egali=(cpu_1664_sinia_t)-1;
pasi_cuantia=1;
}
if(pasi_cuantia<=1)
{
//consola_leje_carater();
fflush(stdout);cadena_ANSI__atribuida(scrive,40);
fflush(stdout);cadena_ANSI_limpa(scrive);
fflush(stdout);cadena_ANSI_cursor_orijin(scrive);
nN j;
nN s;
for(s=0; s<(1<<(cpu_1664_bitio_r-2));s++)
{
for(j=0;j<(1<<2);j++)
{
nN indise=(s<<2)+j;
if(indise==cpu_1664_sinia_IP)
{
fflush(stdout);cadena_ANSI__3atribuida(scrive,1,40,32);
}
else if(sinia_ante[indise]!=cpu->sinia[indise])
{
fflush(stdout);cadena_ANSI__3atribuida(scrive,1,40,36);
}
else
{
fflush(stdout);cadena_ANSI__3atribuida(scrive,2,40,37);
}
sinia_ante[indise]=cpu->sinia[indise];
cadena__f(scrive, "%.*x ",sizeof(cpu_1664_sinia_t)*2,(n8)cpu->sinia[indise]);
}
scrive_stdout("\n",1);
}
fflush(stdout);cadena_ANSI__atribuida(scrive,11);
j=-1;
parola=cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_IP]+(2*(j+1)), (1<<cpu_1664_umm_usor_mapa_permete_esecuta), sizeof(cpu_1664_opera_t), 0);
cadena__f(scrive, "sicle %.*x usor %.*x limite %.*x\n",sizeof(cpu_1664_sinia_t)*2,cpu->contador_sicle,sizeof(cpu_1664_sinia_t)*2,cpu->contador_sicle_usor,sizeof(cpu_1664_sinia_t)*2,(n8)cpu->contador_sicle_usor_limite);
fflush(stdout);cadena_ANSI__2atribuida(scrive,1,36);
if(cpu->depende[cpu_1664_depende_bitio_depende_influe]!=0)
{
cadena__f(scrive, "(esflue) ");
}
else
{
cadena__f(scrive, "(inoria) ");
}
cadena__f(scrive, "depende : ");
cadena__f(scrive, "%c",('0')&0xff*(cpu->depende[0]!=0));
cadena__f(scrive, "%c",('1')&0xff*(cpu->depende[1]!=0));
cadena__f(scrive, "%c",('2')&0xff*(cpu->depende[2]!=0));
cadena__f(scrive, "%c",('3')&0xff*(cpu->depende[3]!=0));
cadena__f(scrive, "%c",('4')&0xff*(cpu->depende[4]!=0));
cadena__f(scrive, "%c",('5')&0xff*(cpu->depende[5]!=0));
cadena__f(scrive, "%c",('6')&0xff*(cpu->depende[6]!=0));
cadena__f(scrive, "\n");
fflush(stdout);cadena_ANSI__3atribuida(scrive,1,40,37);
fflush(stdout);cadena_ANSI__cursor_desende(scrive,filo_cuantia-1);
for(j=0;j<filo_cuantia;j++)
{
fflush(stdout);cadena_ANSI__cursor_sinistra(scrive,100);
cpu_1664_sinia_t mapa=0;
cpu_1664_sinia_t desloca=0;
cpu_1664_opera_t parola=0;
{
//*** x86
//mapa=((cpu_1664_sinia_t *)(lista_jornal_mapa->datos))[(lista_jornal_mapa->contador/sizeof(cpu_1664_sinia_t))-j-1];
desloca=((cpu_1664_sinia_t *)(lista_jornal_desloca->datos))[(lista_jornal_desloca->contador/sizeof(cpu_1664_sinia_t))-j-1];
parola=((cpu_1664_opera_t *)(lista_jornal_opera->datos))[(lista_jornal_opera->contador/sizeof(cpu_1664_opera_t))-j-1];
}
cadena__f(scrive, "%.*x : ",4,(n8)mapa);
cadena__f(scrive, "%.*x %.*x ",sizeof(cpu_1664_sinia_t)*2,(n8)desloca,4,(n8)parola);
struct lista *lista_dev=cpu_1664_dev_dev(cpu, cpu->sinia[cpu_1664_sinia_IP], parola);
struct lista *_lista_dev_dev_depende=((struct lista **)(((struct lista **)(lista_dev->datos))[1]->datos))[0];
struct lista *_lista_dev_dev_opera=((struct lista **)(((struct lista **)(lista_dev->datos))[1]->datos))[1];
struct lista *_lista_dev_parametre=((struct lista **)(((struct lista **)(lista_dev->datos))[2]->datos))[0];
printf("%s ",_lista_dev_dev_depende->datos);
printf("%s ",_lista_dev_dev_opera->datos);
printf("%s ",_lista_dev_parametre->datos);
fflush(stdout);cadena_ANSI__cursor_asende(scrive, 1);
}
fflush(stdout);cadena_ANSI__cursor_desende(scrive,filo_cuantia+1); fflush(stdout);cadena_ANSI__cursor_sinistra(scrive,100);
for(j=0;j<filo_cuantia;j++)
{
if(j==0)
{
fflush(stdout);cadena_ANSI__3atribuida(scrive,40,1,36);
}
else
{
fflush(stdout);cadena_ANSI__3atribuida(scrive,2,40,37);
}
parola=cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_IP]+(2*(j+0-0)), (1<<cpu_1664_umm_usor_mapa_permete_esecuta), sizeof(cpu_1664_opera_t), 0);
cadena__f(scrive, "%.*x : ",4,cpu->umm_memoria[0]*!cpu->vantaje);
cadena__f(scrive, "%.*x %.*x ",sizeof(cpu_1664_sinia_t)*2,cpu->sinia[cpu_1664_sinia_IP]+(2*(j+0-0)),4,parola);
struct lista *lista_dev=cpu_1664_dev_dev(cpu, cpu->sinia[cpu_1664_sinia_IP], parola);
struct lista *_lista_dev_dev_depende=((struct lista **)(((struct lista **)(lista_dev->datos))[1]->datos))[0];
struct lista *_lista_dev_dev_opera=((struct lista **)(((struct lista **)(lista_dev->datos))[1]->datos))[1];
struct lista *_lista_dev_parametre=((struct lista **)(((struct lista **)(lista_dev->datos))[2]->datos))[0];
struct lista *_lista_dev_informa=((struct lista **)(((struct lista **)(lista_dev->datos))[2]->datos))[1];
printf("%s ",_lista_dev_dev_depende->datos);
printf("%s ",_lista_dev_dev_opera->datos);
printf("%s ",_lista_dev_parametre->datos);
if(j==0)
{
if(pasi_cuantia<=1)printf("; %s",_lista_dev_informa->datos);
}
if(pasi_cuantia<=1)printf("\n");
cpu_1664_dev_dev_libri(lista_dev);
}
}
#define limite_jornal 1000000
if((lista_jornal_opera->contador/sizeof(cpu_1664_opera_t))<limite_jornal)
{
lista_ajunta__cpu_1664_parola_t(lista_jornal_opera, cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_IP], (1<<cpu_1664_umm_usor_mapa_permete_esecuta), sizeof(cpu_1664_opera_t), 0));
lista_ajunta__cpu_1664_sinia_t(lista_jornal_desloca, cpu->sinia[cpu_1664_sinia_IP]);
lista_ajunta__cpu_1664_sinia_t(lista_jornal_mapa, cpu->umm_memoria[0]*!cpu->vantaje);
}
if (--pasi_cuantia>0)
{
cpu_1664__pasi(cpu, 1);
continue;
}
else
{
pasi_cuantia=1;
}
n1 c=consola_leje_carater();
switch (c)
{
case 'n':
default:
cpu_1664__pasi(cpu, 1);
break;
case 'm':
sIP_egali=cpu->sinia[cpu_1664_sinia_IP]+sizeof(cpu_1664_opera_t);
cpu_1664__pasi(cpu, 1);
pasi_cuantia=-1;
break;
case 'N':
cpu->sinia[cpu_1664_sinia_IP]+=sizeof(cpu_1664_opera_t);
break;
case 'c':
cpu_1664__pasi(cpu, 1);
pasi_cuantia=-1;
break;
case 'q':
bool_sicle_fini=1;
fflush(stdout);cadena_ANSI__atribuida(scrive,0);
break;
case ':':
fflush(stdout);cadena_ANSI__3atribuida(scrive,40,1,36);
cadena__f(scrive, "comanda : ");fflush(0);
switch(consola_leje_carater())
{
case 'd':
cadena__f(scrive, "imaje > %s",cadena_fix_esflue); fflush(0);
fix_esflue=fopen(cadena_fix_esflue, "w");
cadena__f(scrive, " [0x%x]\n", cpu->lista_imaje_asm->contador);
fwrite(cpu->lista_imaje_asm->datos, 1, cpu->lista_imaje_asm->contador, fix_esflue);
fclose(fix_esflue);
consola_leje_carater(); //pausa
break;
case 'j':
cadena__f(scrive, "jornal > %s",fix_jornal_cadena); fflush(0);
fix_esflue=fopen(fix_jornal_cadena, "w");
cadena__f(scrive, " [0x%x]\n", cpu->lista_imaje_asm->contador);
fwrite(cpu->lista_imaje_asm->datos, 1, cpu->lista_imaje_asm->contador, fix_esflue);
fclose(fix_esflue);
consola_leje_carater(); //pausa
break;
}
break;
}
}
cadena__f(scrive, "> [%.*x] %.*x\n",6,cpu->sinia[cpu_1664_sinia_IP],sizeof(cpu_1664_opera_t)*2,cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_IP], (1<<cpu_1664_umm_usor_mapa_permete_esecuta), sizeof(cpu_1664_opera_t), 0));
lista_libri(lista_jornal_opera);
lista_libri(lista_jornal_desloca);
lista_libri(lista_jornal_mapa);
cpu_1664_libri(cpu);
return 0;
}
else
{
cadena__f(scrive, " <-v> parolas\n <-d> desdefetador\n <-e> imita\n <-I inclui_curso>\n <-f fonte.1664>\n <-B binario_enflue>\n <-b binario_esflue>\n <-m memoria_cuantia>\n <-L filo_cuantia>\n");
return 0;
}
}
/c/cpu_1664/ASID/proba_asid
0,0 → 1,12
#! /bin/sh
asid=1664
imaje=imita.1664.imaje
radi=../../..
cd ../
cd ../lista;make instala
cd ../linux;make instala
cd ../cpu_1664;make instala
cd ASID;make instala
$asid $1 -v -I $radi/arci/1664/fonte/lista -I $radi/arci/1664 -I $radi/arci/1664/inclui -f $radi/arci/1664/dev/0.imita.0.1664 -b $imaje
$asid $1 -I $radi/arci/1664/inclui -I $radi/arci/1664/dev -f 0.base.opera.1664 -B $imaje -e +parametre_1664
rm $imaje
/c/cpu_1664/ASID/Makefile
0,0 → 1,36
arci = amd64
#crus = arm-linux-gnu-
intende_fix = 1664
 
radi = ../../..
 
fonte = $(radi)/c
compilador_inclui = -I$(radi)/arci/$(arci)/inclui -I$(fonte)/cpu_1664 -I$(fonte)/linux -I$(fonte)/lista
 
instala_curso = /usr/local/bin
 
compilador_varia =
compilador = $(crus)gcc$(compilador_varia)
 
compilador_sinia = -Dimita -Wall -Werror -std=c99 -O2 -c $(compilador_inclui)
libs = -l1664 -llista -lsospesifada
 
ojetos = 1664.o
%.o : %.c
@echo $(compilador) $^
@$(compilador) $(compilador_sinia) -o $@ $<
 
$(intende_fix): $(ojetos)
@g++ $< -O2 $(libs) -s -o $@
 
instala: $(intende_fix)
@echo instala $(intende_fix)
@cp $(intende_fix) $(instala_curso)
 
sutrae:
@echo sutrae $(intende_fix)
@-rm $(instala_curso)/$(intende_fix)
 
limpa:
@-rm $(ojetos) $(intende_fix)
/c/cpu_1664/cpu_1664_opera__shl.c
0,0 → 1,42
#include "cpu_1664.h"
 
void cpu_1664_opera__shl(struct cpu_1664 *cpu, n1 bait)
{
cpu->opera_sicle=cpu_1664_sicle_opera_shl;
n1 sinia_destina=bait&((1<<cpu_1664_bitio_rd)-1);
n1 sinia_fonte=bait>>cpu_1664_bitio_rd;
cpu_1664_sinia_t dest=cpu->sinia[sinia_destina];
cpu_1664_sinia_t desloca;
n1 bool_depende_c=0;
if(sinia_destina==sinia_fonte)
{
desloca=1;
}
else
{
desloca=cpu->sinia[sinia_fonte]&((sizeof(cpu_1664_sinia_t)*8)-1);
}
if(desloca!=0)
{
nN i;
for(i=desloca-1;i>31;i-=31)
{
dest<<=31;
}
dest<<=i;
bool_depende_c=dest>=cpu_1664_sinia_t_di;
dest<<=1;
}
cpu->sinia[bait&((1<<cpu_1664_bitio_rd)-1)]=dest;
if (cpu->depende[cpu_1664_depende_bitio_depende_influe]!=0)
{
cpu->depende[cpu_1664_depende_c] = bool_depende_c;
cpu->depende[cpu_1664_depende_z] = dest==0;
cpu->depende[cpu_1664_depende_n] = cpu->depende[cpu_1664_depende_z]==0;
}
}
/c/cpu_1664/cpu_1664_opera__ajusta.c
0,0 → 1,11
#include "cpu_1664.h"
 
void cpu_1664_opera__ajusta(struct cpu_1664 *cpu, cpu_1664_opera_t parola)
{
if((cpu->vantaje==1)||(cpu->opera_ajusta_protejeda==0))
{
cpu->opera_ajusta[0x10|((parola>>5)&0x0f)]=((parola>>9)&0x7f);
}
cpu->opera_sicle=cpu_1664_sicle_opera_ajusta;
}
/c/cpu_1664/cpu_1664_dev_dev.c
0,0 → 1,122
#include "cpu_1664.h"
 
#define cadena_nd "<no definida>"
/*
{
{{?depende} {opera} {p}..{p}}
{{depende} {opera_desifri_cadena}}
{{dev_parametre} {dev_informa}}
}
*/
struct lista * cpu_1664_dev_dev(struct cpu_1664 * cpu, cpu_1664_sinia_t desloca, cpu_1664_opera_t parola)
{
struct lista *lista_dev=lista_nova(0);
n1 opera_sifri=parola&((1<<cpu_1664_bitio_opera)-1);
n1 opera_desifri=cpu->opera_ajusta[opera_sifri]&0x7f;
n1 depende=(parola>>cpu_1664_bitio_opera)&((1<<(8-cpu_1664_bitio_opera))-1)*(opera_desifri!=0);
n1 parametre=parola>>8;
nN indise=n8_trova__asende_n8((n8 *)cpu->lista_dev_asm_desloca->datos,cpu->lista_dev_asm_desloca->contador/sizeof(n8), 0, desloca);
if(cpu->lista_dev_asm_desloca->contador!=0)
{
if(((n8 *)(cpu->lista_dev_asm_desloca->datos))[indise]==desloca)
{
lista_ajunta__P(lista_dev, (P)lista_nova__lista(((struct lista **)(cpu->lista_dev_asm_cadena->datos))[indise]));
}
else
{
lista_ajunta__P(lista_dev, 0);
}
}
else
{
lista_ajunta__P(lista_dev, 0);
}
{//{{cadena_depende}{cadena_opera}}
struct lista *lista_opera=lista_nova(0);
struct lista *lista_opera_depende=lista_nova(0);
struct lista *lista_opera_opera=lista_nova(0);
lista_ajunta__P(lista_dev, (P)lista_opera);
lista_ajunta__P(lista_opera, (P)lista_opera_depende);
lista_ajunta__P(lista_opera, (P)lista_opera_opera);
if(opera_desifri<(cpu->lista_dev_opera_cadena->contador/sizeof(P)))
{
lista_ajunta__lista(lista_opera_opera, ((struct lista **)(cpu->lista_dev_opera_cadena->datos))[opera_desifri]);
}
else
{
lista_ajunta__ccadena(lista_opera_opera, ".do 0x");
lista_ajunta_asciiexadesimal__n2(lista_opera_opera, parola);
}
if((depende!=cpu_1664_depende_1)&&(opera_desifri!=0))
{
lista_ajunta__dato(lista_opera_depende, depende|'0');
}
else
{
lista_ajunta__dato(lista_opera_depende, ' ');
}
}
if(opera_desifri==0) //opera_ajusta
{
struct lista *lista_2=lista_nova(0);
struct lista *lista_parametre=lista_nova(0);
struct lista *lista_informa=lista_nova(0);
n1 ajusta=((parola>>cpu_1664_bitio_opera)&((1<<cpu_1664_bitio_co)-1))+0x10;
n1 opera=(parola>>(cpu_1664_bitio_opera+cpu_1664_bitio_co));
lista_ajunta_asciiexadesimal__n1(lista_parametre, ajusta);
lista_ajunta__dato(lista_parametre, ' ');
if(opera<cpu->lista_dev_opera_cadena->contador/sizeof(P))
{
lista_ajunta__lista(lista_parametre, ((struct lista **)(cpu->lista_dev_opera_cadena->datos))[opera]);
}
else
{
lista_ajunta_asciiexadesimal__n1(lista_parametre, opera);
}
if(cpu->opera_ajusta[ajusta]<cpu->lista_dev_opera_cadena->contador/sizeof(P))
{
lista_ajunta__lista(lista_informa, ((struct lista **)(cpu->lista_dev_opera_cadena->datos))[cpu->opera_ajusta[ajusta]]);
}
else
{
lista_ajunta__ccadena(lista_informa, cadena_nd);
}
lista_ajunta__ccadena(lista_informa, " <- ");
if(opera<cpu->lista_dev_opera_cadena->contador/sizeof(P))
{
lista_ajunta__lista(lista_informa, ((struct lista **)(cpu->lista_dev_opera_cadena->datos))[opera]);
}
else
{
lista_ajunta__ccadena(lista_informa, cadena_nd);
}
lista_ajunta__P(lista_2, (P)lista_parametre);
lista_ajunta__P(lista_2, (P)lista_informa);
lista_ajunta__P(lista_dev, (P)lista_2);
}
else
{
if(opera_desifri<cpu->lista_dev_opera_parametre_funsiona->contador/sizeof(P))
{
lista_ajunta__P(lista_dev, ((P (**)(struct cpu_1664 *, n1))(cpu->lista_dev_opera_parametre_funsiona->datos))[opera_desifri](cpu, parametre));
}
else
{
lista_ajunta__P(lista_dev, cpu_1664_dev_opera_parametre_funsiona__nd(cpu, parametre));
}
}
return lista_dev;
}
/c/cpu_1664/cpu_1664_opera__stb.c
0,0 → 1,26
#include "cpu_1664.h"
 
void cpu_1664_opera__stb(struct cpu_1664 *cpu, n1 bait)
{
cpu->opera_sicle=cpu_1664_sicle_opera_stb;
n1 sinia_destina=bait&((1<<cpu_1664_bitio_rd)-1);
n1 desloca=bait>>cpu_1664_bitio_rd;
cpu_1664_sinia_t masca;
nN i;
for(masca=1,i=desloca; i>31; i-=31)
{
masca<<=31;
}
masca<<=i;
if(cpu->depende[0]!=0)
{
cpu->sinia[sinia_destina]|=masca;
}
else
{
cpu->sinia[sinia_destina]&=cpu_1664_sinia_t_masima-masca;
}
}
/c/cpu_1664/cpu_1664_asm_ajunta__ccadena.c
0,0 → 1,6
#include "cpu_1664.h"
 
void cpu_1664_asm_ajunta__ccadena(struct cpu_1664 *cpu, char *ccadena)
{
cpu_1664_asm_ajunta__cadena(cpu, (n1 *)ccadena, nN_cuantia__ccadena(ccadena));
}
/c/cpu_1664/cpu_1664_opera__ldis.c
0,0 → 1,7
#include "cpu_1664.h"
 
void cpu_1664_opera__ldis(struct cpu_1664 *cpu, n1 bait)
{
cpu->opera_sicle=cpu_1664_sicle_opera_ldis;
cpu->sinia[0]=(((cpu->sinia[0]|0xff)^0xff)|bait)<<8;
}
/c/cpu_1664/cpu_1664_asm_asm_comanda__model.c
0,0 → 1,11
#include "cpu_1664.h"
 
void cpu_1664_asm_asm_comanda__model(struct cpu_1664 *cpu, n1 *cadena)
{
struct lista *lista_parametre=cpu_1664_asm_lista_parametre__cadena(cadena);
struct lista *lista=lista_nova__datos(((struct lista **)(lista_parametre->datos))[1]->datos,((struct lista **)(lista_parametre->datos))[1]->contador);
cpu_1664_asm_sinia_t sinia=cpu_1664_asm_sinia_t_sinia__cadena(((struct lista **)(lista_parametre->datos))[0]->datos,((struct lista **)(lista_parametre->datos))[0]->contador);
lista_ajunta__P(cpu->lista_model, lista);
lista_ajunta__cpu_1664_asm_sinia_t(cpu->lista_model_sinia, sinia);
lista_2_libri(lista_parametre);
}
/c/cpu_1664/cpu_1664_opera__shr.c
0,0 → 1,42
#include "cpu_1664.h"
 
void cpu_1664_opera__shr(struct cpu_1664 *cpu, n1 bait)
{
cpu->opera_sicle=cpu_1664_sicle_opera_shr;
n1 sinia_destina=bait&((1<<cpu_1664_bitio_rd)-1);
n1 sinia_fonte=bait>>cpu_1664_bitio_rd;
cpu_1664_sinia_t dest=cpu->sinia[sinia_destina];
cpu_1664_sinia_t desloca;
n1 bool_depende_c=0;
if(sinia_destina==sinia_fonte)
{
desloca=1;
}
else
{
desloca=cpu->sinia[sinia_fonte]&((sizeof(cpu_1664_sinia_t)*8)-1);
}
if(desloca!=0)
{
nN i;
for(i=desloca-1;i>31;i-=31)
{
dest>>=31;
}
dest>>=i;
bool_depende_c=dest&1;
dest>>=1;
}
cpu->sinia[bait&((1<<cpu_1664_bitio_rd)-1)]=dest;
if (cpu->depende[cpu_1664_depende_bitio_depende_influe]!=0)
{
cpu->depende[cpu_1664_depende_c] = bool_depende_c;
cpu->depende[cpu_1664_depende_z] = dest==0;
cpu->depende[cpu_1664_depende_n] = cpu->depende[cpu_1664_depende_z]==0;
}
}
/c/cpu_1664/cpu_1664_asm_asm_comanda__do.c
0,0 → 1,23
#include "cpu_1664.h"
 
void cpu_1664_asm_asm_comanda__do(struct cpu_1664 *cpu, n1 *cadena)
{
struct lista *lista=cpu_1664_asm_lista_parametre__cadena(cadena);
n8 valua;
nN i;
for(i=0;i<lista->contador/sizeof(P);i++)
{
cpu->avisa__no_definida=0;
valua=cpu_1664_asm_n8_valua__lista(cpu, ((struct lista **)(lista->datos))[i]);
if(cpu->avisa__no_definida!=0)
{
cpu_1664_asm_taxe_d_ajunta(cpu, ((struct lista **)(lista->datos))[i], sizeof(cpu_1664_opera_t));
}
lista_ajunta__cpu_1664_asm_parola_t(cpu->lista_imaje_asm, valua);
}
lista_2_libri(lista);
}
/c/cpu_1664/cpu_1664_dev_defina__funsiona.c
0,0 → 1,6
#include "cpu_1664.h"
 
void cpu_1664_dev_defina__funsiona(struct cpu_1664 *cpu, n1 *ccadena,(*funsiona)())
{
}
/c/cpu_1664/cpu_1664_dev_opera_parametre_funsiona__8y.c
0,0 → 1,30
#include "cpu_1664.h"
 
struct lista * cpu_1664_dev_opera_parametre_funsiona__8y(struct cpu_1664 * cpu, n1 bait)
{
struct lista *lista_2=lista_nova(0);
struct lista *lista_parametre=lista_nova(0);
struct lista *lista_informa=lista_nova(0);
cpu_1664_sinia_t desloca;
n1 valua=bait&0x7f;
n1 negativa=(bait>0x80);
n1 valua_negativa=-bait;
if (negativa)
{
lista_ajunta__dato(lista_parametre, '-');
lista_ajunta_asciiexadesimal__n1(lista_parametre, valua_negativa);
}
else
{
lista_ajunta_asciiexadesimal__n1(lista_parametre, valua);
}
desloca= (negativa) ? cpu->sinia[cpu_1664_sinia_IP]-(valua_negativa<<1) : cpu->sinia[cpu_1664_sinia_IP]+(valua<<1);
lista_ajunta_asciiexadesimal__n8(lista_informa, desloca);
lista_ajunta__P(lista_2, (P)lista_parametre);
lista_ajunta__P(lista_2, (P)lista_informa);
return lista_2;
}
/c/cpu_1664/cpu_1664_opera__cam.c
0,0 → 1,10
#include "cpu_1664.h"
 
void cpu_1664_opera__cam(struct cpu_1664 *cpu, n1 bait)
{
cpu->opera_sicle=cpu_1664_sicle_opera_cam;
cpu_1664_sinia_t dest=cpu->sinia[bait&((1<<cpu_1664_bitio_rd)-1)];
cpu_1664_sinia_t fonte=cpu->sinia[bait>>cpu_1664_bitio_rd];
cpu->sinia[bait&((1<<cpu_1664_bitio_rd)-1)]=fonte;
cpu->sinia[bait>>cpu_1664_bitio_rd]=dest;
}
/c/cpu_1664/cpu_1664_asm_asm_comanda__d2.c
0,0 → 1,23
#include "cpu_1664.h"
 
void cpu_1664_asm_asm_comanda__d2(struct cpu_1664 *cpu, n1 *cadena)
{
struct lista *lista=cpu_1664_asm_lista_parametre__cadena(cadena);
n8 valua;
nN i;
for(i=0;i<lista->contador/sizeof(P);i++)
{
cpu->avisa__no_definida=0;
valua=cpu_1664_asm_n8_valua__lista(cpu, ((struct lista **)(lista->datos))[i]);
if(cpu->avisa__no_definida!=0)
{
cpu_1664_asm_taxe_d_ajunta(cpu, ((struct lista **)(lista->datos))[i], sizeof(n2));
}
lista_ajunta__n2(cpu->lista_imaje_asm, valua);
}
lista_2_libri(lista);
}
/c/cpu_1664/cpu_1664_asm_asm_comanda__ds.c
0,0 → 1,23
#include "cpu_1664.h"
 
void cpu_1664_asm_asm_comanda__ds(struct cpu_1664 *cpu, n1 *cadena)
{
struct lista *lista=cpu_1664_asm_lista_parametre__cadena(cadena);
n8 valua;
nN i;
for(i=0;i<lista->contador/sizeof(P);i++)
{
cpu->avisa__no_definida=0;
valua=cpu_1664_asm_n8_valua__lista(cpu, ((struct lista **)(lista->datos))[i]);
if(cpu->avisa__no_definida!=0)
{
cpu_1664_asm_taxe_d_ajunta(cpu, ((struct lista **)(lista->datos))[i], sizeof(cpu_1664_sinia_t));
}
lista_ajunta__cpu_1664_sinia_t(cpu->lista_imaje_asm, valua);
}
lista_2_libri(lista);
}
/c/cpu_1664/cpu_1664_asm_asm_comanda__d4.c
0,0 → 1,23
#include "cpu_1664.h"
 
void cpu_1664_asm_asm_comanda__d4(struct cpu_1664 *cpu, n1 *cadena)
{
struct lista *lista=cpu_1664_asm_lista_parametre__cadena(cadena);
n8 valua;
nN i;
for(i=0;i<lista->contador/sizeof(P);i++)
{
cpu->avisa__no_definida=0;
valua=cpu_1664_asm_n8_valua__lista(cpu, ((struct lista **)(lista->datos))[i]);
if(cpu->avisa__no_definida!=0)
{
cpu_1664_asm_taxe_d_ajunta(cpu, ((struct lista **)(lista->datos))[i], sizeof(n4));
}
lista_ajunta__n4(cpu->lista_imaje_asm, valua);
}
lista_2_libri(lista);
}
/c/cpu_1664/cpu_1664_opera__ylr.c
0,0 → 1,40
#include "cpu_1664.h"
 
void cpu_1664_opera__ylr(struct cpu_1664 *cpu, n1 bait)
{
cpu_1664_sinia_t desloca=0;
nN eleje=bait>>6;
nN sinia=bait&((1<<6)-1);
switch(eleje)
{
case 0:
desloca=cpu->sinia[sinia];
cpu->opera_sicle=cpu_1664_sicle_opera_yli;
break;
case 2:
desloca=cpu->sinia[cpu_1664_sinia_IP]+cpu->sinia[sinia];
cpu->opera_sicle=cpu_1664_sicle_opera_yli;
break;
case 1:
desloca=cpu_1664_umm(cpu, cpu->sinia[sinia], (1<<cpu_1664_umm_usor_mapa_permete_leje), sizeof(cpu_1664_sinia_t), 0);
if(sinia==cpu_1664_sinia_IP)
{
desloca+=cpu->sinia[cpu_1664_sinia_IP];
cpu->sinia[cpu_1664_sinia_IP]+=sizeof(cpu_1664_sinia_t);
}
cpu->opera_sicle=cpu_1664_sicle_opera_yli+cpu_1664_sicle_opera_ldm;
break;
case 3:
desloca=cpu->sinia[cpu_1664_sinia_IP]+cpu_1664_umm(cpu, cpu->sinia[cpu_1664_sinia_IP]+cpu->sinia[sinia], (1<<cpu_1664_umm_usor_mapa_permete_leje), sizeof(cpu_1664_sinia_t), 0);
cpu->opera_sicle=cpu_1664_sicle_opera_yli+cpu_1664_sicle_opera_ldm;
break;
}
cpu->sinia[cpu_1664_sinia_reveni]=cpu->sinia[cpu_1664_sinia_IP];
cpu->sinia[cpu_1664_sinia_IP]=desloca;
}
/c/cpu_1664/cpu_1664_opera__str.c
0,0 → 1,7
#include "cpu_1664.h"
 
void cpu_1664_opera__str(struct cpu_1664 *cpu, n1 bait)
{
cpu->opera_sicle=cpu_1664_sicle_opera_str;
cpu->sinia[bait>>cpu_1664_bitio_rd]=cpu->sinia[bait&((1<<cpu_1664_bitio_rd)-1)];
}
/c/cpu_1664/cpu_1664_reinisia.c
0,0 → 1,12
#include "cpu_1664.h"
 
void cpu_1664_reinisia(struct cpu_1664 *cpu)
{
nN i;
for(i=0x10; i<0x20; i++)
{
cpu->opera_ajusta_vantaje[i]=i;
}
cpu_1664_eseta(cpu, cpu_1664_eseta_reinisia);
}
/c/cpu_1664/cpu_1664_asm_lista_parametre__cadena.c
0,0 → 1,63
#include "cpu_1664.h"
 
struct lista * cpu_1664_asm_lista_parametre__cadena(n1 *cadena)
{
const n1 sinia[] = {cpu_1664_asm_table_sinia};
const n1 table_clui[] = {cpu_1664_asm_table_clui};
struct lista *lista=lista_nova(128);
struct lista *lista_;
n1 *cadena_;
nN cuantia;
while(1)
{
switch(*cadena)
{
case 0x00: // *** sin "nN cuantia"
case 0x0a:
case cpu_1664_asm_sinia_comenta:
case '>':
case '}':
case ')':
case ']':
return lista;
case 0x09:
case ' ':
cadena++;
break;
case '\'':
case '"':
case '<':
case '{':
case '(':
case '[':
cuantia=nN_cuantia_brasetida__cadena(cadena, *cadena, table_clui[*cadena]);
lista_=lista_nova(0);
lista_ajunta__datos(lista_, cadena, cuantia);
lista_ajunta__P(lista, (P)lista_);
cadena+=cuantia;
break;
default:
lista_=lista_nova(0);
for(cadena_=cadena;sinia[*cadena]==1;cadena++){}
switch(*cadena)
{
case '{':
case '(':
case '[':
cadena+=nN_cuantia_brasetida__cadena(cadena, *cadena, table_clui[*cadena]);
break;
}
lista_ajunta__datos(lista_, cadena_, cadena-cadena_);
lista_ajunta__P(lista, (P)lista_);
break;
}
}
}
/c/lista/lista_nova.c
0,0 → 1,13
#include "lista.h"
 
struct lista* lista_nova(nN cuantia)
{
nN nova_cuantia = (cuantia > lista_minima_cuantia) ? cuantia : lista_minima_cuantia;
struct lista *esta = (struct lista *)memoria_nova(sizeof(struct lista));
esta->datos=(n1 *)memoria_nova(nova_cuantia);
esta->capasia=nova_cuantia;
esta->contador=0;
esta->crese=lista_minima_crese;
return esta;
}
 
/c/lista/fl64_frato__cadena.c
0,0 → 1,20
#include "tipodef.h"
 
fl2 fl2_frato__cadena(n1 *cadena, nN cuantia)
{
fl2 fl=0.0;
n1 c;
nN i;
if (cuantia>0)
{
fl=(fl2)(cadena[--cuantia]&0x0f)*0.1;
for (i=--cuantia;i>=0;i--)
{
fl=(fl+(fl2)(cadena[i]&0x0f))*0.1;
}
}
 
return fl;
}
/c/lista/n8__exadesimal_cadena.c
0,0 → 1,18
#include "tipodef.h"
 
n8 n8__exadesimal_cadena(n1 * cadena, nN cuantia)
{
n8 valua = 0;
n1 c;
nN i = 0;
while(i<cuantia)
{
c = cadena[i++];
if(c>0x39) c+=0x09;
valua |= (c&0x0f);
if(i<cuantia) valua <<= 4;
}
return valua;
}
/c/lista/n8__desimal_cadena.c
0,0 → 1,31
#include "tipodef.h"
 
n8 n8__desimal_cadena(n1 *cadena, nN cuantia)
{
n8 valua=0;
nN i;
n1 negativa=0;
if (*cadena=='-')
{
negativa=1;
cadena++;
}
if(cuantia>0)
{
valua=(*cadena++)&0x0f; cuantia--;
for(i=0;i<cuantia;i++)
{
valua=(valua<<3)+(valua<<1)+((*cadena++)&0x0f);
}
}
if(negativa!=0)
{
valua=(valua^(-1))+1;
}
return valua;
}
/c/lista/cadena_asciidesimal__n1.c
0,0 → 1,19
#include "lista.h"
 
void cadena_asciidesimal__nN(void *scrive(n1 *, nN), n1 binaria)
{
n1 d[24];
n1 c;
nN i;
n1 bdiv;
do
{
bdiv=binaria/10;
c=binaria-((bdiv<<3)+(bdiv<<1));
d[31-i++]=c|'0';
binaria=bdiv;
} while(bdiv!=0);
scrive((d+31)-i, i);
}
/c/lista/lista_ajunta__fl2.c
0,0 → 1,8
#include "lista.h"
 
void lista_ajunta__fl2(struct lista *esta,fl2 dato)
{
lista_crese(esta,sizeof(fl2));
*(fl2 *)(esta->datos+esta->contador)=dato;
esta->contador+=sizeof(fl2);
}
/c/lista/lista_ajunta_asciiexadesimal__n1.c
0,0 → 1,11
#include "lista.h"
 
void lista_ajunta_asciiexadesimal__n1(struct lista *lista, n1 binaria)
{
const n1 sinia[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
lista_crese(lista, sizeof(n1)*2);
lista->datos[lista->contador+1]=(sinia[binaria&0x0f]);
lista->datos[lista->contador+0]=(sinia[(binaria>>4)&0x0f]);
lista->contador+=sizeof(n1)*2;
}
/c/lista/asciidesimal__nN.c
0,0 → 1,20
#include "lista.h"
 
nN asciidesimal__nN(n1 *cadena, nN binaria)
{
n1 c;
nN i=0;
nN bdiv;
do
{
bdiv=binaria/10;
c=binaria-((bdiv<<3)+(bdiv<<1));
*cadena=c|'0';
cadena--;
i++;
binaria=bdiv;
} while(bdiv!=0);
return i;
}
/c/lista/lista_inserta_capasia.c
0,0 → 1,16
#include "lista.h"
 
void lista_inserta_capasia(struct lista *lista, nN indise, nN cuantia)
{
if (indise<=lista->contador)
{
lista_crese(lista, cuantia);
lista->contador+=cuantia;
memoria_move((lista->datos+indise+cuantia),(lista->datos+indise),lista->contador-indise);
}
else
{
lista_crese(lista, cuantia);
}
}
/c/lista/n8_trova__asende_n8.c
0,0 → 1,31
#include "tipodef.h"
 
n8 n8_trova__asende_n8(n8 *cadena, n8 cuantia, n8 indise, n8 sinia)
{
if(cuantia!=0)
{
if((cuantia&1)==1)
{
if((cadena[--cuantia])==sinia)
{
return cuantia;
}
}
while((cadena[(indise+1)<<1]<=sinia)&&(indise<cuantia)) {indise=(indise+1)<<1;}
for(;indise<cuantia;indise++)
{
if (cadena[indise]>=sinia)
{
break;
}
}
}
return indise;
}
/c/lista/cadena_ANSI__cursor_destra.c
0,0 → 1,9
#include "lista.h"
 
void cadena_ANSI__cursor_destra(void *scrive(char *, nN), nN cuantia)
{
char sinia[]={0x1b,'[','C'};
scrive(sinia, 2);
cadena_asciidesimal__nN(scrive, cuantia);
scrive(sinia+2, 1);
}
/c/lista/lista_ajunta__dato.c
0,0 → 1,8
#include "lista.h"
 
void lista_ajunta__dato(struct lista *lista, n1 dato)
{
lista_crese(lista, 1);
lista->datos[lista->contador]=dato;
lista->contador+=1;
}
/c/lista/n4__asciiexadesimal.c
0,0 → 1,18
#include "tipodef.h"
 
n4 n4__asciiexadesimal(n1 * a, nN cuantia)
{
n4 binaria = 0;
n1 c;
nN i = 0;
while((cuantia--)>0)
{
c = a[i++];
c = (c>0x39) ? c : c+0x09;
binaria |= (c&0x0f);
binaria <<= 4;
}
return binaria;
}
/c/lista/lista_sutrae__datos.c
0,0 → 1,10
#include "lista.h"
 
void lista_sutrae__datos(struct lista *esta,nN indise,nN cuantia)
{
if((indise+cuantia)<esta->contador)
{
memoria_copia((P)(esta->datos+indise),(P)(esta->datos+indise+cuantia),cuantia);
esta->contador-=cuantia;
}
}
/c/lista/nM_SPR__cadena.c
0,0 → 1,390
#include "lista.h"
#define lista_ajunta__SPR_t lista_ajunta__n8
nM nM_SPR__cadena(n1 *cadena, nN cuantia)
{
const n1 sinia_no_braso[] = {lista_table_sinia};
const n1 sinia_braso_clui[] = {lista_table_clui};
typedef n8 SPR_t;
nM valua=0;
n1 bool_negativa=0;
if(*cadena=='-')
{
bool_negativa=1;
cadena++;
cuantia--;
}
 
n1 *fini=cadena+cuantia;
nN cuantia_braso;
nN j,k;
struct lista *pila;
nN evalua_braso_cuantia;
SPR_t f,f0,f1;
n8 e0,e1;
n1 *cadena_;
while(cadena<fini)
{
switch(*cadena)
{
case 0x09:
case ' ':
cadena++;
break;
case '\"':
cuantia_braso=nN_cuantia_brasetida__cadena(cadena, *cadena, sinia_braso_clui[*cadena]);
cadena+=cuantia_braso;
break;
case '{': //simboles polsce reversa
pila=lista_nova(sizeof(SPR_t)*8);
evalua_braso_cuantia=nN_cuantia_brasetida__cadena(cadena, *cadena, sinia_braso_clui[*cadena]);
for(j=1;j<(evalua_braso_cuantia-1);j++)
{
switch(cadena[j])
{
default:
cadena_=cadena+j;
while(sinia_no_braso[cadena[j]]!=0){ j++; }
f=nM_SPR__cadena(cadena_,(cadena+j)-cadena_);
lista_ajunta__SPR_t(pila, f);
break;
case 0x09:
case ' ':
break;
case '{':
k=nN_cuantia_brasetida__cadena(cadena+j, cadena[j], sinia_braso_clui[*cadena]);
f=nM_SPR__cadena(cadena+j, k);
lista_ajunta__SPR_t(pila, f);
j+=k;
break;
case '.':
switch(cadena[++j])
{
case '-': //negativa
if((pila->contador/sizeof(SPR_t))>=1)
{
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1]=-((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
}
j++;
break;
case '+': //asoluta
if((pila->contador/sizeof(SPR_t))>=1)
{
f0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
if(f0<0.0) { ((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1]=-f0; }
}
j++;
break;
case '/': //invertida
if((pila->contador/sizeof(SPR_t))>=1)
{
f0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1]=1.0/f0;
}
j++;
break;
case 'd': //dupli
if((pila->contador/sizeof(SPR_t))>=1)
{
f0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
lista_ajunta__SPR_t(pila, f0);
}
j++;
break;
case 'x': //intercambia
if((pila->contador/sizeof(SPR_t))>=2)
{
f1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
f0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=f0;
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1]=f1;
}
j++;
break;
default:
//zero funsiona
break;
}
break;
case '>':
switch(cadena[++j])
{
case '>': //loca
if((pila->contador/sizeof(SPR_t))>=2)
{
e1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
e0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
e1>>=e0;
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=e1;
pila->contador-=sizeof(SPR_t);
}
j++;
break;
case '=': //lojica
if((pila->contador/sizeof(SPR_t))>=2)
{
f1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
f0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=f1>=f0;
pila->contador-=sizeof(SPR_t);
}
break;
default: //lojica
if((pila->contador/sizeof(SPR_t))>=2)
{
f1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
f0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=f1>f0;
pila->contador-=sizeof(SPR_t);
}
break;
}
break;
case '<':
switch(cadena[++j])
{
case '<': //loca
if((pila->contador/sizeof(SPR_t))>=2)
{
e1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
e0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
e1<<=e0;
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=e1;
pila->contador-=sizeof(SPR_t);
}
j++;
break;
case '=': //lojica
if((pila->contador/sizeof(SPR_t))>=2)
{
f1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
f0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=f1<=f0;
pila->contador-=sizeof(SPR_t);
}
break;
default: //lojica
if((pila->contador/sizeof(SPR_t))>=2)
{
f1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
f0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=f1<f0;
pila->contador-=sizeof(SPR_t);
}
break;
}
break;
case '&':
switch(cadena[++j])
{
default: //bitio
if((pila->contador/sizeof(SPR_t))>=2)
{
e1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
e0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
e1&=e0;
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=e1;
pila->contador-=sizeof(SPR_t);
}
break;
case '&': //lojica
if((pila->contador/sizeof(SPR_t))>=2)
{
e1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
e0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
e1=(nM)e1&&(nM)e0;
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=e1;
pila->contador-=sizeof(SPR_t);
}
j++;
break;
}
break;
case '|':
switch(cadena[++j])
{
default: //bitio
if((pila->contador/sizeof(SPR_t))>=2)
{
e1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
e0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
e1|=e0;
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=e1;
pila->contador-=sizeof(SPR_t);
}
break;
case '|': //lojica
if((pila->contador/sizeof(SPR_t))>=2)
{
e1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
e0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
e1=(nM)e1||(nM)e0;
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=e1;
pila->contador-=sizeof(SPR_t);
}
j++;
break;
}
break;
case '!':
switch(cadena[++j])
{
case '=': //lojica
if((pila->contador/sizeof(SPR_t))>=2)
{
f1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
f0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=f1!=f0;
pila->contador-=sizeof(SPR_t);
}
break;
}
break;
case '=': //lojica
if((pila->contador/sizeof(SPR_t))>=2)
{
f1=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2];
f0=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]=(f1==f0);
pila->contador-=sizeof(SPR_t);
}
break;
case '+':
if((pila->contador/sizeof(SPR_t))>=2)
{
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]+=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
pila->contador-=sizeof(SPR_t);
}
j++;
break;
case '-':
if(sinia_no_braso[cadena[j+1]]==1)
{
cadena_=cadena+j;
while(sinia_no_braso[cadena[j]]==1) { j++; }
f=nM_SPR__cadena(cadena_,(cadena+j)-cadena_);
lista_ajunta__SPR_t(pila, f);
}
else
{
if((pila->contador/sizeof(SPR_t))>=2)
{
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]-=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
pila->contador-=sizeof(SPR_t);
}
j++;
}
break;
case '*':
if((pila->contador/sizeof(SPR_t))>=2)
{
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]*=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
pila->contador-=sizeof(SPR_t);
}
j++;
break;
case '/':
if((pila->contador/sizeof(SPR_t))>=2)
{
((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-2]/=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
pila->contador-=sizeof(SPR_t);
}
j++;
break;
}
}
if(pila->contador!=0)
{
valua=((SPR_t *)(pila->datos))[(pila->contador/sizeof(SPR_t))-1];
}
cadena+=evalua_braso_cuantia;
lista_libri(pila);
break;
case '(':
cuantia_braso=nN_cuantia_brasetida__cadena(cadena, *cadena, sinia_braso_clui[*cadena]);
valua=nM_SPR__cadena(cadena+1, cuantia_braso-2);
cadena+=cuantia_braso;
break;
case '}': // dev
case ']': // dev
case ')':
cadena++;
break;
case '0':
if(*(cadena+1)=='x')
{
nN j;
cadena+=2;
for(j=0;(sinia_no_braso[cadena[j]]==1)&&((cadena+j)<fini);j++){}
valua=nM__exadesimal_cadena(cadena, j);
cadena+=j;
break;
}
else if (cuantia>1)
{
//octal
}
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
for(j=1;(sinia_no_braso[cadena[j]]==1)&&((cadena+j)<fini);j++){}
valua=nM__desimal_cadena(cadena, j);
cadena+=j;
break;
default:
j++;
break;
}
}
if(bool_negativa!=0)
{
valua=(-valua);
}
return valua;
}
/c/lista/asciiexadesimal__n8.c
0,0 → 1,20
#include "lista.h"
 
n8 asciiexadesimal__n8(n1 *cadena, n8 binaria)
{
const n1 sinia[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
nN i=0;
n1 n;
do
{
n=sinia[binaria&0x0f];
*cadena=n;
cadena--;
i++;
binaria>>=4;
} while(binaria!=0);
return i;
}
/c/lista/cadena_ANSI__2atribuida.c
0,0 → 1,11
#include "lista.h"
 
void cadena_ANSI__2atribuida(void *scrive(char *, nN),n1 a_0,n1 a_1)
{
char sinia[]={0x1b,'[',';','m'};
scrive(sinia, 2);
cadena_asciidesimal__nN(scrive, a_0);
scrive(sinia+2, 1);
cadena_asciidesimal__nN(scrive, a_1);
scrive(sinia+3, 1);
}
/c/lista/lista_inserta__datos.c
0,0 → 1,7
#include "lista.h"
 
void lista_inserta__datos(struct lista *esta,n1 *datos,nN cuantia,nN indise)
{
lista_inserta_capasia(esta,indise,cuantia);
memoria_copia((P)(esta->datos+indise),(P)datos,cuantia);
}
/c/lista/cadena_ANSI__cursor_orijin.c
0,0 → 1,7
#include "lista.h"
 
void cadena_ANSI__cursor_orijin(void *scrive(n1 *, nN))
{
n1 sinia[]={0x1b,'[','H'};
scrive(sinia, sizeof(sinia));
}
/c/lista/Makefile
0,0 → 1,88
arci = amd64
#crus = arm-linux-gnu-
intende_nom = lista
intende_fix = lib$(intende_nom).a
 
radi = ../..
 
fonte = $(radi)
fonte_linux = $(radi)/linux
compilador_inclui = -I$(radi)/arci/$(arci)/inclui -I../linux
 
instala_curso = /usr/local/lib
 
compilador_varia =
compilador = $(crus)gcc$(compilador_varia)
 
compilador_sinia = -Wall -Werror -std=c99 -O2 -c $(compilador_inclui)
#linker = ld
 
arcivador = $(crus)ar
arcivador_sinia = crus
 
asembledor = $(crus)as
 
ojetos_otra = n1__asciiexadesimal.o n4__asciiexadesimal.o n4__ccadenaexadesimal.o\
n4_sinia__ccadena.o n4_sinia__cadena.o n8_sinia__cadena.o n8_sinia__ccadena.o\
nN_cuantia__ccadena.o nN_sinia__ccadena.o nN_sinia__cadena.o nN_sinia__lista.o\
fl2__cadena.o fl2__cadena_desimal.o fl2_frato__cadena.o\
nN_cuantia_brasetida__cadena.o\
nN__desimal_cadena.o n8__desimal_cadena.o\
nN__exadesimal_cadena.o n8__exadesimal_cadena.o\
nM_SPR__cadena.o\
nN_trova__asende_n4.o n8_trova__asende_n8.o\
asciidesimal__nN.o asciidesimal__n8.o\
asciiexadesimal__nN.o asciiexadesimal__n8.o\
\
lista_ajunta_asciiexadesimal__cadena.o\
lista_ajunta_asciiexadesimal__n8.o lista_ajunta_asciiexadesimal__n2.o\
lista_ajunta_asciiexadesimal__n1.o\
cadena__f.o\
\
cadena_asciidesimal__nN.o\
cadena_ANSI__atribuida.o cadena_ANSI__2atribuida.o cadena_ANSI__3atribuida.o\
cadena_ANSI__cursor_posa.o\
cadena_ANSI_limpa.o\
cadena_ANSI__cursor_sinistra.o cadena_ANSI__cursor_destra.o\
cadena_ANSI__cursor_asende.o cadena_ANSI__cursor_desende.o\
cadena_ANSI_cursor_orijin.o cadena_ANSI_cursor_posa_fisa.o cadena_ANSI_cursor_posa_restora.o\
ojetos = $(ojetos_otra)\
lista_nova.o lista_nova__lista.o lista_nova__datos.o lista_nova__ccadena.o\
lista_nova__crese.o\
lista_libri.o lista_2_libri.o lista_2_nova__lista_2.o\
lista_crese.o lista_inserta_capasia.o\
lista_defini__crese.o\
lista_ajunta__dato.o lista_ajunta__datos.o lista_ajunta__lista.o\
lista_ajunta__P.o lista_ajunta__nN.o lista_ajunta__n2.o\
lista_ajunta__n4.o lista_ajunta__n8.o lista_ajunta__fl2.o\
lista_inserta__dato.o lista_inserta__datos.o lista_inserta__lista.o lista_inserta__P.o\
lista_inserta__n4.o\
lista_ajunta__ccadena.o \
lista_inserta__ccadena.o \
lista_dato_final.o lista_datos_final.o lista_P_final.o\
lista_repone__dato.o lista_repone__datos.o\
lista_sutrae__datos.o\
%.o : %.c
@echo $(compilador) $^
@$(compilador) $(compilador_sinia) -o $@ $<
 
%.o : %.s
@echo $(asembledor) $^
@$(asembledor) $(asembledor_sinia) -o $@ $<
 
$(intende_fix) : $(ojetos)
@echo $(arcivador) $@
@$(arcivador) $(arcivador_sinia) $@ $^
 
instala: $(intende_fix)
@echo instala $(intende_fix)
@cp $(intende_fix) $(instala_curso)
 
sutrae:
@echo sutrae $(intende_fix)
@-rm $(instala_curso)/$(intende_fix)
 
limpa:
@-rm $(intende_fix) $(ojetos)
/c/lista/lista_ajunta__P.c
0,0 → 1,8
#include "lista.h"
 
void lista_ajunta__P(struct lista *esta,P dato)
{
lista_crese(esta,sizeof(P));
*(P *)(esta->datos+esta->contador)=dato;
esta->contador+=sizeof(P);
}
/c/lista/n4_sinia__cadena.c
0,0 → 1,18
#include "tipodef.h"
 
n4 n4_sinia__cadena(n1 *cadena, nN cuantia)
{
n4 sinia=0;
nN indise=0;
n1 c;
for (indise=0;indise<cuantia; indise++)
{
c=cadena[indise];
sinia ^= ((n4)(c)<<11) ^ (sinia << 7);
sinia ^= ((n4)(c)) ^ (sinia >> 17);
sinia ^= ((n4)(c)<<4) ^ (sinia << 11);
}
 
return sinia;
}
/c/lista/lista_inserta__ccadena.c
0,0 → 1,6
#include "lista.h"
 
void lista_inserta__ccadena(struct lista *esta, char *ccadena, nN indise)
{
lista_inserta__datos(esta,(n1 *)ccadena, nN_cuantia__ccadena(ccadena), indise);
}
/c/lista/n8_sinia__cadena.c
0,0 → 1,18
#include "tipodef.h"
 
n8 n8_sinia__cadena(n1 *cadena,nN cuantia)
{
n8 sinia=0;
nN indise=0;
n1 c;
for (indise=0;indise<cuantia; indise++)
{
c=cadena[indise];
sinia ^= ((n8)(c)<<31) ^ (sinia << 7);
sinia ^= ((n8)(c)) ^ (sinia >> 17);
sinia ^= ((n8)(c)<<3) ^ (sinia << 31);
}
 
return sinia;
}
/c/lista/nN__desimal_cadena.c
0,0 → 1,31
#include "tipodef.h"
 
nN nN__desimal_cadena(n1 *cadena, nN cuantia)
{
nN valua=0;
nN i;
n1 negativa=0;
if (*cadena=='-')
{
negativa=1;
cadena++;
}
if(cuantia>0)
{
valua=(*cadena++)&0x0f; cuantia--;
for(i=0;i<cuantia;i++)
{
valua=(valua<<3)+(valua<<1)+((*cadena++)&0x0f);
}
}
if(negativa!=0)
{
valua=(valua^(-1))+1;
}
return valua;
}
/c/lista/fl64__cadena_desimal.c
0,0 → 1,19
#include "tipodef.h"
 
fl64 fl64__cadena_desimal(n1 *cadena, nN cuantia)
{
fl64 fl=0.0;
nN i;
if (cuantia>0)
{
// fl=cadena[--cuantia]&0x0f;
for(i=0;i<cuantia;i++)
{
fl=(fl*10);//+(fl64)(cadena[i]&0x0f);
}
}
fl=0.1;
return 1.1;
}
/c/lista/cadena_ANSI__atribuida.c
0,0 → 1,9
#include "lista.h"
 
void cadena_ANSI__atribuida(void *scrive(char *, nN),n1 a_0)
{
char sinia[]={0x1b,'[','m'};
scrive(sinia, 2);
cadena_asciidesimal__nN(scrive, a_0);
scrive(sinia+2, 1);
}
/c/lista/lista_ajunta__ccadena.c
0,0 → 1,6
#include "lista.h"
 
void lista_ajunta__ccadena(struct lista *esta_lista, char *ccadena)
{
lista_ajunta__datos(esta_lista, (n1 *)ccadena, nN_cuantia__ccadena(ccadena));
}
/c/lista/lista_ajunta_asciiexadesimal__cadena.c
0,0 → 1,16
#include "lista.h"
 
void lista_ajunta_asciiexadesimal__cadena(struct lista *lista, n1 *cadena, nN cuantia)
{
const n1 sinia[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
lista_crese(lista, cuantia*2);
 
nN i;
for(i=0;i<cuantia;i++)
{
lista->datos[(lista->contador+cuantia*2)-2*(i+1)+1]=(sinia[cadena[i]&0x0f]);
lista->datos[(lista->contador+cuantia*2)-2*(i+1)]=(sinia[(cadena[i]>>4)&0x0f]);
}
lista->contador+=cuantia*2;
}
/c/lista/fl2__cadena.c
0,0 → 1,43
#include "tipodef.h"
 
fl2 fl2__cadena(n1 *cadena,nN cuantia)
{
if(cuantia==0) return 0.0;
n1 sinia_entero=0,sinia_potia=0;
if (*cadena=='-') { cadena++; cuantia--; sinia_entero=1; }
n1 *cadena_frato=0,*cadena_potia=0;
nN cuantia_cadena_frato=0,cuantia_cadena_entero=cuantia,cuantia_cadena_potia=0;
nN indise;
for(indise=0;indise<cuantia;indise++)
{
if(cadena[indise]=='.'){cadena_frato=cadena+indise+1; cuantia_cadena_entero=indise; break;}
}
if (cadena_frato!=0)
{
for(cuantia_cadena_frato=0;cuantia_cadena_frato<(cuantia-(cadena_frato-cadena));cuantia_cadena_frato++)
{
if((cadena_frato[cuantia_cadena_frato]|0x20)=='e')
{
cadena_potia=cadena_frato+cuantia_cadena_frato+1;
if(*cadena_potia=='-') { cadena_potia++; sinia_potia=1; }
cuantia_cadena_potia=cuantia-(cadena_potia-cadena);
break;
}
}
}
fl2 fl=0.0;
sN potia=0;
sN i;
for(i=0;i<cuantia_cadena_entero;i++){ fl=(fl*10.0)+(fl2)(cadena[i]&0x0f); }
for(i=0;i<cuantia_cadena_frato;i++){ fl=(fl*10.0)+(fl2)(cadena_frato[i]&0x0f); }
if(sinia_entero!=0){ fl*=-1.0; }
for(i=0;i<cuantia_cadena_potia;i++){ potia=(potia*10)+(cadena_potia[i]&0x0f); }
if(sinia_potia!=0){ potia=-potia; }
potia-=cuantia_cadena_frato;
for(i=0;i<potia;i++){ fl*=10.0; }
for(i=0;i>potia;i--){ fl*=0.1; }
return fl;
}
/c/lista/asciiexadesimal__nN.c
0,0 → 1,20
#include "lista.h"
 
nN asciiexadesimal__nN(n1 *cadena, nN binaria)
{
const n1 sinia[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
nN i=0;
nN n;
do
{
n=sinia[binaria&0x0f];
*cadena=n;
cadena--;
i++;
binaria>>=4;
} while(binaria!=0);
return i;
}
/c/lista/nN_sinia__cadena.c
0,0 → 1,15
#include "lista.h"
 
nN nN_sinia__cadena(n1 *cadena, nN cuantia)
{
nN sinia=0;
nN indise=0;
while (indise<cuantia)
{
sinia <<= 2;
sinia ^= cadena[indise++] | (sinia << 8);
}
 
return sinia;
}
/c/lista/nN_sinia__ccadena.c
0,0 → 1,15
#include "lista.h"
 
nN nN_sinia__ccadena(char *ccadena)
{
nN sinia = 0;
n1 c;
 
while ((c = *ccadena++) != 0)
{
sinia <<= 2;
sinia ^= c | (sinia << 8);
}
 
return sinia;
}
/c/lista/lista_libri.c
0,0 → 1,11
#include "lista.h"
 
void lista_libri(struct lista *esta)
{
if(esta!=0)
{
memoria_libri((P)esta->datos);
memoria_libri((P)esta);
}
}
/c/lista/lista_pone__dato.c
0,0 → 1,8
#define lista_fonte
#include "lista.h"
 
n1 * lista_pone__dato(struct lista *esta,n1 dato,nN indise)
{
if (indise>esta->contador) lista_crese(esta,indise-esta->contador);
esta->datos[indise]=dato;
}
/c/lista/cadena_ANSI__cursor_posa.c
0,0 → 1,11
#include "lista.h"
 
void cadena_ANSI__cursor_posa(void *scrive(char *, nN),nN x,nN y)
{
char sinia[]={0x1b,'[',';','f'};
scrive(sinia, 2);
cadena_asciidesimal__nN(scrive, y);
scrive(sinia+2, 1);
cadena_asciidesimal__nN(scrive, x);
scrive(sinia+3, 1);
}
/c/lista/cadena_ANSI_cursor_posa_restora.c
0,0 → 1,7
#include "lista.h"
 
void cadena_ANSI_cursor_posa_restora(void *scrive(char *, nN))
{
char sinia[]={0x1b,'[','u'};
scrive(sinia, sizeof(sinia));
}
/c/lista/lista_inserta__nW.c
0,0 → 1,8
#define lista_fonte
#include "lista.h"
 
void lista_insert__P(struct lista *esta,P dato,nN indise)
{
lista_insert_spasio(esta,indise,sizeof(P));
*(esta->datos+indise)=dato;
}
/c/lista/nN_trova__p_n4.c
0,0 → 1,39
#include "tipodef.h"
 
nN nN_trova__p_n4(n4 *cadena, nN cuantia, n4 sinia)
{
#define limite_minima 32
nN i=0;
if(cuantia!=0)
{
if((cuantia&1)=1)
{
if((*cadena++)==sinia)
{
break;
}
}
if(cuantia<limite_minima)
{
for(i=0;i<cuantia;i++)
{
if (cadena[i]==sinia)
{
contador=i+1;
break;
}
}
}
else
{
contador
}
}
return i;
}
/c/lista/cadena_ANSI_limpa.c
0,0 → 1,7
#include "lista.h"
 
void cadena_ANSI_limpa(void *scrive(char *, nN))
{
char sinia[]={0x1b,'[','2','J'};
scrive(sinia, sizeof(sinia));
}
/c/lista/fl2_frato__cadena.c
0,0 → 1,16
#include "tipodef.h"
 
fl2 fl2_frato__cadena(n1 *cadena, nN cuantia)
{
fl2 fl=0.0;
nN i;
if (cuantia>0)
{
for(i=0;i<cuantia;i++){fl=(fl*10.0)+(fl2)(cadena[i]&0x0f);}
for(i=0;i<cuantia;i++){fl*=0.1; }
}
 
return fl;
}
/c/lista/lista_ajunta__lista.c
0,0 → 1,6
#include "lista.h"
 
void lista_ajunta__lista(struct lista *esta,struct lista *nova)
{
lista_ajunta__datos(esta,nova->datos,nova->contador);
}
/c/lista/lista_ajunta__n2.c
0,0 → 1,8
#include "lista.h"
 
void lista_ajunta__n2(struct lista *esta,n2 dato)
{
lista_crese(esta, sizeof(n2));
*(n2 *)(esta->datos+esta->contador)=dato;
esta->contador+=sizeof(n2);
}
/c/lista/lista_ajunta__n4.c
0,0 → 1,8
#include "lista.h"
 
void lista_ajunta__n4(struct lista *esta,n4 dato)
{
lista_crese(esta, sizeof(n4));
*(n4 *)(esta->datos+esta->contador)=dato;
esta->contador+=sizeof(n4);
}
/c/lista/lista_inserta__P.c
0,0 → 1,7
#include "lista.h"
 
void lista_inserta__P(struct lista *esta,P dato,nN indise)
{
lista_inserta_capasia(esta,indise,sizeof(P));
*(P *)(esta->datos+indise)=dato;
}
/c/lista/cadena__f.c
0,0 → 1,153
#include "lista.h"
#include <stdarg.h>
 
void cadena__f(void *scrive(char *, nN), char *cadena, ...)
{
va_list va_lista;
va_start(va_lista, cadena);
nN limite_indise = nN_cuantia__ccadena(cadena);
n8 cuantia_;
#define carater_cuantia 32
char carater[carater_cuantia];
char *cadena_;
n8 valua;
nN alinia;
n1 bool_esatia;
char *comensa;
nN i=0;
while(i<limite_indise)
{
switch(cadena[i])
{
default:
comensa=cadena+i;
while((cadena[i]!='\\')&&(cadena[i]!='%')&&(i<limite_indise)) { i++; }
scrive(comensa, (cadena+i)-comensa);
break;
case '\\':
i++;
switch(cadena[i])
{
default:
comensa=cadena+i++;
while((cadena[i]!='\\')&&(cadena[i]!='%')&&(i<limite_indise)) { i++; }
scrive(comensa, (cadena+i)-comensa);
break;
case 'n':
i++;
carater[0]=0x0a;
scrive(carater, 1);
break;
}
break;
case '%':
i++;
if(cadena[i]=='.')
{
i++;
bool_esatia=1;
}
else
{
bool_esatia=0;
}
if(cadena[i]=='*')
{
i++;
alinia=va_arg(va_lista, n4); //*__ nN depende de arci
}
else
{
alinia=0;
}
switch(cadena[i])
{
case 'x':
i++;
valua=va_arg(va_lista, n8);
cuantia_=asciiexadesimal__n8((n1 *)(carater+(carater_cuantia-1)), valua);
alinia=(alinia>cuantia_) ? alinia-cuantia_ : 0;
if(bool_esatia!=0)
{
carater[0]='0';
}
else
{
carater[0]=' ';
}
for(; alinia>0; alinia--)
{
scrive(carater,1);
}
scrive(carater+carater_cuantia-cuantia_, cuantia_);
break;
case 'd':
i++;
valua=va_arg(va_lista, n8);
cuantia_=asciidesimal__n8((n1 *)(carater+(carater_cuantia-1)), valua);
alinia=(alinia>cuantia_) ? alinia-cuantia_ : 0;
if(bool_esatia!=0)
{
carater[0]='0';
}
else
{
carater[0]=' ';
}
for(; alinia>0; alinia--)
{
scrive(carater,1);
}
scrive(carater+carater_cuantia-cuantia_, cuantia_);
break;
case 'c':
i++;
carater[1]=(n1)va_arg(va_lista, nN);
alinia=(alinia>1) ? alinia-1 : 0;
for(carater[0]=' '; alinia>0; alinia--)
{
scrive(carater,1);
}
scrive(carater+1, 1);
break;
case 's':
i++;
cadena_=va_arg(va_lista, char *);
cuantia_=nN_cuantia__ccadena(cadena_);
alinia=(alinia!=0) ? alinia : cuantia_;
cuantia_=(alinia>cuantia_) ? cuantia_ : alinia;
alinia=(alinia>cuantia_) ? alinia-cuantia_ : 0;
for(carater[0]=' '; alinia>0; alinia--)
{
scrive(carater,1);
}
scrive(cadena_, cuantia_);
break;
}
break;
}
}
va_end(va_lista);
}
/c/lista/lista_nova__crese.c
0,0 → 1,14
#include "lista.h"
 
struct lista* lista_nova__crese(nN cuantia, nN crese)
{
crese+=0x10; crese&=-0x10;
nN nova_cuantia = (cuantia > lista_minima_cuantia) ? cuantia : lista_minima_cuantia;
struct lista *esta = (struct lista *)memoria_nova(sizeof(struct lista));
esta->datos=(n1 *)memoria_nova(nova_cuantia);
esta->capasia=nova_cuantia;
esta->contador=0;
esta->crese=(crese > lista_minima_crese) ? crese : lista_minima_crese;
return esta;
}
 
/c/lista/lista_ajunta_asciiexadesimal__n2.c
0,0 → 1,17
#include "lista.h"
 
void lista_ajunta_asciiexadesimal__n2(struct lista *lista, n2 binaria)
{
const n1 sinia[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
lista_crese(lista, sizeof(n2)*2);
nN i;
for(i=0;i<sizeof(n2);i++)
{
lista->datos[(lista->contador+sizeof(n2)*2)-2*(i+1)+1]=(sinia[binaria&0x0f]);
lista->datos[(lista->contador+sizeof(n2)*2)-2*(i+1)]=(sinia[(binaria>>4)&0x0f]);
binaria>>=8;
}
lista->contador+=sizeof(n2)*2;
}
/c/lista/lista.h
0,0 → 1,184
#include "tipodef.h"
#include "sospesifada.h"
 
#ifndef lista_definida
#define lista_definida
 
struct lista
{
n1 *datos;
nN capasia;
nN contador;
nN crese;
};
#endif
 
fl2 fl2__cadena(n1 *,nN);
fl2 fl2__cadena_desimal(n1 *,nN);
fl2 fl2_frato__cadena(n1 *,nN);
nN nN__desimal_cadena(n1 *, nN);
n8 n8__desimal_cadena(n1 *, nN);
nM nM__desimal_cadena(n1 *, nN);
nN nN__exadesimal_cadena(n1 *, nN);
n8 n8__exadesimal_cadena(n1 *, nN);
nM nM__exadesimal_cadena(n1 *, nN);
 
n1 n1_asciiexadesimal(n1 *,nN);
n4 n4_asciiexadesimal(n1 *,nN);
n4 n4_ccadenaexadesimal(n1 *);
nN nN_cuantia__ccadena(char *);
nN nN_cuantia_brasetida__cadena(n1 *, n1, n1);
 
nN nN_trova__asende_n4(n4 *, nN, n4);
n8 n8_trova__asende_n8(n8 *cadena, n8, n8, n8);
 
n4 n4_sinia__cadena(n1 *,nN);
n4 n4_sinia__ccadena(char *);
n8 n8_sinia__cadena(n1 *,nN);
n8 n8_sinia__ccadena(char *);
nN nN_sinia__cadena(n1 *,nN);
nN nN_sinia__ccadena(char *);
nN nN_sinia__lista(struct lista *);
nM nM_SPR__cadena(n1 *, nN);
 
nN asciiexadesimal__nN(n1 *, nN);
n8 asciiexadesimal__n8(n1 *, n8);
nN asciidesimal__nN(n1 *, nN);
nN asciidesimal__n8(n1 *, n8);
 
//void * (n1 *, nN)
void cadena__f(void *scrive(char *, nN), char *, ...);
void cadena_ANSI_limpa(void *scrive(char *, nN));
void cadena_ANSI__cursor_sinistra(void *scrive(char *, nN), nN);
void cadena_ANSI__cursor_destra(void *scrive(char *, nN), nN);
void cadena_ANSI__cursor_asende(void *scrive(char *, nN), nN);
void cadena_ANSI__cursor_desende(void *scrive(char *, nN), nN);
void cadena_ANSI_cursor_orijin(void *scrive(char *, nN));
void cadena_ANSI_cursor_posa_fisa(void *scrive(char *, nN));
void cadena_ANSI_cursor_posa_restora(void *scrive(char *, nN));
 
void cadena_ANSI__cursor_posa(void *scrive(char *, nN), nN,nN);
void cadena_ANSI__atribuida(void *scrive(char *, nN), n1);
void cadena_ANSI__2atribuida(void *scrive(char *, nN), n1, n1);
void cadena_ANSI__3atribuida(void *scrive(char *, nN), n1, n1, n1);
 
void cadena_asciidesimal__nN(void *scrive(char *, nN), nN);
 
void lista_ajunta_asciiexadesimal__cadena(struct lista *, n1 *, nN);
void lista_ajunta_asciiexadesimal__n8(struct lista *, n8);
void lista_ajunta_asciiexadesimal__n2(struct lista *, n2);
void lista_ajunta_asciiexadesimal__n1(struct lista *, n1);
 
//void lista_(struct lista*);
void lista_crese(struct lista *, nN);
struct lista *lista_nova(nN);
struct lista *lista_nova__lista(struct lista *);
struct lista *lista_nova__datos(n1 *, nN);
struct lista *lista_nova__ccadena(char *);
struct lista *lista_nova__crese(nN, nN);
struct lista *lista_2_nova__lista_2(struct lista *);
void lista_defini__crese(struct lista *,nN);
void lista_libri(struct lista *);
void lista_2_libri(struct lista *); //lista-> lista
 
void lista_ajunta__dato(struct lista *,n1);
void lista_ajunta__datos(struct lista *,n1 *,nN);
void lista_ajunta__lista(struct lista *,struct lista *);
void lista_ajunta__ccadena(struct lista *, char *);
void lista_ajunta__P(struct lista *, P);
void lista_ajunta__nN(struct lista *,nN);
void lista_ajunta__n2(struct lista *,n2);
void lista_ajunta__n4(struct lista *,n4);
void lista_ajunta__n8(struct lista *,n8);
void lista_ajunta__fl2(struct lista *,fl2);
 
void lista_inserta_capasia(struct lista *, nN, nN);
void lista_inserta__dato(struct lista *,n1,nN); //esta,dato,indise
void lista_inserta__datos(struct lista *,n1 *,nN,nN); //esta,datos,cuantia,indise
void lista_inserta__lista(struct lista *,struct lista *,nN);
void lista_inserta__ccadena(struct lista *, char *,nN);
void lista_inserta__P(struct lista *,P , nN);
void lista_inserta__n4(struct lista *,n4 , nN);
 
void lista_sutrae__datos(struct lista *,nN,nN);
 
n1 lista_dato_last(struct lista *);
n1 * lista_datos_last(struct lista *,nN);
 
void lista_repone__dato(struct lista *,n1,nN);
void lista_repone__datos(struct lista *,n1 *,nN,nN);
 
#define lista_minima_cuantia (0x10*20)
#define lista_minima_crese (0x10*10)
 
#define lista_table_sinia \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
 
#define lista_table_sinia_inclui_brasos \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
 
#define lista_table_sinia_m \
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
 
#define lista_table_clui \
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\
' ', ' ', '"', ' ', ' ', ' ', ' ', '\'', ')', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '>', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ']', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '}', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',\
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
/c/lista/lista_ajunta__n8.c
0,0 → 1,8
#include "lista.h"
 
void lista_ajunta__n8(struct lista *esta,n8 dato)
{
lista_crese(esta, sizeof(n8));
*(n8 *)(esta->datos+esta->contador)=dato;
esta->contador+=sizeof(n8);
}
/c/lista/lista_ajunta_asciiexadesimal__n8.c
0,0 → 1,17
#include "lista.h"
 
void lista_ajunta_asciiexadesimal__n8(struct lista *lista, n8 binaria)
{
const n1 sinia[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
lista_crese(lista, sizeof(n8)*2);
nN i;
for(i=0;i<sizeof(n8);i++)
{
lista->datos[(lista->contador+sizeof(n8)*2)-2*(i+1)+1]=(sinia[binaria&0x0f]);
lista->datos[(lista->contador+sizeof(n8)*2)-2*(i+1)]=(sinia[(binaria>>4)&0x0f]);
binaria>>=8;
}
lista->contador+=sizeof(n8)*2;
}
/c/lista/nN_cuantia_brasetida__cadena.c
0,0 → 1,38
#include "tipodef.h"
 
nN nN_cuantia_brasetida__cadena(n1 * cadena, n1 abri, n1 clui)
{
nN contador=1;
nN cuantia;
cadena++;
if(abri!=clui)
{
while((*cadena!=clui)&&(*(cadena-1)!='\\'))
{
if (*cadena==abri)
{
cuantia=nN_cuantia_brasetida__cadena(cadena, abri, clui);
cadena+=cuantia;
contador+=cuantia;
}
else
{
contador++;
cadena++;
}
}
}
else
{
while(*cadena++!=clui)
{
contador++;
}
}
return contador+1;
}
/c/lista/nN_sinia__lista.c
0,0 → 1,17
#include "lista.h"
 
nN nN_sinia__lista(struct lista *esta)
{
n1 *cadena=esta->datos;
nN cuantia=esta->contador;
nN sinia=0;
nN indise=0;
while (indise<cuantia)
{
sinia <<= 2;
sinia ^= cadena[indise++] | (sinia << 8);
}
 
return sinia;
}
/c/lista/lista_repone__dato.c
0,0 → 1,9
#include "lista.h"
 
void lista_repone__dato(struct lista *esta,n1 dato,nN indise)
{
if (indise<esta->contador)
{
esta->datos[indise]=dato;
}
}
/c/lista/lista_nova__lista.c
0,0 → 1,7
#include "lista.h"
 
struct lista* lista_nova__lista(struct lista *lista)
{
return lista_nova__datos(lista->datos, lista->contador);
}
 
/c/lista/cadena_ANSI__cursor_sinistra.c
0,0 → 1,9
#include "lista.h"
 
void cadena_ANSI__cursor_sinistra(void *scrive(char *, nN), nN cuantia)
{
char sinia[]={0x1b,'[','D'};
scrive(sinia, 2);
cadena_asciidesimal__nN(scrive, cuantia);
scrive(sinia+2, 1);
}
/c/lista/cadena_ANSI__cursor_asende.c
0,0 → 1,9
#include "lista.h"
 
void cadena_ANSI__cursor_asende(void *scrive(char *, nN), nN cuantia)
{
char sinia[]={0x1b,'[','A'};
scrive(sinia, 2);
cadena_asciidesimal__nN(scrive, cuantia);
scrive(sinia+2, 1);
}
/c/lista/lista_inserta__n4.c
0,0 → 1,7
#include "lista.h"
 
void lista_inserta__n4(struct lista *esta, n4 dato, nN indise)
{
lista_inserta_capasia(esta,indise,sizeof(n4));
*(n4 *)(esta->datos+indise)=dato;
}
/c/lista/n4_sinia__ccadena.c
0,0 → 1,16
#include "tipodef.h"
 
n4 n4_sinia__ccadena(char *ccadena)
{
n4 sinia=0;
n1 c;
 
while ((c = *ccadena++) != 0)
{
sinia ^= ((n4)(c)<<11) ^ (sinia << 7);
sinia ^= ((n4)(c)) ^ (sinia >> 17);
sinia ^= ((n4)(c)<<4) ^ (sinia << 11);
}
 
return sinia;
}
/c/lista/nN__exadesimal_cadena.c
0,0 → 1,18
#include "tipodef.h"
 
nN nN__exadesimal_cadena(n1 * cadena, nN cuantia)
{
nN valua = 0;
n1 c;
nN i = 0;
while(i<cuantia)
{
c = cadena[i++];
if(c>0x39) c+=0x09;
valua |= (c&0x0f);
if(i<cuantia) valua <<= 4;
}
return valua;
}
/c/lista/lista_P_final.c
0,0 → 1,6
#include "lista.h"
 
P lista_P_final(struct lista *esta)
{
return (esta->contador>=sizeof(P)) ? *(P *)(esta->datos+esta->contador-sizeof(P)) : 0;
}
/c/lista/fl64__cadena.c
0,0 → 1,49
#include "tipodef.h"
 
#include <stdio.h>
 
void debug_out(n1 *cadena,nN cuantia);
 
fl2 fl2__cadena(n1 *cadena,nN cuantia)
{
n1 sinia_entero=0,sinia_potia=0;
if (*cadena=='-') { cadena++; cuantia--; sinia_entero=1; }
n1 *cadena_frato=0,*cadena_potia=0;
nN cuantia_cadena_frato,cuantia_cadena_entero,cuantia_cadena_potia;
nN indise;
for(indise=0;indise<cuantia;indise++)
{
if(cadena[indise]=='.'){cadena_frato=cadena+indise+1; break;}
}
if (cadena_frato!=0)
{
for(cuantia_cadena_frato=0;cuantia_cadena_frato<(cuantia-(cadena_frato-cadena));cuantia_cadena_frato++)
{
if(cadena_frato[cuantia_cadena_frato]=='E')
{
cadena_potia=cadena_frato+cuantia_cadena_frato+1;
if(*cadena_potia=='-') { cadena_potia++; sinia_potia=1; }
cuantia_cadena_potia=cuantia-(cadena_potia-cadena);
break;
}
}
}
cuantia_cadena_entero=-(cadena-cadena_frato)-1;
cuantia_cadena_entero=3;
fl2 fl=0.0;
fl=fl2__cadena_desimal(cadena,cuantia_cadena_entero);
printf("%f\n",fl);
return fl;
}
 
void debug_out(n1 *cadena,nN cuantia)
{
nN i;
for(i=0;i<cuantia;i++)
{
putchar(cadena[i]);
}
}
/c/lista/n8_sinia__ccadena.c
0,0 → 1,16
#include "tipodef.h"
 
n8 n8_sinia__ccadena(char *ccadena)
{
n8 sinia=0;
n1 c;
 
while ((c = *ccadena++) != 0)
{
sinia ^= ((n8)(c)<<31) ^ (sinia << 7);
sinia ^= ((n8)(c)) ^ (sinia >> 17);
sinia ^= ((n8)(c)<<3) ^ (sinia << 31);
}
 
return sinia;
}
/c/lista/nN_trova__asende_n4.c
0,0 → 1,32
#include "tipodef.h"
 
nN nN_trova__asende_n4(n4 *cadena, nN cuantia, nN indise, n4 sinia)
{
if(cuantia!=0)
{
if((cuantia&1)==1)
{
if((cadena[--cuantia])==sinia)
{
return cuantia;
}
}
while((cadena[(indise+1)<<1]<=sinia)&&(indise<cuantia)) {indise=(indise+1)<<1;}
for(;indise<cuantia;indise++)
{
if (cadena[indise]>=sinia)
{
break;
}
}
}
return indise;
 
}
/c/lista/cadena_ANSI_cursor_posa_fisa.c
0,0 → 1,7
#include "lista.h"
 
void cadena_ANSI_cursor_posa_fisa(void *scrive(char *, nN))
{
char sinia[]={0x1b,'[','s'};
scrive(sinia, sizeof(sinia));
}
/c/lista/lista_ajunta__datos.c
0,0 → 1,8
#include "lista.h"
 
void lista_ajunta__datos(struct lista *esta,n1 *datos,nN cuantia)
{
lista_crese(esta,cuantia);
memoria_copia((P)(esta->datos+esta->contador),(P)datos,cuantia);
esta->contador+=cuantia;
}
/c/lista/lista_inserta__dato.c
0,0 → 1,7
#include "lista.h"
 
void lista_inserta__dato(struct lista *esta,n1 dato,nN indise)
{
lista_inserta_capasia(esta,indise,1);
esta->datos[indise]=dato;
}
/c/lista/cadena_ANSI__cursor_desende.c
0,0 → 1,9
#include "lista.h"
 
void cadena_ANSI__cursor_desende(void *scrive(char *, nN), nN cuantia)
{
char sinia[]={0x1b,'[','B'};
scrive(sinia, 2);
cadena_asciidesimal__nN(scrive, cuantia);
scrive(sinia+2, 1);
}
/c/lista/lista_ajunta__nN.c
0,0 → 1,8
#include "lista.h"
 
void lista_ajunta__nN(struct lista *esta,nN dato)
{
lista_crese(esta,sizeof(nN));
*(nN *)(esta->datos+esta->contador)=dato;
esta->contador+=sizeof(nN);
}
/c/lista/lista_defini__crese.c
0,0 → 1,8
#include "lista.h"
 
void lista_defini__crese(struct lista *esta,nN crese)
{
crese+=0x10; crese&=-0x10;
esta->crese=(crese > lista_minima_crese) ? crese : lista_minima_crese;
}
 
/c/lista/n4__ccadenaexadesimal.c
0,0 → 1,19
#include "lista.h"
 
n4 n4__ccadenaexadesimal(char * a)
{
nN cuantia = nN_cuantia__ccadena(a);
n4 binaria = 0;
n1 c;
nN i = 0;
while(cuantia>0)
{
c = a[i++];
c = (c>0x39) ? c : c+0x09;
binaria |= (c&0x0f);
binaria <<= 4;
}
return binaria;
}
/c/lista/fl2__cadena_desimal.c
0,0 → 1,18
#include "tipodef.h"
 
fl2 fl2__cadena_desimal(n1 *cadena, nN cuantia)
{
fl2 fl=0.0;
nN i;
if (cuantia>0)
{
for(i=0;i<cuantia;i++)
{
fl=(fl*10.0)+(fl2)(cadena[i]&0x0f);
}
}
return fl;
}
/c/lista/cadena_asciidesimal__nN.c
0,0 → 1,20
#include "lista.h"
 
void cadena_asciidesimal__nN(void *scrive(char *, nN), nN binaria)
{
#define cuantia 24
char d[cuantia];
n1 c;
nN i=0;
nN bdiv;
do
{
bdiv=binaria/10;
c=binaria-((bdiv<<3)+(bdiv<<1));
d[(cuantia-1)-i++]=c|'0';
binaria=bdiv;
} while(bdiv!=0);
scrive((d+(cuantia))-i, i);
}
/c/lista/nN_cuantia__ccadena.c
0,0 → 1,13
#include "tipodef.h"
 
nN nN_cuantia__ccadena(char * ccadena)
{
nN conta = 0;
while (ccadena[conta]!=0)
{
conta++;
}
return conta;
}
/c/lista/lista_repone__datos.c
0,0 → 1,11
#include "lista.h"
 
void lista_replace__datos(struct lista *esta,n1 *datos,nN cuantia,nN indise)
{
if (indise<esta->contador)
{
if (esta->contador<(indise+cuantia)) lista_crese(esta,(indise+cuantia)-esta->contador);
memoria_copia((P)(esta->datos+indise),(P)datos,cuantia);
}
}
/c/lista/lista_2_libri.c
0,0 → 1,20
#include "lista.h"
 
void lista_2_libri(struct lista *esta)
{
if(esta!=0)
{
nN i;
for(i=0;i<(esta->contador/sizeof(P));i++)
{
if(((struct lista **)(esta->datos))[i]!=0)
{
lista_libri(((struct lista **)(esta->datos))[i]);
}
}
}
lista_libri(esta);
}
/c/lista/lista_datos_final.c
0,0 → 1,7
#define lista_fonte
#include "lista.h"
 
n1 * lista_datos_final(struct lista *esta,nN cuantia)
{
return (esta->contador>=cuantia) ? esta->datos+esta->contador-cuantia : 0;
}
/c/lista/lista_inserta_spasio.c
0,0 → 1,11
#include "lista.h"
 
void lista_inserta_spasio(struct lista *esta,nN indise,nN cuantia)
{
if (indise<=esta->contador)
{
if (indise!=esta->contador) lista_crese(esta,cuantia);
memoria_move((P)(esta->datos+indise+cuantia),(P)(esta->datos+indise),esta->contador-indise);
esta->contador=+cuantia;
}
}
/c/lista/n1__asciiexadesimal.c
0,0 → 1,17
#include "tipodef.h"
 
n1 n1__asciiexadecimal(n1 *cadena)
{
n1 binaria = 0;;
n1 c;
c = cadena[0];
if (c>0x39) c+=0x09;
binaria |= (c&0x0f);
binaria <<= 4;
c = cadena[1];
if (c>0x39) c+=0x09;
binaria |= (c&0x0f);
return binaria;
}
/c/lista/nN_trova_asende__p_n4.c
0,0 → 1,39
#include "tipodef.h"
 
nN nN_trova_asende__p_n4(n4 *cadena, nN cuantia, n4 sinia)
{
#define limite_minima 32
nN i=0;
if(cuantia!=0)
{
if((cuantia&1)=1)
{
if((*cadena++)==sinia)
{
break;
}
}
if(cuantia<limite_minima)
{
for(i=0;i<cuantia;i++)
{
if (cadena[i]==sinia)
{
contador=i+1;
break;
}
}
}
else
{
}
}
return i;
}
/c/lista/lista_pone__datos.c
0,0 → 1,8
#define lista_fonte
#include "lista.h"
 
n1 * lista_write__datos(struct lista *esta,n1 *datos,nN cuantia,nN indise)
{
if ((indise+cuantia)>esta->contador) lista_crese(esta,(indise+cuantia)-esta->contador);
memoria_copia((P)(esta->datos+indise),(P)datos,indise);
}
/c/lista/lista_nova__datos.c
0,0 → 1,20
#include "lista.h"
 
struct lista* lista_nova__datos(n1 *datos, nN cuantia)
{
struct lista *esta=0;
if (cuantia>0)
{
nN nova_cuantia = (cuantia > lista_minima_cuantia) ? cuantia : lista_minima_cuantia;
esta = (struct lista *)memoria_nova(sizeof(struct lista));
esta->datos=(n1 *)memoria_nova(nova_cuantia);
esta->capasia=nova_cuantia;
esta->contador=cuantia;
memoria_copia((P)esta->datos,(P)datos,cuantia);
esta->crese=lista_minima_crese;
}
return esta;
}
 
/c/lista/cadena_ANSI__3atribuida.c
0,0 → 1,13
#include "lista.h"
 
void cadena_ANSI__3atribuida(void *scrive(char *, nN),n1 a_0,n1 a_1,n1 a_2)
{
char sinia[]={0x1b,'[',';','m'};
scrive(sinia, 2);
cadena_asciidesimal__nN(scrive, a_0);
scrive(sinia+2, 1);
cadena_asciidesimal__nN(scrive, a_1);
scrive(sinia+2, 1);
cadena_asciidesimal__nN(scrive, a_2);
scrive(sinia+3, 1);
}
/c/lista/asciidesimal__n8.c
0,0 → 1,20
#include "lista.h"
 
nN asciidesimal__n8(n1 *cadena, n8 binaria)
{
n1 c;
nN i=0;
n8 bdiv;
do
{
bdiv=binaria/10;
c=binaria-((bdiv<<3)+(bdiv<<1));
*cadena=c|'0';
cadena--;
i++;
binaria=bdiv;
} while(bdiv!=0);
return i;
}
/c/lista/lista_dato_final.c
0,0 → 1,7
#define lista_fonte
#include "lista.h"
 
n1 lista_dato_final(struct lista *esta)
{
return (esta->contador>=sizeof(n1)) ? esta->datos[esta->contador-sizeof(n1)] : 0;
}
/c/lista/cadena_ANSI_cursor_orijin.c
0,0 → 1,7
#include "lista.h"
 
void cadena_ANSI_cursor_orijin(void *scrive(char *, nN))
{
char sinia[]={0x1b,'[','H'};
scrive(sinia, sizeof(sinia));
}
/c/lista/lista_nova__ccadena.c
0,0 → 1,15
#include "lista.h"
 
struct lista* lista_nova__ccadena(char *ccadena)
{
nN cuantia = 0; while (ccadena[cuantia]!=0){cuantia++;}
nN nova_cuantia = (cuantia > lista_minima_cuantia) ? cuantia : lista_minima_cuantia;
struct lista *esta = (struct lista *)memoria_nova(sizeof(struct lista));
esta->datos=(n1 *)memoria_nova(nova_cuantia);
esta->capasia=nova_cuantia;
esta->contador=cuantia;
memoria_copia((P)esta->datos,(P)ccadena,cuantia);
esta->crese=lista_minima_crese;
return esta;
}
 
/c/lista/lista_2_nova__lista_2.c
0,0 → 1,16
#include "lista.h"
 
struct lista* lista_2_nova__lista_2(struct lista *lista)
{
nN cuantia=lista->contador/sizeof(P);
struct lista *esta=lista_nova(cuantia);
nN i;
for(i=0;i<cuantia;i++)
{
lista_ajunta__P(esta, (P)lista_nova__datos(((struct lista **)(lista->datos))[i]->datos,((struct lista **)(lista->datos))[i]->contador));
}
return esta;
}
 
/c/lista/lista_inserta__lista.c
0,0 → 1,8
#include "lista.h"
 
void lista_inserta__lista(struct lista *esta,struct lista *nova,nN indise)
{
lista_inserta_capasia(esta,indise,nova->contador);
memoria_copia((P)(esta->datos+indise),(P)nova->datos,nova->contador);
esta->contador=+nova->contador;
}
/c/lista/lista_crese.c
0,0 → 1,13
#include "lista.h"
 
void lista_crese(struct lista *lista, nN capasia_crese)
{
nN capasia_disponable = lista->capasia-lista->contador;
if (capasia_crese > capasia_disponable)
{
// contrato de crese
lista->capasia=(lista->capasia-capasia_disponable)+capasia_crese+lista->crese;
lista->datos=(n1 *)memoria_crese(lista->datos, lista->capasia);
}
}
/LICENSE
0,0 → 1,3
Terms.
This work is governed by Nature's common and immutable laws.
Consequently the work many be used in any way permissible by Nature.
/INSTALL
0,0 → 1,15
Compiling:
Each architecture that the software is compiled on needs a corresponding
'tipodef.h' (type definitions).
 
Included are x86 and AMD64 (they may be used for simlar 32 and 64 bit systems).
 
Specify which in Makefile : arci=x86,amd64
 
(libsospesisfada: needs change to yasm -elf32/-elf64 in Makefile if using assembly memory copy.)
 
Running the test script in c/cpu_1664/ASID (sh proba_asid) will compile and install all
libs and the ASID program.
 
 
comments, suggestions gmail: injenior
/arci/1664/inclui/0.SO.inclui.1664
0,0 → 1,56
.defina SO_exit 0
.defina SO_memoria_nova 1 ;cuantia (0) ; -> desloca (0) ; 0: eror - memoria nondisponable
.defina SO_memoria_libri 2 ;desloca
.defina SO_argc 3
.defina SO_argv {SO_argc 1 +}
.defina SO_open {SO_argc 2 +}
.defina SO_close {SO_argc 3 +}
.defina SO_read {SO_argc 4 +}
.defina SO_write {SO_argc 5 +}
.defina SO_lseek {SO_argc 6 +}
.defina SO_ftruncate {SO_argc 7 +}
.defina SO_time {SO_argc 8 +}
.defina SO_nanosleep {SO_argc 9 +}
.defina SO_eseta_cuantia SO_nanosleep
 
 
.model eseta_SO_exit {
%+{%c 0 >} ldri 1 %0
ldri 0 SO_exit
~rev opera_rev_eseta
}
 
.model eseta_SO_memoria_nova {
%+{%c 0 >} ldri 1 %0
ldri 0 SO_memoria_nova
~rev opera_rev_eseta
}
 
.model eseta_SO_memoria_libri {
%+{%c 0 >} ldri 1 %0
ldri 0 SO_memoria_libri
~rev opera_rev_eseta
}
 
.model eseta_SO_argc {
ldri 0 SO_argc
~rev opera_rev_eseta
}
 
.model eseta_SO_argv {
%+{%c 0 >} ldri 1 %0
ldri 0 SO_argv
~rev opera_rev_eseta
}
 
.model eseta_SO_read {
%+{%c 0 >} ldri 1 %0
ldri 0 SO_read
~rev opera_rev_eseta
}
 
.model eseta_SO_write {
%+{%c 0 >} ldri 1 %0
ldri 0 SO_write
~rev opera_rev_eseta
}
/arci/1664/inclui/0.imita.inclui.1664
0,0 → 1,12
.opera imita 8e
.defina opera_imita_argc 0
.defina opera_imita_argv 1
.defina opera_imita_open 2
.defina opera_imita_close 3
.defina opera_imita_read 4
.defina opera_imita_write 5
.defina opera_imita_lseek 6
.defina opera_imita_ftruncate 7
.defina opera_imita_time 8
.defina opera_imita_nanosleep 254
.defina opera_imita_exit 255
/arci/1664/inclui/0.SO.memoria.1664
0,0 → 1,431
;ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
.defina memoria_asinia_comensa_alinia {4 1024 * 1 -}
 
eticeta_datos memoria_asinia_comensa_desloca
.ds {SO_pila_desloca memoria_asinia_comensa_alinia + memoria_asinia_comensa_alinia .- 1 - &}
 
eticeta_datos memoria_asinia_cuantia_intera
.ds {1024 1024 1 * *}
 
;.defina memoria_asinia_unia_grandia {sinia_bitio 3 >>}
 
;ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
 
.defina bool_memoria_limpa 1
.defina bool_memoria_nova_limpa 1
.defina bool_memoria_libri_limpa {bool_memoria_limpa bool_memoria_nova_limpa 0 == &&}
 
;-------------------------------------------------------------------------------
eticeta_opera memoria_mapa_tradui ;mapa, desloca, cuantia
;(0) desloca_real
;-------------------------------------------------------------------------------
puia sREVENI
str 0 3
str 1 sT1
str 2 sT2
ldri sT3 -8
ldr_r sT4 s_n
ldri sT5 sinia_grandia
plu 2 1
str 2 sT0
 
@sicle_trova
ldm [3+]
cmp 0 s_0
z yli memoria_mapa_tradui@fini
and 0 sT3
str 0 2
ldm [3+]
cmp 0 sT1
c plu 3 sT5
c yli memoria_mapa_tradui@sicle_trova
ldr 1 0
plu 1 2
cmp 1 sT1
dep_or o z
o plu 3 sT5
o yli memoria_mapa_tradui@sicle_trova
sutr 0 sT1
str 0 sT5
ldm [3]
plu 0 sT5
sut 2 sT5
cmp 2 sT2
dep_or c z
c str 0 sT4
 
@fini
tira_ 1
ldr 0 sT4
str 1 sIP
 
;-------------------------------------------------------------------------------
eticeta_opera memoria_asinia_mapa_sesion_libri ;mapa, desloca_real
;-------------------------------------------------------------------------------
puia sREVENI
str 0 3
str 1 sT0
ldri sT2 sinia_grandia
ldr 2 s_n
 
@sicle_trova
str 3 sT1
ldm [3+]
cmp 0 s_0
z yli memoria_asinia_mapa_sesion_libri@sicle_trova_finia
plu 3 sT2
ldm [3+]
cmp 0 sT0
z ldr 2 sT1
yli memoria_asinia_mapa_sesion_libri@sicle_trova
 
@sicle_trova_finia
cmp 2 s_n
z yli memoria_asinia_mapa_sesion_libri@fini
ldr 3 sT1
ldm [3]
stm [2+]
eor 0 0
stm [3+]
ldm [3+]
stm [2+]
ldm [3]
stm [2]
 
ldr 0 sT0
yl memoria_asinia_libri
eor 2 2
 
@fini
ldr 0 2
tira 1
str 1 sIP
 
;-------------------------------------------------------------------------------
eticeta_opera memoria_asinia_mapa_sesion_ajunta ;mapa, desloca_real, cuantia
;(0) mapa, (1) memoria_desloca_virtual
;-------------------------------------------------------------------------------
puia sREVENI
entra
depende_inoria
str 0 sR0
str 1 sR1
 
ldri 0 -sinia_grandia
and 2 0
str 2 sR2
 
ldri sR3 {sinia_grandia 3 *}
eor 2 2
ldr 3 sR0
 
@sicle_mapa_grandia
plu 2 s_1
ldm [3]
plu 3 sR3
cmp 0 s_0
n yli memoria_asinia_mapa_sesion_ajunta@sicle_mapa_grandia
 
ldr 3 2
shl 3 s_1
plu 3 2
plu 3 s_1
ldri 1 sinia_bitio_sh_
shl 3 1
ldr 0 3
yl memoria_asinia_nova ;*__ eror: memoria nondisponable
str 0 2
str 0 sR5
ldr 3 sR0
ldri sT0 -8
ldri sR4 usor_datos_desloca
 
@sicle_copia
ldm [3+]
cmp 0 s_0
z yli memoria_asinia_mapa_sesion_ajunta@sicle_copia_fini
stm [2+]
and 0 sT0
str 0 sT1
ldm [3+]
stm [2+]
plu 0 sT1
cmp 0 sR4
c str 0 sR4
ldm [3+]
stm [2+]
yli memoria_asinia_mapa_sesion_ajunta@sicle_copia
 
@sicle_copia_fini
ldri 0 {1 umm_permete_leje << | 1 umm_permete_scrive << |}
plu 0 sR2
stm [2+]
ldr 0 sR4
stm [2+]
ldr 0 sR1
stm [2+]
eor 0 0
stm [2]
 
ldr 0 sR0
yl memoria_asinia_libri
 
ldr 0 sR5
ldr 1 sR4
departi
tira 3
str 3 sIP
 
;-------------------------------------------------------------------------------
eticeta_opera memoria_copia ;destina, fonte, cuantia
;-------------------------------------------------------------------------------
depende_influe
str 0 3
puia sREVENI
ldri 0 {sinia_grandia 1 -}
str 0 sT0
and 0 2
sut 2 0
str 2 sT1
str 0 2
cmp 2 s_0
z yli memoria_copia@sicle_bait_fini
 
@sicle_bait
ldm [1+] 1
stm [3+] 1
sut 2 s_1
n yli memoria_copia@sicle_bait
 
@sicle_bait_fini
ldr 2 sT1
cmp 2 s_0
z yli memoria_copia@fini
ldri 0 sinia_bitio_sh_
shr 2 0
 
@sicle_sinia
ldm [1+]
stm [3+]
sut 2 s_1
n yli memoria_copia@sicle_sinia
 
@fini
tira 1
str 1 sIP
 
;-------------------------------------------------------------------------------
eticeta_opera memoria_asinia_ajunta_libri
;-------------------------------------------------------------------------------
depende_inoria
puia sREVENI
 
ldri 3 memoria_asinia_comensa_desloca
ldm [3]
str 0 3
str 0 2
ldri sT0 {-1 1 >>}
ldri sT1 sinia_grandia
 
@sicle_trova
ldm [3+]
cmp 0 s_0
z yli memoria_asinia_ajunta_libri@fini
 
@sicle_trova_a
str 0 1
ldb 0 {sinia_bitio 1 -}
and 1 sT0
plu 3 1
z str 3 2
z yli memoria_asinia_ajunta_libri@sicle_trova
ldm [3+]
cmp 0 s_0
z yli memoria_asinia_ajunta_libri@fini
ldb 0 {sinia_bitio 1 -}
z yli memoria_asinia_ajunta_libri@sicle_trova_a
and 0 sT0
plu 0 1
plu 0 sT1
stm [2]
str 2 3
yli memoria_asinia_ajunta_libri@sicle_trova
 
@fini
tira_ 1
str 1 sREVENI
 
;-------------------------------------------------------------------------------
eticeta_opera memoria_asinia_inisia
;-------------------------------------------------------------------------------
ldri 3 memoria_asinia_comensa_desloca
ldm [3]
str 0 3
ldri 2 {sinia_grandia 2 *}
ldri 1 memoria_asinia_cuantia_intera
ldm [1]
sut 0 2
stm [3]
plu 3 1
ldri 0 sinia_grandia
sut 3 0
eor 0 0
stm [3]
reveni
 
;-------------------------------------------------------------------------------
eticeta_opera memoria_asinia_divide ;desloca, cuantia
;-------------------------------------------------------------------------------
depende_inoria
str 0 3
ldri 0 sinia_grandia
str 0 sT0
sut 0 s_1
plu 1 0
eor 0 s_n
and 1 0
ldm [3]
 
;==
cmp 0 1
z stb 0 {sinia_bitio 1 -}
z stm [3]
z rev opera_rev_reveni
 
;<{sinia_grandia 2 *}
str 0 sT1
sut 0 1
str 0 2
ldri 0 {sinia_grandia 2 *}
sutr 0 2
ldb 0 {sinia_bitio 1 -}
z ldr 0 sT1
z stb 0 {sinia_bitio 1 -}
z stm [3]
z rev opera_rev_reveni
 
;>={sinia_grandia 2 *}
dep_set 0
ldr 0 1
stb 0 {sinia_bitio 1 -}
stm [3+]
plu 3 1
ldr 0 2
sut 0 sT0
stm [3]
reveni
 
;-------------------------------------------------------------------------------
eticeta_opera memoria_asinia_nova ;cuantia
;-------------------------------------------------------------------------------
puia sREVENI
puia sR0
str 0 sR0
yl memoria_asinia_nova_prima
cmp 0 s_0
n yli memoria_asinia_nova@fini
yl memoria_asinia_ajunta_libri
ldr 0 sR0
yl memoria_asinia_nova_prima
 
@fini
tira sR0
tira 1
str 1 sIP
 
;-------------------------------------------------------------------------------
eticeta_opera memoria_asinia_nova_prima ;cuantia
;-------------------------------------------------------------------------------
depende_inoria
str 0 2
puia sREVENI
puia sR0
ldri 3 memoria_asinia_comensa_desloca
ldm [3]
str 0 3
ldri sT0 sinia_grandia
ldr 1 s_n
shr 1 s_1
 
@sicle_trova_libri
ldm [3]
cmp 0 s_0
z yli memoria_asinia_nova_prima@fini ;eror: memoria nondisponable
ldb 0 {sinia_bitio 1 -}
and 0 1
str 3 sR0
plu 3 0
plu 3 sT0
z yli memoria_asinia_nova_prima@sicle_trova_libri
cmp 0 2
o yli memoria_asinia_nova_prima@sicle_trova_libri
 
{%.{bool_memoria_nova_limpa 0 ==}
ldr 1 2
ldri 0 {sinia_grandia 1 -}
plu 1 0
eor 0 s_n
and 1 0
ldri 0 sinia_bitio_sh_
shr 1 0
eor 0 0
ldr 3 sR0
 
depende_influe
@sicle_limpa
stm [+3]
sut 1 s_1
n yli memoria_asinia_nova_prima@sicle_limpa
depende_inoria
}
 
ldr 0 sR0
ldr 1 2
yl memoria_asinia_divide
ldri 0 sinia_grandia
plu 0 sR0
 
@fini
tira sR0
tira 1
str 1 sIP
 
;-------------------------------------------------------------------------------
eticeta_opera memoria_asinia_libri ;desloca
;-------------------------------------------------------------------------------
depende_inoria
str 0 3
puia sREVENI
ldri sT2 sinia_grandia
ldm [-3]
dep_eor z z
stb 0 {sinia_bitio 1 -}
str 0 sT1
str 3 2
plu 3 0
ldm [+3]
cmp 0 s_0
z stb 0 {sinia_bitio 1 -} ;fini
ldb 0 {sinia_bitio 1 -}
z ldr 0 sT1
dep_inv z
z plu 0 sT1
z plu 0 sT2
stm [2]
 
{%.{bool_memoria_libri_limpa 0 ==}
ldr 1 sT1
ldri 0 sinia_bitio_sh_
shr 1 0
eor 0 0
 
depende_influe
@sicle_limpa
stm [+2]
sut 1 s_1
n yli memoria_asinia_libri@sicle_limpa
depende_inoria
}
 
tira 1
str 1 sIP
/arci/1664/inclui/0.base.macro.1664
0,0 → 1,254
.model reveni {~%0 rev opera_rev_reveni}
.model eseta {~%0 rev opera_rev_eseta}
 
.model ldri {
%!{%c 2 <} "%@ model ldri : parametre < 2"
 
%+{%1 0 = %0 0 = %0 3 > || &&}~%2 eor 0 0
%+{%1 0 = %0 1 = &&}~%2 eor 1 1
%+{%1 0 = %0 2 = &&}~%2 eor 2 2
%+{%1 0 = %0 3 = &&}~%2 eor 3 3
%+{%1 0 = %0 3 > &&}~%2 str 0 %0
%.{%1 0 =}
 
%+{%1 0xff <=}~%2 eor 0 0
%+{%1 0xff <=}~%2 ldi %1
%+{%1 0xff <= %0 0 != &&}~%2 str 0 %0
%.{%1 0xff <=}
 
%+{%1 0xffffffffffffff >=}~%2 ldr 0 s_n
%+{%1 0xffffffffffffff >= %1 -1 != &&}~%2 ldi %1
%+{%1 0xffffffffffffff >= %0 0 != &&}~%2 str 0 %0
%.{%1 0xffffffffffffff >=}
 
%+{%1 0xffffffffffff >=}~%2 ldr 0 s_n
%+{%1 0xffffffffffff >=}~%2 ldis %1
%+{%1 0xffffffffffff >= %1 -1 != &&}~%2 ldi %1
%+{%1 0xffffffffffff >= %0 0 != &&}~%2 str 0 %0
%.{%1 0xffffffffffff >=}
 
%!{0%2 0 != %0 0 = &&}"%@ model ldri %0 %1 %2: depende inoria"
 
%+{%1 0xffff <= &&}~ldm [sIP+] 2
%+{%1 0xffff <= &&}.d2 %1
%+{%1 0xffff <= && %0 0 != &&}~%2 str 0 %0
%.{%1 0xffff <= &&}
 
%+{%1 0xffffffff <=}~ldm [sIP+] 4
%+{%1 0xffffffff <=}.d4 %1
%+{%1 0xffffffff <= %0 0 != &&}~%2 str 0 %0
%.{%1 0xffffffff <=}
 
~ldm [sIP+]
.ds %1
%+{%0 0 !=}~%2 str 0 %0
}
 
.model ldri_i {
%!{%c 2 <} "model ldri_i : parametre < 2"
%+{%1 0 = %0 0 = %0 3 > || &&}~%2 eor 0 0
%+{%1 0 = %0 1 = &&}~%2 eor 1 1
%+{%1 0 = %0 2 = &&}~%2 eor 2 2
%+{%1 0 = %0 3 = &&}~%2 eor 3 3
%+{%1 0 = %0 3 > &&}~%2 str 0 %0
%.{%1 0 =}
 
%+{%1 0xff <=}~%2 eor 0 0
%+{%1 0xff <=}~%2 ldi %1
%+{%1 0xff <= %0 0 != &&}~%2 str 0 %0
%.{%1 0xff <=}
 
%+{%1 0xffffffffffffff >=}~%2 eor 0 0
%+{%1 0xffffffffffffff >=}~%2 sut 0 s_1
%+{%1 0xffffffffffffff >= %1 -1 != &&}~%2 ldi %1
%+{%1 0xffffffffffffff >= %0 0 != &&}~%2 str 0 %0
%.{%1 0xffffffffffffff >=}
 
%+{%1 0xffffffffffff >=}~%2 eor 0 0
%+{%1 0xffffffffffff >=}~%2 sut 0 s_1
%+{%1 0xffffffffffff >=}~%2 ldis %1
%+{%1 0xffffffffffff >= %1 -1 != &&}~%2 ldi %1
%+{%1 0xffffffffffff >= %0 0 != &&}~%2 str 0 %0
%.{%1 0xffffffffffff >=}
 
%+{%1 0xffff000000000000 & 0 =}~%2 eor 0 0
%+{%1 0xffff000000000000 & 0 !=}~%2 ldis {%1 0x38 >>}
%+{%1 0xffff000000000000 & 0 !=}~%2 ldis {%1 0x30 >>}
%+{%1 0xffffff0000000000 & 0 !=}~%2 ldis {%1 0x28 >>}
%+{%1 0xffffffff00000000 & 0 !=}~%2 ldis {%1 0x20 >>}
%+{%1 0xffffffffff000000 & 0 !=}~%2 ldis {%1 0x18 >>}
%+{%1 0xffffffffffff0000 & 0 !=}~%2 ldis {%1 0x10 >>}
%+{%1 0xffffffffffffff00 & 0 !=}~%2 ldis {%1 0x08 >>}
%+{%1 0x00000000000000ff & 0 !=}~%2 ldi %1
%+{%0 0 !=}~%2 str 0 %0
}
 
.model plu_1 {
%!{%c 1 <} "model plu_1 : parametre < 1"
%+{%0 3 <=}~%1 plu %0 s_1
%+{%0 3 >}~%1 cam 0 %0
%+{%0 3 >}~%1 plu 0 s_1
%+{%0 3 >}~%1 cam 0 %0
}
 
.model ldr_r {
%!{%c 2 <} "model ldr_r : parametre < 2"
%+{%0 3 >}~%2 cam 0 %0
%+{%0 3 >}~%2 ldr 0 %1
%+{%0 3 >}~%2 cam 0 %0
 
%+{%0 3 <=}~%2 ldr %0 %1
}
.model sut_1 {
%!{%c 1 <} "model sut_1 : parametre < 1"
%+{%0 3 <=}~%1 sut %0 s_1
%+{%0 3 >}~%1 cam 0 %0
%+{%0 3 >}~%1 sut 0 s_1
%+{%0 3 >}~%1 cam 0 %0
}
 
.model puia {
%+{%0 0 != %c 0 != &&}~%1 cam 0 %0
~%1 stm [-sPILA]
%+{%0 0 != %c 0 != &&}~%1 cam 0 %0
}
 
.model puia_ {
~%1 stm [-sPILA]
%+{%0 0 != %c 0 != &&}~%1 str 0 %0
}
 
.model tira {
%+{%0 0 != %c 0 != &&}~%1 cam 0 %0
~%1 ldm [sPILA+]
%+{%0 0 != %c 0 != &&}~%1 cam 0 %0
}
 
.model tira_ {
~%1 ldm [sPILA+]
%+{%0 0 != %c 0 != &&}~%1 str 0 %0
}
 
.model ldri_m {
%!{%c 2 <} "model ldri_m : parametre < 2"
~%2 ldm [sIP+]
.ds %1
%+{%0 0 !=}~%2 str 0 %0
}
 
.model ylri {
~%1 ylr sIP opera_ylr_nondireta_1
.ds %0
}
 
.model ldr_m {
%!{%c 2 <} "model ldr_m : parametre < 2"
~%2 ldm [sIP+]
.ds {%1 sinia_grandia opera_grandia 2 * %@ + + -}
~%2 plu 0 sIP
%+{%0 0 !=}~%2 str 0 %0
}
 
.model d1x {
%.{%0 0 =}
.defina model_d1x_reveni {%0 1 -}
.d1 0
%+{%0 0 >}d1x model_d1x_reveni
}
 
.model desloca_relativa {
%+{%c 1 =}.ds {%0 %@ -}
%+{%c 1 >}.ds {%0 %@ - %1 sinia_grandia * +}
}
 
.model yl {
%+{%0 %@ - .+ 0x7f <=}yli %0
%+{%0 %@ - .+ 0x7f >}ylr [sIP]
%+{%0 %@ - .+ 0x7f >}desloca_relativa %0
}
 
.model ylm {
ylr [sIP]
desloca_relativa %0
}
 
.model alinia_o {
%+{%@ 1 &}.d1 0
}
 
.model alinia_s {
.defina model_alinia_s_repete {sinia_grandia %@ 0x07 & -}
d1x model_alinia_s_repete
}
 
.model alinia_n {
.defina model_alinia_s_repete {%0 %@ %0 1 - & -}
d1x model_alinia_s_repete
}
 
.model nop {
.do 0x2000 ;ajusta 0x10 0x10
}
 
.model stm_ii {
ldri 1 %0 %2 ;desloca absoluta
ldri 0 %1 %2
~%2 stm [1]
}
 
.model eticeta_opera {
alinia_o
:%0
}
 
.model eticeta_datos {
alinia_s
:%0
}
 
.model dep_eor {~%2 dep %0 %1 opera_dep_eor}
.model dep_and {~%2 dep %0 %1 opera_dep_and}
.model dep_or {~%2 dep %0 %1 opera_dep_or}
.model dep_cam {~%2 dep %0 %1 opera_dep_cam}
.model dep_vac {~%1 dep %0 %0 opera_dep_eor}
.model dep_set {~%1 dep %0 7 opera_dep_or}
.model dep_inv {~%1 dep %0 7 opera_dep_eor}
 
.model bit_masima {~%1 bit %0 opera_bit_masima}
.model bit_minima {~%1 bit %0 opera_bit_minima}
.model bit_contador1 {~%1 bit %0 opera_bit_set}
.model bit_contador0 {~%1 bit %0 opera_bit_vacua}
 
.model bpasi {~%0 rev opera_rev_bp}
.model entra {~%0 rev opera_rev_entra}
.model departi {~%0 rev opera_rev_departi}
.model depende_influe {~%0 rev opera_rev_depende_influe}
.model depende_inoria {~%0 rev opera_rev_depende_inoria}
.model eseta {~%0 rev opera_rev_eseta}
.model sicle_usor {~%0 rev opera_rev_sicle_usor_intercambia}
 
.model ajusta_reinisia {
rev opera_rev_ajusta_reinisia
.implicada
}
 
.model state_reteni {
%!{%c 1 <} "model state_reteni : parametre < 1"
ldri 0 %0 %1
~%1 rev opera_rev_state_reteni_usor
}
 
.model state_restora {
%!{%c 1 <} "model state_restora : parametre < 1"
ldri 0 %0 %1
~%1 rev opera_rev_state_restora_usor
}
 
.model init_sinia_s_ {
ldri s_0 0
ldri s_1 1
eor 0 0
sut 0 s_1
str 0 s_n
}
/arci/1664/inclui/0.base.sinia.1664
0,0 → 1,83
.defina sinia_bitio 64
.defina opera_bitio 16
.defina sinia_grandia {sinia_bitio 3 >>}
.defina opera_grandia {opera_bitio 3 >>}
 
{%+{sinia_grandia sinia_bitio_sh_ >> 1 >} .defina sinia_bitio_sh_ 1 ;16
%+{sinia_grandia sinia_bitio_sh_ >> 1 >} .defina sinia_bitio_sh_ 2 ;32
%+{sinia_grandia sinia_bitio_sh_ >> 1 >} .defina sinia_bitio_sh_ 3 ;64
}
 
.defina sREVENI 63
.defina sREVENI_ESETA 62
.defina sDESLOCA 59
.defina sMINIMA 60
.defina sMASIMA 61
 
.defina sMODEL_T0 55
 
.defina s_0 {sMODEL_T0 1 +}
.defina s_1 {s_0 1 +}
.defina s_n {s_1 1 +}
 
.defina sD0 4
.defina sD1 5
 
.defina sPILA 6
.defina sIP 7
 
.defina sR0 8
.defina sR1 {sR0 1 +}
.defina sR2 {sR0 2 +}
.defina sR3 {sR0 3 +}
.defina sR4 {sR0 4 +}
.defina sR5 {sR0 5 +}
.defina sR6 {sR0 6 +}
.defina sR7 {sR0 7 +}
.defina sR8 {sR0 8 +}
.defina sR9 {sR0 9 +}
.defina sR10 {sR0 10 +}
.defina sR11 {sR0 11 +}
.defina sR12 {sR0 12 +}
.defina sR13 {sR0 13 +}
.defina sR14 {sR0 14 +}
.defina sR15 {sR0 15 +}
.defina sR16 {sR0 16 +}
.defina sR17 {sR0 17 +}
.defina sR18 {sR0 18 +}
.defina sR19 {sR0 19 +}
.defina sR20 {sR0 20 +}
.defina sR21 {sR0 21 +}
.defina sR22 {sR0 22 +}
.defina sR23 {sR0 23 +}
.defina sR24 {sR0 24 +}
.defina sR25 {sR0 25 +}
.defina sR26 {sR0 26 +}
.defina sR27 {sR0 27 +}
.defina sR28 {sR0 28 +}
.defina sR29 {sR0 29 +}
.defina sR30 {sR0 30 +}
.defina sR31 {sR0 31 +}
.defina sR_final sR31
 
.defina sT0 sR_final
.defina sT1 {sT0 1 +}
.defina sT2 {sT0 2 +}
.defina sT3 {sT0 3 +}
.defina sT4 {sT0 4 +}
.defina sT5 {sT0 5 +}
.defina sT6 {sT0 6 +}
.defina sT7 {sT0 7 +}
.defina sT8 {sT0 8 +}
.defina sT9 {sT0 9 +}
.defina sT10 {sT0 10 +}
.defina sT11 {sT0 11 +}
.defina sT12 {sT0 12 +}
.defina sT13 {sT0 13 +}
.defina sT14 {sT0 14 +}
.defina sT15 {sT0 15 +}
.defina sT_final sT15
 
{
%!{%1 %0 >=}"fix 0.base.sinia.1664 : cuantia sinia asinada suprapasa cuantia disponable "
}sMODEL_T0 sT_final
/arci/1664/inclui/0.base.opera.1664
0,0 → 1,89
.inclui 0.base.sinia.1664
 
;a ordina:
; +
;.opera ajusta no defina
 
.opera ldi 8e
.opera ldis 8e
.opera ldm m
.opera stm m
.opera ldr 2r6r
.opera str 2r6r
.opera cam 2r6r ;intercambia
 
.opera yli 8y
.opera ylr 8ylr
 
.opera ldb 2r6r
.opera stb 2r6r
.opera cmp 2r6r
.opera dep 3e3e2e
.opera bit 6r2r
 
.opera rev 8e
 
;0x10
; -
.opera and 2r6r
.opera or 2r6r
.opera eor 2r6r
.opera shl 2r6r
.opera shr 2r6r
.opera sar 2r6r
 
.opera plu 2r6r
.opera sut 2r6r
.opera sutr 2r6r
.opera mul 2r6r
.opera div 2r6r
 
;depende
.defina z 0
.defina n 1
.defina c 2
.defina o 3
 
.defina opera_dep_eor 0
.defina opera_dep_and 1
.defina opera_dep_or 2
.defina opera_dep_cam 3
 
.defina opera_bit_masima 0
.defina opera_bit_minima 1
.defina opera_bit_set 2
.defina opera_bit_vacua 3
 
.defina opera_rev_reveni 0
.defina opera_rev_eseta 1
.defina opera_rev_ajusta_protejeda 3
.defina opera_rev_ajusta_permete 4
.defina opera_rev_depende_influe 5
.defina opera_rev_depende_inoria 6
 
.defina state_usor_grandia {16 64 * 128 + 4 +}
.defina opera_rev_state_usor_reteni 7
.defina opera_rev_state_usor_restora 8
 
.defina opera_rev_entra 0x09
.defina opera_rev_departi 0x0a
.defina opera_rev_sicle_intercambia 0x10
.defina opera_rev_sicle_usor_intercambia 0x11
.defina opera_rev_sicle_usor_limite_intercambia 0x12
.defina opera_rev_bp 0xf0
.defina opera_rev_ajusta_reinisia 0xff
 
.defina opera_ylr_direta 0
.defina opera_ylr_nondireta 1
.defina opera_ylr_direta_indise 2
.defina opera_ylr_nondireta_indise 3
 
.defina umm_desloca_usor_mapa {-1 0xff -}
.defina umm_desloca_interompe_capasi {umm_desloca_usor_mapa 1 +}
.defina umm_desloca_interompe_masca {umm_desloca_usor_mapa 2 +}
.defina umm_desloca_interompe_ativa {umm_desloca_usor_mapa 3 +}
.defina umm_permete_leje 0
.defina umm_permete_scrive 1
.defina umm_permete_esecuta 2
 
.inclui 0.base.macro.1664
/arci/1664/fonte/pf2/0.ieee_754.1664
0,0 → 1,103
;===============================================================================
eticeta_opera f2__ieee_754_binary32 ;0
;===============================================================================
depende_inoria
dep_vac 3
str 0 1
ldb 1 31
dep_cam 0 3
stb 1 31
str 1 2
ldi 23
shr 2 0
ldri 0 0x7f
sut 2 0
eor 0 0
ldi 63
sutr 2 0
shl 2 2
dep_cam 0 3
stb 2 0
ldi 40
shl 1 0
dep_set 0
stb 1 63
ldr 0 2
reveni
 
;===============================================================================
eticeta_opera ieee_754_binary32__f2 ;0,1
;===============================================================================
depende_influe
and 1 1
z rev opera_rev_reveni
depende_inoria
str 0 2
ldb 2 0
sar 2 2
eor 0 0
ldi 63
sutr 2 0
ldri 0 0x7f
plu 2 0
stb 2 9
ldi 23
shl 2 0
shl 1 1
ldi 41
shr 1 0
ldr 0 1
or 0 2
reveni
 
;===============================================================================
eticeta_opera f2__ieee_754_binary64 ;0
;===============================================================================
depende_inoria
dep_vac 3
str 0 1
ldb 1 63
dep_cam 0 3
stb 1 63
str 1 2
ldi 52
shr 2 0
ldri 0 0x3ff
sut 2 0
eor 0 0
ldi 63
sutr 2 0
shl 2 2
dep_cam 0 3
stb 2 0
ldi 11
shl 1 0
dep_set 0
stb 1 63
ldr 0 2
reveni
 
;===============================================================================
eticeta_opera ieee_754_binary64__f2 ;0,1
;===============================================================================
depende_influe
and 1 1
z rev opera_rev_reveni
depende_inoria
str 0 2
ldb 2 0
sar 2 2
eor 0 0
ldi 63
sutr 2 0
ldri 0 0x3ff
plu 2 0
stb 2 12
ldi 52
shl 2 0
shl 1 1
ldi 12
shr 1 0
ldr 0 1
or 0 2
reveni
/arci/1664/fonte/pf2/0.f2.1664
0,0 → 1,174
;_______________________________________________________________________________
;-------------------------------------------------------------------------------
 
;===============================================================================
eticeta_opera f2__nN ;0
;===============================================================================
str 0 1
eor 0 0
cmp 0 1
z rev opera_rev_reveni
bit_masima 1
shl 1 0
shl 0 0
reveni
 
;===============================================================================
eticeta_opera nN__f2 ;0,1
;===============================================================================
depende_inoria
cam 0 1
ldb 1 0
dep_cam 0 6
sar 1 1
ldb 1 63
dep_set n
z dep_vac n
z sutr 1 s_0
z shl 0 1
n shr 0 1
6 sutr 0 s_0
reveni
 
;===============================================================================
eticeta_opera normali__f2 ;0,1
;===============================================================================
depende_inoria
ldb 0 0
sar 0 0
str 0 sT0
bit_masima 1
shl 1 0
plu 0 sT0
shl 0 0
stb 0 0
reveni
 
;===============================================================================
eticeta_opera sutr__f2 ;0,1 = (2,3 - 0,1)
;===============================================================================
cam 0 sREVENI
str 0 sT5
cam 0 sREVENI
str 2 sT6
str 3 sT7
cam 0 2
cam 1 3
yl sut__f2
ldr 2 sT6
ldr 3 sT7
cam 0 sT5
str 0 sREVENI
cam 0 sT5
reveni
 
;===============================================================================
eticeta_opera sut__f2 ;0,1 = (0,1 - 2,3)
;===============================================================================
cam 0 sREVENI
str 0 sT3
cam 0 sREVENI
 
str 2 sT4
ldb 2 0
dep_inv 0
stb 2 0
yl plu__f2
ldr 2 sT4
 
cam 0 sT3
str 0 sREVENI
cam 0 sT3
reveni
 
;===============================================================================
eticeta_opera plu__f2 ;0,1 = (0,1 + 2,3)
;===============================================================================
str 2 sT1
str 3 sT2
depende_influe
ldb 2 0
dep_cam 0 6
sar 2 2
ldb 0 0
dep_cam 0 5
sar 0 0
 
cmp 0 2
c cam 0 2
c cam 1 3
c dep 5 6 opera_dep_cam
 
str 0 sT0
sutr 0 2
shr 3 0
ldr 0 sT0
 
dep_vac c
dep_eor 6 5
6 sut 1 3
c dep 5 7 opera_dep_eor
c sutr 1 s_0
 
dep_vac c
6 dep 6 7 opera_dep_eor
6 plu 1 3
dep_cam c 4
4 shr 1 1
4 dep 0 7 opera_dep_or
4 stb 1 63
4 sut 0 s_1
 
str 0 sT0
bit_masima 1
z dep 5 5 opera_dep_eor
z eor 0 0
shl 1 0
plu 0 sT0
shl 0 0
dep_cam 0 5
stb 0 0
ldr 2 sT1
ldr 3 sT2
reveni
 
 
;===============================================================================
eticeta_opera mul__f2 ;0,1 2,3
;===============================================================================
depende_inoria
str 2 sT0
ldb 0 0
dep_cam 1 0
ldb 2 0
dep_eor 0 1
sar 0 0
sar 2 2
plu 0 2
str 0 sDESLOCA
mul 1 3
ldr 0 sDESLOCA
shl 0 0
stb 0 0
ldr 2 sT0
reveni
 
;===============================================================================
eticeta_opera div__f2 ;0,1 2,3
;===============================================================================
depende_inoria
str 2 sT0
ldb 0 0
dep_cam 1 0
ldb 2 0
dep_eor 0 1
sar 0 0
sar 2 2
sut 0 2
str 0 sDESLOCA
div 1 3
ldr 0 sDESLOCA
shl 0 0
stb 0 0
ldr 2 sT0
reveni
/arci/1664/fonte/pf2/1664.ieee_754
0,0 → 1,103
;===============================================================================
eticeta_opera f2__ieee_754_binary32 ;0
;===============================================================================
depende_inoria
dep_vac 3
str 0 1
ldb 1 31
dep_cam 0 3
stb 1 31
str 1 2
ldi 23
shr 2 0
ldri 0 0x7f
sut 2 0
eor 0 0
ldi 63
sutr 2 0
shl 2 2
dep_cam 0 3
stb 2 0
ldi 40
shl 1 0
dep_set 0
stb 1 63
ldr 0 2
reveni
 
;===============================================================================
eticeta_opera ieee_754_binary32__f2 ;0,1
;===============================================================================
depende_influe
and 1 1
z rev opera_rev_reveni
depende_inoria
str 0 2
ldb 2 0
sar 2 2
eor 0 0
ldi 63
sutr 2 0
ldri 0 0x7f
plu 2 0
stb 2 9
ldi 23
shl 2 0
shl 1 1
ldi 41
shr 1 0
ldr 0 1
or 0 2
reveni
 
;===============================================================================
eticeta_opera f2__ieee_754_binary64 ;0
;===============================================================================
depende_inoria
dep_vac 3
str 0 1
ldb 1 63
dep_cam 0 3
stb 1 63
str 1 2
ldi 52
shr 2 0
ldri 0 0x3ff
sut 2 0
eor 0 0
ldi 63
sutr 2 0
shl 2 2
dep_cam 0 3
stb 2 0
ldi 11
shl 1 0
dep_set 0
stb 1 63
ldr 0 2
reveni
 
;===============================================================================
eticeta_opera ieee_754_binary64__f2 ;0,1
;===============================================================================
depende_influe
and 1 1
z rev opera_rev_reveni
depende_inoria
str 0 2
ldb 2 0
sar 2 2
eor 0 0
ldi 63
sutr 2 0
ldri 0 0x3ff
plu 2 0
stb 2 12
ldi 52
shl 2 0
shl 1 1
ldi 12
shr 1 0
ldr 0 1
or 0 2
reveni
/arci/1664/fonte/pf2/1664.f2
0,0 → 1,174
;_______________________________________________________________________________
;-------------------------------------------------------------------------------
 
;===============================================================================
eticeta_opera f2__nN ;0
;===============================================================================
str 0 1
eor 0 0
cmp 0 1
z rev opera_rev_reveni
bit_masima 1
shl 1 0
shl 0 0
reveni
 
;===============================================================================
eticeta_opera nN__f2 ;0,1
;===============================================================================
depende_inoria
cam 0 1
ldb 1 0
dep_cam 0 6
sar 1 1
ldb 1 63
dep_set n
z dep_vac n
z sutr 1 s_0
z shl 0 1
n shr 0 1
6 sutr 0 s_0
reveni
 
;===============================================================================
eticeta_opera normali__f2 ;0,1
;===============================================================================
depende_inoria
ldb 0 0
sar 0 0
str 0 sT0
bit_masima 1
shl 1 0
plu 0 sT0
shl 0 0
stb 0 0
reveni
 
;===============================================================================
eticeta_opera sutr__f2 ;0,1 = (2,3 - 0,1)
;===============================================================================
cam 0 sREVENI
str 0 sT5
cam 0 sREVENI
str 2 sT6
str 3 sT7
cam 0 2
cam 1 3
yl sut__f2
ldr 2 sT6
ldr 3 sT7
cam 0 sT5
str 0 sREVENI
cam 0 sT5
reveni
 
;===============================================================================
eticeta_opera sut__f2 ;0,1 = (0,1 - 2,3)
;===============================================================================
cam 0 sREVENI
str 0 sT3
cam 0 sREVENI
 
str 2 sT4
ldb 2 0
dep_inv 0
stb 2 0
yl plu__f2
ldr 2 sT4
 
cam 0 sT3
str 0 sREVENI
cam 0 sT3
reveni
 
;===============================================================================
eticeta_opera plu__f2 ;0,1 = (0,1 + 2,3)
;===============================================================================
str 2 sT1
str 3 sT2
depende_influe
ldb 2 0
dep_cam 0 6
sar 2 2
ldb 0 0
dep_cam 0 5
sar 0 0
 
cmp 0 2
c cam 0 2
c cam 1 3
c dep 5 6 opera_dep_cam
 
str 0 sT0
sutr 0 2
shr 3 0
ldr 0 sT0
 
dep_vac c
dep_eor 6 5
6 sut 1 3
c dep 5 7 opera_dep_eor
c sutr 1 s_0
 
dep_vac c
6 dep 6 7 opera_dep_eor
6 plu 1 3
dep_cam c 4
4 shr 1 1
4 dep 0 7 opera_dep_or
4 stb 1 63
4 sut 0 s_1
 
str 0 sT0
bit_masima 1
z dep 5 5 opera_dep_eor
z eor 0 0
shl 1 0
plu 0 sT0
shl 0 0
dep_cam 0 5
stb 0 0
ldr 2 sT1
ldr 3 sT2
reveni
 
 
;===============================================================================
eticeta_opera mul__f2 ;0,1 2,3
;===============================================================================
depende_inoria
str 2 sT0
ldb 0 0
dep_cam 1 0
ldb 2 0
dep_eor 0 1
sar 0 0
sar 2 2
plu 0 2
str 0 sDESLOCA
mul 1 3
ldr 0 sDESLOCA
shl 0 0
stb 0 0
ldr 2 sT0
reveni
 
;===============================================================================
eticeta_opera div__f2 ;0,1 2,3
;===============================================================================
depende_inoria
str 2 sT0
ldb 0 0
dep_cam 1 0
ldb 2 0
dep_eor 0 1
sar 0 0
sar 2 2
sut 0 2
str 0 sDESLOCA
div 1 3
ldr 0 sDESLOCA
shl 0 0
stb 0 0
ldr 2 sT0
reveni
/arci/1664/fonte/lista/0.lista.1664
0,0 → 1,178
;===============================================================================
;-------------------------------------------------------------------------------
.defina lista.datos 0
.defina lista.capasia {lista.datos sinia_grandia 1 * +}
.defina lista.contador {lista.datos sinia_grandia 2 * +}
.defina lista.crese {lista.datos sinia_grandia 3 * +}
 
.defina lista.grandia {sinia_grandia 4 *}
 
.defina lista.crese_minima {sinia_grandia 1 *}
.defina lista.capasia_minima {sinia_grandia 2 *}
 
;-------------------------------------------------------------------------------
eticeta_opera lista_memoria_copia ;destina, fonte, cuantia
;-------------------------------------------------------------------------------
depende_influe
str 0 3
puia sREVENI
ldri 0 {sinia_grandia 1 -}
str 0 sT0
and 0 2
sut 2 0
str 2 sT1
str 0 2
cmp 2 s_0
z yli lista_memoria_copia@sicle_bait_fini
 
@sicle_bait
ldm [1+] 1
stm [3+] 1
sut 2 s_1
n yli lista_memoria_copia@sicle_bait
 
@sicle_bait_fini
ldr 2 sT1
cmp 2 s_0
z yli lista_memoria_copia@fini
ldri 0 sinia_bitio_sh_
shr 2 0
 
@sicle_sinia
ldm [1+]
stm [3+]
sut 2 s_1
n yli lista_memoria_copia@sicle_sinia
 
@fini
tira 1
str 1 sIP
 
;===============================================================================
eticeta_opera lista_crese ;lista, cuantia
;===============================================================================
puia sREVENI
puia sR0
puia sR1
str 1 sT2
str 0 sR1
str 0 3
ldm [3+]
str 0 sT4
puia
str 3 sD0
ldm [3+]
str 0 sT0
ldm [3+]
sutr 0 sT0
cmp 0 1
c yli lista_crese@fini
sutr 0 sT0
plu 0 1
str 0 2
ldm [3]
plu 0 2
stm [sD0]
str 0 1
eseta_memoria_nova
ldr 2 sR1
stm [2]
ldr 1 sT4
ldr 2 sT2
yl lista_memoria_copia
tira_ 1
eseta_memoria_libri
 
@fini
tira_ sR1
tira sR0
tira 1
str 1 sIP
 
;===============================================================================
eticeta_opera lista_ajunta__1 ;lista, n1
;===============================================================================
puia sREVENI
puia 1
str 0 sT1
ldr 1 s_1
yl lista_crese
str 0 3
ldm [3+]
str 0 sT0
ldm [+3]
str 0 1
plu 0 sT0
str 0 2
tira
stm [2] 1
plu 1 s_1
ldr 0 1
stm [3]
 
ldr 0 sT1
tira 1
str 1 sIP
 
;===============================================================================
eticeta_opera lista_ajunta__sinia ;lista, sinia
;===============================================================================
puia sREVENI
puia 1
str 0 sT1
ldri 1 sinia_grandia
ldr 0 sT1
yl lista_crese
str 0 3
ldm [3+]
str 0 sT0
ldm [+3]
str 0 1
plu 0 sT0
str 0 2
tira
stm [2]
ldri 0 sinia_grandia
plu 0 1
ldr 0 1
stm [3]
 
ldr 0 sT1
tira 1
str 1 sIP
 
;===============================================================================
eticeta_opera lista_nova
;===============================================================================
puia sREVENI
puia sR0
eseta_memoria_nova lista.grandia
str 0 sR0
eseta_memoria_nova lista.capasia_minima
ldr 3 sR0
stm [3+]
ldri 0 lista.capasia_minima
stm [3+]
eor 0 0
stm [3+]
ldri 0 lista.crese_minima
stm [3]
 
tira sR0
tira 1
str 1 sIP
 
;===============================================================================
eticeta_opera lista_libri ;lista
;===============================================================================
puia sREVENI
puia sR0
str 0 sR0
ldm [0]
str 0 1
eseta_memoria_libri
ldr 1 sR0
eseta_memoria_libri
tira sR0
tira 1
str 1 sIP
/arci/1664/dev/0.imita.0.1664
0,0 → 1,528
;...............................................................................
.inclui 0.base.opera.1664
.inclui 0.imita.inclui.1664
.inclui 0.SO.inclui.1664
 
.defina SO_pila_desloca {imaje_fini 0x2000 + 0xfff000 &}
.defina SO_pila_grandia {1 1024 1 - sinia_grandia * *}
 
.defina usor_pila_desloca 0
.defina usor_pila_grandia {128 1024 *}
 
.defina usor_esecuta_desloca {1 1024 1024 1024 * * *}
.defina usor_esecuta_grandia {8 1024 *}
 
.defina usor_datos_desloca {2 1024 1024 1024 * * *}
 
.model x {
puia 0
puia_ 1
puia_ 2
ldri 2 %0
ldri 1 0x1d2
ldm [1] 2
bpasi
tira 2
tira 1
tira 0
}
;===============================================================================
:reinisia
;===============================================================================
ylr [sIP + 0]
desloca_relativa eseta_reinisia
desloca_relativa eseta_opera_nonlegal 1
desloca_relativa eseta_usor 2
desloca_relativa 0 3 ;reservada
desloca_relativa eseta_sicle_usor_limite 4
desloca_relativa eseta_div_zero 5
desloca_relativa eseta_bp_usor 6
desloca_relativa eseta_bp_vantaje 7
desloca_relativa 0 8 ;reservada
desloca_relativa eseta_umm_asede 9
desloca_relativa eseta_umm_interompe 10
 
;-------------------------------------------------------------------------------
eticeta_opera SO_usor_nova ;usor_esecuta_desloca_real, usor_esecuta_grandia
;(0) mapa
;-------------------------------------------------------------------------------
.defina mapa_grandia {sinia_grandia 3 * 2 * 1 +}
.defina sR_MAPA sR1
.defina sR_USOR_ESECUTA_DESLOCA_REAL sR2
.defina sR_STATE sR3
 
puia sREVENI
entra
 
str 0 sR0
str 1 sR4
ldr 0 1
yl memoria_asinia_nova
str 0 sR_USOR_ESECUTA_DESLOCA_REAL
ldr 1 sR0
ldr 2 sR4
yl memoria_copia
 
ldri 0 state_usor_grandia
yl memoria_asinia_nova
str 0 sR_STATE
rev opera_rev_state_usor_reteni
 
ldri 0 mapa_grandia
yl memoria_asinia_nova
str 0 sR_MAPA
 
ldri 1 {sPILA sinia_grandia *}
plu 1 sR_STATE
ldri 0 usor_pila_grandia
stm [1]
yl memoria_asinia_nova
str 0 sT0
 
ldr 3 sR_MAPA
ldri 0 {usor_pila_grandia 1 umm_permete_leje << | 1 umm_permete_scrive << |}
stm [3+]
ldri 0 usor_pila_desloca
stm [3+]
ldr 0 sT0
stm [3+]
 
ldri 2 {sinia_grandia 1 -}
ldri sT1 {1 umm_permete_leje << | 1 umm_permete_esecuta << |}
ldr 0 sR4
plu 0 2
eor 2 s_n
and 0 2
or 0 sT1
stm [3+]
ldri 0 usor_esecuta_desloca
stm [3+]
ldr 0 sR_USOR_ESECUTA_DESLOCA_REAL
stm [3+]
 
;mapa fini
eor 0 0
stm [3]
 
;sinia_inisia_s_
ldri 3 {s_1 sinia_grandia *}
plu 3 sR_STATE
ldr 0 s_1
stm [3]
ldri 3 {s_n sinia_grandia *}
plu 3 sR_STATE
ldr 0 s_n
stm [3]
 
ldr 0 sR_STATE
rev opera_rev_state_usor_restora
eor 0 0
sicle_usor
eor 0 0
rev opera_rev_sicle_usor_limite_intercambia
ldr 0 sR_STATE
yl memoria_asinia_libri
 
ldr 0 sR_MAPA
departi
tira 1
str 1 sIP
 
;===============================================================================
eticeta_opera eseta_reinisia
;===============================================================================
init_sinia_s_
ldri sPILA SO_pila_desloca
yl memoria_asinia_inisia
 
stm_ii umm_desloca_interompe_ativa 0
stm_ii umm_desloca_interompe_masca -1
stm_ii umm_desloca_interompe_capasi 0
 
ldri_m 1 {usor_0_fini usor_0 -}
ldri_m 0 usor_0
yl SO_usor_nova
 
str 0 sT0
ldri 1 umm_desloca_usor_mapa
ldr 0 sT0
stm [1]
 
ldri sREVENI_ESETA usor_esecuta_desloca
rev opera_rev_eseta
 
;===============================================================================
eticeta_opera eseta_opera_nonlegal
;===============================================================================
rev opera_rev_eseta
 
;===============================================================================
eticeta_opera eseta_usor ;opera, parametre... ; (0) resulta, (sT0) eror
;===============================================================================
puia sREVENI_ESETA
depende_inoria
str 0 sR0
ldri sT0 SO_eseta_cuantia ;eseta_usor opera masima
ldri sR1 state_usor_grandia
ldr 0 sPILA
sut 0 sR1
str 0 sPILA
rev opera_rev_state_usor_reteni
 
str 0 3
ldm [3+]
cmp 0 sT0
c yli eseta_usor_fini
str 0 1
ldri 0 sinia_bitio_sh_
shl 1 0
ylr [sIP + 1]
desloca_relativa eseta_usor_imita_exit
desloca_relativa eseta_usor_memoria_nova 1
desloca_relativa eseta_usor_memoria_libri 2
desloca_relativa eseta_usor_imita_argc 3
desloca_relativa eseta_usor_imita_argv 4
desloca_relativa eseta_usor_imita_open 5
desloca_relativa eseta_usor_imita_close 6
desloca_relativa eseta_usor_imita_read 7
desloca_relativa eseta_usor_imita_write 8
desloca_relativa eseta_usor_imita_lseek 9
desloca_relativa eseta_usor_imita_ftruncate 10
desloca_relativa eseta_usor_imita_time 11
desloca_relativa eseta_usor_imita_nanosleep 12
 
;-------------------------------------------------------------------------------
:eseta_usor_fini
;-------------------------------------------------------------------------------
ldr 0 sPILA
rev opera_rev_state_usor_restora
plu 0 sR1
str 0 sPILA
tira sREVENI_ESETA
rev opera_rev_eseta
 
;-------------------------------------------------------------------------------
:eseta_usor_memoria_nova
;-------------------------------------------------------------------------------
ldri sR4 1 ;eror: memoria nondisponable (eror alternativa)
ldm [3]
str 0 sR2
yl memoria_asinia_nova
cmp 0 s_0
z yli eseta_usor_memoria_nova@fini ;eror: memoria nondisponable
 
@susede
str 0 1
ldri 3 umm_desloca_usor_mapa
str 3 sR3
ldr 2 sR2
ldm [3]
yl memoria_asinia_mapa_sesion_ajunta
str 1 sT0
ldr 3 sR3
stm [3]
ldri sR4 0 ;eror: disponable
ldr 0 sT0
 
@fini
stm [sPILA]
ldri 1 {sinia_grandia sT0 *} ;(eror alternativa)
plu 1 sPILA
ldr 0 sR4
stm [1]
yl eseta_usor_fini
 
;-------------------------------------------------------------------------------
:eseta_usor_memoria_libri
;-------------------------------------------------------------------------------
ldm [3]
cmp 0 s_0
z yli eseta_usor_memoria_libri@fini
yl memoria_asinia_mapa_sesion_libri
str 0 sT0
ldri 1 {sinia_grandia sT0 *}
plu 1 sPILA
ldr 0 sT0
stm [1]
 
@fini
yl eseta_usor_fini
 
;-------------------------------------------------------------------------------
:eseta_usor_imita_argc
;-------------------------------------------------------------------------------
imita opera_imita_argc
stm [sPILA]
yl eseta_usor_fini
 
;-------------------------------------------------------------------------------
:eseta_usor_imita_argv
;-------------------------------------------------------------------------------
ldm [3+]
str 0 1
ldm [3+]
str 0 sR2
ldri 2 128 ;
ldri 0 umm_desloca_usor_mapa
ldm [0]
yl memoria_mapa_tradui
cmp 0 s_n
z yli eseta_usor_imita_argv@fini
ldr 1 sR2
imita opera_imita_argv
 
@fini
yl eseta_usor_fini
 
;-------------------------------------------------------------------------------
:eseta_usor_imita_open
;-------------------------------------------------------------------------------
ldm [3]
str 0 1
ldri 2 256 ;
ldri 0 umm_desloca_usor_mapa
ldm [0]
yl memoria_mapa_tradui
cmp 0 s_n
z yli eseta_usor_imita_open@fini
imita opera_imita_open
stm [sPILA]
 
@fini
yl eseta_usor_fini
 
;-------------------------------------------------------------------------------
:eseta_usor_imita_close
;-------------------------------------------------------------------------------
ldm [3]
imita opera_imita_close
yl eseta_usor_fini
 
;-------------------------------------------------------------------------------
:eseta_usor_imita_read
;-------------------------------------------------------------------------------
ldm [3+]
str 0 sR2
ldm [3+]
str 0 1
ldm [3]
str 0 sR3
str 0 2
ldri 0 umm_desloca_usor_mapa
ldm [0]
yl memoria_mapa_tradui
cmp 0 s_n
z yli eseta_usor_imita_read@fini
str 0 1
ldr 0 sR2
ldr 2 sR3
imita opera_imita_read
 
@fini
yl eseta_usor_fini
 
;-------------------------------------------------------------------------------
:eseta_usor_imita_write
;-------------------------------------------------------------------------------
ldm [3+]
str 0 sR2
ldm [3+]
str 0 1
ldm [3]
str 0 sR3
str 0 2
ldri 0 umm_desloca_usor_mapa
ldm [0]
yl memoria_mapa_tradui
cmp 0 s_n
z yli eseta_usor_imita_write@fini
str 0 1
ldr 0 sR2
ldr 2 sR3
imita opera_imita_write
 
@fini
yl eseta_usor_fini
 
;-------------------------------------------------------------------------------
:eseta_usor_imita_lseek
;-------------------------------------------------------------------------------
ldm [3+]
str 0 2
ldm [3+]
str 0 1
ldm [3]
cam 0 2
imita opera_imita_lseek
stm [sPILA]
yl eseta_usor_fini
 
;-------------------------------------------------------------------------------
:eseta_usor_imita_ftruncate
;-------------------------------------------------------------------------------
ldm [3+]
str 0 1
ldm [3]
cam 0 1
imita opera_imita_ftruncate
yl eseta_usor_fini
 
;-------------------------------------------------------------------------------
:eseta_usor_imita_time
;-------------------------------------------------------------------------------
imita opera_imita_time
stm [sPILA]
yl eseta_usor_fini
 
;-------------------------------------------------------------------------------
:eseta_usor_imita_nanosleep
;-------------------------------------------------------------------------------
ldm [3]
imita opera_imita_nanosleep
stm [sPILA]
yl eseta_usor_fini
 
;-------------------------------------------------------------------------------
:eseta_usor_imita_exit
;-------------------------------------------------------------------------------
ldm [3]
imita opera_imita_exit
;___
 
;===============================================================================
eticeta_opera eseta_sicle_usor_limite
;===============================================================================
ldri 0 1000
rev opera_rev_sicle_usor_limite_intercambia
rev opera_rev_eseta
 
;===============================================================================
eticeta_opera eseta_div_zero
;===============================================================================
;===============================================================================
eticeta_opera eseta_bp_usor
;===============================================================================
rev opera_rev_eseta
 
;===============================================================================
eticeta_opera eseta_bp_vantaje
;===============================================================================
ldr 0 sREVENI_ESETA
str 0 sIP
 
;===============================================================================
eticeta_opera eseta_umm_asede
;===============================================================================
;===============================================================================
eticeta_opera eseta_umm_interompe
;===============================================================================
;===============================================================================
eticeta_opera eseta_maneja
;===============================================================================
rev opera_rev_eseta
 
;sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
.inclui 0.SO.memoria.1664
;sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
 
;uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
eticeta_opera usor_0
;uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
yl usor_inisia
 
;-------------------------------------------------------------------------------
eticeta_opera ccadena_grandia ;(0) ccadena
;-------------------------------------------------------------------------------
ldr 1 0
ldr 2 sREVENI
eor 3 3
eor 0 0
 
depende_inoria
@sicle_plu
ldm [1+] 1
cmp 0 s_0
n plu 3 s_1
n yli ccadena_grandia@sicle_plu
 
ldr 0 3
str 2 sIP
 
;-------------------------------------------------------------------------------
eticeta_opera stdout__ccadena ;(0) ccadena
;-------------------------------------------------------------------------------
puia sREVENI
puia
yli ccadena_grandia
str 0 3
tira 2
eseta_SO_write 1
tira
str 0 sIP
 
;-------------------------------------------------------------------------------
.model stdout__dato_ {
ldi %0
yl stdout__dato
}
eticeta_opera stdout__dato ;(0) dato
;-------------------------------------------------------------------------------
puia sREVENI
puia
ldri 3 1
ldr 2 sPILA
eseta_SO_write 1
tira_
tira
str 0 sIP
 
;-------------------------------------------------------------------------------
eticeta_opera usor_inisia
:usor
;-------------------------------------------------------------------------------
ldri 1 1024
ldri 0 SO_memoria_nova
rev opera_rev_eseta
str 0 sR0
 
ldri sT2 0x2b
eseta_SO_argc
str 0 sT1
eor 2 2
 
@sicle
ldr 1 sR0
eseta_SO_argv
ldr 3 sR0
ldm [3+] 1
cmp 0 sT2
z ldr 0 sR0
z plu 0 s_1
z str 0 sR0
z yli usor@stdout
plu 2 s_1
cmp 2 sT1
n yli usor@sicle
yli usor@fini
 
@stdout
ldr 0 sR0
yl stdout__ccadena
stdout__dato_ 0x0a
 
@fini
eor 0 0
eseta_SO_exit
 
{%.{sinia_bitio 64 <}
;.inclui /fonte/pf2/0.ieee_754.1664
;.inclui /fonte/pf2/0.f2.1664
}
 
;*******************************************************************************
:usor_0_fini
;*******************************************************************************
 
;*******************************************************************************
:imaje_fini
;*******************************************************************************
/arci/x86/macro/macro.inc
0,0 → 1,68
%ifndef globalmacroincluded
%define globalmacroincluded
 
%macro hst 1
db 0x3e
%1
%endmacro
 
%macro hwnt 1
db 0x2e
%1
%endmacro
 
%macro code_local 1
section .text
%1
%endmacro
 
%macro datos_local 1
section .data
%1
%endmacro
 
%macro reserva_local 1
section .bss
%1
%endmacro
 
%macro codigi_local 1
section .text
%1
%endmacro
 
%macro codigi_global 1
section .text
%1
global %1
%endmacro
 
%macro code_global 1
section .text
%1
global %1
%endmacro
 
%macro code_global_ 1 ;skip text section declaration (just in case)
;section .text
%1
global %1
%endmacro
 
%macro bphere 0
%ifdef bpenable
db 0xcc
%endif
%endmacro
 
%macro shortmov 2
push %2
pop %1
%endmacro
 
%macro zeroextend8 1
db %1
align 0x08 db 0
%endmacro
 
%endif ;macro include end
/arci/x86/inclui/tipodef.h
0,0 → 1,23
#ifndef tipo_definida
#define tipo_definida
typedef float flm; //minima
typedef float fl1; //solo
typedef double fl2; //dupli
typedef double fl4; //cuatruple
typedef float flN; //natural
typedef long double flM; //masima
 
typedef signed char s1;
typedef unsigned char n1;
typedef signed short s2;
typedef unsigned short n2;
typedef signed int s4;
typedef unsigned int n4;
typedef signed long long s8;
typedef unsigned long long n8;
typedef signed int sN; /* Natural */
typedef unsigned int nN;
typedef signed long long sM; /* Masima */
typedef unsigned long long nM;
typedef void * P; /* Capasia de puntador */
#endif
/arci/x86/fonte/memoria/memoria_copia.asm
0,0 → 1,121
%include "../../macro/macro.inc"
 
bits 32
;==============================================================================
codigi_global memoria_copia
;==============================================================================
push edi
push esi
mov edi,[esp+0x0c]
mov esi,[esp+0x10]
mov edx,[esp+0x14]
 
.itera
cmp edx,0x20
jae .prefasa
mov ecx,edx
rep movsb
pop esi
pop edi
ret
 
.prefasa
mov eax,esi
mov ecx,0x10
and eax,0x0f
jz .fonte_aliniada
sub ecx,eax
sub edx,ecx
rep movsb
 
.fonte_aliniada
cmp edx,0x80
hwnt jae .copia_0x80_prefasa
 
.copia_0x10_prefasa
mov ecx,edx
and ecx,0x0f
sub edx,ecx
mov eax,edi
and eax,0x0f
jz .copia_0x10_aliniada
 
.copia_0x10
movaps xmm0,[esi]
movups [edi],xmm0
add esi,0x10
add edi,0x10
sub edx,0x10
hst jnz .copia_0x10
rep movsb
pop esi
pop edi
ret
 
.copia_0x10_aliniada
movaps xmm0,[esi]
movaps [edi],xmm0
add esi,0x10
add edi,0x10
sub edx,0x10
hst jnz .copia_0x10_aliniada
rep movsb
pop esi
pop edi
ret
 
.copia_0x80_prefasa
mov ecx,edx
and ecx,0x7f
mov eax,edi
sub edx,ecx
and eax,0x0f
jz .copia_0x80_aliniada
 
.copia_0x80
movaps xmm0,[esi+0x00]
movaps xmm1,[esi+0x10]
movaps xmm2,[esi+0x20]
movaps xmm3,[esi+0x30]
movaps xmm4,[esi+0x40]
movaps xmm5,[esi+0x50]
movaps xmm6,[esi+0x60]
movaps xmm7,[esi+0x70]
movups [edi+0x00],xmm0
movups [edi+0x10],xmm1
movups [edi+0x20],xmm2
movups [edi+0x30],xmm3
movups [edi+0x40],xmm4
movups [edi+0x50],xmm5
movups [edi+0x60],xmm6
movups [edi+0x70],xmm7
add esi,0x80
add edi,0x80
sub edx,0x80
hst jnz .copia_0x80
mov edx,ecx
jmp .itera
 
.copia_0x80_aliniada
movaps xmm0,[esi+0x00]
movaps xmm1,[esi+0x10]
movaps xmm2,[esi+0x20]
movaps xmm3,[esi+0x30]
movaps xmm4,[esi+0x40]
movaps xmm5,[esi+0x50]
movaps xmm6,[esi+0x60]
movaps xmm7,[esi+0x70]
movaps [edi+0x00],xmm0
movaps [edi+0x10],xmm1
movaps [edi+0x20],xmm2
movaps [edi+0x30],xmm3
movaps [edi+0x40],xmm4
movaps [edi+0x50],xmm5
movaps [edi+0x60],xmm6
movaps [edi+0x70],xmm7
add esi,0x80
add edi,0x80
sub edx,0x80
hst jnz .copia_0x80_aliniada
mov edx,ecx
jmp .itera
/arci/x86/fonte/memoria/Makefile
0,0 → 1,56
arci = x86
intende_nom = memoria
intende_fix = lib$(intende_nom).a
 
radi = ../../..
 
fonte = $(radi)
fonte_linux = $(radi)/linux
compilador_inclui = -I$(radi)/arci/$(arci)/inclui
 
instala_curso = /usr/local/lib
 
compilador = $(crus)gcc
 
compilador_sinia = -O2 -c $(compilador_inclui)
 
arcivador = $(crus)ar
arcivador_sinia = crus
 
asembledor_s = $(crus)as
 
asembledor_asm = yasm
asembledor_asm_sinia = -f elf32
 
ojetos_otra =
ojetos = $(ojetos_otra)\
memoria_copia.o
%.o : %.c
@echo $(compilador) $^
@$(compilador) $(compilador_sinia) -o $@ $<
 
%.o : %.s
@echo $(asembledor_s) $^
@$(asembledor) $(asembledor_s_sinia) -o $@ $<
 
%.o : %.asm
@echo $(asembledor_asm) $^
@$(asembledor_asm) $(asembledor_asm_sinia) -o $@ $<
 
$(intende_fix) : $(ojetos)
@echo $(arcivador) $@
@$(arcivador) $(arcivador_sinia) $@ $^
instala: $(intende_fix)
@echo instala $(intende_fix)
@cp $(intende_fix) $(instala_curso)
 
sutrae:
@echo sutrae $(intende_fix)
@-rm $(instala_curso)/$(intende_fix)
 
limpa:
# @-rm $(intende_fix) $(ojetos)
@-rm $(ojetos) $(intende_fix)
 
/arci/amd64/macro/macro.inc
0,0 → 1,151
%ifndef globalmacroincluded
%define globalmacroincluded
 
%macro hst 1
db 0x3e
%1
%endmacro
 
%macro hwnt 1
db 0x2e
%1
%endmacro
 
%macro call_return_redirect 2
lea rax,[rel %2]
push rax
jmp %1
%endmacro
 
%macro code_local 1
section .text
%1
%endmacro
 
%macro codigi_global 1
section .text
%1
global %1
%endmacro
 
%macro code_global 1
section .text
%1
global %1
%endmacro
 
%macro code_global_ 1 ;skip text section declaration (just in case)
;section .text
%1
global %1
%endmacro
 
%macro bphere 0
%ifdef bpenable
db 0xcc
%endif
%endmacro
 
%macro mcall 1+
%if %0>6
mov [rsp+0x28],%7
%endif
%if %0>5
mov [rsp+0x20],%6
%endif
%if %0>4
mov r9,%5
%endif
%if %0>3
mov r8%4
%endif
%if %0>2
mov rdx,%3
%endif
%if %0>1
mov rcx,%2
%endif
call %1
%endmacro
 
%macro shortmov 2
push %2
pop %1
%endmacro
 
%macro msyscall 1+
%if %0>6
mov r9,%7
%endif
%if %0>5
mov r8,%6
%endif
%if %0>4
mov r10,%5
%endif
%if %0>3
mov rdx,%4
%endif
%if %0>2
mov rsi,%3
%endif
%if %0>1
mov rdi,%2
%endif
;shortmov rax,%1
push %1
pop rax
 
syscall
%endmacro
 
%macro msyscallc 1+ ; C code
%if %0>6
mov r9,%7
%endif
%if %0>5
mov r8,%6
%endif
%if %0>4
mov rcx,%5
%endif
%if %0>3
mov rdx,%4
%endif
%if %0>2
mov rsi,%3
%endif
%if %0>1
mov rdi,%2
%endif
;shortmov rax,%1
push %1
pop rax
 
syscall
%endmacro
 
%macro zeroextend8 1
db %1
align 0x08 db 0
%endmacro
 
%macro definedcall 1
%ifndef using_%1
%define using_%1
%endif
call _%1
%endmacro
 
%macro using 1 ;requires 2x %endif
%ifdef using_%1
%ifndef used_%1
%define used_%1
%endmacro
 
%macro endusing 0 ;yasm bug
%endif
%endif
%endmacro
 
%endif ;macro include end
/arci/amd64/inclui/tipodef.h
0,0 → 1,23
#ifndef tipo_definida
#define tipo_definida
typedef float flm; //minima
typedef float fl1; //solo
typedef double fl2; //dupli
typedef double fl4; //cuatruple
typedef float flN; //natural
typedef long double flM; //masima
 
typedef signed char s1;
typedef unsigned char n1;
typedef signed short s2;
typedef unsigned short n2;
typedef signed int s4;
typedef unsigned int n4;
typedef signed long long s8;
typedef unsigned long long n8;
typedef signed long long sN; /* Natural */
typedef unsigned long long nN;
typedef signed long long sM; /* Masima */
typedef unsigned long long nM;
typedef void * P; /* Capasia de puntador */
#endif
/arci/amd64/fonte/memoria/memoria_copia.asm
0,0 → 1,148
;void memoria_copia(n1 *dst,n1 *fnt,nN cuantia)
;{
; nN conta;
; for(conta = 0;conta<cuantia;conta++)
; {
; dst[conta]=fnt[conta];
; }
;}
%include "../../macro/macro.inc"
 
bits 64
;==============================================================================
codigi_global memoria_copia
;==============================================================================
cmp rdx,0x20
jae .prefasa
mov ecx,edx
rep movsb
ret
 
.prefasa
mov eax,esi
mov ecx,0x10
and eax,0x0f
jz .fonte_aliniada
sub ecx,eax
sub rdx,rcx
rep movsb
 
.fonte_aliniada
cmp rdx,0x100
hwnt jae .copia_0x100_prefasa
 
.copia_0x10_prefasa
mov ecx,edx
and ecx,0x0f
sub rdx,rcx
mov eax,edi
and eax,0x0f
jz .copia_0x10_aliniada
 
.copia_0x10
movaps xmm0,[rsi]
movups [rdi],xmm0
add rsi,0x10
add rdi,0x10
sub rdx,0x10
hst jnz .copia_0x10
rep movsb
ret
 
.copia_0x10_aliniada
movaps xmm0,[rsi]
movaps [rdi],xmm0
add rsi,0x10
add rdi,0x10
sub rdx,0x10
hst jnz .copia_0x10_aliniada
rep movsb
ret
 
.copia_0x100_prefasa
mov ecx,edx
and ecx,0xff
mov eax,edi
sub rdx,rcx
and eax,0x0f
jz .copia_0x100_aliniada
 
.copia_0x100
movaps xmm0,[rsi+0x00]
movaps xmm1,[rsi+0x10]
movaps xmm2,[rsi+0x20]
movaps xmm3,[rsi+0x30]
movaps xmm4,[rsi+0x40]
movaps xmm5,[rsi+0x50]
movaps xmm6,[rsi+0x60]
movaps xmm7,[rsi+0x70]
movaps xmm8,[rsi+0x80]
movaps xmm9,[rsi+0x90]
movaps xmm10,[rsi+0xa0]
movaps xmm11,[rsi+0xb0]
movaps xmm12,[rsi+0xc0]
movaps xmm13,[rsi+0xd0]
movaps xmm14,[rsi+0xe0]
movaps xmm15,[rsi+0xf0]
movups [rdi+0x00],xmm0
movups [rdi+0x10],xmm1
movups [rdi+0x20],xmm2
movups [rdi+0x30],xmm3
movups [rdi+0x40],xmm4
movups [rdi+0x50],xmm5
movups [rdi+0x60],xmm6
movups [rdi+0x70],xmm7
movups [rdi+0x80],xmm8
movups [rdi+0x90],xmm9
movups [rdi+0xa0],xmm10
movups [rdi+0xb0],xmm11
movups [rdi+0xc0],xmm12
movups [rdi+0xd0],xmm13
movups [rdi+0xe0],xmm14
movups [rdi+0xf0],xmm15
add rsi,0x100
add rdi,0x100
sub rdx,0x100
hst jnz .copia_0x100
mov edx,ecx
jmp memoria_copia
 
.copia_0x100_aliniada
movaps xmm0,[rsi+0x00]
movaps xmm1,[rsi+0x10]
movaps xmm2,[rsi+0x20]
movaps xmm3,[rsi+0x30]
movaps xmm4,[rsi+0x40]
movaps xmm5,[rsi+0x50]
movaps xmm6,[rsi+0x60]
movaps xmm7,[rsi+0x70]
movaps xmm8,[rsi+0x80]
movaps xmm9,[rsi+0x90]
movaps xmm10,[rsi+0xa0]
movaps xmm11,[rsi+0xb0]
movaps xmm12,[rsi+0xc0]
movaps xmm13,[rsi+0xd0]
movaps xmm14,[rsi+0xe0]
movaps xmm15,[rsi+0xf0]
movaps [rdi+0x00],xmm0
movaps [rdi+0x10],xmm1
movaps [rdi+0x20],xmm2
movaps [rdi+0x30],xmm3
movaps [rdi+0x40],xmm4
movaps [rdi+0x50],xmm5
movaps [rdi+0x60],xmm6
movaps [rdi+0x70],xmm7
movaps [rdi+0x80],xmm8
movaps [rdi+0x90],xmm9
movaps [rdi+0xa0],xmm10
movaps [rdi+0xb0],xmm11
movaps [rdi+0xc0],xmm12
movaps [rdi+0xd0],xmm13
movaps [rdi+0xe0],xmm14
movaps [rdi+0xf0],xmm15
add rsi,0x100
add rdi,0x100
sub rdx,0x100
hst jnz .copia_0x100_aliniada
mov edx,ecx
jmp memoria_copia
/arci/amd64/fonte/memoria/Makefile
0,0 → 1,56
arci = amd64
intende_nom = memoria
intende_fix = lib$(intende_nom).a
 
radi = ../../..
 
fonte = $(radi)
fonte_linux = $(radi)/linux
compilador_inclui = -I$(radi)/arci/$(arci)/inclui
 
instala_curso = /usr/local/lib
 
compilador = $(crus)gcc
 
compilador_sinia = -O2 -c $(compilador_inclui)
 
arcivador = $(crus)ar
arcivador_sinia = crus
 
asembledor_s = $(crus)as
 
asembledor_asm = yasm
asembledor_asm_sinia = -f elf64
 
ojetos_otra =
ojetos = $(ojetos_otra)\
memoria_copia.o
%.o : %.c
@echo $(compilador) $^
@$(compilador) $(compilador_sinia) -o $@ $<
 
%.o : %.s
@echo $(asembledor_s) $^
@$(asembledor) $(asembledor_s_sinia) -o $@ $<
 
%.o : %.asm
@echo $(asembledor_asm) $^
@$(asembledor_asm) $(asembledor_asm_sinia) -o $@ $<
 
$(intende_fix) : $(ojetos)
@echo $(arcivador) $@
@$(arcivador) $(arcivador_sinia) $@ $^
instala: $(intende_fix)
@echo instala $(intende_fix)
@cp $(intende_fix) $(instala_curso)
 
sutrae:
@echo sutrae $(intende_fix)
@-rm $(instala_curso)/$(intende_fix)
 
limpa:
# @-rm $(intende_fix) $(ojetos)
@-rm $(ojetos) $(intende_fix)
 

powered by: WebSVN 2.1.0

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