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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


  Mostrar Temas
Páginas: [1] 2 3
1  Programación / ASM / Libro Ensamblador 2009 de Charte Ojeda en: 14 Septiembre 2023, 02:02 am
https://www.lawebdelprogramador.com/pdf/8259-Lenguaje-ensamblador-2009.html



Este libro creo que deberían comprarlo y escanearlo bien y subirlo con un ISO de su CD-ROM para ayudar.

Tengo la foto del CD:



URL para comprarlo:
https://www.libreriacodex.com/es/libro/ensamblador-edicion-2009_49204

Creo que este libro lo han estado buscando muchos y solo lo encuentran a miles o cientos de dólares.

Pero al parecer lo venden a $39.58 comprando con Visa, MasterCard o Western Union.

Es posible que ahora que lo han publicado se acabe en unos cuantos días siendo que TANTOS lo quieren y está tan barato, a no más de $70 USD.

Por si alguien quiso comprar este, en serio siempre que lo venden se acaba en unos 3 días, no creo que vuelva a encontrarse en ningún lugar después de esto:

http://www.amazon.com/-/es/Francisco-Charte/dp/8441525110
https://www.amazon.es/-/es/Francisco-Charte/dp/8441525110

El libro tiene un poco de ejemplos extra de manejar el mouse, enlazar ensamblador y C  con Visual Studio y GCC.

MOD GLOBAL: Imagenes adaptadas al maximoi permitido



Aquí lo compré hace unos 3 días con Western Union.

Les cuento si me llega de Paraguay a Estados Unidos.

Por favor, debería alguien comprarlo y subir el escaneo a color y el CD-ROM al archive.org.
CREO QUE SOLO QUEDAN 2 LIBROS de Ensamblador 2009 a $68 en todo el mundo, de esta librería d de Paraguay. Creo que ahora que pongo el link, simplemente se va a acabar en menos de 1 semana o 1 mes.


http://pago.pagopar.com/avkh
https://www.etp.com.py/libro/programacion-ensamblador-cd-edicion-2009-67253.html#


Al parecer lo venden a $39.58 en este sitio web comprando con Visa, MasterCard o Western Union.



Solo tienen que ir en persona o contactarlos a través de no colocar datos personales y WhatsApp.

WhatsApp para comprar, pueden instalarlo en Windows 10 u 11 con una buena computadora:
no colocar datos personales

Solo mandan un link y compran con pagopar.com desde Paraguay o con Western Union.
2  Media / Juegos y Consolas / YouTube: Demostración de Castlevania Vampire's Kiss Hackeado de SNES en: 7 Mayo 2023, 17:46 pm
Hack de CyberForce que aparentemente solo funciona con ZSNES 1.31 o 1.36 para MS-DOS.
3  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.
4  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.  
5  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

6  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
7  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?
8  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.
9  Programación / ASM / Manual de Programación del BIOS, Volumen 1 de 3 en: 8 Enero 2017, 01:31 am


Link de descarga del manual (384 páginas, 100 Megabytes de JPG):
http://archive.org/download/Phoenix_PC_BIOS_Books/1_System%20BIOS%20PC%20and%20EISA%202ndEd.zip

Con este libro aprenderemos a programar el BIOS base de todas las PC estándar. Necesitamos saber llamar a las funciones del BIOS con ensamblador de NASM, TASM o MASM, con Turbo C++ o con inline assembly de los diferentes compiladores. Es una adición importante a referencias como la de Ralf Brown ya que muestra cada campo y servicio del BIOS base de forma limpia, proveniente de un fabricante principal de BIOS (Phoenix).

Este video contiene la vista previa del video y el audio del texto completo (fue procesado a computadora con OCR de Lucion File Converter y leído a MP3 con Balabolka así que se oye exactamente lo que la computadora interpretó).

El video está pensado para poder oír cada detalle que el libro contiene y así decidir si hay información especial de interés, haciendo un esfuerzo mínimo para leerlo.
10  Programación / Programación General / Cómo funcionan las compuertas lógicas XOR, con código en javascript. en: 28 Diciembre 2016, 00:24 am


La explicación del funcionamiento de la función XOR a nivel de compuertas lógicas es bastante simple.

En principio, tenemos como mínimo una entrada de 2 bits distintos.

El circuito XOR nos devolverá un 1 como resultado siempre y cuando ambos bits sean diferentes.

En la entrada, necesitamos usar una compuerta OR de 2 entradas.

También necesitamos una compuerta AND de 2 entradas en la entrada, y frente a esta una compuerta de negación para invertir el resultado de dicha compuerta AND.

La primera pata de entrada de la compuerta OR va a la primera pata de entrada de la compuerta AND invertida, y la segunda pata de la compuerta OR de entrada va a la segunda pata de la compuerta AND invertida de entrada.

En otras palabras, queremos obtener el resultado del OR y del AND invertido para los dos bits iniciales de entrada.

