elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


  Mostrar Mensajes
Páginas: 1 [2] 3 4 5 6 7 8 9 10
11  Programación / Programación General / Re: Proyecto de Motor de Juegos en: 16 Abril 2023, 04:53 am
Planeo tener 2 streams MJPEG de mi programación de juegos todo este año.
Si les dan clic, pueden ver lo que estoy haciendo en vivo.

Una de las primeras cosas que voy a hacer es transcribir a mano el juego de Mario de MS-DOS poco a poco, en Pascal y en C, para entenderlo y aprender trucos que no sé ahorita.

Por ejemplo, ¿alguien sabe cómo implementar el suelo y objetos para implementar saltar y las demás acciones como correr?

Pueden darme sugerencias de cómo estoy haciendo las cosas, o darme más referencias de estudio.
12  Programación / Programación General / Proyecto de Motor de Juegos (Recursos Básicos de URLs) en: 15 Abril 2023, 17:01 pm
Abrir la página principal donde están todos los recursos
desarrollados. Aquí los voy a ir explicando parte por parte para cada programa:
api/api.html



Bajar DJGPP 2 para compilar ZSNES, Mario (386/Pascal/DJGPP):
http://ia902607.us.archive.org/14/items/djgpp2_2023__6d1deec8eab21904057bbfb59accea72/djgpp2_2023__6d1deec8eab21904057bbfb59accea72.zip

Descomprimir en C:\ para que quede en C:\DJGPP

Cada proyecto **__cache.zip en la página de proycto de la API
tiene un archivo build**.bat, que compila todo limpiamente
sin cambiar nada con solo correrlo, para que sirvan como los
programas instalados, con ejecutables, el código e información
de prueba/desarrollo.



Descargar el código:
http://master.dl.sourceforge.net/project/api-simple-completa/api.7z?viasf=1

Ver el directorio api/_GAMES_/engine/NASM, etc..., es donde
está el motor de juegos.

En la página del proyecto hay varios archivos de muestra que terminan
en "__cache". Con esos programas hemos aprendido diferentes cosas
que vamos a aplicar en nuestro proyecto:
http://sourceforge.net/projects/api-simple-completa/


13  Programación / Programación General / Proyecto de Motor de Juegos en: 12 Abril 2023, 08:01 am
Necesito hacer un proyecto para el que tenga ayuda de varios otros para cada una de sus partes.

Se me ocurre que lo primero que tengo que hacer son las primitivas de manejo y dibujado de la pantalla, y los algoritmos básicos sin saltarse.

Así que necesito alguien que se encargue de los algoritmos de línea, de círculos, de rellenado, escalado, de color a escala de grises, doble búfer, entre otros que tengo que mencionar aquí.

Una vez eso esté listo, necesito gente que me ayude a hacer un de juegos que básicamente defina un conjunto de estructuras para cada personaje. TODO en el juego es un personaje, el fondo, la música, el suelo, etc., pero  necesito que me ayuden a definir con código y explicaciones claras.

Esos personajes simplemente se actualizan al mismo tiempo en un mismo bucle cada cierto tiempo para un escenario de juego. Unos pueden actualizarse y otros tal vez no.

He estado poniendo el código para eso en https://sourceforge.net/projects/api-simple-completa/, como todo lo demás.

También necesito que alguien defina cómo definir cada acción como saltar, correr, caerse, etc..., y explique los trucos de cómo se hace en un programa.

Necesito que todavía alguien más descifre el Game Programming Crash Course de GameDev.net.
14  Programación / Programación General / Descripción Limpia de Algoritmos y Trucos con Código en: 28 Febrero 2023, 16:09 pm
Línea de Bresenham
Código
  1. Elementos en Orden de Dibujado de Línea Bresenham |
  2. ---------------------------------------------------------
  3.    | void OPCODE__graphics__Bresenham_line(unsigned char *BresenObj)
  4.    |
  5. ----
  6.  
  7. - Elementos:
  8.  tipo de diagonal: Bresenham_line__slope
  9.  controles x y: Bresenham_line__xctrl, Bresenham_line__yctrl
  10.  largo x y: Bresenham_line__xlargo, Bresenham_line__ylargo
  11.  coordenada mayor (sin signo): Bresenham_line__maxcoord
  12.  Bresenham_line__xdireccion, Bresenham_line__ydireccion, suman 1 o -1
  13.  Bresenham_line__draw hace más eficiente per no es necesario para saber cuándo dibujar 1 pixel.
  14.  
  15.  
  16. - Tipo de diagonal (slope), horizontal 1, vertical 2,
  17.  Bresenham diagonal 0 (al final, sin chequeo).
  18.  
  19. - Controles x y y de errores de cálculo.
  20.  
  21. - largo x = xfin-xinicio (con signo).
  22.  largo y = yfin-yinicio (con signo).
  23.  El signo es para detectar si la dirección
  24.  suma o resta.
  25.  
  26. - Para x y y: Vemos si el largo es 0.
  27.  Si es 0, lo ponemos a 1.
  28.  Sino, la dirección es largo/abs(largo), es 1 o -1.
  29.  
  30. - Para x y y: Ajustar largo a abs(largo)+1
  31.  para perder el signo necesario para las
  32.  direcciones x y, y convertir el rango
  33.  de coordenadas en cuenta natural.
  34.  Parece que necesitamos sumar 1 y usar un do while
  35.  con actualización HASTA EL FINAL para cubrir
  36.  el primer y último pixel con una ÚNICA
  37.  operación de putpixel.
  38.  
  39. - Para obtener la coordenada más larga:
  40.  Si xlargo==ylargo, coordenadamayor=xlargo
  41.  Si xlargo>ylargo, coordenadamayor=xlargo
  42.  Si ylargo>xlargo, coordenadamayor=ylargo
  43.  Copiamos a coordenadamayor2 para el bucle.
  44.  
  45. - Si slope es 1, dibujar vertical, si es 2, horizontal.
  46.  Terminar.
  47.  
  48. - Esto inicializa los valores.
  49.  
  50.  
  51. do
  52. {
  53. //Esto indica el momento más óptimo
  54. //para dibujar cada pixel:
  55. ///
  56. Bresenham_line__draw=0;
  57.  
  58.  
  59. //Control de X:
  60. ///
  61.  if(Bresenham_line__xctrl)>Bresenham_line__maxcoord))
  62.  {
  63.   Bresenham_line__xctrl)-=Bresenham_line__maxcoord);
  64.   Bresenham_line__x)+=Bresenham_line__xdireccion);
  65.   Bresenham_line__draw=1;
  66.  }
  67.  
  68.  
  69. //Control de Y:
  70. ///
  71.  if(Bresenham_line__yctrl)>Bresenham_line__maxcoord))
  72.  {
  73.   Bresenham_line__yctrl)-=Bresenham_line__maxcoord);
  74.   Bresenham_line__y)+=Bresenham_line__ydireccion);
  75.   Bresenham_line__draw=1;
  76.  }
  77.  
  78.  
  79. Bresenham_line__xctrl)+=Bresenham_line__xlargo);
  80. Bresenham_line__yctrl)+=Bresenham_line__ylargo);
  81. }
  82. while(Bresenham_line__maxcoord)-=1);
  83.  


Código de la función:
Código
  1. //Estructura común de funciones gráficas
  2. //de solo calcular comunes donde las 2 primeras variables
  3. //son widewords x y y y la siguiente es el final de la
  4. //operación si es 2, o el inicio si es 0.
  5. ///
  6.  
  7. #define Bresenham_line__x       wideword_sz*0
  8. #define Bresenham_line__y       wideword_sz*1
  9. #define Bresenham_line__inited  wideword_sz*2
  10. #define Bresenham_line__slope   wideword_sz*3
  11. #define Bresenham_line__xstart  wideword_sz*4
  12. #define Bresenham_line__ystart  wideword_sz*5
  13. #define Bresenham_line__xend    wideword_sz*6
  14. #define Bresenham_line__yend    wideword_sz*7
  15. #define Bresenham_line__colorpx wideword_sz*8
  16.  
  17. #define Bresenham_line__xdireccion wideword_sz*9
  18. #define Bresenham_line__ydireccion wideword_sz*10
  19. #define Bresenham_line__xlargo     wideword_sz*11
  20. #define Bresenham_line__ylargo     wideword_sz*12
  21. #define Bresenham_line__maxcoord   wideword_sz*13
  22. #define Bresenham_line__maxcoord2  wideword_sz*14
  23. #define Bresenham_line__xctrl      wideword_sz*15
  24. #define Bresenham_line__yctrl      wideword_sz*16
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34. void OPCODE__graphics__Bresenham_line(unsigned char *BresenObj)
  35. {
  36. // long xdireccion,ydireccion;            //1 o -1
  37. // long xlargo,ylargo;                    //valor absoluto de largo+1
  38. // long coordenadamayor,coordenadamayor2; //si x o y es mayor
  39. // long xctrl=0,yctrl=0;                  //controlar el pixel a dibujar excediendo la longitud de coordenadas de la línea
  40.  
  41.  
  42.  
  43. if(*(long*)(BresenObj+Bresenham_line__inited)==2)return;
  44.  
  45.  
  46. if(!(
  47.    *(long*)(BresenObj+Bresenham_line__inited)
  48.   ))
  49. {
  50.  *(long*)(BresenObj+Bresenham_line__inited)=1;
  51.  *(long*)(BresenObj+Bresenham_line__slope)=0;
  52.  
  53.  
  54.  *(long*)(BresenObj+Bresenham_line__xctrl)=0;
  55.  *(long*)(BresenObj+Bresenham_line__yctrl)=0;
  56.  
  57.  
  58.  *(long*)(BresenObj+Bresenham_line__xlargo)=*(long*)(BresenObj+Bresenham_line__xend)-*(long*)(BresenObj+Bresenham_line__xstart);
  59.  *(long*)(BresenObj+Bresenham_line__ylargo)=*(long*)(BresenObj+Bresenham_line__yend)-*(long*)(BresenObj+Bresenham_line__ystart);
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  if(*(long*)(BresenObj+Bresenham_line__xdireccion))
  67.  *(long*)(BresenObj+Bresenham_line__xdireccion)=*(long*)(BresenObj+Bresenham_line__xlargo)/myabs_long(*(long*)(BresenObj+Bresenham_line__xlargo));
  68.  else *(long*)(BresenObj+Bresenham_line__xdireccion)=1;
  69.  
  70.  if(*(long*)(BresenObj+Bresenham_line__ydireccion))
  71.  *(long*)(BresenObj+Bresenham_line__ydireccion)=*(long*)(BresenObj+Bresenham_line__xlargo)/myabs_long(*(long*)(BresenObj+Bresenham_line__ylargo));
  72.  else *(long*)(BresenObj+Bresenham_line__ydireccion)=1;
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  *(long*)(BresenObj+Bresenham_line__xlargo)=myabs_long(*(long*)(BresenObj+Bresenham_line__xlargo))+1;
  79.  *(long*)(BresenObj+Bresenham_line__ylargo)=myabs_long(*(long*)(BresenObj+Bresenham_line__ylargo))+1;
  80.  
  81.  
  82.  *(long*)(BresenObj+Bresenham_line__maxcoord)=*(long*)(BresenObj+Bresenham_line__xlargo); //si xlargo==ylargo
  83.  if(*(long*)(BresenObj+Bresenham_line__xlargo)>*(long*)(BresenObj+Bresenham_line__ylargo))*(long*)(BresenObj+Bresenham_line__maxcoord)=*(long*)(BresenObj+Bresenham_line__xlargo);
  84.  if(*(long*)(BresenObj+Bresenham_line__ylargo)>*(long*)(BresenObj+Bresenham_line__xlargo))*(long*)(BresenObj+Bresenham_line__maxcoord)=*(long*)(BresenObj+Bresenham_line__ylargo);
  85.  
  86.  *(long*)(BresenObj+Bresenham_line__maxcoord2)=*(long*)(BresenObj+Bresenham_line__maxcoord)+1;
  87.  
  88.  *(long*)(BresenObj+Bresenham_line__x)=*(long*)(BresenObj+Bresenham_line__xstart);
  89.  *(long*)(BresenObj+Bresenham_line__y)=*(long*)(BresenObj+Bresenham_line__ystart);
  90. }
  91.  
  92.  
  93. //Vertical (no Bresenham):
  94. ///
  95.  if(*(long*)(BresenObj+Bresenham_line__slope)==1 || *(long*)(BresenObj+Bresenham_line__xstart)==*(long*)(BresenObj+Bresenham_line__xend))
  96.  {
  97.   *(long*)(BresenObj+Bresenham_line__slope)=1;  //vert
  98.   if(*(long*)(BresenObj+Bresenham_line__y)==*(long*)(BresenObj+Bresenham_line__yend))
  99.   *(long*)(BresenObj+Bresenham_line__inited)=2;
  100.   else
  101.    *(long*)(BresenObj+Bresenham_line__y)+=(*(long*)(BresenObj+Bresenham_line__ydireccion));
  102.  
  103.   return;
  104.  }
  105.  
  106.  
  107.  
  108. //Horizontal (no Bresenham):
  109. ///
  110.  if(*(long*)(BresenObj+Bresenham_line__slope)==2 || *(long*)(BresenObj+Bresenham_line__ystart)==*(long*)(BresenObj+Bresenham_line__yend))
  111.  {
  112.   *(long*)(BresenObj+Bresenham_line__slope)=2;  //horiz
  113.   if(*(long*)(BresenObj+Bresenham_line__x)==*(long*)(BresenObj+Bresenham_line__xend))
  114.   *(long*)(BresenObj+Bresenham_line__inited)=2;
  115.   else
  116.    *(long*)(BresenObj+Bresenham_line__x)+=(*(long*)(BresenObj+Bresenham_line__xdireccion));
  117.  
  118.   return;
  119.  }
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126. if(*(long*)(BresenObj+Bresenham_line__xctrl)>*(long*)(BresenObj+Bresenham_line__maxcoord))
  127. {
  128.  *(long*)(BresenObj+Bresenham_line__xctrl)-=*(long*)(BresenObj+Bresenham_line__maxcoord);
  129.  *(long*)(BresenObj+Bresenham_line__x)+=*(long*)(BresenObj+Bresenham_line__xdireccion);
  130. }
  131.  
  132.  
  133. if(*(long*)(BresenObj+Bresenham_line__yctrl)>*(long*)(BresenObj+Bresenham_line__maxcoord))
  134. {
  135.  *(long*)(BresenObj+Bresenham_line__yctrl)-=*(long*)(BresenObj+Bresenham_line__maxcoord);
  136.  *(long*)(BresenObj+Bresenham_line__y)+=*(long*)(BresenObj+Bresenham_line__ydireccion);
  137. }
  138.  
  139. *(long*)(BresenObj+Bresenham_line__xctrl)+=*(long*)(BresenObj+Bresenham_line__xlargo);
  140. *(long*)(BresenObj+Bresenham_line__yctrl)+=*(long*)(BresenObj+Bresenham_line__ylargo);
  141.  
  142.  
  143. if(*(long*)(BresenObj+Bresenham_line__x)==*(long*)(BresenObj+Bresenham_line__xend) && *(long*)(BresenObj+Bresenham_line__y)==*(long*)(BresenObj+Bresenham_line__yend))
  144. *(long*)(BresenObj+Bresenham_line__inited)=2;
  145. }
  146.  







