|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - Eternal Idol
Páginas: 1 ... 186 187 [188] 189 190 ... 205
4676
« en: Martes 6 de Septiembre de 2005, 15:20 »
Ademas debes tener en cuenta que no solo se depende del sistema operativo, puedes crear u programa en assembler que solo funcione en algunos tipos de pentium 4 y en otros no... adicionalmente maquinas con arquitetura diferente tampoco correrian tu programa, por ejemplo una maquina que use procesadores RISC generalmente no ejecutaria un programa hecho para un 8086... esto tambien implica que hay sistemas operativos que solo corren en un tipo determinado de maquina como ( por el momento) los Apple. Sin lugar a dudas un apunte correcto, practicamente cada arquitectura tiene sus instrucciones y codigo binario propio. Programar en assembler siempre produce código mucho mas rápido, como lo dice eternal depende en gran parte del programador, pero tienes desventajas en ese sentido ya que el código muchas veces nisiquiera es portable de una maquina a otra aunque sean de la misma familia, cosa que con un lenguaje de mas alto nivel no sucede pues el compilador o la maquina virtual o como se llame en punto net el JIT del MSIL o lo que sea... se encarga de producir código de alta calidad de acuerdo a las caracteristicas propias de la maquina y/o del sistema operativo.
En este punto creo que se podria decir que el asm mas 'portable' hoy en dia seria el bytecode que se ejecuta para la maquina virtual de java.. pero tambien resulta ser falso ya que mauina virtual es una sola aunque este instalada en maquinas diferentes Yo no dije eso en ningun momento, no hable sobre la velocidad del codigo. En ese aspecto es incluso mucho mas dificil ganarle al compilador y se necesitan muchos mas conocimientos. No es lo mismo optimizar para tamaño que optimizar para velocidad. Y si, .NET y Java son muy portables, mientras esten sus respectivos 'ayudantes' instalados  PD. El lenguaje es assembly, assembler es el programa que ensambla.
4677
« en: Martes 6 de Septiembre de 2005, 08:37 »
A mi me suena que se le van a saturar los servidores
4678
« en: Martes 6 de Septiembre de 2005, 00:02 »
Je-Ni-Al! Gracias, esta  Lo siento por lo de compilar, tienes razon es ensamblar. Bueno, entonses es pocible ensamblar un programa en x OS y correrlo en otro OS totalmente diferente? Tiene que ser directo al BIOS? Ha, si, los codigos ensamblados son mas pequeños que los de c, c++, cobolt...? Grasias una vez mas. En la practica no es posible porque, como te comentaba antes, los Sistemas Operativos suelen tener un formato de ejecutable propio. Sin tener en cuenta que la BIOS solo es accesible directamente en S.O. de 16 bits (MS-DOS) y no en S.O. de 32 bits como Windows o Linux. Por lo tanto no es posible hacer siquiera un programa que solo haga ret ya que no es reconocido como un ejecutable por los dos S.O. al mismo tiempo. Si lo podrias hacer para CP/M y MS-DOS (el segundo esta MUY basado en el primero) con un ejecutable COM que justamente no tiene cabecera. Olvidandonos del formato que seria solo un problema del binario y no del codigo el verdadero inconveniente es la interfaz de los servicios que hace imposible portar un programa hecho en assembly de un S.O. a otro. En general al carecer de libreria de run time (rutinas de IO, cadenas, etc) el programa de assembly suele ser mas chico por menos codigo. El tamaño de las rutinas existentes en ambos binarios ya depende de la calidad del programador vs la calidad del compilador
4679
« en: Domingo 4 de Septiembre de 2005, 23:58 »
Hey, Hey, Solocodige@s! me pregunto, de que depende un programa compilado (de ASM) para correr en una maquina. libc.so.6, ld...? Si el programa es para un Sistema Operativo en concreto y este tiene un formato de ejecutable el programa debera seguirlo, teniendo sus respectivas cabeceras. Desde ese momento el programa no depende de nadie, un programa puede ser tan corto como una instruccion ret. En Linux concretamente ld es un enlazador que generara un archivo ejecutable con el formato requerido (elf comunmente) partiendo del codigo objeto. En este S.O. es posible interactuar directament a base de interrupciones por lo tanto la libc tampoco es indispensable. Lo mismo pasaria en Windows, aunque sus servicios no estan definidos estaticamente y varian version a version. De cualquier manera el ejemplo del ret sigue siendo valido. Si el programa es para MS-DOS los ejecutables tipo COM no tienen ningun tipo de cabecera, son el codigo simplemente con lo cual no necesitan ni dependen absolutamente de nada. Incluso pueden no usar los servicios de MS-DOS sino de la BIOS directamente. Por cierto el termino correcto es ensamblar y no compilar. Ese es mas o menos un panorama, si tenes alguna duda mas concreta tal vez te pueda responder mejor
4680
« en: Viernes 2 de Septiembre de 2005, 10:37 »
Esa libreria (OPENGL32) solo funciona en XP porque tiene importada la funcion IsWow64Process cuyos requisitos son: Requirements Client: Requires Windows XP. Server: Requires Windows Server 2003. Header: Declared in Winbase.h; include Windows.h. Library: Use Kernel32.lib.
Intenta conseguir una version un poco mas compatible.
4681
« en: Jueves 1 de Septiembre de 2005, 19:09 »
En Ingles lo tengo aca: \Program Files\Microsoft Visual Studio\Common\Tools
4682
« en: Jueves 1 de Septiembre de 2005, 18:25 »
Esta bien el programilla.
¿Seguro que viene con Visual C++ 6.0?
No me suena mucho el nombre.¿Que viene en el menu de herramientas o a parte? Si, no viene con el .NET 2003 pero si con el 6.0, esta en la carpeta tools (no tengo instalado el 6.0 aca).
4683
« en: Jueves 1 de Septiembre de 2005, 17:52 »
Es un error del ejecutable, un acceso a memoria que no es valida. ¿Como evitarlo? No conozco casi nada de VFP, intenta depurar tu programa y ver en que punto se da la excepcion.
4684
« en: Jueves 1 de Septiembre de 2005, 17:51 »
4685
« en: Jueves 1 de Septiembre de 2005, 09:50 »
El modo no tiene ningun contenido, en info tenes las informacion sobre ese modo si la funcion te devuelve 0 en AH, si te devuelve 1 es porque hubo un error. Todo eso teniendo en cuenta que VESA esta soportado y en AL te devuelve 4Fh. Si todo va bien en ES:DI vas a tener los datos sobre el modo, que podes ver en este pagina http://www.opferman.net/Text/svga.txt son algo asi: /* VESA Mode Information Structure */ typedef struct vesa_type { short ModeAttrib; char WindowA_Attrib, WindowB_Attrib; short WinGran, WinSize, SegWinA, SegWinB; long WindowPointer; short Bits_Per_Scanline, HorzRes, VertRes; char Width, Height, MemPlanes, BPP, NumBanks, MemType, SizeBank, NumberPages, Reserved, RedMaskSize, RedFieldPos, GreenMaskSize, GreenFieldSize, BlueMaskSize, BlueFieldSize, ReservedMaskSize, ReservedMaskPos, DirectColorModeInfo, ReservedBlock[216]; } VesaInfo, *VesaInfoPtr; Tambien aca podes encontrar informacion al respecto: http://www.ctyme.com/intr/rb-0274.htmProbablemente tu problema sea que no estas configurando bien el registro ES, ¿tu programa es un EXE? Si lo que queres es obtener el modo actual aca tenes como hacerlo: http://www.ctyme.com/intr/rb-0276.htm
4686
« en: Miércoles 31 de Agosto de 2005, 07:34 »
hola, gracias por la ayuda, ya se como escribir en el sector 0, averigue sobre una rutina de C llamada biosdisk y hare uso de ella, pero, ahora descubri que lo que debo escribir no es ni un exe ni un com (o almenos eso entiendo), sino un .bin el cual no se como generar con tasm, y ademas el codigo que he hecho no compila asi no mas creo que es porque no tiene la estructura normal de un programa corriente de ensamblador por lo que entiendo que debo traducir directamente a unos y ceros pero no se como, gracias Por partes: biosdisk no es de C, es de un compilador de Borland, NO TE RECOMIENDO que uses eso sino alguna de las alternativas descriptas arriba, son las maneras correctas de hacerlo. exe no podes usar porque tiene cabecera y el codigo del boot sector tiene que ser eso simplemente codigo. COM podes usar tranquilamente al ser un formato sin cabeceras, codigo puro. BIN es simplemente codigo en hexadecimal, no existe nada que sea binario en archivos, la minima unidad de datos es el byte, despues el micro (creo) lo interpretara en binario. En resumen si haces un .COM con su org a 07C00h lo podes usar en el primer sector del diskette.
4687
« en: Martes 30 de Agosto de 2005, 08:35 »
4688
« en: Martes 30 de Agosto de 2005, 07:41 »
Era mucho mas simple como venias haciendolo (sin archivo de definiciones). Por cierto WINAPI es una macro que esta definida jutsamente a __stdcall, con lo cual pusiste lo que te dije extern "C" y __stdcall pero sacaste algo que ya usabas antes (dllexport).
4689
« en: Martes 30 de Agosto de 2005, 07:40 »
4690
« en: Lunes 29 de Agosto de 2005, 21:40 »
Yo lo sigo viendo en retos
4691
« en: Lunes 29 de Agosto de 2005, 12:11 »
El problema es el que marca VB, no encuentra la funcion GetCharX exportada en la libreria. Esto pasa porque la estas exportando como C++: ?GetCharX@@YAPADHH@Z. La tenes que exportar como C y stdcall para que no te decore el nombre y VB la pueda usar (VB no soporta otra convencion de llamada que no sea stdcall). En el .H: extern "C" EXPORT char * __stdcall GetCharX(int, int); En el .CPP: extern "C" EXPORT char * __stdcall GetCharX(int iCode, int bPage) De cualquier manera tampoco esta correcto el codigo, estas devolviendo un puntero a una variable local y estas variables estan en la pila, tenes un par de opciones pero la mas facil es que pongas sTheCode fuera de la funcion.
4692
« en: Lunes 29 de Agosto de 2005, 07:37 »
Hola a todos, saben hace ya algun tiempo tengo una libreria vesa, y de hecho corre bien en sistemas operativos que no tengan tecnologia nt(como XP), precisamente juank menciono que no corren el este tipo de sistemas operativos, pero he descubierto que en algunos computadores si corren mientras tanto en otros no, y quisiera saber por que es capaz de correr en algunas computadoras si, es mas por que en una misma computadora con XP, en ocasiones corre y en otras ocasiones, ya con un sistema nuevo pero al fin al cabo XP no. XP es 100% NT.
4693
« en: Domingo 28 de Agosto de 2005, 20:49 »
Hola, es mi primer post y soy algo novato en asm, estoy trabajando en este proyecto y lo que no logro comprender bien es como escribir en el diskette, entiendo lo del sector 0, y cargar en memoria 7C00, pero me he encontrado con que aparentemente hay que escribir ceros y unos, o un .bin, en realidad no comprendo como, vi el ejemplo aki mostrado (el de BOB) pero lo que necesito saber es como funciona el COPYBOOT.EXE, y tengo la misma duda de otro colega que preguntaba por los parametros, gracias a quien lea esto! La cuestion es escribir en el primer sector porque la BIOS carga ese sector en la direccion 7C00:000 y le transfiere el control mediante un jmp, entonces ahi tiene que estar el codigo inicial. Sino me equivoco El COPYBOOT.EXE tiene un parametro para especificar el sector de comienzo de escritura, para escribir el loader usa el 0 (por lo explicado anteriormente) y para escribir el Kernel usa el 1, sector que es cargado en memoria mediante el loader. No se como hace exactamente el COPYBOOT.exe y la verdad estoy bastante cansado como para mirarlo (podes usar el debug.com para verlo por ej.) pero podes usar la BIOS, mas concretamente la interrupcion 13h provee varios servicios, entre otros el 02h para leer y el 03h para escribir. Tambien MS-DOS provee servicios para leer y escribir en las interrupciones 25h y 26h respectivamente. Aca podes encontrar informacion sobre las interrupciones mencionadas anteriormente: http://www.ctyme.com/rbrown.htm
4694
« en: Domingo 28 de Agosto de 2005, 18:35 »
4695
« en: Viernes 26 de Agosto de 2005, 10:46 »
Estuve pensando un ratito mas, lastima que no lo hago mucho  , y me parece que el Shell no tiene porque estar en el Kernel. En realidad ni siquiera me parece logico, podriamos proveer los servicios de ejecucion y de file system mediante interrupciones y dejar al shell ser un ejecutable mas (estilo command.com).
4696
« en: Viernes 26 de Agosto de 2005, 10:03 »
Si, concuerdo con Bob, seria mejor solo usar herramientas de terceros para construir el S.O. y que sea todo el codigo hecho por nosotros. Doy mi voto para FASM y les propongo un par de cositas para un futuro no tan lejano, esto se podria leer reemplazando FAT12 por _nuestro_file_system como decia Bob: _El OS ya que va en diskette podria soportar FAT12 _El loader obviamente se escribiria en el primer sector pero segun el formato de FAT12 (que empieza con un jmp al codigo del loader y sigue con campos indicativos) http://www.mega-tokyo.com/osfaq2/index.php/FAT12%20document_El Kernel (un solo archivo de codigo finalmente) podria escribirse en el diskette con un copy paste desde Windows o un copy desde MS-DOS Modulitos: loader: se encargaria de leer el disquette en busca del kernel, podria usar un nombre fijo siempre, podria complementar eso con la espera de una tecla como F5 para permitir elegir el nombre, todas las ideas que se nos ocurran y podamos implementar. Seria un modulo de codigo separado. kernel: se encargaria entre otras cosas de establecer las interrupciones que proveera el S.O. (sus servicios) que inicialmente serian init_app y exit_app. Seria un modulo de codigo separado con otro submodulos que en este caso serian archivos en realidad. Dentro del Kernel podriamos tener (y serviria para distribuir tareas): Keyboard: encargado de entrada y salida por teclado Shell: encargado de la interfaz (con sus comandos como ls/dir, info del sistema y de iniciar el proceso de ejecucion de otros programas) FileSystem: encargado de todo lo relacionado con el FileSystem, enumeracion de directorios/archivos, lectura de los mismos y eventualmente escritura Utils: encargado de cosas como strings Video: encargado de salida grafica (mas adelante) Bueno, me voy unos dias de vacaciones asi que les dejo un par de cosas para que las vayan pensando y comenten lo que les parece
4697
« en: Viernes 26 de Agosto de 2005, 01:51 »
No se exactamente como es el del messenger 7.0, quizas te refieras a la ventana a parte que salia con los mensajes de correo y las news. En el Google Talk te aparece nada mas conectarte en el tray icon una ventanita emergente con un resumen de cada mensaje no leido y una s flechitas para ir pasando de uno a otro.Es bastante practico Ah, como las del Outlook, ¿Estan tan buenas como las del Outlook?
4698
« en: Viernes 26 de Agosto de 2005, 00:41 »
Como comentaba en el otro foro creo que no se puede hacer (legalmente) un Sistema Operativo con MASM con lo cual queda excluido, habria que decidir entre FASM y NASM como bien decis. En cuanto al primer objetivo me parece correcto y en sintonia con todos tus mensajes. Primero intentemos hacer algo que podamos hacer y no pensemos hacer un Windows/Linux que es una utopia. Un nanoDOS no estaria mal para empezar, podriamos delinear un par de modulos asi todos pueden contribuir.
4699
« en: Jueves 25 de Agosto de 2005, 20:30 »
Primero que nada no es un error de Windows sino de un ejecutable en particular REGEDT32.EXE, seria interesante saber si tambien existe el error en REGEDIT.exe porque no conozco a mucha gente que use el otro ...
4700
« en: Miércoles 24 de Agosto de 2005, 18:34 »
AllocConsole(); HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); DWORD ret = 0; char str[] = "hola mundo"; WriteFile(hOut, str, strlen(str), &ret, 0);
Páginas: 1 ... 186 187 [188] 189 190 ... 205
|
|
|