Preguntilla de programación de Arcades
- na_th_an
- Amiga 1200
- Mensajes: 1273
- Registrado: 10 Oct 2012, 11:17
- Sistema Favorito: (Otro)
- primer_sistema: Spectrum +2
- consola_favorita: Sony PlayStation 1
- Primera consola: Sega Master System
- Gracias dadas: 18 veces
- Gracias recibidas: 15 veces
Re: Preguntilla de programación de Arcades
Sólo quiero añadir que el C es probablemente el lenguaje más sencillo que hay, sobre todo para programar cosas de bajo nivel (como puede ser un juego para una máquina de 8 o 16 bits). Sólo hay que ponerse...
- mcleod_ideafix
- Amiga 2500
- Mensajes: 5316
- Registrado: 06 Oct 2009, 04:12
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Vectrex
- Primera consola: TV Games/Pong Clone
- Ubicación: Jerez de la Frontera
- Gracias dadas: 12 veces
- Gracias recibidas: 54 veces
- Contactar:
Re: Preguntilla de programación de Arcades
na_th_an escribió:Sólo quiero añadir que el C es probablemente el lenguaje más sencillo que hay, sobre todo para programar cosas de bajo nivel (como puede ser un juego para una máquina de 8 o 16 bits). Sólo hay que ponerse...
O el nucleo de un sistema operativo completo, si te pones mucho mucho. O el nucleo y todo el software básico de sistemas de dicho SO, si ya estás en plan berzek

Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista
- aRbert-II
- Atari 1040 STf
- Mensajes: 892
- Registrado: 29 Dic 2004, 03:03
- primer_sistema: PC
- consola_favorita: Sega Master System
- Primera consola: TV Games/Pong Clone
- Ubicación: Cádiz
- Gracias dadas: 234 veces
- Gracias recibidas: 89 veces
Re: Preguntilla de programación de Arcades
mcleod_ideafix escribió:na_th_an escribió:Sólo quiero añadir que el C es probablemente el lenguaje más sencillo que hay, sobre todo para programar cosas de bajo nivel (como puede ser un juego para una máquina de 8 o 16 bits). Sólo hay que ponerse...
O el nucleo de un sistema operativo completo, si te pones mucho mucho. O el nucleo y todo el software básico de sistemas de dicho SO, si ya estás en plan berzek
O el Quake si ya te sales del pellejo


.:::: aRbert-II ::::.
.:: aRberto.com ::.
.:: aRberto.com ::.
- explorer
- MSX Turbo R
- Mensajes: 443
- Registrado: 11 May 2014, 17:10
- Sistema Favorito: Atari ST
- primer_sistema: Atari 800XL/600XL
- consola_favorita: Atari 2600
- Primera consola: Atari 2600
- Ubicación: Valladolid, España
- Gracias dadas: 2 veces
- Gracias recibidas: 162 veces
- Contactar:
Re: Preguntilla de programación de Arcades
na_th_an escribió:Sólo quiero añadir que el C es probablemente el lenguaje más sencillo que hay, sobre todo para programar cosas de bajo nivel (como puede ser un juego para una máquina de 8 o 16 bits). Sólo hay que ponerse...
Cuidado con esta afirmación...
Es cierto que C es fácil de aprender (unos 40 identificadores, unas pocas reglas de edición-compilación-enlazado), pero...
- El concepto de puntero es complicado para quienes no entienden el funcionamiento de un ordenador a muy bajo nivel
- No hay control de acceso a los arreglos, así que, en cuanto te descuidas, estás leyendo/escribiendo en una zona de memoria que no debes
- Lo mismo para el control de la pila en las llamadas a las subrutinas... puedes "pasarte" leyendo lo que no debes (origen de muchos exploit)
- Tienes que ocuparte de pedir y soltar memoria. Lo normal es pedirlo al sistema operativo con malloc(), calloc() y resto de la familia, pero sólo si el sistema tiene algún mecanismo de gestión de memoria
Y como hay bibliotecas para cualquier cosa... pues por eso se enseña en todas las carreras técnicas y de ciencias.
Hay otros lenguajes más fáciles de aprender. Generalmente, los lenguajes de más alto nivel son más fáciles.
- mcleod_ideafix
- Amiga 2500
- Mensajes: 5316
- Registrado: 06 Oct 2009, 04:12
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Vectrex
- Primera consola: TV Games/Pong Clone
- Ubicación: Jerez de la Frontera
- Gracias dadas: 12 veces
- Gracias recibidas: 54 veces
- Contactar:
Re: Preguntilla de programación de Arcades
explorer escribió:na_th_an escribió:Sólo quiero añadir que el C es probablemente el lenguaje más sencillo que hay, sobre todo para programar cosas de bajo nivel (como puede ser un juego para una máquina de 8 o 16 bits). Sólo hay que ponerse...
Cuidado con esta afirmación...
Es cierto que C es fácil de aprender (unos 40 identificadores, unas pocas reglas de edición-compilación-enlazado), pero...No todo es malo... precisamente el acceso a la memoria permite programar en sistemas antiguos sin tener que liarnos con el rollo de la protección de memoria a zonas "prohibidas".
- El concepto de puntero es complicado para quienes no entienden el funcionamiento de un ordenador a muy bajo nivel
- No hay control de acceso a los arreglos, así que, en cuanto te descuidas, estás leyendo/escribiendo en una zona de memoria que no debes
- Lo mismo para el control de la pila en las llamadas a las subrutinas... puedes "pasarte" leyendo lo que no debes (origen de muchos exploit)
- Tienes que ocuparte de pedir y soltar memoria. Lo normal es pedirlo al sistema operativo con malloc(), calloc() y resto de la familia, pero sólo si el sistema tiene algún mecanismo de gestión de memoria
Por eso el C está reservado a programadores "de verdad". Programadores que ya están compilando el código en la cabeza y viendo cómo quedará en código máquina. Programadores que saben cuándo usar el -1 como índice a un array. Programadores que saben que hacer cosas como m[ i ][ j ] puede suponer una multiplicación y por tanto pasan de subíndices y usan directamente punteros para evitarla. Programadores que escriben un código con switch/case de forma que el compilador infiera que es mejor generar una tabla de saltos. Programadores que controlan la máquina y no dejan que sea la máquina quien les controles a ellos.
Programadores,... en definitiva,... de pelo en pecho (oh yeah!)
(todo esto dígase con la voz de Constantino Romero mientras aparecen imágenes de Clint Eastwood y Chuck Norris programando en C... sin compilador)
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista
- josepzin
- Amiga 2500
- Mensajes: 3103
- Registrado: 12 Ene 2009, 14:36
- Sistema Favorito: C64
- primer_sistema: ZX81
- Ubicación: Carthagonova
- Gracias dadas: 4 veces
- Gracias recibidas: 63 veces
- Contactar:
- zup
- Amiga 2500
- Mensajes: 3013
- Registrado: 04 Sep 2009, 20:07
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Nintendo DS/3DS
- Primera consola: Nintendo GameBoy
- Ubicación: Navarra
- Gracias dadas: 86 veces
- Gracias recibidas: 359 veces
- Contactar:
Re: Preguntilla de programación de Arcades
explorer escribió:Cuidado con esta afirmación...
En cierto modo estoy de acuerdo pero también bastante en desacuerdo. BASIC y Pascal son mejores para aprender, pero cuando ya intentas meterte a hacer algo a bajo nivel te quedas un poco "encerrado". La ventaja de C es que puedes usar el mismo lenguaje para programar a alto y a bajo nivel.
Por otra parte... los inconvenientes que has citado son todos opcionales.
- Es posible hacer programas sin usar un solo puntero. El hecho de que sea C, no significa que tengas que usarlos; de la misma manera usar C++ no implica tener que usar objetos.
- Revisa los parámetros del compilador. Hay comprobaciones que se pueden habilitar y te ahorrarían errores.
- Otros lenguajes (Pascal, por ejemplo) permiten también punteros y nunca he escuchado esa queja de ellos.
- Si no te gusta C, usa el compilador de C++. Habilita muchas comprobaciones que vienen deshabilitadas en el de C.
En mi caso, pasar de (Turbo) Pascal a C fue un proceso aburrido. Había aprendido Pascal en un instituto y me tocó C en otro... digamos que me pegué un curso donde solo me contaban cosas interesantes durante 5 minutos por clase. C es taaaan complicado que hubiera dado lo mismo que me lo hubieran enseñado de primeras.
Por otra parte, te has dejado en el tintero uno de los mayores problemas que me ha dado C... que no tiene comprobación estricta de tipos (lo tiene C++, y C si se lo habilitas al compilador). Tratar un int como dos char puede ser útil de vez en cuando, pero no comprobarlo durante la compilación puede dar mucho dolor de cabeza.
Como curiosidad, hice una serie de programitas en Pascal a bajo nivel (metiéndome con las rutinas de BIOS directamente, acceso a puertos, con el PIT, interrupciones y acceso directo a la memoria de vídeo)... y todo eso en Turbo Pascal 5.5. Y como dos años más tarde me tocó ensamblador del 8086, acabé haciendo como trabajo de clase una librería de vídeo VESA que se podía compilar como librería para Turbo Pascal o Turbo C. Así que lo de que Pascal no sea adecuado para bajo nivel...
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start.
Además vendo cosas!
Además vendo cosas!
- explorer
- MSX Turbo R
- Mensajes: 443
- Registrado: 11 May 2014, 17:10
- Sistema Favorito: Atari ST
- primer_sistema: Atari 800XL/600XL
- consola_favorita: Atari 2600
- Primera consola: Atari 2600
- Ubicación: Valladolid, España
- Gracias dadas: 2 veces
- Gracias recibidas: 162 veces
- Contactar:
Re: Preguntilla de programación de Arcades
No me refiero a que tú aprendas, que sabemos que sabes programar y que sabes lo que es un puntero o una referencia. Me refiero a enseñar ese concepto a las nuevas generaciones, que viven completamente aisladas de lo que es el bajo nivel, ahorro de memoria, y medir los recursos consumidos/disponibles.
Estamos hablando del lenguaje C (lenguaje que me gusta y que sigo usando), y no de las características del compilador. En el antiquísimo Turbo C podíamos activar la opción de comprobación de argumentos, y veías en el código final cómo había incorporado unos pocos bytes extra al comienzo de cada subrutina que comprobaban el número de argumentos pasados. Pero esto es una característica del compilador, no del lenguaje -para eso existen los prototipos, pero aún así, en C, puedes saltártelos-. Puedes encontrarte con compiladores minúsculos como el ZCC que ni siquiera lo tienen -por fortuna, no vas a programar grandes cosas con él-.
Los punteros no son sólo el char *p;, sino que también son los arreglos (array). Cuando estás en clase y les enseñas a los alumnos el concepto de arreglo, vector o matriz, todo va bien, salvo cuando comienzas a decir que, por ejemplo para dos dimensiones, en la primera dimensión, el primer arreglo guarda punteros a los comienzos de los arreglos de la segunda dimensión. Les ves las caras, y aunque dibujes flechitas, se quedan pensando que qué es eso. Al final lo aceptan (porque lo asimilan a los iconos con flechas del escritorio de Windows
), pero lo que no puedo es explicárselo a muy bajo nivel porque no es el objetivo de la asignatura.
En cambio, el Pascal es muy bueno en ese sentido. Se entiende enseguida lo de referirse a una estructura, crear un arreglo de estructuras... pero la gran mayoría de los alumnos no sabe que están manejando punteros de memoria, y se quedan sólo con la idea abstracta de "referencia a".
La comprobación de tipos para mi es fundamental, pero en el sentido completamente distinto: necesito que no se haga. Yo uso todos los días un lenguaje que no hace esa comprobación, y es ideal para tratar una variable como un número en una línea del programa, y tratarla como cadena de caracteres en la siguiente.
Los niños de ahora aprenden Scratch y Python, que son de muy alto nivel (el Scratch es más bien "herramienta de autor"). Incluso hay sitios donde, como dice josepzin
, se enseña informática sin ordenador (vídeo).
Estamos hablando del lenguaje C (lenguaje que me gusta y que sigo usando), y no de las características del compilador. En el antiquísimo Turbo C podíamos activar la opción de comprobación de argumentos, y veías en el código final cómo había incorporado unos pocos bytes extra al comienzo de cada subrutina que comprobaban el número de argumentos pasados. Pero esto es una característica del compilador, no del lenguaje -para eso existen los prototipos, pero aún así, en C, puedes saltártelos-. Puedes encontrarte con compiladores minúsculos como el ZCC que ni siquiera lo tienen -por fortuna, no vas a programar grandes cosas con él-.
Los punteros no son sólo el char *p;, sino que también son los arreglos (array). Cuando estás en clase y les enseñas a los alumnos el concepto de arreglo, vector o matriz, todo va bien, salvo cuando comienzas a decir que, por ejemplo para dos dimensiones, en la primera dimensión, el primer arreglo guarda punteros a los comienzos de los arreglos de la segunda dimensión. Les ves las caras, y aunque dibujes flechitas, se quedan pensando que qué es eso. Al final lo aceptan (porque lo asimilan a los iconos con flechas del escritorio de Windows

En cambio, el Pascal es muy bueno en ese sentido. Se entiende enseguida lo de referirse a una estructura, crear un arreglo de estructuras... pero la gran mayoría de los alumnos no sabe que están manejando punteros de memoria, y se quedan sólo con la idea abstracta de "referencia a".
La comprobación de tipos para mi es fundamental, pero en el sentido completamente distinto: necesito que no se haga. Yo uso todos los días un lenguaje que no hace esa comprobación, y es ideal para tratar una variable como un número en una línea del programa, y tratarla como cadena de caracteres en la siguiente.
Los niños de ahora aprenden Scratch y Python, que son de muy alto nivel (el Scratch es más bien "herramienta de autor"). Incluso hay sitios donde, como dice josepzin

- mentalthink
- Amiga 2500
- Mensajes: 2840
- Registrado: 11 Abr 2010, 15:06
- Gracias dadas: 45 veces
- Gracias recibidas: 14 veces
Re: Preguntilla de programación de Arcades
Lo que dice explorer de los punteros tienes toda la razón, yo que voy aprendiendo a mi rollo, aún no me entero demasiado para que valén, unas coasas buenas que he sacado en claro de lo poco que se de ASM, es que ya los veo de otra manera, pero si el concepto de puntero y a mi por lo menos el de Classe, hasta que no me lo explico un humano y no un libro, como que no había manera, mucho volante, muchas ruedas y coches pero joer escribelo para gente que no tiene ni idea...
Y sobre python al cual le estoy metiendo mano, es como dicen en un par de libros, el lenguaje que todo programador o no, que debería aprender... a parte de divertido y sencillo, ojo que a veces lo veo un poco follón, pero se puede hacer cualquier cosa sin picar millones de líneas de código, al menos para hacer bosquejos de programas , a un programador de C le debería ir bien...




Y sobre python al cual le estoy metiendo mano, es como dicen en un par de libros, el lenguaje que todo programador o no, que debería aprender... a parte de divertido y sencillo, ojo que a veces lo veo un poco follón, pero se puede hacer cualquier cosa sin picar millones de líneas de código, al menos para hacer bosquejos de programas , a un programador de C le debería ir bien...
- mcleod_ideafix
- Amiga 2500
- Mensajes: 5316
- Registrado: 06 Oct 2009, 04:12
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Vectrex
- Primera consola: TV Games/Pong Clone
- Ubicación: Jerez de la Frontera
- Gracias dadas: 12 veces
- Gracias recibidas: 54 veces
- Contactar:
Re: Preguntilla de programación de Arcades
explorer escribió:salvo cuando comienzas a decir que, por ejemplo para dos dimensiones, en la primera dimensión, el primer arreglo guarda punteros a los comienzos de los arreglos de la segunda dimensión. Les ves las caras, y aunque dibujes flechitas, se quedan pensando que qué es eso. Al final lo aceptan (porque lo asimilan a los iconos con flechas del escritorio de Windows), pero lo que no puedo es explicárselo a muy bajo nivel porque no es el objetivo de la asignatura.
En mi asignatura antes de meternos con los punteros les hemos enseñado qué es la memoria, y que las variabels van en la memoria y por tanto tienen una dirección, etc. De esa forma el concepto de puntero no les resulta tan abstracto cuando lo damos.
Por otra parte, ¿cómo es eso de que en dos dimensiones, el array fila guarda los punteros de los comienzos de cada array columna? Cuando defines una matriz, por ejemplo: char m[10][10] lo que se genera es un array lineal de 100 chars, no un array de 10 punteros a char apuntando cada elemento a otro array de 10 chars. Probablemente haya una opción en algún compilador para que las matrices las genere así, pero nunca me he topado con ello, y no creo siquiera que sea parte del comportamiento estándar.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 8 invitados