Ejemplo de uso:
Código
  1. unsigned char bresenObj0[wideword_sz*17];
  2. *(long*)(bresenObj0+Bresenham_line__inited)=0;
  3. *(long*)(bresenObj0+Bresenham_line__xstart)=0;
  4. *(long*)(bresenObj0+Bresenham_line__ystart)=0;
  5. *(long*)(bresenObj0+Bresenham_line__xend)=319;
  6. *(long*)(bresenObj0+Bresenham_line__yend)=199;
  7.  
  8. while(1)
  9. {
  10.  OPCODE__graphics__Bresenham_line(bresenObj0);
  11.  putpixel(*(long*)(bresenObj0+Bresenham_line__x), *(long*)(bresenObj0+Bresenham_line__y), 6);
  12.  if(*(long*)(bresenObj0+Bresenham_line__inited)==2)break;
  13. }
  14.  
15  Programación / Programación General / Re: Hilo oficial: Solicitudes de Expresiones Regulares en: 12 Enero 2023, 14:19 pm
Tutorial:

Buscar cualquier cadena de caracter ASCII opcionales:
[\x20-\x7F]* - para sustituir cualquier subcadena ASCII imprimible
[\x00-\x7F]* - para sustituir cualquier subcadena ASCII

Buscar cadenas ASCII obligatorias con tamaño específico:
[\x20-\x7F]{11} - para sustituir la ID de video de YouTube de 11 caracteres