Los dos bits de resultado obtenidos por la compuerta OR y AND invertida los haremos pasar por una compuerta AND final de dos entradas.

El resultado de esta última AND será el valor XOR.


La intención de este circuito es usar el OR para detectar la presencia de un 1 y devolver un 1 como resultado; y la intención de la AND invertida es detectar la presencia de un 0 y devolver un 1 como resultado.

Las compuertas OR están orientadas a devolver un 1 cuando hay por lo menos un 1 de entrada.

Las compuertas AND están orientadas a devolver un 0 cuando hay por lo menos un 0 de entrada. Con la compuerta de negación obtenemos un 1 de la AND cuando hay un 0 presente.


Así que con el OR detectamos si hay un 1 presente, y devolvemos 1.
Con el AND detectamos si hay un 0 presente, y en ese caso obtenemos un 0 que invertimos para obtener un 1 en la presencia de un 0 de entrada.

Ahora, si hay un 1 presente, el OR nos devolverá 1.
Y si hay un 0 presente, el AND invertido nos devolverá 1.


Tomemos como ejemplo 11 binario.
Cuando la compuerta OR lo procese, obtendremos 1, que significa que hay un 1 presente en la entrada.
Ahora, cuando la compuerta AND procese los dos bits de entrada originales a 1, también devolverá un 1, pero la compuerta de negación invertirá ese resultado de 1 a 0 para indicar que no había ningún 0 presente en la entrada.
Cuando el 1 del OR y el 0 del AND invertido ingresen a la compuerta AND final, obtendremos un 0 en respuesta de la entrada original 11 binario. Esto indicará que ambos bits tenían el mismo valor.

Es como si el circuito XOR fuera una pregunta.: ¿Son ambos bits de entrada diferentes? La respuesta será un 1 para indicar VERDADERO si realmente son diferentes.
Ahora podemos ver claramente que si ambos bits de entrada son iguales como en este caso con 11 binario, el resultado devuelto por la función XOR será 0.



Tomemos otro ejemplo, con 10 binario.
La compuerta OR toma ambos bits, 1 y 0, y devuelve 1 ya que hay por lo menos un 1 presente.
La compuerta AND toma ambos bits 1 y 0, y devuelve 0 ya que hay por lo menos un 0 presente.
Pero con la compuerta de negación que le sigue a esta AND obtenemos un 1, lo que indica que hay un 0 presente.

Ahora, el bit con valor 1 de resultado de la OR, y el bit con valor 1 de la AND invertida entran en la última AND, la AND de salida, y ya que ambos bits son 1, devolvemos 1.
Lo que indica esto es que la OR tomó el 1 y el 0 y detectó la presencia de un 1, devolviendo 1.
También indica que la AND invertida tomó el 1 y el 0 y detectó la presencia de un 0, devolviendo 1.
Ya que el circuito OR y AND invertido nos indican por su lado que hay tanto un 1 como un 0 presentes, devolvemos un 1 para la función XOR del circuito completo, para indicar que ambos bits eran diferentes.

Como vemos también, al nivel más fundamental siempre operamos las compuertas de 2 en 2, así que resolver será fácil. Incluso en la aritmética decimal normal operamos de 2 en 2 al nivel lógico más simple.

El siguiente código de javascript demuestra cómo se vería implementada como programa la función lógica del circuito XOR. Siempre que los 2 bits de entrada sean iguales, el programa devolverá 0. Si son diferentes, este devolverá 1.

Paso 1.: Necesitamos 2 variables de entrada de por lo menos 1 bit de tamaño.
Paso 2.: Aplicamos OR entre ambas variables de entrada.
Paso 3.: Aplicamos AND entre ambas variables, y negamos los valores de bits del resultado.
Paso 4.: Aplicamos AND al resultado del OR y del NAND. Este es el valor XOR.


La mayoría de lenguajes de programación y ensambladores tienen operadores o instrucciones XOR. Estas son especialmente útiles para generar código más breve que asigne 0 a una variable o registro al aplicarle XOR con su mismo valor. Como hemos visto, ya que todos los bits serán los mismos al usar el mismo registro del procesador o variable de memoria como primer y segundo operando para la XOR, todos los bits quedarán a cero para indicar que todos eran iguales.



Código:
javascript:

/* Paso 1: Necesitamos 2 variables de entrada de por lo menos 1 bit de tamaño. */
var bits_A = 1;
var bits_B = 1;

var OR_0        = bits_A|bits_B;     /* Paso 2: Aplicamos OR entre ambas variables de entrada. */
var NAND_0      = ~(bits_A&bits_B);  /* Paso 3: Aplicamos AND entre ambas variables, y negamos los valores de bits del resultado. */
var XOR_AND_OUT = OR_0&NAND_0;       /* Paso 4: Aplicamos AND al resultado del OR y del NAND. Este es el valor XOR. */

alert(XOR_AND_OUT);

void(0);

Páginas: [1] 2 3
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines