4429dc21b3e895fe052bd275b7abb45a5a81dd4e
[ctsim.git] / ChangeLog
1 Apr 1, 2007  Version 4.5.3
2         * include/timer.h: Fix building on GCC 4.3
3         -- thanks to Martin Michlmayr
4
5 Oct 19, 2006  Version 4.5.2
6         * src/lipctsim/imagefile.cpp: Change delete to fftw_free 
7         -- thanks to Sven Huth
8
9 Oct 18, 2006  Version 4.5.1
10         * configure: rebuild from configure.ac
11
12 Oct 15, 2006  Version 4.5.0
13         * libctsim/backprojectors.cpp: Fix for iteration bug in backprojection
14         and simply computing rotScale -- thanks to Dan Martin.
15
16 Mar 16, 2006  Version 4.4.4
17         * Changes for g++ 4.1 support
18
19 Aug 22, 2005  Version 4.4.2
20         * New URL for downloading CTSim
21         
22 Aug 22, 2005  Version 4.4.1
23         * work-around for compilation problems on Fedora 4 and wxWin 2.4.2
24         
25 Aug 22, 2005  Version 4.4.0
26         * Changes in configure.ac for X.org compatibility with Debian Etch
27         and FC4. May not be backward compatibility with XFree86.
28         
29 Aug 10, 2004  Version 4.3.2, Version 4.3.3
30         * Minor changes in man pages to fix groff warnings
31
32 Nov 1, 2003  Version 4.3.1
33         * Add support for SuSE AMD64
34
35 Oct 5, 2003  Version 4.3.0
36         * Ported to incompatible FFTW3 library. CTSim will no longer compile or run with FFTW2. 
37         * Save FFTW3 in $HOME/.fftw3-wisdom on platforms where getenv function is available
38         
39 Oct 3, 2003  Version 4.2.7
40         * Add support for building on RedHat AMD64 
41
42 Sep 30, 2003  Version 4.2.7
43         * Fix minor issue with floating point difference backprojection, add
44         optimization
45         
46         * Fix building with newest versions of automake 1.7
47
48         * Add support for 8-byte longs [for example, Athlon64] in
49         integer difference backprojection allowing for 64-bit integer
50         math.
51
52 Mar 22, 2003  Version 4.2.3
53
54         * Added Fourier reconstruction method
55
56         * Support gcc 3.2, wxWindows 2.4, and MacOS X
57
58         * Fix polar interpolation
59         
60 Jun 26, 2002  Version 3.5.6
61
62         * Fix minor color PNG image importing bug
63         
64         * Bug fix for building on Debian alpha platform
65
66         * Fix g++ compilation warnings
67         
68 Jun 13, 2002  Version 3.5.5
69         
70         * Fix printing of version number
71         
72         * Minor bug fixes
73
74         * Updated Win32 compatibility
75         
76 Jun 8, 2002  Version 3.5.4
77
78         * Print version number in log window with About command
79         
80         * Fix problem with captions not showing on some windows. Reworked
81         creation of new windows.
82         
83         * Disabled status bar on 3d views
84         
85         * Fix bug in configure.ac that prevented using compiler
86         optimizations.
87
88         * Updated About splash screen
89         
90 May 29, 2002  Version 3.5.3
91         * Added support for g++ 3.04 compiler
92         
93 May 8, 2002  Version 3.5.2
94         * configure: improved CTN (DICOM) installation search
95         * src/ctsim.cpp: Fixed initial image size with import command
96
97 May 5, 2002  Version 3.5.1
98
99         New Features:
100
101         * ctsim: Added tips to be displayed at startup and via the help menu.
102         * ctsim: Added center-detector concept. Allow for detector array
103         to be any arbitrary distance from center of scanner. As a result,
104         projection files are not incompatible with previous version of
105         CTSim.
106         * ctsim: Added threaded tasks and background manager for 
107         background processing as well as taking advantage of multiple-CPU's 
108         on SMP systems.  (Microsoft Windows only)
109         * ctsim: Added plot t-theta sampling to projection file menu.
110         * ctsim: Added Reconstruction with Rebinning for faster
111         divergent beam reconstructions.
112         * ctsim: Added import and export of DICOM image files.
113         * ctsim: Added PPM, PGM, and PNG file import to imagefile.
114         * ctsim: Added FFT/IFFT of columns of image files.
115         * ctsim: Added clipboard cut/copy/paste for image files.
116         * ctsim: Added region of interest to reconstructions.
117         * ctsim: Added Convert Rectangular Image to Projection files
118         * ctsim: Added "Verbose Logging", "Startup Tips", and
119         "Background processes" options  to Preferences dialog.
120         * ctsim: Added plotting of projection file histograms.
121         * plotfile: Added scattergram plot functions
122         * ctsim: Added accelerator key for File-Properties
123         * ctsim: Improved wireframe 3-d display to remove hidden
124         surfaces.
125         * backprojectors.cpp: Added setting of axis extent and increment
126         to reconstructions.
127         * projections.cpp: Can read and reconstruct SIEMENS AR.STAR DICOM
128         projection data files.
129         
130         Bug Fixes:
131
132         * views.cpp: reduced calls to progress bar update, significant speedup
133         * views.cpp,ctsim.cpp: Fixed bug with window frames sometimes
134         not being displayed on Unix platforms.
135         * views.cpp: Added out-of-memory checks to display for huge
136         image and projection files.
137         * filter.cpp: Fixed Hanning parameter to be 0.5 rather than 0.54
138         * imagefile.cpp: Fixed scaling factor in fftRows
139         * imagefile.cpp: Fixed bug when performing magnitude() on real-valued
140         image.
141         * sgp.cpp: Fixed bug in drawCircle.
142         * distribution: fixed problem with documentation files not
143         being included with the distribution (Reported by Ian Kay).
144         * sgp.cpp/ezplot.cpp: Improved plotting with markers.
145         * fixed ctsimtext shell when giving no parameters to function-name
146         * phm2if, phm2pj: Updated help messages for renamed phantoms
147         
148 3.0.3 - Released 2/20/01
149
150         * ctsim: Fixed core dump on Linux with OpenGL
151
152         * ctsim: Fixed context-sensitive help on Linux
153
154         * ctsim: Fixed About box on Linux
155         
156 3.0.2 - Released 2/20/01
157
158         * scanner.cpp: Fixed bug when number of detectors was even.
159
160         * ctsim: Improved error handling when trying to convert
161         divergent projections into polar form.
162         
163 3.0.1 - Released 2/19/01
164
165         * ctsim: Fixed dialog box for reconstruction so that
166         rotation angle setting will stay fixed in-between use
167         of the dialog box.
168
169         * syserror: Fixed display bug for trace messages
170
171         * ctsim: MSVC optimization bug work-around, compiler 
172         options changed.
173         
174 3.0.0 - Released 2/19/01
175
176         * ctsim: Massive update/fix to online help and print manual.
177
178         * ctsim: Added context-sensitive help to dialog boxes
179         
180         * ctsim: Reformated all dialog boxes, much nicer now.
181         
182         * ctsim: Improved accelerator key handling
183         
184         * global: Added Hanning filter.
185
186         * global: Improved default parameters to that all defaults give
187         sensible output.
188         
189 3.0.0beta1 - Released 2/11/01
190
191         * ctsim: Added most-recently-used files to File menu with
192         registry storage between executions.
193
194         * ctsim: Hides arcane features unless enabled by Preferences dialog
195         
196         * ctsim: Added MDI interface for Windows version and made it default for Windows.
197
198         * ctsim: Added 3-D wireframe view of images (uses OpenGL)
199         
200         * ctsim: Added graphical About box
201
202         * ctsim: Escape key now removes cursor lines from image file view
203
204         * ctsim: Added Revert to ImageFile menu
205         
206         * ctsim: Added accelerator (hotkeys) to frames
207
208         * ctsim: Online help added!
209
210         * backprojector: Added cubic interpolation
211         
212         * ctsim: Added icons to Frames on X-Window and MS Windows versions
213
214         * ctsim: Fixed tick-label placement for plots on projection and
215         reconstruction dialogs.
216
217         * timer.h: Add use of _ftime when compiling on MSVC
218
219         * global: Projection files are not compatible with previous version
220         due to new scanner definitions.
221         
222         * global: deleted concept of field-of-view and added
223           view ratio and scan ratio concepts.
224         
225         * ctsim: Fixed crash on shutdown bug
226
227         * pjinfo: Fixed bug when doing --dump and not specifing --endview
228
229         * phm2pj: Fixed MPI bug with broadcasting of variables
230         
231         * ctsimtext-lam: Changes for first version to compile under lam
232
233         
234 3.0.0alpha5 - Released 1/12/00
235
236         * ctsim: Added EZPlotDialog, used by debugging plots in
237         procsignal.cpp
238         
239         * ctsimtext: Fixed bugs for MSVC and with empty input lines. Fixed 
240         bug in parsing command-line parameters.
241
242         * views.cpp: Fixed bug in copying of labels from images to
243         plotfiles
244         
245         * syserror.cpp: fixed reporting for fatal errors
246
247         * projections.cpp: fixed MSVC failure with std:: namespace
248
249         * procsignal.cpp: fixed bug in equiangular reconstructions
250         for frequency/inverse-fourier filtering
251         
252 3.0.0alpha4 - Released 1/09/01
253
254         * ctsim: Added reset to full-intensity scale menu item
255
256         * ctsim: Add conversion of projections to polar plot [Thanks to
257         Ian Kay for reference and math hints in polar bilinear scaling]
258
259         * ctsim: improve bilinear scaling of image size [Thanks to Ian Kay
260         for math tips]
261
262         * ctsim: imagefile labels are now copied to plotfiles
263
264         * ctsim: Added more analyze menuitems
265         
266         * ctsimtext: First version. All command-line tools are now accessed
267         through this master shell. Has both command-line and interactive
268         interface
269         
270         * ctsim: Fixed initialization of min/max bug for PlotFiles
271
272         * ezplot: Cleaned up y-tick label placement
273
274         * sgp: Added better support for projection/reconstruction animation
275         
276 3.0.0alpha3 - Released 1/02/01
277
278         * ctsim: Added plotting of histograms
279         
280         * imagefile.cpp: fixed bug in generation of 16-bit PNG images
281
282         * ezplot.cpp: adjusted xtick label displays for better placement
283         
284 3.0alpha2 - Released 1/02/01
285         
286         * ctsim: All functions of command-line tools are now in graphical ctsim
287         
288         * ctsim: added generation of filter images
289
290         * ctsim: Added 2-image math functions (mul, add, div, sub)
291
292         * ctsim: Added export of imagefiles to graphic file formats
293
294         * ctsim: Added support for scaling imagefiles in new sizes
295
296         * ctsim: Added ability to save standard phantom definitions as
297         text files suitable for reading.
298         
299         * ctsim: Add labels for image transformations and display of labels
300         when performing properties of images.
301
302         * processsignal.cpp: Fixed "off by one" bug in
303         shuffleNaturalToFourierOrder when n is even. Moved functions to
304         fourier.cpp
305
306         * imagefile.cpp: Added FFTW library to imagefile processing. Converted
307         image math functions to complex-valued math.
308
309         * phantom.cpp: Added ability to save phantom files as ASCII text.
310         
311 3.0alpha1 - Released 12/29/00
312
313         * Added PlotFile class to system, used by if2 and ctsim for row
314         and column plots and comparison plots
315
316         * ctsim: Added image comparison statistics and image subtraction
317
318         * ctsim: Added plotting of rows & columns with y-axis scaling 
319
320         * ctsim: Added row and column plot comparisons between two image
321         files.
322
323         * ctsim: Added "Process" menu to image file display with math
324         functions. Added 2-dimensional inverse Fourier to math
325         functions. Added support for complex (real/imaginary) images.
326
327         * mathfuncs.cpp: Reworked statistics algorithm to share between
328         imagefile and plotfile classes.
329
330         * imagefile.cpp: Fixed scaling bug when rasterizing Phantom with
331         nsamples > 2.  Added generic mage math functions, moved from
332         if1.cpp and if2.cpp to imagefile.cpp. Added support complex
333         images.
334
335         * array2dfile.cpp: Added code to support complex (real/imaginary)
336         images.
337
338         * if1: Updated to handle error conditions, such as sqrt of a
339         negative number. Converted to use new ImageFile math functions.
340         
341         * if2: Updated to output plot files and use new ImageFile class
342         math functions
343
344         * if1: Updated to use new ImageFile class math functions
345
346         * ezplot: Reworked to better store colors/linestyles/symbols with
347         individual curves. Improved display of labels and ticks. Updated
348         to use POL class member variable. Updated to more C++ conventions.
349
350         * pol: converted to C++ class. Extracted HashTable to separate
351         class.
352         
353         * sgp: Added linestyle settings
354         
355 2.5.0 - 12/18/00 
356    First Microsoft Windows GUI version
357    Modifications for Microsoft Visual C++ compilation.
358    Improved pjinfo to output binary headers and view data, useful
359         when manually compiling phantoms that vary during projection
360         process. Thanks to Ian Kay for idea and code submission.
361    Improved sorting to find median in ImageFile::statistics
362    Fixed core-dump bug in Array2dFile::labelsCopy() function (Ian Kay) 
363    Changed reconstruction dialog to fix onto smaller screens
364    Fixed display of plotting in Projection views
365    Improved animation displays for Projections and Reconstructions
366    Changed code to explicitly use std:: namespace rather than 
367         "namespace using std" statements
368    Fixed reconstruction scaling bug introduced in 2.0.6
369    Renamed if2img to ifexport, if-1 to if1, if-2 to if2
370         
371 2.0.6 - 12/03/00
372    Fixed minor compilation problem with procsignal.h
373    Updated README file
374    Fixed bug when simulating projections and Trace == CONSOLE
375    Fixed scaling bug when performing redundant rotations around object
376         
377 2.0.5 - 12/01/00
378    Improved compilation on RedHat 7
379    Changed some of ANSI C header files to C++ header files
380    Removed README.RedHat7
381         
382 2.0.4 - 11/25/00
383    Added documentation for --geometry setting
384    Added README.RedHat7 document
385          
386 2.0.3 - 11/20/00
387    Fixed bug in generation of binary PGM files
388    Fixed MPI compilation bug in phm2pj.cpp
389    Inverted y-axis output for pj2if (bug alert from Ian Kay)
390         
391 2.0.2 - 11/8/00
392    Additions to man pages (Ian Kay)
393    Fix problem with reading of ASCII phantom files (Ian Kay)
394
395 2.0.1 - 10/1/00
396    Fixed syntax error in fftw configuration
397    Slight modifications to support gcc v2.9.6
398         
399 2.0.0 - 9/7/00
400    Version 2.0.0 released!
401    ctsim: Added Window menu to Main frame
402    ctsim: Disabled not support reconstruction method
403    Fixed obscure bug in sys_error
404    Fixed compilation in mingw environment not present
405    Fixed compilation in non-graphical environments      
406         
407 2.0.0-b12 - 9/4/00
408    ctsim: Added animation of reconstruction
409    ctsim: Added saving of dialog parameters for Projection & Reconstruction
410    ctsim: Added progress dialog for rasterization of phantom
411    ctsim: used setpriority to set lower priority
412    ctsim: fixed pReconstruct not being deleted causing scaling problem
413    ctsim: fixed projection animation dialog buttons
414
415 2.0.0-b11 - 9/1/00
416    ctsim: Added projection graph to animation of projection collection  
417    ctsim: Added single stepping to projection collection animation
418    ctsim: improved File/Properties display for projection files
419    ctsim: Added progress dialog for reconstructions
420    ctsim: Added file labels for projection and reconstruction images
421    ctsim: Made File/Properties bring up modal dialogs
422    Added reconstruction for Equilinear and Equiangular geometries
423    Changed theta to be -PI/2 to make compliant with Kak-Slaney formulas
424    Separated reconstruction into Reconstructor class
425    Fixed center of detector adjustment for even number of detectors
426    Added --enable-static to generate statically linked programs
427         
428 2.0.0-b10 - 8/25/00
429    ctsim: Added animation of projection collection processs
430    ctsim: Added Auto Scaling for image windows
431    ctsim: Change menus from "windowing" to "display scaling"
432    Added FieldOfView and FocalLength ratio parameters to projection collection
433    Added FocalLength & FieldOfView fields to projection data files
434    Added Projection collection for Equilinear and Equiangular geometries
435    Changed name of Rowland Phantom to correct name of Shepp-Logan
436    Fixed bug in backprojection selection
437         
438 2.0.0-b9 - 8/22/00
439    Added RCS Id strings to executable files
440    Added RPM Spec file for RPM package creation
441    Added loading of ASCII phanthom definitions from files
442    Fixed compilation for non-SGP architectures 
443    Decomposed SignalFilter class into ProcessSignal and SignalFilter classes
444    Added Filter-Generation option to reconstruction to allow direct or 
445         inverse_fourier construction of filters
446    Added median to statistics and to auto-windowing
447         
448 2.0.0-b8 - 8/1/00
449    Added line color support to SGP
450    Fixed lineAbs bug
451         
452 2.0.0-b7 - 7/25/00
453    Finished support for dmallocxx library
454    Fixed bug in SignalFilter::convertFilterMethodNameToID()
455    Rewrote SGP & EZPlot to use C++ object-oriented. SGP can now write to 
456         G2 windows and well as WXWindows.
457    ctsim program: "Create Phantom" now shows phantom object
458    Fixed row-plot bug in if-2
459    Reworked EZPlot's multiple plot operation
460         
461 2.0.0-b6 - 7/22/00
462    ctsim program: improved initial size and scroll area for image 
463         and projection files
464    ctsim program: added rasterization parameters, projections parameters,
465         and reconstruction parameters dialogs
466    Moved char[] static definition from header files to c++ files
467    Completely reorganized option processing in classes to improve
468         expandability and to assist ctsim graphical user interface.
469         
470 2.0.0-b5 - 7/17/00
471    ctsim program: Added dialog to set minimum/maximum display levels 
472    Started ctsim.tex document file
473         
474 2.0.0-b4 - 7/13/00
475    Fixed compiler warnings at -Wall level
476    Began work on CTSim program to be graphical front-end of all functions
477    Moved current src/*.cpp to tools/*.cpp
478    Made CTSim graphical front-end's home to be src/
479         
480 2.0.0-b3 - 7/10/00
481    Added highly optimized backprojection method idiff3
482    Moved comparative stats to if-2 program from ifinfo
483    Fixed image display in if2img using G2 library
484    Added column-plot and row-plot options to if-2
485    Added autoselection of analytic/calculated spatial responses to SignalFilter
486    Added frequency-based preinterpolation to SignalFilter and idiff3
487         backprojection method. Currently, this technique is still under
488         development and debugging
489    Moved graphic file writing to ImageFile class from if2img program
490
491 2.0.0-b2 - 7/07/00  
492    Cleaned up SignalFilter class
493    Added zeropad option to pjrec
494    Added zeropad options to html and cgi files
495    Added fourier_table and rfttw filter methods
496    Added FFTW routines to use real/half-complex transformations
497         
498 2.0.0-b1 - 7/05/00
499    Updated trace level processing
500    Added trace level to SignalFilter
501    Fixed magnitude vs. real output bug in FFT/Fourier filter
502         
503 1.9.9 - 7/04/00
504    Fixed const issue with ImageFileArray
505    Fixed Array2dFile::labelsCopy()
506    Added copy constructor and assignment for Array2dFileLabel class
507    Added Timer to if-2.cpp and ifinfo.cpp
508    Added beginning of frequency-based (DFT & FFT) filter to SignalFilter
509    Added option processing for filter-method for pjrec to choose
510         between convolution, dft, & fft filtering
511    Fixed format string for EZPlot so axis labels now print
512    Added support for FFTW library
513         
514 1.9.8 - 6/27/2000
515    Rewrote Array2dFile class to be non-templated
516    Rewrote Array2dFile class to make reads and writes atomic. No disk files are kept open.
517    Rewrote Array2dFileLabel class to make members private, added access routines
518    Removed timedate.cpp in favor of standard C library time/date functions
519    Renamed ctrec to pjrec, sample-ctrec.sh to sample-ctsim
520    Added signature tag and creation date/time to projection files
521         
522 1.9.7 - 6/25/2000
523    Standardized string option processing by classes. All classes use character strings
524         to select options rather than numeric constants. Added fail() and failMessage()
525         methods to verify that objects are created correctly by character strings.
526    Hid C++ assignment and copy constructors in classes that should not have assignment/copy
527    Rewrote ImageFile class
528    Started support for dmallocxx library, not finished
529    Added G.T. Herman image comparision statistics to ifinfo (see imagefile.cpp)
530    Updated ifinfo to show comparative statistics
531    Added printLabels() to Array2dFile class
532    Added printStatistics() to ImageFile class
533         
534 1.9.6 - 6/22/2000
535    Moved conversion filter name/id to Filter class
536    Moved conversion backprojection name/id to Backproj class
537    Added MPI broadcasting of strings
538         
539 1.9.5 - 6/21/2000
540    Merged proj_reconstr into class Projections
541    Used auto_ptr in Projections::reconstruct to make sure destructor is always called
542    Code cleanup in projections.cpp
543    Moved conversion of phantom names/id to Phantom class
544         
545 1.9.4 - 6/20/2000
546    Converted projection files to C++ library with frnetorderstream
547    Converted image files to C++ library with frnetorderstream
548    Converted filter and convolution to object-oriented code
549    Changed default image file to float from double -- Changable in imagefile.h
550    Optimized image file writing on little-endian architectures
551    Updated README and INSTALL
552         
553 1.9.3 - 6/19/2000
554    Reorganized source files
555    MPI bug fixed to phm2pj.cpp
556         
557 1.9.2 - 6/18/2000
558    Reorganized include files
559    Fixed const pointers in strfuncs
560         
561 1.9.1 - 6/16/2000
562    Renamed directories, moved source files, combined source files
563    to change from 6 libraries to 3 libraries (libctsim, libctsupport,
564    and libctgraphics)
565         
566 1.9.0 - 6/15/2000
567    Skip versions to make version 2.0 the first fully C++ version
568    Renamed Raysums to Projections throughout files
569    Renamed Detector to Scanner
570    Converted Scanner and Projecions to full object-oriented
571         
572 0.6.1 - 6/12/2000
573    Converted Phantom and PhantomElements to Object-Oriented
574    Converted Detector to Object-Oriented
575         
576 0.6.0-b3 - 6/10/2000
577    Improved Integer backprojection method
578         Fixed nearest neighbor to be truly nearest neighbor
579         Made linear interpolation more integer arithmetic -> speed improvement
580    Finished converting all C files to C++
581    Converted all use of malloc/free to C++ new/delete
582    Began object-oriented conversion of Phantom and Projection structures
583         
584 0.6.0-b2 - 6/8/2000
585    Converted MPI data structures to C++ object
586    Made ImageFile directly inherit from Array2dFile
587         
588 0.6.0-b1 - 6/6/2000
589    First C++ conversions
590    Portable IF (image file) format implemented with objects (SDF removed)
591         - Now all data files are cross-platform compatible
592    Converted from MPI to MPI++
593    Converted backprojection to object-oriented
594    Removed MTX from libkmath as no longer need -- replaced with C++ matrices             
595         
596 0.5.4 - 6/4/2000
597    Simpilifed endian handling
598         
599 0.5.4-b3 - 6/1/2000
600    Added support for 64-bit (IA64) CPU
601    Removed broken B-spline interpolation
602    Added support for cygwin platform under Windows 2000
603    Added support for 16-bit PNG graphics
604         
605 0.5.4-b2 - 5/16/2000
606    Added compile-time configuration of endian order
607
608 0.5.4-b1 - 5/14/2000
609    Modified the raysum file format to be platform independent
610         
611 0.5.3 - 5/11/2000
612    Added Microsoft VC compatibility
613    Cleaned up compilation warnings in libgraph
614         
615 0.5.2-b5 - 5/7/2000
616    Continued conversion to ANSI C       
617    Removed old CRT routines
618         
619 0.5.2-b4 - 5/4/2000
620    Renamed pictures to phantoms, objects to phantom elements
621    Continued code cleanup
622         
623 0.5.2-b3 - 4/30/200
624     More code cleanup with reorganizing libraries
625     Added --log and --exp to sdf-1
626     Allowed negative numbers for window levels in CGI interface
627
628 0.5.2-b2 - 4/30/200
629     Continued code cleanup
630         
631 0.5.2-b1 - 4/29/2000
632     Fixed a few MPI bugs
633     Better documented, coded raysum in-memory on on-disk options
634         
635 0.5.1 - 4/28/2000
636     Cleaned out library that wasn't being used by CTSim  
637     Modified ctsim.cgi to read in configuration file ctsim.conf
638
639 0.5.0 - 4/27/2000 
640     First open source distribution for GNU/Linux
641         
642 6/1999 
643   Converted to GNU/Linux
644   added MPI support via LAM library
645         
646 1983-84 
647   Developed under MS-DOS and IBM EGA graphics
648