forked from cpcitor/cpcec
-
Notifications
You must be signed in to change notification settings - Fork 0
/
cpcec-s.txt
1012 lines (934 loc) · 58.6 KB
/
cpcec-s.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# CPCEC -- http://cngsoft.no-ip.org/cpcec.htm #
#### ###### #### ####### #### -------------------------
## ## ## ## ## ## ## # ## ## CPCEC, plain text Amstrad
## ## ## ## ## # ## CPC emulator written in C
## ##### ## #### ## as a postgraduate project
## ## ## ## # ## by Cesar Nicolas-Gonzalez
## ## ## ## ## ## # ## ## since 2018-12-01 till now
#### #### #### ####### #### -------------------------
## Introducción ##
CPCEC es un emulador de la familia de microordenadores domésticos Amstrad CPC
(modelos 464, 664, 6128, Plus y GX4000) cuyo objetivo es ser fiel al hardware
original y eficiente en sistemas modernos corrientes. Para ello ofrece una
emulación fidedigna del microprocesador Z80 y reproduce el comportamiento de los
chips de imagen CRTC 6845 y Gate Array, del chip de sonido PSG AY-3-8912, de los
demás circuitos presentes en el hardware original, y de las unidades de cinta y
disco que hacían posible la carga y ejecución del software existente.
El software y la documentación se proporcionan "tal cual" sin garantía alguna.
El código fuente y los binarios de CPCEC siguen la licencia GNU General Public
License v3, como se ve en el fichero GPL.TXT adjunto al paquete.
## Requisitos e instalación ##
La versión normal de CPCEC requiere un sistema operativo Microsoft Windows 2000
o posterior, mientras que la versión para SDL2 necesita cualquier sistema
operativo que disponga de la librería SDL2 [http://www.libsdl.org/] desde la
versión 2.0.4 o superior. El hardware mínimo es el propio de dichos sistemas
operativos, y se recomienda que el microprocesador central funcione a 400 MHz
por lo menos. La resolución de pantalla en píxeles debe ser 800x600 como mínimo.
Una tarjeta de sonido es opcional, así como emplear un joystick. El ratón puede
emular una pistola de luz a elección del usuario.
El emulador se compone de varios ficheros: los binarios ejecutables (por defecto
CPCEC.EXE y ZXSEC.EXE para Windows) y los ficheros de firmware CPC464.ROM,
CPC664.ROM, CPC6128.ROM, CPCADOS.ROM, CPCPLUS.ROM, SPEC128K.ROM, SPEC-P-2.ROM,
SPEC-P-3.ROM y SPECTRUM.ROM. Todos ellos deben ser copiados en un mismo
directorio, idealmente creado para alojar el emulador.
Los binarios pueden ser compilados a partir de los ficheros fuente siguiendo las
instrucciones incluidas a continuación. GCC 4.9.2, GCC 5.1.0, Pelles C 4.50.113,
TCC 0.9.27 y Clang 3.7.1 funcionan correctamente; GCC 4.7.1 comete fallos graves
en la compilación y puede generar binarios inválidos.
Los binarios para Windows pueden ser compilados desde GCC (o compatibles)
mediante los siguientes comandos:
windres cpcec.rc -Ocoff -ocpcec.res
gcc -mwindows cpcec.res -O2 -xc cpcec.c -luser32 -lgdi32 -lwinmm
-lcomdlg32 -lshell32 -ocpcec.exe
windres zxsec.rc -Ocoff -ozxsec.res
gcc -mwindows zxsec.res -O2 -xc zxsec.c -luser32 -lgdi32 -lwinmm
-lcomdlg32 -lshell32 -ozxsec.exe
La posibilidad de emplear opcionalmente DirectDraw consiste en añadir `-DDDRAW
-lddraw` al final de los comandos `gcc ...`.
Pelles C y otros compiladores visuales pueden definir el proyecto entero a
partir de los ficheros fuente CPCEC.C y ZXSEC.C y los ficheros de recursos
CPCEC.RC y ZXSEC.RC, y deducir los ficheros adicionales por sí mismos (iconos y
ficheros de cabecera) mientras que las librerías necesarias para compilarlo (de
no reconocerlas automáticamente el compilador) son USER32, GDI32, WINMM,
COMDLG32 y SHELL32, todas ellas del SDK de Win32.
Los binarios para sistemas operativos con soporte SDL2 necesitan comandos
distintos. Algunos sistemas pueden necesitar un parámetro adicional
`-DSDL2_DOUBLE_QUEUE` si el sonido se interrumpe porque el buffer por defecto es
corto.
gcc -DSDL2 -O2 -xc cpcec.c -lSDL2 -ocpcec
gcc -DSDL2 -O2 -xc zxsec.c -lSDL2 -ozxsec
Además, los nombres de fichero deben estar en minúsculas: el contenido del
archivo ZIP pueden necesitar extraerse con "unzip -LL cpcec-20XXXXXX.zip".
## Configuración y ficheros ##
El funcionamiento de CPCEC se configura especificando parámetros opcionales en
la línea de comandos. Para que los parámetros preferidos por el usuario sean
estables se recomienda crear en el menú del sistema un enlace al emulador que
contenga dichos parámetros. Las opciones pueden ser abreviadas al estilo Unix:
por ejemplo `-C -d -J` se abrevia `-CdJ`. En caso de duda, el parámetro `-h`
muestra una breve explicación de las opciones disponibles.
* -C0 : mostrar la imagen en blanco y negro;
* -C1 : mostrar la imagen a color oscuro;
* -C2 : mostrar la imagen a todo color (por defecto);
* -C3 : mostrar la imagen a color claro;
* -C4 : mostrar la imagen en fósforo verde;
* -c0 : elegir el modo de "scanlines" medios;
* -c1 : elegir el modo de "scanlines" normales (por defecto);
* -c2 : elegir el modo de entrelazado simple;
* -c3 : elegir el modo de entrelazado doble;
* -c4, -c5, -c6, -c7 : elegir los modos de "scanlines" y entrelazado como en
-c0...-c3, más "blending";
* -d : iniciar la emulación con el "debugger" activo (por defecto inactivo);
* -g0, -g1, -g2, -g3, -g4 : elegir el tipo de CRTC de 0 a 4 (tipo 1 por
defecto);
* -h : ayuda breve;
* -j : activar la emulación del joystick por teclado (cursores y teclas Z, X y
C);
* -J : deshabilitar el uso de un joystick conectado al sistema;
* -K, -k0 : emular solamente 64k de RAM;
* -k1 : emular 128k de RAM (por defecto);
* -k2 : emular 192k de RAM;
* -k3 : emular 320k de RAM;
* -k4 : emular 576k de RAM;
* -m0 : iniciar la emulación como un Amstrad CPC 464;
* -m1 : iniciar la emulación como un Amstrad CPC 664;
* -m2 : iniciar la emulación como un Amstrad CPC 6128, por defecto;
* -m3 : iniciar la emulación como un Amstrad Plus (Plus 464, Plus 6128 y GX4000
solamente se distinguen en la cantidad de RAM, el controlador de disco y el
teclado);
* -O : ocultar indicadores en pantalla (por defecto visibles);
* -p : habilitar audio Playcity (por defecto deshabilitado);
* -P : deshabilitar audio Playcity;
* -R : deshabilitar emulación en tiempo real (por defecto habilitada);
* -S : deshabilitar sonido (por defecto habilitado si hay una tarjeta de
sonido);
* -T : deshabilitar estereofonía (por defecto habilitada);
* -X : emplear la pantalla completa en lugar de una ventana;
* -X : deshabilitar emulación de unidades de disco (por defecto habilitada);
* -Y : deshabilitar el análisis de cinta (por defecto habilitado; ver más
adelante);
* -Z : deshabilitar la aceleración de cinta (por defecto habilitada);
* -! : deshabilitar la aceleración por hardware de vídeo.
También es posible añadir nombres de fichero a la línea de comandos: el emulador
intentará cargar y ejecutar los ficheros especificados. Gracias a ello CPCEC
puede ser vinculado a las extensiones de fichero CDT, CPR, CSW, DSK y SNA para
cargar dichos ficheros automáticamente.
Los tipos de fichero admitidos por el emulador se dividen en cuatro tipos:
* WAV, CSW y CDT: ficheros de cinta, es decir volcados digitales de los
contenidos de una cinta magnética utilizada para almacenar y distribuir datos y
software.
* DSK: ficheros de disco, representaciones virtuales de la estructura y los
contenidos de un disco flexible magnético capaz de contener datos y software.
* SNA: instantáneas o "snapshots", copias integrales del estado de un sistema
emulado que hacen posible reanudar más tarde dicho estado de emulación.
* ROM y CPR: firmwares y cartuchos. El firmware contiene la BIOS y el intérprete
de BASIC; los cartuchos eran utilizados por la serie Amstrad Plus.
La lectura de cintas emplea dos métodos (habilitados por defecto) para mejorar
la experiencia de usuario abreviando un proceso que entonces era muy lento: un
programa típico en cinta tardaba cinco minutos en cargar. El primer método
(aceleración de cinta) simplemente detecta si hay una cinta insertada y el motor
del cassette está en funcionamiento: entonces el emulador se pone a funcionar a
la máxima velocidad posible. El segundo método (análisis de cinta) examina el
estado actual del Z80 y detecta si éste intenta leer la cinta de una forma
conocida: entonces manipula su estado para generar al instante los resultados de
la lectura en lugar de esperar a que la cinta genere la siguiente señal.
La ejecución automática de ficheros de disco intenta detectar por sí misma el
método de arranque necesario. Dado que algunos discos tenían más de un arranque
posible y el emulador corre el riesgo de elegir uno distinto al esperado, el
usuario puede establecerlo a mano tecleando la orden `RUN"NOMBRE` (donde NOMBRE
es el fichero de arranque, que suele venir especificado en las instrucciones del
software, o ser simplemente DISC o DISK) en el sistema emulado y pulsando
RETURN. En caso de duda, la orden CAT muestra la lista de ficheros contenidos en
el disco.
## Funciones ##
Una vez en funcionamiento, CPCEC muestra la pantalla del sistema emulado y
obedece a las órdenes del usuario, que además de las pertinentes a dicho sistema
(pulsaciones de teclas alfanuméricas y de control, movimientos del joystick real
o emulado mediante teclado) incluye una serie de teclas de función especiales.
En caso de duda, la tecla F1 muestra un breve índice de dichas teclas de
función.
* F1: ayuda breve;
* F1+Control: autoría del emulador;
* F2: grabar el estado actual de la emulación en una instantánea;
* F2+Control: volver a grabar la última instantánea seleccionada;
* F3: cargar y ejecutar un fichero de cinta, de disco, una instantánea o un
cartucho;
* F3+Control: volver a cargar la última instantánea seleccionada;
* F4: habilitar (o deshabilitar) la emulación de sonido;
* F4+Control: habilitar (o deshabilitar) el joystick por teclado;
* F5: elegir el firmware del CPC emulado, que puede ser un fichero ROM, un
fichero INI o un cartucho de formato CPR;
* F5+Shift: insertar cartucho de Dandanator; nótese que estos cartuchos tienen
un formato diferente al de los firmwares de CPC y por ello deben ser manipulados
separadamente;
* F5+Control: reiniciar la emulación;
* F5+Control+Shift: extraer cartucho de Dandanator;
* F6: habilitar (o deshabilitar) la emulación en tiempo real;
* F6+Control: elevar la velocidad del Z80 emulado de 4 MHz a 8, 12 y 16 MHz;
* F6+Control+Mays: reducir su velocidad a 12, 8 y 4 MHz;
* F7: insertar un fichero de disco en la disquetera virtual A; nótese que el
modo de acceso es sólo-lectura a menos que el usuario explícitamente elija
lectura-escritura en el diálogo de selección de ficheros;
* F7+Mays: insertar un fichero de disco en la disquetera virtual B;
* F7+Control: extraer el disco de la disquetera virtual A;
* F7+Control+Mays: extraer el disco de la disquetera virtual B;
* F8: insertar un fichero de cinta en el cassette virtual;
* F8+Mays: empezar a grabar un fichero de cinta nuevo;
* F8+Control: extraer la cinta del cassette virtual;
* F9: habilitar el "debugger" (ver más adelante);
* F9+Mays: mostrar (u ocultar) los indicadores en pantalla;
* F9+Control: habilitar (o deshabilitar) la aceleración de cinta;
* F9+Control+Mays: habilitar (o deshabilitar) el análisis de cinta;
* F11: cambiar el modo de color entre verde y tres gamas de color de claridad
creciente;
* F11+Mays: ídem en sentido contrario, recorriendo las gamas por orden
decreciente;
* F11+Control: cambiar el tipo de "scanlines", de scanlines medios a entrelazado
doble;
* F11+Control+Mays: ídem en sentido contrario, de entrelazado doble a scanlines
medios;
* F12: grabar el contenido de la pantalla en un fichero BMP en el directorio del
emulador;
* F12+Mays: grabar un vídeo en formato intermedio XRF (ver más adelante en
"Vídeos");
* F12+Control: comenzar a grabar (o terminar) el sonido en un fichero WAV;
* F12+Control+Mays: comenzar a grabar (o terminar) el sonido en un fichero YM;
* Pausa: detener (o reanudar) la emulación;
* Alt+Return: maximizar (o restaurar) la ventana. El menú se oculta al maximizar
la ventana mediante estas teclas.
Las versiones para SDL2 son ligeramente distintas en la medida en que
proporcionan su propio interfaz gráfico; el menú aparece al pulsar la tecla F10
del teclado o el botón derecho del ratón, y para cambiar el modo de acceso de
ficheros de disco hay que pulsar TAB dentro del diálogo de selección de ficheros
mostrado por F7 ó F7+Mays. Los diálogos se manipulan con las teclas y el ratón:
en los menús, tocar un botón sobre un elemento del menú sirve para elegirlo,
mientras que en los demás diálogos se elige un elemento tocando un botón del
ratón sobre dicho elemento (si no está visible la lista se desplaza para
mostrarlo) y se acepta este elemento tocando el botón otra vez. Todos los
diálogos se abandonan tocando un botón del ratón mientras éste apunta fuera del
diálogo.
Los ficheros BMP y WAV son los ficheros de imagen y sonido estándares homónimos.
Los ficheros YM son volcados del estado del chip de sonido, que por haber sido
usado en más plataformas además de Amstrad CPC (Spectrum 128, MSX, Atari ST...)
pueden ser emulados y reproducidos independientemente en programas terceros
tales como STSOUND y AY-EMUL. Nótese que el modo de "scanlines" (opción que
simula varios tipos de monitor) se refleja en las grabaciones igual que en la
pantalla, y que cada modo tiene un impacto distinto en el rendimiento del
programa: el modo normal consume más esfuerzo, y el entrelazado doble, menos.
Los ficheros INI pueden definir un "perfil", un conjunto de ROMs extras para
superponer al firmware actual. Internamente son simples ficheros de texto donde
cada línea define un atributo o una ROM:
* type = 0..3 : elige el tipo de firmware (por ejemplo 0 significa CPC464) de
igual forma que los parámetros de línea de comandos -m0..3;
* bank = 0..4 : elige el tamaño de RAM (por ejemplo 0 significa 64k) de igual
forma que los parámetros -k0..4;
* crtc = 0..4 : elige el tipo de CRTC de igual forma que los parámetros -g0..4;
* fddc = 0..1 : elige si el controlador de unidad de disco está presente (1) o
ausente (0);
* lowest=nombrefichero : define el contenido de ROM LOW; el fichero ROM debe
estar ubicado en el mismo directorio del perfil;
* highXX=nombrefichero : define el contenido de la ranura XX de HIGH ROM, donde
XX es un número hexadecimal de dos cifras: "00" es 0, "0A" es 10, "10" es 16,
etc. por ejemplo HIGH07=PARADOS.ROM cargaría PARADOS.ROM en la ranura 7.
Los indicadores en pantalla muestran el estado de las unidades de disco (número
de pista, actividad), la cinta (actividad) y el joystick.
Las siguientes teclas ajustan el "frameskip" o salto de "frames": a mayor valor
de este parámetro, menor consumo de potencia de proceso, pero también menor
suavidad visual. Idealmente debe mantenerse su valor a 0 a menos que 1.- el
sistema no tenga potencia de proceso suficiente, o 2.- el usuario necesite
acelerar la emulación durante un tiempo.
* Num.+ : incrementa el valor de "frameskip", hasta 25;
* Num.- : decrementa el valor de "frameskip", hasta 0;
* Num.* : establece el valor de "frameskip" al máximo, 25;
* Num./ : establece el valor de "frameskip" al mínimo, 0.
El menú también incluye algunas opciones adicionales (por ejemplo el tipo de
CRTC) además de acciones tales como cambiar los lados de los discos insertados,
examinar los contenidos de la cinta actual y habilitar varias extensiones de
hardware: cartuchos Dandanator, pistolas de luz, chips de sonido Playcity y
Digiblaster, etc.
CPCEC permite arrastrar y soltar ficheros. Éstos serán automáticamente
ejecutados (como con F3) a menos que la tecla Mays esté pulsada, en cuyo caso
serán simplemente insertados como con F7 y F8.
Los archivos GZIP y ZIP pueden ser leídos por CPCEC (de haber más de un fichero
en su interior se mostrará una lista para que el usuario elija el fichero
necesario) pero sus contenidos no pueden ser modificados.
La relación entre el teclado real y el emulado es inmediata (tabla alfanumérica,
teclas de control, panel numérico, cursores...) con las únicas particularidades
de SUPR para CLR e INSERT para COPY, pues sus funciones son equivalentes pero
los teclados modernos ya no ubican estas teclas dentro de la tabla alfanumérica.
## Debugger ##
El depurador o "debugger" sirve para detener la emulación y examinar su estado
interno. Al principio empleaba un interfaz de línea de comandos; ahora se basa
en un interfaz de usuario controlado mediante cursores dividido en cuatro
paneles: desensamblado (arriba izquierda), registros (arriba derecha), volcado
de memoria (abajo izquierda) y pila (abajo derecha). La mitad izquierda del
panel de registros (sólo lectura) muestra los registros del hardware (Gate
Array, CRTC, etc.) mientras que la mitad derecha (lectura y escritura) muestra
los registros propiamente dichos del Z80. Los valores mostrados en la pantalla y
los parámetros de las órdenes emplean notación hexadecimal.
* Los cursors, Re.Pág. y Av.Pág. mueven el cursor dentro del panel actual;
* Tab (o Mays+Tab) mueve el cursor al panel siguiente (o anterior);
* Dígitos del 0 al 9 y letras de la A a la F modifican el valor bajo el cursor;
* Punto (".") crea o destruye un punto de ruptura o "breakpoint" en la posición
actual del cursor en el desensamblado;
* G ("go to") solicita una dirección (en hexadecimal por defecto, en decimal si
está precedida por ".") y envía el cursor a su lugar correspondiente en el
desensamblado o el volcado de memoria;
* H ("help") muestra una ayuda breve;
* I ("input") solicita un nombre de fichero y carga su contenido en memoria a
partir de la dirección actual del cursor;
* J ("jump to") asigna la dirección actual del cursor al registro PC del Z80:
equivale a que el Z80 "salte" a dicha dirección.
* L ("log") solicita un registro de 8 bits (B, C, D, E, H, L, F o A) y crea un
breakpoint especial en la instrucción actualmente bajo el cursor; a partir de
entonces, cuando esta instrucción tenga lugar, el valor del registro de 8 bits
será enviado a un fichero de grabación elegido por el usuario;
+ K cierra el fichero de grabación;
* M conmuta el contenido del volcado de memoria entre lo que el Z80 puede leer
(RAM o ROM; el separador entre el campo hexadecimal y el ASCII es `/`) y lo que
puede escribir (solamente RAM; el separador es `\`);
* O ("output") solicita una longitud en bytes y un nombre de fichero, y crea un
fichero con un volcado de memoria que comienza en la dirección actual del
cursor;
* P ("print") solicita una longitud en bytes y un nombre de fichero, y crea un
fichero con un desensamblado (panel de desensamblado) o un volcado hexadecimal
(panel de volcado de memoria) que comienza en la dirección actual del cursor;
* Q conmuta el comportamiento del código ilegal $EDFF, bien en modo normal
("EDFF-") donde no hace nada especial o en modo de desarrollo ("EDFF+") donde es
un breakpoint;
* R ("run to") ejecuta la emulación hasta alcanzar la operación actualmente bajo
el cursor en el desensamblado;
* S ("search") solicita una cadena bien ASCII (sin importar las mayúsculas),
bien hexadecimal con el prefijo "$" (por ejemplo `SOS` se convierte en
`$534F53`) y la busca en la memoria a partir de la dirección actual hasta la
última dirección válida. Si encuentra la cadena ubica el cursor en ella en el
desensamblado o el volcado de memoria;
+ N ("next") vuelve a buscar la misma cadena;
* T ("timer") limpia el cronómetro; su valor se incrementa a medida de la
emulación;
* U ("return") reanuda la emulación hasta alcanzar la dirección de regreso de la
llamada en curso;
* V ("view") cambia la apariencia del debugger, cambiando los colores blanco y
negro y los caracteres finos y gruesos;
* W ("watch") conmuta entre el debugger de la emulación y el visor de gráficos;
los cursores, Re.Pág., Av.Pág y la tecla "G" recorren la memoria, Inicio/Fin
reducen y aumentan la anchura de los gráficos, y Tab conmuta entre el modo
horizontal y el vertical;
* X conmuta el panel de información de hardware clásico/Plus;
* Y solicita una longitud en bytes y un valor de 8 bits, y llena con dicho valor
el intevalo de memoria que comienza en la dirección actual del cursor;
* Z elimina todos los breakpoints;
* Espacio ("step into") ejecuta exactamente una instrucción y se detiene en la
siguiente.
+ Mays+Espacio ejecuta instrucciones durante un "scanline" entero;
* Return ("step over") reanuda la emulación hasta alcanzar la operación
siguiente a la actual. Se comporta de una forma distinta a Espacio si la
instrucción actual es una llamada;
* Escape abandona el debugger y reanuda la emulación.
El uso de mayúsculas y minúsculas no es importante: el debugger no hace
distinciones.
## Vídeos ##
Los vídeos se graban como ficheros XRF, un paso intermedio (compresión baja,
consumo de CPU bajo) previo a la generación de ficheros de vídeo convencionales.
La herramienta adjunta XRF convierte un fichero de tipo XRF en un fichero de
tipo AVI. Funciona de dos formas diferentes, una exclusiva de Windows y otra
general.
Al compilarla en Windows (necesita la librería de sistema AVIFIL32: "gcc
-lavifil32 -xc xrf.c -oxrf.exe") y ejecutarla (la sintaxis es "xrf fuente.xrf
destino.avi ABCD") leerá el fichero "fuente.xrf" y generará un fichero llamado
"destino.avi" mediante el códec ABCD, de estar instalado. Ejecutar la
herramienta sin parámetros muestra la ayuda y la lista de los códecs
disponibles; ejecutarla sin el parámetro de destino imprime los parámetros del
fichero fuente. Se recomienda instalar y utilizar el códec ZMBV realizado por el
proyecto Dosbox porque es el que mejor rendimiento proporciona en grabaciones
pixeladas como éstas.
En otros sistemas XRF no puede usar ningún códec directamente, así que el
resultado es un fichero AVI sin comprimir (imagen RGB de 24 bpp, sonido PCM
estéreo); afortunadamente es capaz de generarlo a través de la consola
especificando "-" en lugar de "destino.avi" y alimentar así un programa de
codificación de vídeo, por ejemplo FFMPEG: la línea "xrf fuente.xrf - | ffmpeg
-i - destino.avi" delega en FFMPEG la tarea de codificar el fichero AVI. Lea la
documentación de FFMPEG al respecto.
## ZXSEC ##
ZXSEC es un emulador de la familia Sinclair Spectrum (48k, 128k, +2/Plus2 y
+3/Plus3) basado en los componentes compartidos con el Amstrad CPC: el
microprocesador Z80, el chip de sonido PSG AY-3-8912, el sistema de cinta y la
controladora de disco NEC765. También emula opcionalmente varios complementos:
la extensión Dandanator para Spectrum, el interfaz de disco Beta128, el chip de
sonido AY-Melodik para 48k, la placa Pentagon 128, etc.
Se compone de los ficheros ZXSEC.EXE, SPECTRUM.ROM, SPEC128K.ROM, SPEC-P-2.ROM y
SPEC-P-3.ROM, y por lo demás funciona igual que CPCEC, con varias salvedades:
* la opción -mX elige uno de cuatro modelos posibles: -m0 (48k), -m1 (128k), -m2
(+2) ó -m3 (+3);
* la opción -K deshabilita el chip de sonido PSG AY-3-8912 (habilitado por
defecto) si el modelo elegido es Spectrum 48k;
* la opción -X deshabilita la unidad de disco si el modelo elegido es Spectrum
+3, que así se convierte en un +2A; se puede conseguir lo mismo en tiempo de
ejecución desactivando "Settings: Disc controller" y eligiendo el firmware
SPEC-P-3.ROM;
* las opciones -p y -P habilitan y deshabilitan la temporización Pentagon;
tammbién puede conmutarse desde el emulador con Mays+F6;
* Control+Mays+F8 sirve para poner en marcha (o detener) el motor de cinta, dado
que el hardware de CPC dispone de control de cinta incorporado, mientras que el
de Spectrum carece de él;
* MAYS emula la tecla CAPS, CONTROL emula SYMBOL, BLOQ MAYUS emula CAPS+2 (CAPS
LOCK), los cursores emulan CAPS+5/6/7/8, TAB emula CAPS+1 (EDIT) y ESCAPE emula
CAPS+SPACE (BREAK);
* las opciones de joystick se refieren al interfaz Sinclair 2 por defecto; el
menú permite elegir el tipo de joystick.
ZXSEC puede mostrar efectos Gigascreen (por ejemplo la demo "Mescaline
Synesthesia" 2009 DeMarche) mediante las opciones de entrelazado en el menú
Video.
## Agradecimientos ##
Este emulador debe su existencia a una serie de personas y sociedades que
enumero a continuación:
* Los ficheros de firmware incluidos en el paquete son propiedad de Amstrad, que
autoriza la emulación de sus antiguos sistemas informáticos y permite la
distribución de sus firmwares siempre que se respete su autoría y su contenido,
y a quien agradezco de todo corazón la creación de aquellos magníficos
ordenadores y la buena voluntad hacia la emulación de los mismos.
* Este emulador fue mi proyecto de fin de máster en Ingeniería Informática para
la Universidad Nacional de Enseñanza a Distancia (UNED), que estuvo dirigido por
el profesor José Manuel Díaz Martínez y resultó galardonado con un diez con
derecho a matrícula de honor.
* La documentación sobre el sistema procede de cpcwiki.eu, cpc-power.com,
cpcrulez.fr y quasar.cpcscene.net.
* Las pruebas alfa corrieron a cargo de Denis Lechevalier.
## Apéndice: casos de pruebas ##
A continuación se enumeran los cien títulos que sirvieron para hacer el grueso
de las pruebas del emulador durante su desarrollo. Algunos abarcan varias
pruebas (por ejemplo "Donkey Kong" es a la vez una cinta protegida y un caso
medio de varios modos de imagen simultáneos); se les menciona solamente en la
primera de ellas.
Diagnósticos:
* Z80 Instruction Exerciser ZEXALL (2004 dominio público)
* PLUSTEST (2002 Richard Wilson)
Casos simples:
* Sultan's Maze / Laberinto del Sultán (1984 Gem Software / Amsoft)
* Oh Mummy (1984 Gem Software / Amsoft)
* Roland on the Ropes / Fred (1984 Indescomp / Amsoft)
* Roland in the Caves / La Pulga (1984 Indescomp / Amsoft)
Ficheros de cinta:
* Sin protección:
+ Roland in Time (1984 Gem Software / Amsoft)
+ Manic Miner (1985 Software Projects / Amsoft)
+ Jet Set Willy (1985 Software Projects / Amsoft)
+ Knight Lore (1985 Ultimate)
+ Alien 8 (1986 Ultimate)
* Protecciones simples:
+ Technician Ted (1985 Hewson)
+ Abu Simbel Profanation (1986 Dinamic)
+ Deflektor (1987 Costa Panayi / Gremlin Graphics)
+ Desperado (1987 Topo Soft)
+ Humphrey (1988 Made in Spain / Zigurat)
* Protecciones medias:
+ Donkey Kong (1986 Arcana / Ocean)
+ MASK (1987 Gremlin Graphics)
+ Operation Wolf (1988 Imagine)
+ Rainbow Islands (1989 Graftgold / Ocean)
* Protecciones complejas:
+ Rasputin (1985 Paul Hibbard / Firebird)
+ Spiky Harold (1985 A.Rogers / Firebird)
+ Druid (1986 Firebird)
+ Split Personalities (1986 Domark)
+ Last Mission (1986 Opera Soft)
+ Marmalade (1987 MBC Informatique)
+ Gonzzálezz (1989 Opera Soft)
+ Twinworld (1990 Ubi Soft)
Casos extraños:
* Z80:
+ Sabre Wulf (1985 Ultimate)
+ Bigfoot (1989 Codemasters)
* PIO:
+ Nodes of Yesod (1986 Odin)
+ Prehistorik (1991 Titus)
+ Antiriad / Sacred Armour of Antiriad (1987 Palace Software)
* Puertos:
+ Skweek (1989 Loriciels)
+ Night Shift (1990 Lucasarts)
+ Hero Quest (1991 Gremlin Graphics)
Casos medios:
* Varios modos de imagen o paletas de color a la vez:
+ Sorcery (1985 Gang of Five / Virgin Games)
+ Kong Strikes Back (1985 Ocean)
+ Crafton & Xunk (1986 Ere Software)
+ Elite (1986 Bell and Braben / Firebird)
+ Amaurote (1987 Binary Design / Mastertronic)
+ Feud (1987 Binary Design / Mastertronic)
+ Gauntlet (1987 Gremlin Graphics)
+ Renegade (1987 Arcana / Imagine)
* Scroll rápido y suave por hardware:
+ TLL / Tornado Low Level (1985 Vortex Software)
+ Thing on a Spring (1986 Gremlin Graphics)
+ Ghosts'n Goblins (1986 Elite)
+ Prohibition (1987 Infogrames)
* Pantalla de tamaño mayor ("overscan"):
+ Arkanoid (1987 Probe / Imagine)
+ Arkanoid 2: Revenge of Doh (1988 Imagine)
* Doble búfer por hardware:
+ Sol Negro (1988 Opera Soft)
+ Mutan Zone (1988 Opera Soft)
+ Rescate Atlántida (1989 Creep Soft / Dinamic)
+ AMC / Astro Marine Corps (1989 Creep Soft / Dinamic)
* Sonido digitalizado:
+ Enigma de Aceps (1986 ACE Software)
+ Dragon Ninja (1988 Imagine)
+ Robocop (1988 Ocean)
Ficheros de disco:
* CP/M 2.2 (1984 Digital Research / Amstrad)
* CP/M Plus (1985 Digital Research / Amstrad)
* Abadía del Crimen (1987 Opera Soft)
* Corsarios (1990 Opera Soft)
* Ghostbusters 2 (1989 Software Studios / Activision)
* SWIV (1991 Storm / Sales Curve)
* Addams Family / La familia Addams (1991 Ocean)
* 5KB Demo 3 (1999 Duncan + LBB)
Casos avanzados:
* Mission Genocide (1987 Paul Shirley / Firebird)
* Warhawk (1987 Proteus / Firebird)
* Dynamic Duo (1988 Probe / Firebird)
* Rastan (1988 Probe / Imagine)
* Skateball (1988 Ubi Soft)
* Turrican (1990 Probe / Rainbow Arts)
Amstrad Plus:
* Arnold 5 Diagnostic Rom Version 1.3 (1990 Amstrad)
* Burnin' Rubber (1990 Ocean)
* Navy Seals (1990 Ocean)
* Copter 271 (1991 Loriciel)
* Fire 'n Forget 2 (1990 Titus)
* Dick Tracy (1991 Titus)
* No Exit (1990 Coktel Vision)
* Robocop 2 (1990 Ocean)
* Switchblade (1990 Gremlin Graphics)
* World of Sports (1990 Epyx)
* 1st Plus Demo (1991 GPA)
* Eerie Forest (2017 Logon System)
Casos muy avanzados:
* Turrican 2 (1991 Enigma Variations / Rainbow Arts)
* Facehugger Megademo (1991 Face Hugger)
* Zap't'Balls (1992 Amstrad CPC International)
* Super Cauldron (1992 Titus)
* Prodatron Megademo (1992 Prodatron)
* Prehistorik 2 (1993 Titus)
* Voyage '93 (1993 BENG)
* Overflow 5 Previews (1994 Overflow)
* Big'O Full'O Dem'O (1998 Arkos)
* Byte '98 (1999 Mortel & Overlanders)
* École Buissonière (2000 Overlanders)
* DTC (2006 Arkos)
* Orion Prime (2009 Cargosoft)
* Edge Grinder (2011 Cosine & Format War)
* Batman Returns (2011 Batman Group)
* Bloc Us (2011 Benediction)
* Super Edge Grinder (2012 Cosine & Format War)
* R-Type 128 (2012 Easter Egg)
* Still Rising (2013 Vanity)
* Yet Another Plasma! (2012 Logon System)
* Breaking Baud (2015 CRTC & 3LN)
* Megablasters: Escape from Castle in the Clouds (2015 Project Argon)
* Imperial Mahjong (2016 Cargosoft)
* Logon's Run (2017 Logon System)
* Wunderbar (2017 Arkos & Benediction)
* Isometrikum (2018 Vanity)
* Still Scrolling (2018 Music2Eye & Praline)
* PhX (2018 Condense)
## Historial de versiones ##
- 20190314 -- primera versión pública.
- 20190317 -- segunda versión pública. Corrige bugs de joystick en Win32:
JoyGetPos devuelve CERO en EXITO, no en ERROR.
- 20190318 -- tercera versión pública. Por defecto la ventana muestra un menú;
la nueva opción -+ lo oculta.
- 20190325 -- cuarta versión pública. Indicadores en pantalla (se ocultan con
-O); corrige un bug en ZXSEC que ralentizaba la emulación si el "frameskip" no
era nulo, y otro en la grabación de sonido en ficheros WAV.
- 20190331 -- quinta versión pública. Se puede recorrer cintas por posición (WAV
y CSW) o por bloques (CDT, TZX y TAP).
- 20190404 -- sexta versión pública. Corrige un bug del Z80 en la lógica del
IRQ. La configuración (modelo emulado y ubicación de ficheros) se conserva entre
sesiones en un fichero INI.
- 20190408 -- séptima versión pública. Corrige un bug en la grabación de
ficheros YM3, otro en los tiempos internos de ZXSEC y otro en los comandos del
debugger con parámetros opcionales.
- 20190419 -- octava versión pública. Añade opciones para interpolar la imagen y
el sonido; la cinta se rebobina al final automáticamente (como en FUSE); corrige
un bug en ficheros TZX con 0 en lugar de 8 en el campo "bits usados", otro en
bloques CUSTOM INFO de TZX, y otro cuando ZXSEC carga un fichero SNA de 48K en
modo Plus3 (de todas formas los usuarios deberían elegir el modelo apropiado
antes de cargar ficheros). Los ficheros INI recuerdan los nombres de los últimos
ficheros usados.
- 20190430 -- novena versión pública. Suaviza el modo monocromo para Spectrum;
corrige un bug del FDC en los sectores con datos GAP (de Loriciels); ZXSEC añade
contención de memoria simple ("Amaurote", "Black Lamp", "Puzznic", "Sly Spy",
"Zub"...).
- 20190524 -- décima versión pública. Añade lectura de bloques 0x24 y 0x25
(inicio y fin de ciclo) en ficheros CDT/TZX (cfr. BATMAN.TZX), corrige errores
en la lectura de sectores débiles en ficheros DSK (cfr. "Titus Classiques"), la
grabación de ficheros YM es reentrante, los ficheros INI corrigen un problema
con campos vacíos y añaden la opción `autorewind <0|1>` para rebobinar (o
expulsar) una cinta al alcanzar su final.
- 20190526 -- parche menor para corregir un error del arranque automático: abrir
menús y cambiar ventanas anulaba el teclado.
- 20190731 -- undécima versión pública. Añade un debugger con interfaz gráfico
de usuario (se acabó teclear órdenes en la consola) y la capacidad de leer
ficheros contenidos en archivos ZIP basada en PUFF.C del proyecto ZLIB,
actualiza GCC a 5.1.0 y elimina todas las etiquetas `inline` (hacían más
perjuicio que beneficio), y en general todos los elementos internos de la
emulación ya son independientes del sistema operativo. También se mejoran
algunos detalles: el interfaz de selección de ficheros corrige un error en Win10
(y en ciertos casos en Win7), el diálogo para recorrer cintas muestra el nombre
de la cinta, Spectrum +3 se convierte en +2A al cargar cintas, "auto rewind"
aparece en el menú Edit y ya no comete errores con ficheros CSW, y la emulación
del sonido ha mejorado, por ejemplo "Terminus" para CPC interpreta efectos
sonoros y "Agent X II" para Spectrum ya no tiene ruido.
- 20190809 -- parche menor para rechazar "silenciosamente" (i.e. sin códigos de
error) las operaciones de escritura en discos de sólo-lectura y para permitir el
autoarranque de discos con formato IBM.
- 20190817 -- parche menor para arreglar un "crash" al abrir cintas precisamente
cuando se activa el "frameskip" automático.
- 20190831 -- parche menor para corregir varios errores (arrancar discos de dos
caras con la opción FLIP SIDE habilitada, grabar "snapshots" o cintas después de
extraer un snapshot o cinta de un archivo ZIP), mejorar varios detalles (cargar
snapshots con compresión de memoria, emular hasta 576 kB de RAM) y redefinir los
menús (Edit se divide en Edit y Settings, Image y Sound se convierten en Video y
Audio, opciones nuevas de filtrado de vídeo...) y la línea de comandos: "-+"
ahora limita el zoom a valores enteros; "-!" hereda la opción de no mostrar el
menú.
- 20191003 -- duodécima versión pública. Contención de memoria y ruido de ULA
("nieve") precisos (aunque aún no perfectos): "48K Timing Tests" supera todas
las pruebas menos 36 y 37, y "128K Timing Tests" falla en solamente seis. "Mask
3: Venom Strikes Back" dibuja los efectos de atributos y borde en sus momentos
exactos en todas las plataformas (48K, 128K/Plus2, Plus3) y "Black Lamp", "LED
Storm" y "Sly Spy" de Software Creations se comportan bien en las máquinas de
128K. Mejoras en el debugger: corregido el emplazamiento erróneo del cursor en
el panel de desensamblado, añadida opción de caracteres altos, evitado el
conflicto entre debug y pausa, la nueva tecla M conmuta el volcado de memoria
entre modos de ROM+RAM y RAM sola. Mejoras en el uso de archivos ZIP (los
archivos no se quedan bloqueados, los ficheros en su interior se filtran por
extensión) y retoques en el interfaz de usuario.
- 20191004 -- parche menor para hacer que las opciones de V y M del debugger
perduren de una sesión a otra.
- 20191117 -- decimotercera versión pública. Emulación más precisa del CRTC tipo
1 (por defecto en lugar de 0) en CPCEC ("From Scratch", "Pinball Dreams"...) y
la contención de memoria de 48K en ZXSEC ("Starion", "Black Lamp"...). CPCEC
también permite elegir la duración de la señal V-Hold (por ejemplo "Thunder
Blade" necesita la señal corta) y si la sincronización horizontal (H-Sync) debe
ser flexible ("Batman Returns", "Pinball Dreams"...) o no ("CPC 30th Anniversary
Megademo", "PhX"). Por desgracia, algunas de las demos que antes funcionaban
bien ahora sufren problemas que no se resuelven eligiendo otro CRTC. Eliminado
el tercer botón de joystick de CPCEC, ningún joystick real lo incluyó. El
joystick de ZXSEC es Sinclair 2 por defecto.
- 20191130 -- parche menor para corregir un bug al ejecutar CPCEC y ZXSEC en una
pantalla de menos de 600 px de altura, otro al grabar un fichero WAV, y otro más
en la lógica de puertos de CPCEC ("Knight Rider": OUT &0088,&88 no debe alcanzar
el Gate Array, pero "Hero Quest", OUT &00C0,&C0 sí debe). Los tipos de CRTC 0 y
2 han mejorado ("Face Hugger Ultimate Megademo: Tantrum", "5KB Megademo 3",
"Power System Megademo: Glooms"...) pero todavía son incompatibles con "Pinball
Dreams", a diferencia de los CRTCs 3 y 4, que junto a CRTC1 ya pueden con este
juego.
- 20191227 -- decimocuarta versión pública. Mejoras visuales: la paleta de
fósforo verde es más cercana al original, los filtros verticales ("Y-Masking")
son compatiles con los modos entrelazados, combinar X-Masking con Y-Masking
genera un patrón cuadriculado. Mejoras internas: la nuevas propiedades de los
registros 3 y 9 del CRTC y los retrasos del Gate Array respecto del Z80 y el
CRTC por fin emulan "Pinball Dreams" por completo para todos los tipos de CRTC y
resuelven los problemas de varias demos ("Scroll Factory", "Still Rising",
partes de "The Demo"...) y juegos ("Action Fighter", "Storm Warrior", "Usagi
Yojimbo"...), pero algunos títulos todavía necesitan CRTCs concretos ("PhX"
CRTC0, "Onescreen Colonies" CRTC1, etc.) para funcionar bien.
- 20191231 -- parche menor para corregir un bug en el FDC (el bit 6 de SENSE
DRIVE STATUS debe reaccionar cuando el usuario cambia discos: "Fugitif") y una
regresión en CRTC0 (detectar REG6<REG4 en lugar de REG6<=REG4: "5KB Megademo 3:
Nayad"). ¡Feliz año nuevo 2020!
- 20200101 -- parche menor para corregir una regresión en CRTC0 provocada por el
parche anterior ("Scroll Factory", intro de "Pinball Dreams", "Overflow Preview:
Part 1") y mejorar sus heurísticas ("Overflow Preview: Part 3").
- 20200229 -- decimoquinta versión pública. Añade hardware de Amstrad Plus:
colores extendidos, scroll suave, sprites por hardware, interrupciones de
barrido programables, canales DMA, cartuchos ROM, etc. Cincuenta nuevos esquemas
de cinta para acelerar la lectura de bytes e incluso bloques enteros. Mejoras en
la emulación de la unidad de disco: discos nuevos (formato DATA por defecto
común a CPC y Spectrum +3) que pueden ser creados al instante, emulación de
juegos protegidos de Design Design ("2112 AD"), The Edge ("Palitron"), Titus
("Prehistorik" y "Moktar/Titus the Fox") y errores corregidos (READ ID: "5KB
Demo 3", "Daley Thompson's Olympic Challenge" y "Turbo Copy III"; FORMAT TRACK
convierte discos del estilo antiguo MV - CPC al estilo nuevo EXTENDED, y limpia
el final del disco de datos inútiles). CPCEC respeta el tamaño de RAM (hasta
576k) y el tipo de CRTC al leer un snapshot (demo "Postscript") y lo mismo hace
ZXSEC, que puede leer instantáneas Z80 y cambia de PLUS3 a PLUS2 si el usuario
pide cargar una cinta y además permite elegir entre snapshots estrictos de 48K o
relajados. Control-F2 evita accidentes: no graba snapshots que hayan sido
cargados antes del último reset. Corrige un error que ocurría al combinar las
opciones "Y-Masking" y "Half Scanlines". Los archivos ZIP generados mediante
tuberías (i.e. las cabeceras finales son las correctas) ahora también pueden ser
leídos. Las fuentes se distribuyen junto a los binarios en lugar de entregarse
bajo demanda.
- 20200307 -- parche menor para evitar un cuelgue en globbing(), mejorar la
compatibilidad de los snapshots (WinAPE y ACE emplean bloques CPC+ ligeramente
distintos) y eliminar algunos detalles superfluos. Los paquetes de firmware
opcionales ahora incluyen los cartuchos correspondientes.
- 20200314 -- ¡primer aniversario! parche menor para resolver problemas de las
demos "CRTC3" y "Eerie Forest" para Amstrad Plus.
- 20200331 -- parche menor con mejoras adicionales para las demos de Plus
"CRTC3" y "Synergy 4" (aunque los sprites de arriba a la izquierda desaparecen
tras pocos segundos) y la nueva odren Mays+Espacio (saltar "scanline") al
debugger.
- 20200404 -- parche menor que corrige el controlador del DMA (todos los
comandos menos LOAD pueden combinarse) y elimina varios "apaños" para Plus menos
el de "Black Sabbath": gracias a Norecess464 por ubicar el error. Además -C pasa
a ser -C0..4.
- 20200406 -- parche menor que añade multiplexación parcial de los sprites de
Plus: "Synergy 4" recupera los sprites de arriba a la izquierda.
- 20200418 -- parche menor con mejoras en el contador de interrupciones (que
empieza con el primer final de HSYNC después del principio de VSYNC -"Onescreen
Colonies"- excepto en Plus donde puede empezar cuando el principio de VSYNC
coincide con el final de HSYNC -"Black Sabbath"-), los puertos de hardware (el
puerto A del PIO devuelve 0 al leerlo en modo de escritura excepto en Plus donde
devuelve 255 -"Tire au Flan"-, el puerto B debe activar VSYNC en medio de la
pantalla si el CRTC se lo pide -"Chany Dream End Megademo"- y el intervalo de
bytes 0-191 del Gate Array necesita una lógica de puertos más rígida -"Overflow
Preview 3"-) y en el debugger: los parámetros del desensamblado están alineados
verticalmente y el panel de información de hardware está alineado al volcado
ASCII de memoria. También corrige un error en el buscador de cabeceras de
archivos ZIP.
- 20200420 -- parche menor que corrige las barras negras de las señales HSYNC de
"Chany Dream End Megademo" en CRTC1, "Onescreen Colonies" en CRTC0, etc., así
como el valor de MEMPTR en JR cc,$RR y DJNZ $RR y la lógica de BIT n,r,(IX+$XX):
las cuotas de error de ZXSEC en las pruebas de 2012 RAXOFT son Z80FULL 10/152,
Z80CCF 70/152 y Z80MEMPTR 4/152.
- 20200430 -- decimosexta versión pública. Ahora es posible compilar CPCEC y
ZXSEC con SDL2 (que incluye su propio interfaz gráfico de usuario) para
múltiples sistemas operativos mediante la opción -DSDL_MAIN_HANDLED; también se
incluyen los ficheros CPCEC.ELF y ZXSEC.ELF para GNU/Linux 32bit ya compilados.
Nuevo soporte de perfiles de extensiones de ROM mediante ficheros INI capaces de
contener hasta 257 bloques ROM de 16K. Más retoques de Z80: las nuevas cuotas de
errores de ZXSEC en las pruebas 2012 RAXOFT son 8/152 Z80FULL, 5/152 Z80CCF y
0/152 Z80MEMPTR.
- 20200503 -- parche menor que mejora el comportamiento de las operaciones INI,
IND, INIR, INDR, OUTI, OUTD, OTIR y OTIR del Z80: las pruebas 2012 RAXOFT
(Z80CCF, Z80FULL y Z80MEMPTR) obtienen cero errores. "Frameskip" automático algo
más preciso.
- 20200505 -- parche menor centrado en el toolkit de SDL2: corrige un fallo al
confirmar sobreescribir archivos, y mejora la búsqueda de ficheros entre
directorios eligiendo por defecto el directorio anterior.
- 20200509 -- parche menor que mejora la sincronía entre Z80 y vídeo en ZXSEC:
el test ULA48 ya funcionaba antes, pero ULA128 tenía problemas; ahora ambos
funcionan bien. Añade la opción -W (emplear la pantalla completa en lugar de una
ventana) y mejora el código de SDL2 para ampliar la ventana.
- 20200603 -- decimoséptima versión pública. Añade sonido estéreo. Corrige un
bug en el PIO de CPC (el modo de sólo-lectura del puerto A permitía escrituras),
otro en el análisis de cintas (CPCEC: el algoritmo para TITUS provocaba
problemas en "The Blues Brothers"; ZXSEC: Speedlock5 no reconocía el ruido
inicial; ambos sistemas añaden parches para reducir las esperas iniciales), otro
en la carga de snapshots de CPC (cargar un snapshot grabado en hardware Plus sin
el bloque "CPC+" mostraba una paleta totalmente negra), otro en el debugger de
Z80 (la orden 'P' podía generar un desensamblado infinito), otro en la gestión
de cinta (leer un fichero WAV debe usar >128 como referencia, no >=128) y
algunos problemas en Win32 (la pantalla dejaba de redibujarse al hacer una
pausa, cambiar de ventana y volver al emulador) y otros en SDL2 (no mostraba
mensajes de error en el arranque; el algoritmo para ordenar nombres de ficheros
era lento).
- 20200606 -- parche menor con sonido envolvente: el usuario puede elegir la
separación de canales entre 0% (mono), 50% (envolvente) y 100% (estéreo).
- 20200616 -- parche menor que añade algunos aceleradores de cinta y elimina el
parche para acelerar las esperas iniciales (provocaba problemas). Varios cambios
en SDL2 (menos "warnings", caché de unidades de disco en Win32) y en el debugger
de Z80 (más contenido: 256 bytes en el volcado de memoria y 32 en la pila).
- 20200622 -- parche menor que reduce el consumo de memoria (el espacio de ROMs
extras se reserva solamente si el usuario carga un "perfil"), dibuja las señales
SYNC en negro en lugar del color del borde y corrige la parte de los cilindros
3D de "PhX" en CRTC1; los "gusanos de bolas" y el scroller final siguen mal en
CRTC3 y CRTC4, sin embargo.
- 20201010 -- decimooctava versión pública. Lógica de CRTC reescrita por
completo, con un sistema interno de eventos que aumenta la compatibilidad de
demos (por ejemplo "Chapelle Sixteen", "Madness Demo" y "S&KOH" para CRTC1) y un
dibujador de sprites de Plus completamente multiplexado. Más protecciones de
disco (ERE, UBI) funcionan, WRITE DELETED DATA pone al día la bandera
correspondiente en la tabla de sectores. Nuevo soporte de Dandanator, de sólo
lectura ("Sword of Ianna"). Soporte preliminar de Playcity, limitado a los dos
chips PSG extras y el disparador NMI. Nueva grabación de vídeo basada en un
formato intermedio XRF, incluyendo una herramienta que permite convertirlo en
ficheros AVI. Mejoras en el interfaz SDL2, con una fuente mayor (12px en lugar
de 8px) y alineamiento vertical en los atajos de teclado del menú. Añadidas
nuevas funciones de depuración (examinar los gráficos en la memoria con la tecla
"W", interceptar el código $EDFF como un breakpoint con "Q", etc.) y trasladados
los breakpoints de "T" a ".". Eliminados CPCEC.ELF y ZXSEC.ELF porque están
unidos a un sistema operativo concreto (Linux Mint 18 32bit) y el usuario debía
compilar los binarios de todas formas. Trasladados los ficheros de configuración
en sistemas distintos de Windows de CPCEC.INI y ZXSEC.INI a .cpcecrc y .zxsecrc
como es costumbre en Unix. Retoques de compatibilidad para CLANG.
- 20201012 -- parche menor que añade uso del ratón al interfaz de usuario de
SDL2.
- 20201015 -- parche menor que corrige un error en el soporte de Dandanator (las
operaciones "LD (IY+n),A/B/C" deben funcionar con cualquier valor de "n", en
lugar de solamente 0: gracias a Spirax por informarme) y otro en el CRTC (el
contador HCC es de 8 bits: "Camembert Meeting 4 Demo" deja de mostrar una línea
de basuras entre el panel superior y el central), añade SDL2_DOUBLE_QUEUE como
una opción de compilación de SDL2 (algunos sistemas necesitan un de audio mayor
que los 8 frames por defecto) y emplea un patrón de píxeles distinto cuando
X-Masking y Y-Masking están activos a la vez.
- 20201022 -- parche menor que añade soporte de la rueda de ratón al interfaz de
usuario de SDL2 y una opción para elegir en CPCEC y ZXSEC entre conflictos de
escritura de disco estrictos (provocan errores) o relajados (no hacen nada).
- 20201024 -- parche menor que resuelve un problema en el evento
SDL_WINDOWEVENT_EXPOSED, invierte los bits blanco/negro en el visor de gráficos
de ZXSEC y apunta el visor de CPCEC a la RAM en vez de la ROM.
- 20201028 -- parche menor que mejora la emulación de Issue-2 en Spectrum 48K:
"Abu Simbel Profanation" y "Rasputin 48K" funcionan en 48K Issue 2 y fallan en
los demás modelos, como debe ser.
- 20201111 -- parche menor que añade seguimiento del ratón en el interfaz de
SDL2 y hace que la grabación de ficheros XRF consuma menos memoria.
- 20201122 -- parche menor que corrige un cuelgue cuando se usa el interfaz de
SDL2 para guardar un fichero en el directorio raíz, y que detecta
automáticamente SDL2 en tiempo de compilación.
- 20201124 -- parche menor que añade detección de cabeceras AMSDOS al cargador
de perfiles de ROM, según una idea de Sid.
- 20201130 -- parche menor que da más campos a los perfiles de ROM: type, bank,
crtc, fddc.
- 20201212 -- decimonovena versión pública. La versión de Windows puede emplear
DirectDraw en lugar de GDI, y la de SDL2 emplea texturas en lugar de
superficies: la eficiencia sube al disponer de aceleración por hardware. De
todos modos, el parámetro de línea de comando `-!` y la opción de menú "Video:
Software render" sirven para deshabilitar la aceleración por hardware en
sistemas donde o no existe o rinde peor que el software puro. Corrección en CPC:
el registro 14 del PSG es independiente, tal como espera "Gremlins (v1)".
Corrección en Spectrum: los puertos fantasma en 128K ahora están bien emulados,
por fin la demo "Tiratok" toca música. Nuevo comando de debugger "Y": llenar
memoria con byte. XRF enumera los codecs disponibles al arrancarlo sin
parámetros.
- 20201215 -- parche menor que corrige la carga de snapshots de Spectrum Plus3 y
extiende el comportamiento de la "nieve" de la ULA ("Vectron") y su ámbito
("Narco Police", "Robocop 3"). El UI de SDL2 coloca unos puntos suspensivos al
final de los nombres de fichero demasiado largos para caber en los diálogos.
- 20201220 -- parche menor que elimina el debugger de consola, ya obsoleto, de
las fuentes, y hace que la opción de Playcity perdure entre sesiones. "Software
render*" ahora es "Acceleration*", más congruente en su contexto.
- 20210105 -- parche menor que corrige un error en la grabación de vídeo
(convertía el sonido 44KHz estéreo en 88KHz mono) y otro en la lectura de cintas
(problemas con ficheros WAV de 16 y 24 bits), aumenta el soporte de joystick
para aceptar controles angulares (gracias a Pelrun por el código para Win32 y
SDL2), y permite que la emulación de Dandanator modifique el cartucho
(configuración, partidas...) si el usuario lo permite.
- 20210107 -- parche menor que corrige un error en la pantalla dividida del ASIC
(SSSL se comprueba cuando HSYNC sube, no cuando HDISP sube) y un fallo en el
soporte de joystick de Win32, y que hace el CTC de Playcity más reactivo.
- 20210114 -- parche menor que mejora la detección automática de estéreo en
Playcity ("Alcon 2020" solamente usa el chip izquierdo), añade simulación de ROM
a los cartuchos Dandanator ("CPC Soccer") y corrige un bug en la instrucción de
Z80 CPI aparecido en la versión 20210105 (pruebas RAXOFT) y otro en la duración
de VSYNC en CRTC1 ("Pheelone").
- 20210115 -- parche menor que corrige un error en el PIO de CPC: "Inertie"
manda un valor al puerto A, y luego lee el mismo valor en lugar de recibir un
registro del PSG o bits del teclado.
- 20210127 -- parche menor que corrige errores en los tiempos de Spectrum ("LD
(IX+n1),n2" y Z80_PRAE_SEND: gracias a Azesmbog por avisar de la prueba FPGA) y
el análisis de cinta de CPC (conflicto entre Mikrogen y Hi-Tec).
- 20210129 -- parche menor que corrige un error en el PIO de CPC ("Super Cars"
había dejado de funcionar en la versión 20210115) y mejora la compatibilidad de
CRTC1 (primera parte de "Ecstasy Demo").
- 20210219 -- parche menor que añade una nueva opción, "Video: Blend scanlines"
que maneja los efectos Gigascreen (demos de Spectrum "Mescaline Synesthesia" y
"Tiratok", demos de CPC "Batman Forever" y "Mad Leprechaun") y que cambia la
sincronización de sonido en SDL2. El generador de sonido del chip AY ahora es un
LFSR. Los ficheros SNA grabados desde Spectrum Plus3 activan el bit 4 del byte
0x0C01E para indicar que el snapshot requiere un Plus3 (huevo de Pascua "Hello
There I'm a +3"). El debugger de CPC añade un panel de información (tecla 'X')
con el estado del Dandanator, y el visor de gráficos puede mostrar imágenes de
MODE 2.
- 20210418 -- vigésima versión pública. Los filtros de pixeles y scanlines ahora
están basados en la saturación (aberración cromática, desaturación) en lugar de
la luminosidad (difuminado horizontal, sombreado). Corregido un error al grabar
de XRF a AVI: las operaciones de VFW32 siempre asumían 16-bits estéreo. Las
opciones de grabación "High resolution" y "High framerate" ahora perduran entre
sesiones, y la primera además incluye las instantáneas BMP. Añadido soporte para
los tipos de bloque 0x19 y 0x4B en los ficheros de cinta CDT/TZX, así como la
nueva opción de disco "Read-only as default" para que el usuario pueda elegir si
los discos se abren por defecto en sólo-lectura o lectura-escritura, y esta
opción se combina con la ya existente "Strict disc writes". Nueva opción "Flip
joystick buttons" para que los usuarios de CPCEC puedan cambiar el valor de los
dos botones del joystick de CPC, tal como sugería SB1903. La emulación del PSG
ahora detecta los desbordamientos, tanto si son errores de programación (música
distorsionada en "Thing on a Spring") o hechos a propósito (efecto sonoro de la
tubería en "Thing Bounces Back"). Corregido un error de ZXSEC en la contención
de memoria de Plus3 (edición de disco de "Firefly") y mejorado el "beeper"
(oversampling: "Quattropic" de Utz). El manejo de snapshots de ZXSEC es más
estricto o flexible (cambiando de modelo tanto o tan poco como sea posible)
mediante la opción "Strict SNA files".
- 20210428 -- parche menor que corrige errores en algunos aceleradores de cinta
y en el cargador de firmwares INI (quitar espacios al principio y al final de la
cadena), y añade vídeo inverso a los caracteres de 8 bits del volcado de memoria
del debugger.
- 20210522 -- parche menor que corrige errores en el ASIC (modificar el SSCR
tiene efecto inmediatamente; SSSL se comprueba cuando HCC==R1 y no cuando
HCC==R0; avisado por NoRecess), el PSG (el registro 15 es válido, aunque el
hardware no lo utilice; la demo para Plus "Phat" ahora toca bien la música), el
Z80 (EI siempre retrasa el siguiente IRQ, da igual el estado anterior de la
bandera de interrupciones, y OUTI envía la señal OUT durante su último
microsegundo en lugar del penúltimo; la demo "KKB First" necesitaba ambas
correcciones para funcionar; avisado por Hicks) y ele FDC (los errores conllevan
retrasos que deben ser emulados; el disco protegido original de "Bad Cat"
dependía de esto por accidente; avisado por Dlfrsilver). El debugger acepta
expresiones muy simples (sumas y restas) al escribir valores de 16 bits
(dirección de "Go To", longitud de "Output"...) y el zoom entero emplea pasos de
50% en lugar de 100% porque el tamaño por defecto es técnicamente 200% y no
100%.
- 20210524 -- parche menor que corrige errores al grabar vídeos: errores de
campos en máquinas de 64 bits, tamaño erróneo en la cabecera AVI del sonido de 8
bits (ambos avisados por Cpcitor), y suciedad acumulada entre múltiples
grabaciones dentro de una misma sesión. XRF también muestra la longitud del
resultado.
- 20210526 -- parche menor que alinea el efecto X-Masking a la derecha en lugar
de la izquierda. Las expresiones del debugger aceptan tres operadores nuevos: &
(AND), | (OR) y ^ (XOR). XRF muestra la longitud del resultado con una precisión
de bytes en lugar de megabytes, y ejecutarlo sin un parámetro de destino imprime
los parámetros del vídeo de fuente y el tamaño esperado.
- 20210609 -- parche menor que añade emulación de pistolas de luz para CPC
(Trojan, Gunstick y Westphaser en el puerto de joystick) y Spectrum (Gunstick en
los puertos de Sinclair 1 y Kempston), replica una particularidad del CRTC0
(cuando R6==0 se muestra una sola línea, en lugar de ninguna como los otros
tipos de CRTC) y mejora la elección del color de relleno para los scanlines
medios. La versión de SDL2 ahora interpreta los clics de ratón cuando se suelta
el botón, consistentemente con otros interfaces de usuario. Las opciones de
aceleración de cinta perduran entre sesiones.
- 20210624 -- parche menor que añade soporte de Dandanator para Spectrum, y que
hace que ambos emuladores puedan cargar cartuchos de Dandanator desde la línea
de comando y la tecla F3. Varias heurísticas comprueban que los cartuchos se
corresponden con el sistema.
- 20210626 -- parche menor que corrige varios errores de formato ("%i" en lugar
de "%d" o "%u" y semejantes), un bug en el CRTC (parte de los cilindros 3D de
"PhX" para CRTC3) y otro en Dandanator para Spectrum (atrapar "LD A,(DE)"). La
carga de bloques de snapshots es ligeramente más segura tanto en CPCEC como en
ZXSEC.
- 20210730 -- parche menor que añade soporte de ratón al debugger y corrige
errores en el ASIC (cambiar el registro 9 comprueba que el valor nuevo es igual
o menor que su contador, el splitting horizontal no dibuja basura ni redispara
los IRQ: scroll final de "PhX") y el CRTC: leer el puerto equivocado no devuelve
el valor adecuado (parte secreta de "École Buissonière") y los eventos HSYNC se
filtran con más cuidado ("Chany Dream Demo 5", "Madness Demo", "Sub Hunter"..) a
menos que el usuario prefiera el método antiguo (opción "Hard H-Hold"). Algunos
elementos del menú han cambiado de sitio para separar las propiedades del
hardware y las opciones de la emulación. CPCEC guarda bloques de memoria
comprimidos en los snapshots menos si "Strict SNA files" está activo.
- 20210831 -- parche menor que añade mejoras de rendimiento en la lectura de
TZX/CDT y emulación de la extensión musical Turbo Sound en ZXSEC, y que elimina
la opción "Hard H-Hold" de CPCEC, ahora inútil gracias a retoques adicionales en
el CRTC y la emulación incipiente del chip LA-7800. La versión para Windows
corrige un error al reservar el joystick, la versión para SDL2 reconoce sistemas
de ficheros UTF-8 y su interfaz de usuario es un poco más ágil, y ambas
versiones pueden abrir archivos GZIP y corrigen errores en el uso de ficheros
temporales y la grabación de ficheros YM. CPCEC tiene icono nuevo.
- 20210909 -- parche menor que corrige errores en la lógica de vídeo de ZXSEC,
lo que por fin asegura que los efectos multicolores vistos en las pruebas ULA48,
ULA128, FPGA48 y FPGA128 y los juegos hechos con el motor Nirvana
("Dreamwalker", "Multidude", "Stormfinch", "Sunbucket"...) se vean
correctamente, y que añade extensiones de audio para CPCEC (audio Digiblaster) y