Buscar cadenas específicas opcionales como "www.":
(www\.)* - para sustutuir "www."

Ver si está 1 o 0 caracteres para la s de https:
(s)* - para sustituir s o nada
.{0,1} - para sustituir s o nada

Escapar caracteres especiales:
\/\/ - para escapar "//"
\? - para escapar algo como "watch?"


Código:
//Busca offset de youtube.com y subdominios de païs con o sin https,
//con o sin www., se asegura de que sea una URL de video válida:
///
text = " http://de.youtube.com/watch?param0=langes&v=Mw0yNzdyH6Y&gl=DE";
n = text.search(/http(s)*:\/\/[\x20-\x7F]*youtube.com[\x20-\x7F]*\/watch\?[\x20-\x7F]*v\=[\x20-\x7F]{11}[\x20-\x7F]*/i);







//Busca offset de youtube.com y subdominios de país con o sin https
///
text = " http://youtube.com.sv/watch?v=sadgddddddd";
n = text.search(/http.{0,1}:\/\/youtube.com...\//i);





//Busca offset de youtube.com y subdominios de país con o sin https,
//con o sin www.
///
text = " https://www.youtube.com/watch?v=Mw0yNzdyH6Y";
n = text.search(/http.{0,1}:\/\/(www\.)*youtube.com...\/*/i);
16  Programación / Programación General / Re: Hilo oficial: Solicitudes de Expresiones Regulares en: 6 Enero 2023, 14:46 pm
Necesito hacer un chat con inteligencia artificial simple:

http://190.53.102.175/chat/chat.php
http://190.53.102.175/api/bin/i.a/prg.js


Expresión regular de JavScript para encontrar cualquier cadena para subdominios,
por ejemplo para encontrar:

yotube.com/watch?v=
yotube.com.mx/watch?v=


Por ejemplo, equivalente a:

youtube.com*/watch?*v=
17  Programación / ASM / Drivers VxD en: 19 Diciembre 2022, 23:33 pm
Esta es la información que he encontrado hasta ahora para hacer drivers VxD de Win9x fácil. Los VxDs pueden ser útiles para cargar drivers o emularlos en computadoras viejas o Bochs y así hacer programas con más recursos de hardware no estándar al cargar las VxDs por nuestra cuenta.

Los archivos VxD supestamente siempre son archivos con la marca "LE" en vez de "LX".

De la cabecera LE EXE:

MemPagesCtr es la cuenta de bloques de tamaño MemPageSZ en disco, que hasta ahora puedo dejar a 512 bytes de tamaño.

LastPageBytes dice cuántos bytes tiene el último bloque en el archivo, que puede ser menor o tal vez igual que MemPageSZ.

En el código, los servicios VxD se llaman con INT 20H, seguido de 4 bytes que tienen códigos de los servicios a llamar. Windows mismo se encarga de saltarse esos 4 bytes después de la instrucción INT para evitar errores de ejecución con esos bytes de opcode inválidos.

Esqueleto simple en NASM que muestra un MessageBox al abrir o cerrar una ventana de consola de MS-DOS:
Código:
;http://master.dl.sourceforge.net/project/api-simple-completa/api.7z?viasf=1

%include "../../../PC/BIOS/WinAPI/EXE/PE/snippets/DOS_Stubs/NASM/DOS_Stub_classic0xB0.asm"

PE_header:
LE_header:
LE_header_start:

  LE_header_0x00_Signature            db 'LE'
  LE_header_0x02_ByteOrder            db 0 ;0 Little or Big Endian
  LE_header_0x03_WordOrder            db 0 ;0 Little or Big Endian
  LE_header_0x04_FormatLevel          dd 0
  LE_header_0x08_CPUType              dw 2 ;1 286+, 2 386+, 3 486+, 4 586+, 20h i860 N10+, 21h N11+, 40h MIPS Mark I+ (R2000, R3000), 41h MIPS Mark II+ (R6000), 42h MIPS Mark III+ (R4000)
  LE_header_0x0A_TargetOS             dw 4 ;1 OS/2, 2 Win16, 3 DOS 4x, 4 Win386
  LE_header_0x0C_ModuleVersion        dd 0
  LE_header_0x10_Flags                dd 101000000000000000b ;
  LE_header_0x14_MemPagesCtr          dd 3
  LE_header_0x18_InitialCS            dd 0
  LE_header_0x1C_InitialEIP           dd 0  ;Explicar cómo encuentra y carga las secciones y direcciones de código y datos el VxD
  LE_header_0x20_InitialSS            dd 0
  LE_header_0x24_InitialESP           dd 0
  LE_header_0x28_MemPageSZ            dd 512   ;Tamaño de datos
  LE_header_0x2C_LastPageBytes        dd 0x31
  LE_header_0x30_FixUpSectionSZ       dd 0x85
  LE_header_0x34_FixUpSectionCheck    dd 0
  LE_header_0x38_LdrSectionSZ         dd 0x69
  LE_header_0x3C_LdrSectionCheck      dd 0
  LE_header_0x40_ObjectTableOffset    dd 0xC4  ;from where?
  LE_header_0x44_ObjectTableEntries   dd 3
  LE_header_0x48_ObjectPageMapOffset  dd 0x10C
  LE_header_0x4C_ObjectIterDataMapOff dd 0  ;always 0 for VxD?
  LE_header_0x50_RsrcTableOffset      dd 0
  LE_header_0x54_RsrcTableEntries     dd 0
  LE_header_0x58_ResidentTableOffset  dd 0x118
  LE_header_0x5C_EntryTableOffset     dd 0x123
  LE_header_0x60_ModulDirectivesTable dd 0  ;always 0 for VxD?
  LE_header_0x64_ModulDirectivesEnts  dd 0
  LE_header_0x68_FixupPageTblOffset   dd 0x12D
  LE_header_0x6C_FixupRecordTable     dd 0x13D
  LE_header_0x70_ImportModulesTable   dd 0x1B2
  LE_header_0x74_ImportModulesCount   dd 0
  LE_header_0x78_ImportProcTable      dd 0x1B2
  LE_header_0x7C_PerPageChecksums     dd 0
  LE_header_0x80_DataPagesOffset      dd 0x400   ;0x1000; 0x400;0x2E0;0x1000  ;inicio de código y datos después de la cabecera
  LE_header_0x84_PreloadPageCount     dd 1
  LE_header_0x88_NonResidentNames     dd 0x1434
  LE_header_0x8c_NonResidentNamesLen8 dd 15  ;in bytes
  LE_header_0x90_NonResidentNamesChk  dd 0
  LE_header_0x94_AutomaticDataObject  dd 0
  LE_header_0x98_DebugInformationOff  dd 0
  LE_header_0x9C_DebugInformationLen  dd 0
  LE_header_0xA0_PreloadInstPagesNum  dd 0
  LE_header_0xA4_DemandInstancePgsNum dd 0
  LE_header_0xA8_ExtraHeapAllocation  dd 0
  LE_header_0xAC                      dd 0

;File Offset 0x160, LE header offset 0xB0


;INIT:
;INIT:
;INIT:
;INIT:



times 16 db 0

dd 0x4000000
dd 0xE8
dd 0
dd 0x2045

dd 1
dd 1
db "LCOD'",0,0,0

dd 0
dd 0x2005
dd 2
dd 1
db "PCOD1",0,0,0
dd 0
dd 0x2023

dd 3
dd 1
db "PDAT"
dd 0x10000

db 0,0,2,0
db 0,0,3,0
db 7
db "MESSAGE"

db 0,0,0,1,3,1,0,3,0,0,0,0,0,0,0,0
db 0,0x60,0,0,0,0x75,0,0,0,0x75,0,0,0,7,0,0xE1
db 0,2,0x20,0,0x27,0,0x1F,1,0x5F,0,0x65,0,0x69,0,0x6D,0
db 0x71,0,0x75,0,0x79,0,0x7D,0,0x81,0,0x85,0,0x89,0,0x8D,0
db 0x91,0,0x95,0,0x99,0,0x9D,0,0xA1,0,0xA5,0,0xA9,0,0xAD,0
db 0xB1,0,0xB5,0,0xB9,0,0xBD,0,0xC1,0,0xC5,0,0xC9,0,0xCD,0
db 0xD1,0,0xD5,0,0xD9,0,0xDD,0,7,0,0x61,0,2,0,0,7
db 0,0x5B,0,1,0x61,0,7,0,0x18,0,1,0x50,0,7,0,0x21
db 0,3,0x1F,0,7,0,0x11,0,3,0,0,7,0,1,0,3
db 15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,32,32,32,32

db "MESSAGE_DDB",0,32,0X40,0X31,0
db 32,32,32,"CLASS",0,"'RCODE",0
db 0,0,32,32,32,"PRELOAD DISCARDABLE",0,0
db "CONFORMING",0,0,0,0,0,0,0,0,0,0,0,0


;times 0xD20 db 0


;align 0x1000
align 0x400



;END:  
;END:  
;END:  
;END:  


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;0x1000 en el archivo tiene .00000000
;de base en HIEW, por qué?
;;


;INIT: Page 0
;INIT: Page 0
;INIT: Page 0
;INIT: Page 0

db 0,0,0,0,0,4,0,0,1,0,0,0,"MESSAGE"
db 32,0,0,0,0x80,0,0,0,0,0,0,0,0
times 16 db 0
dd 0,0,0
db "verPP",0,0,0
db "1vsR2vsR3vsR",0x83,0xE8,7,0x83,0xF8,0x21,0x73,7,-1,0x24,0x85,0,0,0,0,0xF8
db 0xC3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

times 16*7 db 0

db 0,0,0,0,0,0xCC,0xCC,0xCC,0,0,0,0,0,0,0,0

;times 16*17 db 0

%define round(n, r) (((n+(r-1))/r)*r)
align 512


;END:  Page 0
;END:  Page 0
;END:  Page 0
;END:  Page 0



;align 512
;_s:
;times (512-_s) db 0

;dd round(_s,512)
;times (512-$$) db 0




;INIT: Page 1
;INIT: Page 1
;INIT: Page 1
;INIT: Page 1


bits 32

mov ecx,0   ;xor ecx,ecx
;xor ecx,ecx
db 0xCD,0x20,3,0,1,0 ;VMMcall Get_Sys_VM_Handle
mov eax,0x30
mov edi,0
xor esi,esi
xor edx,edx
;db 0xCD,0x20,4,0,17,0  ;VxDcall VMCPD.Set_CR0_State  ;17 en vez de 0x17, probar valores WORD o DWORD
db 0xCD,0x20,4,0,0x17,0  ;VxDcall SHELL.Message

ret
mov ecx,0
db 0xEB,0xDE  ;jmps .5


;times 9 db 0


;times 16*29 db 0

align 512



;END:  Page 1
;END:  Page 1
;END:  Page 1
;END:  Page 1





;INIT: Page 2
;INIT: Page 2
;INIT: Page 2
;INIT: Page 2


db "VxD MessageBox",0
db "A VM is created",0
db "A VM is destroyed",0
;db "SEC",0x0B
;db "MESSAGE_DDB",0,0,0



;END:  Page 2
;END:  Page 2
;END:  Page 2
;END:  Page 2

18  Programación / Programación General / Canal de Youtube con Programación En Vivo en: 23 Noviembre 2022, 15:36 pm
http://www.youtube.com/user/AltComp126/streams

El stream en vivo de este canal muestra cómo compilar el código de la API y programas de bajo nivel que están en http://master.dl.sourceforge.net/project/api-simple-completa/api.7z?viasf=1 o http://sourceforge.net/projects/api-simple-completa/files/

La programación parte de DJGPP, NASM, conceptos de sistemas operativos y hardware, y la compilación de los diferentes programas existentes con las herramientas que se necesiten..



Bochs, VirtualBox, bootear desde discos USB y MS-DOS puro, DJGPP, sistemas operativos propios
19  Programación / Desarrollo Web / Hacer mirror de Galeon.com (dice que cierra el 31 de enero del 2020) en: 30 Enero 2020, 16:14 pm
Cuando uno va a varios sitios de Galeon.com, como

http://kerneli386.galeon.com

Sale un anuncio que dice que las páginas se perderán
después del 31 de enero de este año.

¿Cómo se podría hacer una lista de los sitios más importantes de Galeon.com, de favoritos y otros orígenes para hacer un mirror, tal vez entre todos, antes de que supuestamente desaparezca?
20  Programación / ASM / Libro de Ensamblador 2005 de Francisco Charte Ojeda en: 31 Enero 2017, 23:41 pm




Extracto de audio automatizado de 18 horas del libro entero (para estudiarlo más fácil mientras hacemos otra cosa u evaluar si contiene trucos que nos pueden servir y podemos entender fácilmente al oírlos):
http://archive.org/download/LibroEnsambladorCharte_2005_2009/ExtractoAudioLibroEnsamblador2005Charte.mp3




http://archive.org/download/LibroEnsambladorCharte_2005_2009/LibroEnsamblador2005CharteOjeda.zip

http://archive.org/download/LibroEnsambladorCharte_2005_2009/Ensamblador_Charte_CD_2005.zip

http://archive.org/download/LibroEnsambladorCharte_2005_2009/ExtractoTextoLibroEnsamblador2005CharteOjeda.zip



Citar
El libro de Ensamblador de Francisco Charte Ojeda, en su versión 2005 o 2009, es un importantísimo libro que enseña a programar en Ensamblador x86 para las PCs de 16 y 32 bits.

Es tal vez el mejor y más claro libro sobre Ensamblador en Español.

Sin embargo, lastimosamente ya no se encuentra a la venta desde hace varios años, por lo que los nuevos programadores de habla española/latinoamericana no podrían disfrutar del beneficio de aprender Ensamblador. Yo traté de comprarlo allá por el 2011 en Amazon pero jamás me lo enviaron ya que para comenzar también se había acabado en bodega. Se podía comprar y lo enviarían cuando lo encontraran, pero jamás me lo enviaron, y pagué unos 49 dólares por él en Amazon, aunque no sé si me los cobraron o no. Lo más probable es que no, pero ya no está disponible para comprarse.

Si bien solo habla de los modos de 16 y 32 bits, nos servirá de excelente base, si también lo complementamos junto con los diferentes manuales de Intel y de algoritmos, formatos de archivo y llamadas de sistema para cada sistema operativo.

Todos estos factores hacen que sea más difícil aprender a programar en Ensamblador para quienes hablamos Español, a menos que contemos con este libro, realmente el mejor sobre el tema que por lo menos yo he podido ver, escrito en Español, y de una manera que realmente simplifica los conceptos básicos de la programación en ese lenguaje, como si de una clase se tratara.
Páginas: 1 [2] 3 4 5 6 7 8 9 10
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines