-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathChangeLog.txt
799 lines (605 loc) · 32.5 KB
/
ChangeLog.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
-----------------------
CHANGES IN VERSION 0.50
-----------------------
o Temporarily made F12 the keypad enter key in the Win32 port, just so that
we can change songs in Nucleus. :) Once 0.50 is out the Win32 adb-drv.c
will be modified to support all the keypad keys properly.
-------------------------
CHANGES IN VERSION 0.49.3
-------------------------
o Finally fixed the loading of images under the Win32 port and probably
a few Unix ports as well. I was assuming thet errno was always set to zero
on a successful call, when in fact it's only meaningful if an error
occured. The image opening code now only checks errno when it is sure an
error occured.
o Added support for keypad keys to adb.c. Keypad keys are now represented by
entries in ski_input_buffer[] that have the high bit set.
o Modified the X11 adb-drv.c to return keypad keys properly according to the
new adb.c modifications.
-------------------------
CHANGES IN VERSION 0.49.2
-------------------------
o The size of 3.5" tracks are now much closer to what they need to be
to exactly hold the number of sectors in the track. The new code also
correctly makes the inner tracks shorter than the outer tracks, just
like a real drive. This patch makes a lot more programs load from the
emulated 3.5" drives.
o Corrected a typo in iwm.c in the array that gave the starting block
number for each track of a 3.5" disk. It was causing the wrong data to
be read and hence many images simply wouldn't load correctly.
o Implemented support for writing to 3.5" disks. The only thing left is to
implement support for some sort of nibblized 3.5" disk images (like the
.NIB images used for 5.25" disks).
o Loading of pre-nibblized images into the 5.25" drives is now supported.
Writing back to nibblized images still does not work, however.
o Consolidated some of the big local buffers in the 3.5" and 5.25" drive
routines into shared global buffers.
o Writebacks to 5.25" disks should work once again; I had screwed up the
initialization of the iwm_from_disk_byte[] table while I was cleaning
up the code.
o Writebacks to DOS-ordered images should now work. Previously it would
write the data back in ProODS order.
o .NIB images are now loaded as read-only, because my current writeback
code would try to write the data back in ProDOS-order format and trash
the image file.
o I ran through a compile with -Wall passed to gcc and corrected as many
of the warnings as I could. Those with picky compilers should be somewhat
happier now. :)
-------------------------
CHANGES IN VERSION 0.49.1
-------------------------
o Funky version because I want to save 0.50 for a stable release. :)
o The Win32 port sound code is finally included in the source code
release thanks to David Ross.
o Semi-major overhaul and cleanup of Kent's IWM code in progress.
Please watch your step and beware of falling code fragments. :)
o Implemented read-only 3.5" hardware emulation and most of the
framework for full read-write emulation. Mucho thanks to
Neil Parker for all the info and ROM disassemblies and Ed
Armstrong for getting the info from Neil and pestering me to
get the code written. :-)
o 5.25" emulation code now checks for and correctly handles
DOS-order images. Still no .NIB handling, though.
o IWM code now dynamically allocates and deallocates track
nib_areas. IWM_update automatically deallocates any tracks
that aren't the current track as it goes through writing dirty
tracks to disk.
o Moved nib_pos from Track structure to Disk525 structure in
the IWM code. Theoretically, sync'd tracks should work now.
o Moved loading of drives at startup from the XXX_init routines
into EMUL_run().
o Moved head selection for 3.5" drives into the Disk35 struct,
since I suppose it's theoretically possible to be using
different heads on both drives at once.
o Modified the XXX_loadDrive functions to do their job without
printing any messages, and created equivalent XXX_unloadDrive
functions to go with them.
o Moved the emulated SmartPort back to slot 7. Boy, that was
a short trip...
o The emulated SmartPort now makes sure it only loads images
of type IMAGE_IF_RAW_PO.
-----------------------
CHANGES IN VERSION 0.49
-----------------------
o Added Ian Schmidt's sound fix. The sound code _Finally_ works
correctly now. (Some internal variables were being reset when
oscillators halted themselves, but not when they were halted by
a program. Thus a program that halted an oscillator would often
be unable to get it to play correctly again.)
o Moved SmartPort from slot 7 to slot 5, until the day when the
3.5" IWM code works. The -s5d1 and -s5d2 command line options
are now equivalent to -smpt0 and -smpt1, respectively.
o Fixed problem found by Michael Bytnar in which VID_redrawScreen()
could be drawing in the wrong palette. It now forces a total
redraw by setting a nonsense video mode and calling VID_newMode().
o Applied Frederic Devernay's endianness fix to the super.c drawing
code.
o Fixed a few more prototypes as suggested by Michael Bytnar.
-----------------------
CHANGES IN VERSION 0.48
-----------------------
o Added DSK_readUnivImageHeader and DSK_writeUnivImageHeader to
disks.c. These routines read and write a 2IMG header while
automatically handling all thse messy byte-swapping stuff on
big-endian platforms. This concentrates most of the #ifdef's into
these two routines, making the code cleaner.
o Added DSK_swapField, a universal byte order swapper, to disks.c.
It can swap any field that is an even number of bytes in length.
o Rewrote imgutil.c and imgconv.c to use the routines in disks.c for
reading/writing 2IMG headers for for doing byte swapping.
o Applied a patch sent to me six months ago to better handle systems
which don't have random(). I saved the patch in my mailbox and
it was lost in the mess until I cleaned things out today.
o Added patch by George Ruf [ [email protected] ] to the
Win32 event loop to catch ALT-F4 and properly shut down the
emulator.
o Rewrote all of disks.c into a set of generic image-handling
utilities supporting 2IMG, raw, .DSK/.DO, .PO, .NIB, and
DiskCopy images. Support for the old proprietary XGS image
format is gone and the new primary format is 2IMG.
o Rewrote parts of iwm.c and smartport.c to direct all image-file
access through the routines in disks.c. They should now work
on any image types supported by disks.c.
o Rewrote imageutil.c to deal with 2IMG files instead of XGS
image files.
o Added Michael Bytnar's improved super.c that does writes to the
final video image in 32-bit chunks instead of 8-bit chunks.
o mem-main.c now zeroes out the fast, slow, and save RAM areas at
emulator boot time using memset(). This seems to cure problems
that appear when compiling XGS for DOS under DGJPP.
o Added memory deallocation at shutdown to several parts of the
emulator.
o Consolidated mem-main.c and mem-switches.c into memory.c.
o Folded vid-switches.c into video.c.
o Crunched some of the filenames down to 8.3 format for DOS.
o Added Michael Bytnar's DiskCopy 'unconversion' into the
image utilities plus the necessary changes to make it work
with 2IMG instead of XGS images.
o The Win32 VID_outputImage() routine should now correctly handle
a DD_SURFACELOST error by restoring the surface and refreshing the
entire display. If the surface cannot be restored the video update
is silently aborted. This lets you run XGS applications while XGS
is minimized -- I often do this to listen to synthLAB songs while
working in another Win95 app. :-)
-----------------------
CHANGES IN VERSION 0.47
-----------------------
o We now sacrifice the border color in SHR mode so we can use
all 16 colors in all 16 palettes. This fixes the problem with
opening the Control Panel CDEV in GS/OS.
o Consolidated all the font and image utilities into two
programs called fontutil and imageutil. The fontutil
is currently unfinished and is neither built nor installed
by the standard Makefile.
o Added joystick support to the Win32 version. It works the
same as the Unix version (ie, uses the mouse).
o Fixed keyboard support in the Win32 port and mapped the
F3 and F4 keys as Command and Option, respectively.
o Sound data is now passed into the sound drivers as an
array of structs. These structs contain the raw, un-scaled
sound data from SND_scanOscillators organized as left,right
sample pairs. Thus it is possible for the sound driver to
output the sound in formats other than 8-bit unsigned mono.
o SND_scanOscillators() now produces stereo sound.
o Rewrote EMUL_doVBL() to not depend on gettimeofday(). It
now uses the EMUL_getCurrentTime() function and does
all of its calculations in milliseconds. Thus the new
VBL code _should_ be fully portable.
o Added arch-specific EMUL_getCurrentTime(), which returns
the current time in milliseconds as a long integer. The
current time need not be the real time so long as it
increments 1000 times per second (ie, it can be the
real time, or the number of ms since boot, or whatever)
o Added initial code to the SVGAlib port. However it is
not yet functional.
o Moved vid_buffer and vid_lines[] into the arch-specific
video drivers.
o Fixed all branch instructions to only take the 1 cycle
cross-page penalty if the branch is actually taken,
as per the GTE 65816 documentation.
o Re-ordered the cycle time tables in dispatch.c. They
were in the wrong order and messing up the cycle
times; this would not have been discovered had it not
been for the new IWM code, which needs the cycle times
to be correct.
o Replaced all of iwm.c with Kent Dickey's new code.
The new code is cycle-accurate and supports writing
as well as reading of 5.25" disks.
o Added support for multi-platform compiles to
Makefile.in and configure.in [ [email protected] ]
o Added ifdef'd include of sys/types.h to mem-main.c
for the OS/2 Warp port.
o The SmartPort Format and Extended Format commands
now return an error code of 0 (ie, operation
completed). This allows images to be formatted
from GS/OS.
o MVP/MVN now do it the real 65816 way and just keep
looping the same instruction, instead of using a C
loop. Otherwise a move instruction could mess up the
sound because SND_scanOscillators wasn't called often
enough.
o snd_enable is no longer cleared when the sound
output device fails to initialize, because on systems
w/o sound drivers it is still sometimes necessary to
at least "go through the motions" of sound emulation
in order to make some programs work.
o Partially implemented the SLOTC3ROM, INTCXROM,
and ROMBANK switches. XGS ignores them, but if you
change a switch and read its value back it at least
returns what you think it should.
o Fixed behavior of the 80STORE switch in relation
to memory shadowing. 80STORE was always overriding
AUXRD/AUXWRT for hires page 1, when in fact it
should only do so when HIRES is set.
-----------------------
CHANGES IN VERSION 0.46
-----------------------
o Removed ENABLE_SOUND. Sound is now on by default
and can be disabled with the "-nosound" command
line option.
o Added David Ross's new Win32 user interface. You
can now change the XGS directory path and even
select what images to mount before you run XGS.
o SND_updateOscillator now re-enables an oscillator
(and its partner, if in sync mode) when bit 0 of
its control register is cleared. Previously this
was not being done, because I have at least one
piece of Ensoniq documentation that says it can't
be done, but apparently it CAN, and lots of programs
do in fact do this.
With this fix, the sound now works. It's slow as
hell (at least on Unix) but it does work. I even
listened to a couple of tracks in synthLAB...
o SND_scanOscillators now produces correct sound
data. There were some glitches involving the volume
scaling and the byte<-->float conversions, and the
patched routines now scale the summed output sample
based on the number of oscillators with non-silent
samples instead of num_osc. With these patches in
place the sound now sounds like a real IIGS. :-)
o Fixed sound routines to enable the correct number
of oscillators. [ [email protected] ]
o Added various missing function prototypes.
o Added APP_shutdown to main.c. For most system this
routine called exit(0) (although for Win32 it does
ExitThread(0)).
o Moved EMUL_expandPath to arch-dependant main.c file.
o All functions that work with binary files now use
the "b" option to fopen(). Some ANSI C compilers
like to translate line terminators if you don't
do this (most Mac compilers do this).
-----------------------
CHANGES IN VERSION 0.45
-----------------------
o The OSS SND_outputWrite() now makes sure there is
sufficient space available in the sound driver's
output buffer before trying to write any data.
Previously XGS was blocking on sound writes a lot
and slowing down the emulation.
o Changed EMUL_hardwareUpdate() to run 31,440 times
per second, making the update period a bit over
31 ms, which is what is needed for proper Ensoniq
oscillator updates.
o Added EMUL_expandPath() to expand any partial
pathnames to include XGS_DIR. All the file loading
routines in XGS now use this routine on filenames
before using them, so the chdir(XGS_DIR) in emul.c
was removed.
On Unix, a path is partial if it does not begin with
"." or "/". On MS-DOS, a path is partial if it does
not begin with "\" and if the second character is not
a ":" (ie, the path doesn't begin with a drive letter).
o Major overhaul of the Win32 port to move from WinG
to DirectDraw as the graphics API. It now runs in a
full-screen 800x600x8 mode and looks pretty cool. :-)
o Moved the joystick and mouse grab keys from F1/F2 to
F5/F6. F1 is used as the escape key in the Win32 port
and I wanted the joystick and mouse keys to be
consistant across ports, so I moved them.
o Moved the main() function out to an arch-dependant file
(main.c). This is primarily for the Win32 port, which
doesn't have a main() function (it uses WinMain()
instead). The startup code is now part of EMUL_init(),
which no longer calls EMUL_run() on its own.
o Moved all of the code in VID_update() into the arch-
dependant VID_outputImage() routine. This allows each
architecture to do special things before and/or after
the image updates.
o vid_lines[] setup now done by the arch-dependant video
driver.
o the text and lores drawing routines no longer assume that
the vid_buffer is contiguous in memory (ie, line n isn't
necessarily right after line n-1). This allows the code to
work on more architectures.
o Fixed the COP opcode emulation in opcodes.h. It was
mangling the processor status register in emulation mode.
o Updated Makefile.in to remove the symlinks into the arch/
directory when doing a "make distclean".
o Added some shell script to the end of configure.in so that
the appropriate stuff from arch/ is symlinked into the main
directory.
o Sprinkled some explicit typecasts around the code to make
Visual C++ happy when compiling the Win32 port.
o the EMUL_delay() routine has been replaced by the new, more
accurate EMUL_hardwareUpdate() routine. The new routine uses
gettimeofday() to try to provide cycle-accurate timing at the
scan line level. The speed display should be more accurate
as well since we're no longer depending on signals for the
timing.
o It is no longer necessary to explicitly set ROM 01/03 mode.
The proper mode is now determined at runtime from the size
of the ROM file, which must be either 131,072 or 262,144
bytes long.
o Major reorganization of the source code, particularly for
the video, sound, and ADB code. All platform-specific code
has been cut out and placed in appropriate spots in the
new arch/ directory (arch/x11 and arch/oss).
o Changed handling of IRQ/NMI/etc in the CPU_run() routine so
that the generated code (at least on the x86) only performs
a branch when an exception needs to be handled. This helps a
bit on processors that favor the no-branch scenario.
o Removed cpu_in_irq flag. The dispatcher now simply checks the
I bit in the processor status register before dispatching to
an IRQ. I'm not sure why I wasn't doing it this way to begin
with.
o Optimized MEM_writeMem2. It was checking explicitly for writes
to banks $E0 and E1, when in fact these banks are already
marked with MEM_FLAG_SPECIAL. Just checking for the flag does
the same thing but does it faster.
o Added a .s target to the Makefile that will let you generate
the assembler code for any of the C code files. This is
primarily for my benefit; it lets me easily look at the code
being generated so I can make optimizations.
o MEM_FLAG_INVALID is now handled by MEM_writeMem2. This means
the MEM_readMem function is now faster since it isn't doing
as much flag checking. This speed things up b a few tenths of
a MHz.
o The mem_pagestruct structure was expanded from 12 to 16 bytes
by adding two more flag fields which are currently unused. This
speeds up the emulator by allowing the offset into the array to
be calculated as a simple shift by four (x16) instead of the
more complicated x12 calculation. On the x86 for example, this
saves two instructions for every MEM_readMem or MEM_writeMem
invocation.
o Added 128K of "scratch" RAM in banks $E8 and $E9. Pressing the
NMI key will cause banks $00 and $01 to be dumped to banks
$E8 and $E9. I did this so I could examine program code after
a reboot (which normally clears bank $00).
o Mapped Ensoniq DOC RAM to bank $EA.
o The beginnings of the "live" Ensoniq code are in place inside
the sound server. It doesn't quite work yet however.
o Temporarily turned off classic Apple II sound (it never worked
well anyway).
o Sound code has been removed from the actual emulator and moved
into a separate xgs-sound process. XGS spawns the sound server
at startup time and communicates with it via shared memory.
This greatly simplifies the XGS sound code because the timing
problems are a bit easier to handle.
o The CPU emulator now correctly sets the B flag in the status
register for emulation mode BRKs and IRQs.
o IWM emulation had the disk switched status bit inverted, making
the system think there was always a disk switched error. This
was causing Standard File dialogs to sit in an infinite loop
and freeze the system.
o XGS now actually honors the slot register (mostly) by mapping
out the ROMs for any slots set to "external." The exception is
slot 7, which is always the emulated SmartPort device.
o Added IRQ counter (number of outstanding IRQ requests remaining)
to the debug output. This makes it easier to tell if there is
a problem with clearing a previously raised interrupt.
o Fixed overflow calculations in ADC/SBC _again_. The calculations
were correct but I wasn't doing them in the right order.
Mouse dragging in the Finder now works, as does BubbleGhost GS.
o The Data Bank register is now zero'd when a BRK, COP, ABORT,
NMI, or IRQ occurs in emulation mode. I doubt this bug ever
caused any problems, but it does make the emulator fit the
behavior of a real 65816.
o PLB and PLD now set the N and Z bits correctly. Credit for
finding this bug goes to Kent Dickey [ [email protected] ]
o MVP and MVN should now work correctly. They no longer check
to see if the accumulator is 8-bit, and they now copy bytes
until the accumulator is $FFFF instead of $0000. This fits the
behavior of a real 65816. The credit for finding this obscure
bug also goes to Kent Dickey [ [email protected] ]
-----------------------
CHANGES IN VERSION 0.40
-----------------------
o Updated documentation to describe saving the GS ROM in 16 KB
pieces instead of 32 KB pieces. The 32 KB chunks must overrun
a BASIC.SYSTEM buffer or something because it locks the machine
(though it worked when I first tried it, I have no idea what
version I used but I must've gotten lucky).
o No drawing is done if the main window isn't mapped. Thus if you
iconify XGS during processor-intensive programs they'll run
somewhat faster. [ [email protected] ]
o The code in fault.c has been removed and folded directly into
the MEM_readMem and MEM_writeMem functions. This provides a
marginal speedup (a couple percent at most).
o More working of the ADB logic. The Desk Manager key sequence
is reported specially and does not interfere with any SKI data
transfers currently in progress. This _seems_ to have helped
smooth out some problems with accessing the control panel from
GS/OS on a ROM 01, and doesn't seem to have broken ROM 03
either.
o Put skeleton code in place to trap reads to the Mega II mouse
registers at $C044 and $C045.
o The default memory size is now 2 MB. I got sick of typing out
"-ram 2" to get stuff to run. :-)
o Reads to the Mega II horizontal video count now return a random
horizontal counter value between 0 and 127. This isn't strictly
correct, but some programs use the horizontal count as a random
number seed. For example, this fix makes the FTA Nucleus demo
randomly place its stars as it does on a real IIgs.
o Fixed problems relating to shadowing from bank $01 to $E1 when
the writes were made to bank $00 with AUXWRT or 80STORE enabled.
This fix allows the FTA Nucleus demo work.
o The mouse emulation code now moves the X pointer back to the
center of the window after every pointer movement event. This
fixes the problem where the X pointer would stop at the end of
the window before the GS's pointer was at the edge of the
screen. [ [email protected] ]
o Fixed overflow flag emulation in the ADC/SBC instructions
(I think...) BubbleGhost GS almost works now.
o Fixed bug in XBA opcode emulation. It should have set the N and
Z flags to reflect the final state of the low byte of the
accumulator, but it wasn't. This fixes the problem with
launching P8 applications from P16 and GS/OS. Thanks to
Andre Horstmann [[email protected]] for pointing this
one out.
o Since USS is now known as OSS (Open Sound System), I changed
the code to reflect this. This affects the configure script
(--with-oss-sound) and sound.c/sound.h (the USS_SOUND define is
now OSS_SOUND)
o Fixed ADB_readCommand() bug where the clearing of pending ADB
interrupts would cause the SKI emulation to lose track of the
number of bytes it had returned so far. This bug caused ROM 01
to not work.
o Implemented code to accelerate applications which do page flipping
(text, lores/double-lores and hires/double-hires). Only areas
which are actually different than the last page are redrawn now.
o The window is now correctly redrawn in response to Expose events.
o Rewrote IRQ emulation to support multiple pending IRQs that must
be cleared by the device which generated the interrupt (like on a
real IIgs). Previouly interrupts were lost if multiple interrupts
were generated at once (which happened a lot, since XGS tends to
only generate IRQs at defined times). For example, you can now
get into the Desk Manager menu from GS/OS (mouse interrupts used
to prevent this).
o Scanline interrupts now work right. The CPU update period was
being mangled by the EMUL_update() procedure, causing scanline
interrupts to occur about once a second instead of every 64
emulated cycles. As a result of this, the mouse FINALLY works in
16-bit apps!
o The 80STORE switch now only takes precedance over RAMRD/RAMWRT in
the $00/2000 - $3FFF range when the HIRES switch is on. Previously
it always took precedance, causing some programs to access the
wrong memory and crash.
o Implemented double high resolution graphics. It's not 100% working
yet but it's almost there.
o Made some semi-major changes throughtout all the code to allow XGS
to compile and run correctly on Alpha Linux (and, presumably,
other 64-bit operating systems).
o Video code now only sends updates to the X server for the areas of
the screen which have actually changed. The result is a rather
signifigant speedup in many applications. [ [email protected] ]
o X11 support more robust now; it handles all the events a basic X11
application should be handling (such as Expose events).
o Implemented pointer grabbing for the mouse and joystick. F1 grabs/
ungrabs the pointer for joystick emulation, and F2 does the same
for mouse emulation. Only one can be active at a time.
o Much more robust MIT-SHM support added. It now queries the MIT-SHM
extension before using shared memory, and will default back to the
standard XPutImage() method if shared memory is not present or not
fully supported. [ [email protected] ]
o Makefile reorganized a bit. Should be 99% friendly to non-GNU make
now. [ [email protected] ]
o You should now be able to to truly compile XGS without USS support
now (a few more #ifdef's were needed). [ [email protected] ]
o Removed line in MEM_setSlotReg() that was always forcing slots 5-7 to
"external." This code is no longer necessary since slots 5-6 are now
properly emulated at the hardware level. With this code removed, the
3.5" BitCopy in Copy II Plus now loads and runs just fine.
o Fixed some subtle bugs in the CPU emulation dealing with operand
address calculations. Under certain conditions data could be read from
random banks instead of the correct ones.
o The sound GLU emulation now correctly auto-increments the address
registers. There's still no sound generation code, but some programs
would hang waiting for the address to be auto-incremented to a certain
point (such as Hardball GS)
o Implemented the horizontal and vertical video counters. They are
nowhere near accurate, but they do satisfy programs which watch for
certain counter values.
o TCD now sets the N and Z processor flags. This was the last bug that
prevented GS/OS System Disk 6.0.1 from booting.
o MVN/MVP now loop internally instead of through the opcode dispatcher,
so memory moves run MUCH faster than any real 65816.
o Corrected minor bug in language card emulation.
-----------------------
CHANGES IN VERSION 0.30
-----------------------
o In the interest of speed and simplicity, XGS now supports _only_ 8-bit
X servers. The new video code is now optimized for that bit depth, and
takes advantage of the palette-changing ability of that mode to handle
things like text color changes and super high res palette changes.
o ADB mouse hardware is now emulated (accessed through $C024 and $C027)
o The joystick hardware is now emulated. Currently, the joystick just follows
the mouse.
o Wrote "raw2img" for converting raw disk dumps ("dd" output, or ProDOS-
ordered .PO images) into XGS image files.
o Wrote "dsk2img" for converting DOS 3.3 format .DO/.DSK 5.25" images
into XGS image files. This utility is useful for converting all those
images on ftp.asimov.net into XGS images.
o Slots 5 and 6 are now emulated at the hardware level using the new IWM
emulation code. Unfortunately it's still read-only, and slot 5 doesn't
work at all yet.
o Slot 7 is now an Extended SmartPort device supporting up to 14 images
online.
o Fixed a bug in the PAGE2/80STORE switch emulation that prevented some
128K programs (such as ShrinkIT 3.4) from loading.
o That damn clock works, finally. Battery RAM emulation _seems_ to work, but
the control panel still won't allow any settings to be changed. Hmm.
o Reverted back to the old subroutine-based CPU emulator. It turns out it's
faster anyway (probably because the old one can't be compiled by GCC with
optimization on).
o Endianness problem with super high res color has been fixed.
o The CPU emulator now counts cycles. It is (hopefully) an accurate count.
o VBLs are now emulated using a 100 Hz interval timer, with the VBL being
triggered at half that frequency (50 Hz).
o XGS's window now includes a couple of lines of status information, updated
once per second. A lot of it is for my debugging, but it does display a
couple of useful items: namely the target speed the emulator would like to
achieve (1.0 or 2.5 MHz, depending on the CYA speed register setting), and
the actual speed it is achieving. My P166 benches in the 2.0 - 2.7 MHz
range, depending on what I'm doing in XGS at the time.
o Memory map handling substantially rewritten. It now subdivides _all_ memory
into pages, instead of just banks $00/$01/$E0/$E1. Fault handlers are gone;
I/O space and shadowing are the only special cases and they are handled via
bit flags in the memory page structures. Also I keep an array of long ints
which mark which bytes in the slow RAM banks have been modified; each bit
represents eight bytes (which is nice because then one long word = one page
of 256 bytes).
o Shakey but sorta working support for classic Apple II sound. It sounds a bit
distorted, and pops a lot, but it does work.
o The video code now picks the correct visual to use for the chosen display.
This doesn't seem to matter on XFree86 systems, but it apparently does on
others. XGS should now refuse to start up if it can't find a suitable visual.
o The video code now only rescans the areas of video memory that have actually
changed since the last video update. This means that a time spent in video
updates has been substantially reduced.
o Video updating is now done on 50 times per second instead of 4 times per
second, because the new video code doesn't slow the emulator down as much.
The result of this change is that video updates are much smoother.
o The source tree has been substantially reorganized. Everything is in
one directory to make things a lot easier to work with, and the whole
thing is now configurable with GNU autoconf. There's even a real
Makefile now, with proper dependancies.
-----------------------
CHANGES IN VERSION 0.20
-----------------------
o Due to popular demand, 8-bit color X servers are now supported.
o XGS _should_ work now if you give it a ROM 01 image padded to 256 KB.
o Super high-resolution graphics supported though not fully tested. It _should_
work in all modes including 640x200, 320x200, and 320x200 fill mode.
o Created virtual ProDOS block devices in slots 5 and 7. Each can support two
disk image files up to 32 MB each. This means it's now possible to _boot_
stuff on XGS (at least ProDOS 8 stuff). You can even write to the virtual
disks!
o The arrow keys are now recognized by the emulator.
o You can now enter the Desk Manager menu (Control-Command-Escape), though
it's still acting a bit flakey sometimes.
o Added the utils/ subdirectory. There's lots of neat stuff here for handling
the XGS ".img" files and for viewing and rebuilding the XGS font files.
o In all bit depths, we now open a private colormap and allocate the colors
using XAllocColor(). This was necessary for 8-bit mode, and for the other
modes it should fix the problem XGS had on X servers that specified the RGB
color levels in a different order than what XGS was using.
o Video handling substantially overhauled. The emulator no longer traps video
memory accesses; instead, the video screen is simply periodically redrawn.
Some things run quite a bit faster as a result.
o High-resolution graphics glitch fixed; the right border is no longer
partially overwritten.
o Mixed text/graphics modes now work in 40 or 80 columns.
o Fixed some of the more annoying font glitches. The mousetext 'Z' character
is now a right-justified vertical line as it should be, and the "1" and "l"
(lowercase L) characters are now centered in the font matrix instead of
being left-justified.
o The Makefiles have been modified to work on non-GNU versions of make and ar.
o Reorganized the link commands in the Makefile to specifiy the libraries last
on the command line. It worked fine for me the old way but not for some other
people.
o Some key symbols specific to X11R6 were replaced with symbols present on all
versions of X11. This should allow XGS to compile on systems that use X11R5.
o 65816 emulation should be a faster now. Also some bugs with IRQs and NMIs
were fixed (they weren't pushing the proper PC value onto the stack, plus
the RTI instruction was incorrectly incrementing the value it pulled back
from the stack. Used together they work fine, but some code in ProDOS 8
apparently sets up a fake IRQ stack frame and does an RTI, and this code
didn't work with the old 65816 emulation).
o Skeletal support for emulating the Ensoniq DOC has been added. It doesn't
really _do_ anything yet other than allow reads and writes to the DOC and
sound RAM (basically just enough to get the darn thing to work properly).
o VBL and quarter second interrupts are now supported...I think. Haven't fully
tested them so I can't be 100% sure.