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) |
|