OK, ZX-81, para mí esa es desde luego la parte más fácil, pues es todo operaciones con bits, etc, y eso lo controlo bastante.
Por cierto, me imagino que como lenguaje de pogramación, el 100% me aconsejaréis VC++, ¿nor? ¿se puede encasquetar el VC++ al entonno "Visual Studio Code?
Primeros pasos para pogramar un emulador
- robcfg
- Amiga 2500
- Mensajes: 2190
- Registrado: 07 May 2009, 15:34
- Sistema Favorito: Amstrad CPC
- primer_sistema: Atari 800XL/600XL
- Ubicación: Estocolmo
- Gracias dadas: 1046 veces
- Gracias recibidas: 213 veces
- Contactar:
Re: Primeros pasos para pogramar un emulador
Claro que se puede: https://code.visualstudio.com/docs/languages/cpp
Hay mucha información en internet si tienes cualquier problema.
Hay mucha información en internet si tienes cualquier problema.
- Bubu
- Atari 1040 STf
- Mensajes: 895
- Registrado: 04 Abr 2018, 23:10
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Atari 2600
- Primera consola: Nintendo GameBoy
- Gracias dadas: 21 veces
- Gracias recibidas: 67 veces
Re: Primeros pasos para pogramar un emulador
Aro, lo malo es dibujar la pantalla. Por lo que veo el VC++ en VS-Code sólo es pal código, no hay un entonno gráfico pa poner menús, botones, etc. Creo que la solución es con el VS-Community.
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!
- chernandezba
- MSX Turbo R
- Mensajes: 264
- Registrado: 11 Mar 2015, 10:42
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: ZX81
- consola_favorita: NeoGeo
- Primera consola: Atari 2600
- Gracias dadas: 13 veces
- Gracias recibidas: 167 veces
Re: Primeros pasos para pogramar un emulador
Bubu escribió:
Por cierto, me imagino que como lenguaje de pogramación, el 100% me aconsejaréis VC++, ¿nor? ¿se puede encasquetar el VC++ al entonno "Visual Studio Code?
100%?? No, como recordarás yo dije C, puro y duro, nada de Visual ni de ++
El Visual Studio Core puedes usarlo como editor, también tienes Atom o CLion, cada cual con sus gustos
- chernandezba
- MSX Turbo R
- Mensajes: 264
- Registrado: 11 Mar 2015, 10:42
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: ZX81
- consola_favorita: NeoGeo
- Primera consola: Atari 2600
- Gracias dadas: 13 veces
- Gracias recibidas: 167 veces
Re: Primeros pasos para pogramar un emulador
Bubu escribió:OK, ZX-81, para mí esa es desde luego la parte más fácil, pues es todo operaciones con bits, etc, y eso lo controlo bastante.
Si te refieres a emular el Z80, no basta con saber de bits. Como te dice @ZX-81, hay que hacerlo muy bien o habrán juegos que fallarán.
Sobretodo temas de opcodes no documentados, comportamientos no documentados o la memoria contenida... si no haces esto perfecto, aunque sepas de operaciones de bits, pues...

- Namek
- Atari 1040 STf
- Mensajes: 840
- Registrado: 11 Jul 2011, 13:13
- Gracias dadas: 18 veces
- Gracias recibidas: 63 veces
Re: Primeros pasos para pogramar un emulador
Me he animado y voy a intentar hacer un emulador de Spectrum lo mas básico posible, estoy usando FreeBASIC y por ahora tengo la representacion de la pantalla sin efecto FLASH por ahora, a ver que os parece... 
Se podria simplificar este código? Ya que lo que me interesa es simplicidad, no rendimiento, mi idea es que pueda servir de base a los interesados.

Se podria simplificar este código? Ya que lo que me interesa es simplicidad, no rendimiento, mi idea es que pueda servir de base a los interesados.
Código: Seleccionar todo
DIM MEMORY(65536) AS BYTE
DIM key AS STRING
DIM AS INTEGER X,Y1,Y2,Y3,SCR,ATTR,INK,PAPER,COL,BORDER
DIM V AS BYTE
SCREEN 14,8
dim as integer mypal(0 to 255)
mypal(1)=&hB90000
mypal(2)=&h0000B9
mypal(3)=&hB900B9
mypal(4)=&h00B900
mypal(5)=&hB9B900
mypal(6)=&h00B9B9
mypal(7)=&hB9B9B9
mypal(9)=&hFF0000
mypal(10)=&h0000FF
mypal(11)=&hFF00FF
mypal(12)=&h00FF00
mypal(13)=&hFFFF00
mypal(14)=&h00FFFF
mypal(15)=&hFFFFFF
palette using mypal
open "screen.scr" for binary as #1
SCR=16384
do until(eof(1))
get #1,,V
MEMORY(SCR)=V
SCR=SCR+1
loop
close #1
BORDER=0
ATTR=22528
SCR=16384
mypal(0)=mypal(BORDER)
palette using mypal
FOR Y1=24 TO 215 STEP 64
FOR Y2=0 TO 7
FOR Y3=Y1+Y2 TO Y1+63 STEP 8
FOR X=32 TO 287 STEP 8
INK=MEMORY(ATTR) AND 7
PAPER=(MEMORY(ATTR) AND 56)/8
IF (MEMORY(ATTR) AND 64)=64 THEN
INK=INK+8
PAPER=PAPER+8
END IF
IF INK=0 THEN INK=8
IF PAPER=0 THEN PAPER=8
V=MEMORY(SCR)
COL=PAPER
IF V<0 THEN
COL=INK
V=V+128
END IF
PSET (X,Y3),COL
COL=PAPER
IF V>63 THEN
COL=INK
V=V-64
END IF
PSET (X+1,Y3),COL
COL=PAPER
IF V>31 THEN
COL=INK
V=V-32
END IF
PSET (X+2,Y3),COL
COL=PAPER
IF V>15 THEN
COL=INK
V=V-16
END IF
PSET (X+3,Y3),COL
COL=PAPER
IF V>7 THEN
COL=INK
V=V-8
END IF
PSET (X+4,Y3),COL
COL=PAPER
IF V>3 THEN
COL=INK
V=V-4
END IF
PSET (X+5,Y3),COL
COL=PAPER
IF V>1 THEN
COL=INK
V=V-2
END IF
PSET (X+6,Y3),COL
COL=PAPER
IF V=1 THEN COL=INK
PSET (X+7,Y3),COL
SCR=SCR+1
ATTR=ATTR+1
NEXT X
NEXT Y3
IF Y2<7 THEN ATTR=ATTR-256
NEXT Y2
NEXT Y1
WHILE key=""
key=INKEY
WEND
-
- MSX Turbo R
- Mensajes: 418
- Registrado: 21 Dic 2011, 10:11
- Ubicación: Madrid
- Gracias dadas: 797 veces
- Gracias recibidas: 31 veces
Re: Primeros pasos para pogramar un emulador
Namek escribió:Me he animado y voy a intentar hacer un emulador de Spectrum lo mas básico posible, estoy usando FreeBASIC y por ahora tengo la representacion de la pantalla sin efecto FLASH por ahora, a ver que os parece...
Lo he intentado pero solo me aparecen dos ventanas en negro

EDIT: Ah! vale, es que hace falta un archivo .scr
Ahora si que funciona, estoy viendo la pantalla del Athena y es la reos$·%

- dondiego
- Atari 1040 STf
- Mensajes: 993
- Registrado: 30 May 2013, 22:05
- Sistema Favorito: PC
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Sony PlayStation 2
- Primera consola: Atari 2600
- Ubicación: Granada
- Gracias dadas: 27 veces
- Gracias recibidas: 75 veces
Re: Primeros pasos para pogramar un emulador
Bubu escribió:Por lo que veo el VC++ en VS-Code sólo es pal código
Es que el VS Code no es un IDE es un editor. El IDE es el VS 2017.
Yo uso tanto VS (porque tengo que hacerlo) como Code::Blocks con MinGW y en linux (gcc).
El editor de VS no me convence mucho y el compilador de C no vale nada, reconocido por ellos mismos, no soporta ni C99. El de C++ tampoco es que sea muy bueno que digamos.
- Bubu
- Atari 1040 STf
- Mensajes: 895
- Registrado: 04 Abr 2018, 23:10
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Atari 2600
- Primera consola: Nintendo GameBoy
- Gracias dadas: 21 veces
- Gracias recibidas: 67 veces
Re: Primeros pasos para pogramar un emulador
Namek, el poblema es que FreeBASIC no implementa disparadores (triggers), y sin ellos nu sé cómo vas a hacer que el Z80 ejecute cosas y la ULA muestre los pantallazos, ni sé cómo vas a controlar los timings.
Lo que sí veo que es un acierto es a la hora de pintar: simplemente haces PSET y ya tienes un puntito dibujado.
dondiego, yo estoy ahora instalando el VS Community, que sí integra IDE's, y además le instalas el VC++ y por lo visto va fino, fino. A ver si lo consigo y te cuenco. Si alguien tiene una opción mejón soy todo orejas.
Lo que sí veo que es un acierto es a la hora de pintar: simplemente haces PSET y ya tienes un puntito dibujado.
dondiego, yo estoy ahora instalando el VS Community, que sí integra IDE's, y además le instalas el VC++ y por lo visto va fino, fino. A ver si lo consigo y te cuenco. Si alguien tiene una opción mejón soy todo orejas.
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!
- Namek
- Atari 1040 STf
- Mensajes: 840
- Registrado: 11 Jul 2011, 13:13
- Gracias dadas: 18 veces
- Gracias recibidas: 63 veces
Re: Primeros pasos para pogramar un emulador
Bubu escribió:Namek, el poblema es que FreeBASIC no implementa disparadores (triggers), y sin ellos nu sé cómo vas a hacer que el Z80 ejecute cosas y la ULA muestre los pantallazos, ni sé cómo vas a controlar los timings.
Lo que sí veo que es un acierto es a la hora de pintar: simplemente haces PSET y ya tienes un puntito dibujado.
Pues simplemente voy a usar una variable para el PC (Program Counter) y empezando desde el valor 0 ire leyendo el byte al que apunte y segun que valor sea emulare la instruccion del Z80 correspondiente, y cada cierto numero de operaciones dibujare la pantalla y a ver que pasa...


¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados