Last active
March 3, 2020 11:43
-
-
Save Zardoz89/f92a06c8a5bd921b4b50f82478b8a690 to your computer and use it in GitHub Desktop.
Apuntes de como ascii.dll de Tizo pasa cadenas a DIV
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
int* empiezatexto = &mem[text_offset]; // Posición en memoria donde DIV guarda los textos generados por el interprete | |
int primertxt = (int)empiezatexto[0]; // primertxt obtiene el primer valor que hay la memoria de textos de DIV (un puntero?) | |
int* realpunteroascii; | |
int cantidaddetexto= X bytes | |
// A reservar memoria.... | |
int* nuevopunteroascii = (int*) div_malloc(cantidaddetexto + 8); //Reservamos X bytes + 8 bytes extra | |
int mitxt = (int)nuevopunteroascii[0]; // extrae el primer valor que hay en la memoria que acabamos de reservar | |
// Se manipula mitext | |
mitxt+=3; // ¿Intenta poner el 3ter bit mas bajo a 1 si alguno de los dos bits mas bajos está a 1? | |
mitxt&=-4; // & 0xFFFF FFFC -> pone a 0 los dos bits mas bajos | |
// Si entiendo bien esto, lo que hace es ir al siguiente dirección de memoria con alienación de 4 bytes si no está ya alineado | |
int* realpunteroascii = (int*) mitxt; // obtiene el puntero real donde escribir el texto y la marca | |
realpunteroascii[0] = MARCA_CADENA_TIZO_ASCII ; // Pone la marca 111333 | |
realpunteroascii++; // Saltamos la marca | |
mitxt=(int)realpunteroascii[0]; // Ponemos en mitxt el valor a continuación de la marca (es un puntero interno de div?) | |
int nuevoascii= (mitxt-primertxt) / 4; // Obtenemos la diferencia en INTs entre mitxt y primertxt (offset de donde escribir en la tabla mem?) | |
char* ptr2=(char*)mitxt; // ptr2 apunta a la dirección de memoria que hay en mytxt | |
// Aquí se escribe en ptr2 "cantidaddetexto" caracteres | |
... | |
// Forzado de null al final | |
ptr2[cantidaddetexto]=0; | |
retval(nuevoascii); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void ascii_dup(){ | |
int primertxt; | |
int nuevoascii; | |
int *empiezatexto; | |
int *realpunteroascii; | |
char *texto1; | |
int cantidaddetexto=getparm(); | |
int caracterelegido=getparm(); | |
// A reservar memoria.... | |
nuevopunteroascii=(int *)div_malloc(cantidaddetexto+8); | |
mitxt=(int)nuevopunteroascii[0]; | |
//y calculamos el offset del nuevo puntero | |
empiezatexto=&mem[text_offset]; | |
primertxt=(int)empiezatexto[0]; | |
mitxt+=3; | |
mitxt&=-4; | |
// puntero colocado.... | |
// Guarda valores internos.... | |
realpunteroascii=(int *) mitxt; | |
*realpunteroascii=MARCA_CADENA_TIZO_ASCII ; | |
realpunteroascii++; | |
mitxt=(int)realpunteroascii[0]; | |
nuevoascii=(mitxt-primertxt)/4; | |
char * ptr2; | |
ptr2=(char*)mitxt; | |
int contador; | |
for (contador=0;contador<cantidaddetexto;contador++){ | |
ptr2[contador]=(char)caracterelegido; | |
} | |
ptr2[cantidaddetexto]=0; | |
retval(nuevoascii); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment