Add support for author nicknames
[jpcrr.git] / manual.lyx
blobb3e04ffac94dd1dc88f7e7ace07b716653db3a8f
1 #LyX 1.6.5 created this file. For more info see http://www.lyx.org/
2 \lyxformat 345
3 \begin_document
4 \begin_header
5 \textclass article
6 \use_default_options true
7 \language finnish
8 \inputencoding auto
9 \font_roman default
10 \font_sans default
11 \font_typewriter default
12 \font_default_family default
13 \font_sc false
14 \font_osf false
15 \font_sf_scale 100
16 \font_tt_scale 100
18 \graphics default
19 \paperfontsize default
20 \spacing single
21 \use_hyperref false
22 \papersize default
23 \use_geometry true
24 \use_amsmath 1
25 \use_esint 1
26 \cite_engine basic
27 \use_bibtopic false
28 \paperorientation portrait
29 \leftmargin 2cm
30 \topmargin 2cm
31 \rightmargin 1cm
32 \bottommargin 2cm
33 \headheight 1cm
34 \headsep 1cm
35 \footskip 1cm
36 \secnumdepth 3
37 \tocdepth 3
38 \paragraph_separation indent
39 \defskip medskip
40 \quotes_language english
41 \papercolumns 1
42 \papersides 1
43 \paperpagestyle default
44 \tracking_changes false
45 \output_changes false
46 \author "" 
47 \author "" 
48 \end_header
50 \begin_body
52 \begin_layout Title
53 JPC-RR: User's manual
54 \end_layout
56 \begin_layout Section
57 Licence
58 \end_layout
60 \begin_layout Standard
61 JPC-RR is licenced under GNU GPL v2.
62  See file 
63 \begin_inset Quotes eld
64 \end_inset
66 LICENSE
67 \begin_inset Quotes erd
68 \end_inset
71 \end_layout
73 \begin_layout Section
74 Getting started
75 \end_layout
77 \begin_layout Subsection
78 Prerequisites
79 \end_layout
81 \begin_layout Standard
82 To get started, you need BIOS image, VGABIOS image and DOS boot floppy and
83  JDK for Java 6 standard edition (later versions should they appear should
84  also work).
85  Note: JRE is not enough.
87 \end_layout
89 \begin_layout Standard
90 Note that to play back recorded movies, you need exact same version of BIOS
91  image, VGABIOS image and DOS boot floppy as was used when making the movie
92  (in addition to exact same versions of other needed media).
93 \end_layout
95 \begin_layout Subsection
96 Compiling
97 \end_layout
99 \begin_layout Standard
100 See compile.sh or compile.bat.
101  The streamtools stuff is only needed for dumping videos.
102 \end_layout
104 \begin_layout Subsection
105 Getting started
106 \end_layout
108 \begin_layout Standard
109 First you need to get and make some important images.
110  Obtain BIOS image, VGABIOS image and DOS boot floppy from somewhere.
111  After starting the emulator, use Drives -> Import Image to import the images
112  (ignore the error about no BIOS images being found).
113 \end_layout
115 \begin_layout Subsection
116 Running emulator
117 \end_layout
119 \begin_layout Standard
120 There is premade autoexec script called assemble.jpcrrinit that has fairly
121  reasonable defaults.
122  To use it:
123 \end_layout
125 \begin_layout LyX-Code
126 java JPCApplication -library library -autoexec assemble.jpcrrinit
127 \end_layout
129 \begin_layout Standard
130 The 
131 \begin_inset Quotes eld
132 \end_inset
134 -library library
135 \begin_inset Quotes erd
136 \end_inset
138  specifies that contents of directory 'library' are to be used as library.
139  The script pops up settings for new emulated PC (if you want to load savestate,
140  click cancel).
141  Select BIOS and VGABIOS for BIOS and VGABIOS image (they should be already
142  selected), DOSfloppy for fda (boot device should be set to fda) and game
143  image as some HD drive 
144 \end_layout
146 \begin_layout Subsection
147 Bootup tips
148 \end_layout
150 \begin_layout Itemize
151 Putting the game as hdd (the fourth hard disk slot) causes boot to be bit
152  faster.
153 \end_layout
155 \begin_layout Itemize
156 Some BIOS versions have 
157 \begin_inset Quotes eld
158 \end_inset
160 press F12 to select boot device
161 \begin_inset Quotes erd
162 \end_inset
165  Hit <enter> from emulated keyboard and that prompt will go away in about
166  half emulated second (it stays several emulated seconds otherwise).
168 \end_layout
170 \begin_layout Itemize
171 If game doesn't need lots of memory, hitting F5 to skip intialization files
172  is fastest.
173  If it does need more memory, run config.sys commands but not autoexec.bat.
175 \end_layout
177 \begin_layout Itemize
178 Some DOS disks have DOSIDLE with them, don't use it as it messes badly with
179  emulator.
180 \end_layout
182 \begin_layout Section
183 Making JPC-RR format images from raw images
184 \end_layout
186 \begin_layout Standard
187 Due to various factors, JPC-RR can't use raw image files directly but requires
188  its own image format.
190 \end_layout
192 \begin_layout Subsection
193 Importing images from GUI:
194 \end_layout
196 \begin_layout Standard
197 Use Drives -> Import Image to import existing directories or image files.
198  Dialog prompting parameters will be displayed.
199  When importing floppy images, check 
200 \begin_inset Quotes eld
201 \end_inset
203 standard geometry
204 \begin_inset Quotes erd
205 \end_inset
207  if possible, that enables geometry autodetection, which is reasonable virtually
208  all of the time it is offered.
209 \end_layout
211 \begin_layout Subsection
212 Notes
213 \end_layout
215 \begin_layout Itemize
216 If making image from directory, the names of the files must conform to FAT
217  naming restrictions (8+3 character names, no spaces, etc).
218  Avoid filenames with non-ASCII characters.
220 \end_layout
222 \begin_layout Itemize
223 The DOS limit of 112 or 224 files for floppies does not apply to images
224  created from directory trees.
225  The minimum limit value used is 512.
226  If even that isn't enough, the limit is automatically increased to fit
227  all the needed directory entries.
228 \end_layout
230 \begin_layout Itemize
231 Making boot disks from tree does NOT work.
232  Even if you got system boot files there, it still won't work.
233 \end_layout
235 \begin_layout Itemize
236 Only floppy disks and hard drives can be made from directory trees.
237  BIOS images and CDROM images require image file.
238 \end_layout
240 \begin_layout Itemize
241 Avoid floppies with custom geometry (floppy geometry does affect disk ID).
242  Disks with over 63 sectors per track don't work with DOS.
243  Wheither disks with over 127 tracks per side work with DOS is unknown.
244  Also avoid 1024-tracks per side HDDs.
245 \end_layout
247 \begin_layout Itemize
248 The geometry limits are: 2-1024 tracks per side for HDD, 1-256 tracks per
249  side for floppy.
250  1-63 sectors per track for HDD, 1-255 sectors per track for floppy.
251  1-16 sides for HDD, 1 or 2 sides for floppy.
252  This gives size limit of 65280KiB for floppy disks (but note the DOS limit!)
253  and 516096KiB for HDDs.
254 \end_layout
256 \begin_layout Itemize
257 There are multiple image file contents that represent the same image.
258  The one with smallest size is picked when creating image.
259 \end_layout
261 \begin_layout Itemize
262 Note: Although the IDs are 128 bits long, they are not MD5 hashes.
264 \end_layout
266 \begin_layout Subsection
267 Importing from command line
268 \end_layout
270 \begin_layout Standard
271 There is tool called ImageMaker that can make JPC-RR images from raw images.
272  Each image has format, ID an name.
273  Format and name are specified when making image.
274  ID is automatically calculated from format and contents.
275  Name does not affect the ID but is purely for convience so one doesn't
276  have to specify long image IDs manually.
277 \end_layout
279 \begin_layout Subsubsection
280 Syntax
281 \end_layout
283 \begin_layout Standard
284 The syntax for ImageMaker when making images is:
285 \end_layout
287 \begin_layout LyX-Code
288 $ java ImageMaker <format> [<options>...] <destination> <source> <name>
289 \end_layout
291 \begin_layout Standard
292 <destination> is file name for JPC-RR format image to write.
293  <source> is either name of regular file (raw image file) or name of directory
294  tree with files (supported for making floppy or hard disk images only).
295  In case of directory tree, the files are layout deterministically to disk,
296  so the ID will always be the same for given geometry and type.
297  <name> is name to give to disk.
298  <format> is one of:
299 \end_layout
301 \begin_layout LyX-Code
302 --BIOS BIOS image (note: VGABIOS is also of this type).
303 \end_layout
305 \begin_layout LyX-Code
306 --CDROM CD-ROM image.
307 \end_layout
309 \begin_layout LyX-Code
310 --HDD=cylinders,sectors,heads Hard disk with specified geometry.
311 \end_layout
313 \begin_layout LyX-Code
314 --floppy=tracks,sectors,sides Floppy disk with specified geometry.
315 \end_layout
317 \begin_layout LyX-Code
318 --floppy160 160KiB floppy (40 tracks, 8 sectors, Single sided).
319 \end_layout
321 \begin_layout LyX-Code
322 --floppy180 180KiB floppy (40 tracks, 9 sectors, Single sided).
323 \end_layout
325 \begin_layout LyX-Code
326 --floppy320 320KiB floppy (40 tracks, 8 sectors, Double sided).
327 \end_layout
329 \begin_layout LyX-Code
330 --floppy360 360KiB floppy (40 tracks, 9 sectors, Double sided).
331 \end_layout
333 \begin_layout LyX-Code
334 --floppy410 410KiB floppy (41 tracks, 10 sectors, Double sided).
335 \end_layout
337 \begin_layout LyX-Code
338 --floppy420 420KiB floppy (42 tracks, 10 sectors, Double sided).
339 \end_layout
341 \begin_layout LyX-Code
342 --floppy720 720KiB floppy (80 tracks, 9 sectors, Double sided).
343 \end_layout
345 \begin_layout LyX-Code
346 --floppy800 800KiB floppy (80 tracks, 10 sectors, Double sided).
347 \end_layout
349 \begin_layout LyX-Code
350 --floppy820 820KiB floppy (82 tracks, 10 sectors, Double sided).
351 \end_layout
353 \begin_layout LyX-Code
354 --floppy830 830KiB floppy (83 tracks, 10 sectors, Double sided).
355 \end_layout
357 \begin_layout LyX-Code
358 --floppy880 880KiB floppy (80 tracks, 11 sectors, Double sided).
359 \end_layout
361 \begin_layout LyX-Code
362 --floppy1040 1040KiB floppy (80 tracks, 13 sectors, Double sided).
363 \end_layout
365 \begin_layout LyX-Code
366 --floppy1120 1120KiB floppy (80 tracks, 14 sectors, Double sided).
367 \end_layout
369 \begin_layout LyX-Code
370 --floppy1200 1200KiB floppy (80 tracks, 15 sectors, Double sided).
371 \end_layout
373 \begin_layout LyX-Code
374 --floppy1440 1440KiB floppy (80 tracks, 18 sectors, Double sided).
375 \end_layout
377 \begin_layout LyX-Code
378 --floppy1476 1476KiB floppy (82 tracks, 18 sectors, Double sided).
379 \end_layout
381 \begin_layout LyX-Code
382 --floppy1494 1494KiB floppy (83 tracks, 18 sectors, Double sided).
383 \end_layout
385 \begin_layout LyX-Code
386 --floppy1600 1600KiB floppy (80 tracks, 20 sectors, Double sided).
387 \end_layout
389 \begin_layout LyX-Code
390 --floppy1680 1680KiB floppy (80 tracks, 21 sectors, Double sided).
391 \end_layout
393 \begin_layout LyX-Code
394 --floppy1722 1722KiB floppy (82 tracks, 21 sectors, Double sided).
395 \end_layout
397 \begin_layout LyX-Code
398 --floppy1743 1743KiB floppy (83 tracks, 21 sectors, Double sided).
399 \end_layout
401 \begin_layout LyX-Code
402 --floppy1760 1760KiB floppy (80 tracks, 22 sectors, Double sided).
403 \end_layout
405 \begin_layout LyX-Code
406 --floppy1840 1840KiB floppy (80 tracks, 23 sectors, Double sided).
407 \end_layout
409 \begin_layout LyX-Code
410 --floppy1920 1920KiB floppy (80 tracks, 24 sectors, Double sided).
411 \end_layout
413 \begin_layout LyX-Code
414 --floppy2880 2880KiB floppy (80 tracks, 36 sectors, Double sided).
415 \end_layout
417 \begin_layout LyX-Code
418 --floppy3120 3120KiB floppy (80 tracks, 39 sectors, Double sided).
419 \end_layout
421 \begin_layout LyX-Code
422 --floppy3200 3200KiB floppy (80 tracks, 40 sectors, Double sided).
423 \end_layout
425 \begin_layout LyX-Code
426 --floppy3520 3520KiB floppy (80 tracks, 44 sectors, Double sided).
427 \end_layout
429 \begin_layout LyX-Code
430 --floppy3840 3840KiB floppy (80 tracks, 48 sectors, Double sided).
431 \end_layout
433 \begin_layout Subsubsection
434 Other options
435 \end_layout
437 \begin_layout LyX-Code
438 --volumelabel=label Give specified volume label (affects ID).
439  Only meaningful when making image out of directory tree.
440  Default is no volume label.
441 \end_layout
443 \begin_layout LyX-Code
444 --timestamp=YYYYMMDDHHMMSS Give specified timestamp for files (affects ID).
445  Only meaningful when making image out of directory tree.
446  The default timestamp is 19900101T000000Z.
447 \end_layout
449 \begin_layout Subsubsection
450 Image information
451 \end_layout
453 \begin_layout Standard
454 When invoked as:
455 \end_layout
457 \begin_layout LyX-Code
458 $ java ImageMaker <imagefile>
459 \end_layout
461 \begin_layout Standard
462 Variety of information about image is displayed (especially for floppies/HDDs).
463  Two important fields are calculated and claimed disk ID.
464  They should be the same.
465  If they are not, then the image file is corrupt (sadly, imagemaker has
466  bugs and bugs that cause it to write corrupt images have been seen).
467 \end_layout
469 \begin_layout Subsection
470 Advanced: The disk ID algorithm
471 \end_layout
473 \begin_layout Standard
474 The disk ID is calculated as:
475 \end_layout
477 \begin_layout LyX-Code
478 Skein-256-128-deprecated(<typecode>|<geometry>|<image>)
479 \end_layout
481 \begin_layout Standard
482 Where Skein-256-128-deprecated is Skein hash function with 256-bit internal
483  state and 128-bit output using the deprecated rotation constants (as specified
484  in Skein hash function reference documentation versions 1.0 and 1.1).
485  The <image> is the whole image, including parts not stored in image file.
486  The reason for keeping using the deprecated constants are:
487 \end_layout
489 \begin_layout Itemize
490 Changing the constants would change the IDs, which would invalidate existing
491  images
492 \end_layout
494 \begin_layout Itemize
495 This is not about cryptographic security
496 \end_layout
498 \begin_layout Itemize
499 The new constants don't improve security that much anyway.
500 \end_layout
502 \begin_layout Subsubsection
503 Floppies and HDDs
504 \end_layout
506 \begin_layout Standard
507 Floppies have <typecode> value 0 (single byte) and HDDs have 1 (single byte).
508  <geometry> is as follows (this is exactly the same form as it appears in
509  image header):
510 \end_layout
512 \begin_layout LyX-Code
513 Byte 0 bits 0-1: Bits 8-9 of track count per side - 1.
514 \end_layout
516 \begin_layout LyX-Code
517 Byte 0 bits 2-5: Head count - 1.
518 \end_layout
520 \begin_layout LyX-Code
521 Byte 0 bits 6-7: Reserved, must be 0.
522 \end_layout
524 \begin_layout LyX-Code
525 Byte 1: Bits 0-7 of track count per side - 1.
526 \end_layout
528 \begin_layout LyX-Code
529 Byte 2: Sector count per track - 1.
530 \end_layout
532 \begin_layout Subsubsection
533 CD-ROM and BIOS images
534 \end_layout
536 \begin_layout Standard
537 CD-ROMs have <typecode> value 2 (single byte) and BIOS images have 3 (single
538  byte).
539  <geometry> is blank.
540 \end_layout
542 \begin_layout Subsection
543 Advanced: Disk Image format
544 \end_layout
546 \begin_layout Standard
547 The disk image consists of following parts, concatenated in this order without
548  padding:
549 \end_layout
551 \begin_layout Itemize
552 Magic
553 \end_layout
555 \begin_layout Itemize
556 Disk ID
557 \end_layout
559 \begin_layout Itemize
560 Type code
561 \end_layout
563 \begin_layout Itemize
564 Disk name length
565 \end_layout
567 \begin_layout Itemize
568 Disk name
569 \end_layout
571 \begin_layout Itemize
572 type-specific geometry/size data
573 \end_layout
575 \begin_layout Itemize
576 Actual image data
577 \end_layout
579 \begin_layout Itemize
580 Comments
581 \end_layout
583 \begin_layout Subsubsection
584 Magic
585 \end_layout
587 \begin_layout Standard
588 Magic in disk image files is following 5 bytes: 
589 \begin_inset Quotes eld
590 \end_inset
592 IMAGE
593 \begin_inset Quotes erd
594 \end_inset
597 \end_layout
599 \begin_layout Subsubsection
600 Disk ID
601 \end_layout
603 \begin_layout Standard
604 Disk ID is given as 16 bytes, encoding the 128-bit disk ID.
605 \end_layout
607 \begin_layout Subsubsection
608 Type code
609 \end_layout
611 \begin_layout Standard
612 Type code is single byte.
613  0 for floppies, 1 for HDDs, 2 for CD-ROMs and 3 for BIOS images.
614  Other values are reserved.
615 \end_layout
617 \begin_layout Subsubsection
618 Disk name length
619 \end_layout
621 \begin_layout Standard
622 Obsolete.
623  Disk name length is given as two-byte big-endian value.
624  New images should have 0 here.
625 \end_layout
627 \begin_layout Subsubsection
628 Disk name
629 \end_layout
631 \begin_layout Standard
632 Ignored.
633  Name field is there for backward compatiblity.
634  Disk name length gives length of this field in bytes.
635 \end_layout
637 \begin_layout Subsubsection
638 Type-specific geometry/size data (floppies and HDDs)
639 \end_layout
641 \begin_layout Standard
642 Floppies and HDDs have 3-byte geometry data:
643 \end_layout
645 \begin_layout LyX-Code
646 Byte 0 bits 0-1: Bits 8-9 of track count per side - 1.
647 \end_layout
649 \begin_layout LyX-Code
650 Byte 0 bits 2-5: Head count - 1.
651 \end_layout
653 \begin_layout LyX-Code
654 Byte 0 bits 6-7: Reserved, must be 0.
655 \end_layout
657 \begin_layout LyX-Code
658 Byte 1: Bits 0-7 of track count per side - 1.
659 \end_layout
661 \begin_layout LyX-Code
662 Byte 2: Sector count per track - 1.
663 \end_layout
665 \begin_layout Subsubsection
666 Type specific-geometry/size data (CD-ROMs)
667 \end_layout
669 \begin_layout Standard
670 CD-ROMs have 4-byte big-endian sector (512 bytes!) count.
671 \end_layout
673 \begin_layout Subsubsection
674 Type specific-geometry/size data (BIOS images)
675 \end_layout
677 \begin_layout Standard
678 BIOS images have 4-byte big-endian byte (not sector or block) count.
679 \end_layout
681 \begin_layout Subsubsection
682 Actual image data (floppy/HDD)
683 \end_layout
685 \begin_layout Standard
686 Floppy or HDD imagedata consists of following subparts:
687 \end_layout
689 \begin_layout Itemize
690 Storage method
691 \end_layout
693 \begin_layout Itemize
694 Sectors present
695 \end_layout
697 \begin_layout Itemize
698 Image data header
699 \end_layout
701 \begin_layout Itemize
702 Image data
703 \end_layout
705 \begin_layout Standard
706 Storage method is single byte.
707  Sectors present gives number of last nonzero sector + 1 (zero if image
708  is all zeroes)
709 \end_layout
711 \begin_layout Subsubsection
712 Floppy/HDD storage method 0: Raw storage
713 \end_layout
715 \begin_layout Standard
716 This storage method has empty header.
717  Image data is raw dump of first sectors present sectors.
718 \end_layout
720 \begin_layout Subsubsection
721 Floppy/HDD storage method 1: Sectormap
722 \end_layout
724 \begin_layout Standard
725 Image data header contains bitfield with just enough bytes to have one bit
726  per present sector.
727  The order of bits is such that number of bit corresponding to each sector
728  in byte is sector number modulo 8 and byte number is floor of sector number
729  divided by 8 when sector numbers are counted from zero.
730  If bit corresponding to sector is set, then the sector is present in image
731  data, otherwise it is absent and assumed to be all-zeroes.
732 \end_layout
734 \begin_layout Standard
735 Image data contains dumps of all present sectors in order of increasing
736  sector number.
737 \end_layout
739 \begin_layout Subsubsection
740 Floppy/HDD storage method 2: Extent first sector zero
741 \end_layout
743 \begin_layout Standard
744 Image data is empty as storage-specific data is mangled with image data.
745  The image data alternates between blocks encoding zero sectors and blocks
746  encoding nonzero sectors.
747  The first block encodes zero sectors.
749 \end_layout
751 \begin_layout Standard
752 Block encoding zero sectors consist of single 1-4 byte little-endian value
753  encoding number of sectors in block - 1.
754  Number of bytes is determined by sectors present value.
755  It is 1 for 1-256 sectors, 2 for 257-65536, 3 for 65537-16777216 and 4
756  for more than 16777216.
757  All sectors in block are filled with zeroes and are not stored.
758 \end_layout
760 \begin_layout Standard
761 Block encoding nonzero sectors has same block count as zero sector block
762  but is followed by the sectors stored raw.
763 \end_layout
765 \begin_layout Subsubsection
766 Floppy/HDD storage method 3: Extent first sector nonzero
767 \end_layout
769 \begin_layout Standard
770 Same as storage method 2 but first block is nonzero sector block.
771 \end_layout
773 \begin_layout Subsubsection
774 Actual image data (CD-ROMs and BIOS images)
775 \end_layout
777 \begin_layout Standard
778 These store image data raw.
779  The amount of data is specified by sector/byte count.
780 \end_layout
782 \begin_layout Subsubsection
783 Comments
784 \end_layout
786 \begin_layout Standard
787 Comments are given as list of strings, with UTF-8 encoded strings following
788  2-octet big-endian length.
789  Comment list is terminated by entry with length 0 (0x00 0x00).
790  Comments are optional and may be absent.
791 \end_layout
793 \begin_layout Section
794 The actual emulator
795 \end_layout
797 \begin_layout Standard
798 The actual emulator is invoked as:
799 \end_layout
801 \begin_layout LyX-Code
802 $ java JPCApplication <options>...
803 \end_layout
805 \begin_layout Standard
806 The valid options are:
807 \end_layout
809 \begin_layout LyX-Code
810 -autoexec <script> Execute contents of specified file as commands when starting
811  up.
812 \end_layout
814 \begin_layout LyX-Code
815 -noautoexec Don't run autoexec files.
816 \end_layout
818 \begin_layout LyX-Code
819 -norenames Copy&Delete files instead of renaming.
820  Mainly meant for debugging copy&delte code.
821 \end_layout
823 \begin_layout Standard
824 If no arguments are given, defaults of autoexec file of 'assemble.jpcrrinit'
825  are used.
826 \end_layout
828 \begin_layout Subsection
829 Command line
830 \end_layout
832 \begin_layout Standard
833 When emulator is started, command line comes up.
834  Following commands are known:
835 \end_layout
837 \begin_layout Itemize
838 'exit': exit immediately
839 \end_layout
841 \begin_layout Itemize
842 'library <library>': set library directory to <library>.
843 \end_layout
845 \begin_layout Itemize
846 'load <plugin>': Load plugin (no arguments)
847 \end_layout
849 \begin_layout Itemize
850 'load <plugin>(<arguments>)': load plugin with arguments.
851 \end_layout
853 \begin_layout Itemize
854 'command <command> [<arguments>...]': Invoke command via external command interface.
855 \end_layout
857 \begin_layout Itemize
858 'call<command> [<arguments>...]': Invoke command via external command interface
859  and print return values.
860 \end_layout
862 \begin_layout Itemize
863 'lsdisks [<filename>]' Print listing of all known disks.
864  If <filename> is specified, save output to specified file.
865 \end_layout
867 \begin_layout Itemize
868 'diskinfo [<filename>] <imagename>' Print Information about <imagename>
869  (can be disk name or ID).
870  If <filename> is specified, save output to specified file.
871 \end_layout
873 \begin_layout Standard
874 When one gets command line, its useful to load some plugins.
875  See section about plugins.
876  Note: Load runner plugin (PCControl/PCRunner and so) last, as some runners
877  like to start PC immediately.
878 \end_layout
880 \begin_layout Subsection
881 PC settings dialog notes
882 \end_layout
884 \begin_layout Itemize
885 CPU divider base frequency before division is 1GHz.
886 \end_layout
888 \begin_layout Itemize
889 Images can be specified by name or by ID.
890  Name is relative to library directory.
891  If the image is in subdirectory of image directory, the directory separator
892  is is '/' regardless of what the host OS uses.
893 \end_layout
895 \begin_layout Itemize
896 CD-ROM and hdc are mutually exclusive
897 \end_layout
899 \begin_layout Itemize
900 Modules is comma-seperated list of modules to load.
901  To pass arguments to some modules, enclose the arguments in ().
902  Same module can be specified twice only if parameters differ.
903 \end_layout
905 \begin_layout Itemize
906 Setting boot device doesn't work with some BIOS versions.
907  Those versions prompt the boot device anyway.
908 \end_layout
910 \begin_layout Subsection
911 Audio output channels
912 \end_layout
914 \begin_layout Standard
915 PC can have one or more audio output channels.
916  The name of audio output associated with PC speaker is: 'org.jpc.emulator.peripher
917 al.PCSpeaker-0'.
918  Modules that have audio outputs get channel names of form <classname>-<sequenti
919 al>, where <classname> is name of main module class and sequential is number
920  starting from zero.
921  Note that same module can have multiple output channels.
922  If multiple modules of same class request audio outputs, the <sequential>
923  values of subsequent module start where previous left off.
924 \end_layout
926 \begin_layout Subsection
927 Plugins
928 \end_layout
930 \begin_layout Standard
931 Plugins actually execute the tasks of the emulator.
932  They can be loaded using 
933 \begin_inset Quotes eld
934 \end_inset
936 load <plugin>
937 \begin_inset Quotes erd
938 \end_inset
940  or 'load <plugin>(<arguments>)
941 \begin_inset Quotes erd
942 \end_inset
944  from command line.
945 \end_layout
947 \begin_layout Standard
948 Different Plugins using the same output (like running PCMonitor and RAWVideoDump
949 er) should not conflict because connector output hold locking is desinged
950  to handle multiple readers.
951 \end_layout
953 \begin_layout Standard
954 If no plugin used requires GUI, then the emulator can be run without having
955  GUI available.
956 \end_layout
958 \begin_layout Subsubsection
959 plugin: org.jpc.plugins.PCControl
960 \end_layout
962 \begin_layout Standard
963 Takes optionally 'extramenu=<file>' and 'uncompressedsave=1', requires and
964  uses GUI.
965 \end_layout
967 \begin_layout Standard
968 Runs the PC emulator core.
969  Has capability to start/stop emulation, breakpoint after certain time or
970  start/end of VGA vertical retrace.
971  Also can create, savestate and loadstate PC emulation.
972  Memory dumping is supported.
974 \end_layout
976 \begin_layout Standard
977 'extramenu=<file>' causes Plugin to load extra menu entries from <file>.
978  'uncompressedsave=1' causes savestates to be written uncompressed (useful
979  if they are stored in VCS supporting delta compression).
980 \end_layout
982 \begin_layout Subsubsection
983 plugin: org.jpc.plugins.PCRunner
984 \end_layout
986 \begin_layout Standard
987 Takes 'movie=<file>' as argument and optionally 'stoptime=<time>' Does not
988  require nor use GUI.
989 \end_layout
991 \begin_layout Standard
992 Loads PC from savestate and just runs it.
993  CTRL+C to quit.
994  Also automatically quits once stoptime is reached.
995 \end_layout
997 \begin_layout Subsubsection
998 plugin: org.jpc.plugins.PCMonitor
999 \end_layout
1001 \begin_layout Standard
1002 No arguments, requires and uses GUI.
1003 \end_layout
1005 \begin_layout Standard
1006 VGA monitor for emulated PC.
1007 \end_layout
1009 \begin_layout Subsubsection
1010 plugin: org.jpc.plugins.VirtualKeyboard
1011 \end_layout
1013 \begin_layout Standard
1014 No arguments, requires and uses GUI.
1015 \end_layout
1017 \begin_layout Standard
1018 On-screen keyboard for emulated PC.
1019 \end_layout
1021 \begin_layout Subsubsection
1022 plugin: org.jpc.plugins.PCStartStopTest
1023 \end_layout
1025 \begin_layout Standard
1026 No arguments, requires and uses GUI.
1027 \end_layout
1029 \begin_layout Standard
1030 Small plugin testing remote PC start/stop.
1031  Also supports sending some common keypresses.
1032 \end_layout
1034 \begin_layout Subsubsection
1035 plugin: org.jpc.plugins.RAWVideoDumper
1036 \end_layout
1038 \begin_layout Standard
1039 Takes 'rawoutput=<file>' as argument.
1040  Does not require nor use GUI.
1041 \end_layout
1043 \begin_layout Standard
1044 Dumps all generated frames to RAW file <file>.
1045  Rawoutput is required.
1046  The raw file consists of concatenation of zlib streams.
1047  The uncompressed stream is concatenation of time skips (FFh FFh FFh FFh),
1048  each acting as time offset of 2^32-1 nanoseconds and saved frames.
1049  The saved frame has time offset in nanoseconds (big endian) as first four
1050  bytes (must be at most 2^32-2, as 2^32-1 is reserved for time skip).
1051  The next two bytes are big-endian width, next two big-endian height.
1052  Finally frame has 4 * width * height bytes of data that encodes pixels
1053  using 4 bytes per pixel, in left-to-right, up-to-down order.
1054  Byte 0 of each pixel is reserved, byte 1 is the red channel, byte 2 is
1055  green channel and byte 3 is blue channel.
1056 \end_layout
1058 \begin_layout Standard
1059 Dumping to pipe is supported.
1060 \end_layout
1062 \begin_layout Subsubsection
1063 plugin: org.jpc.plugins.RAWAudioDumper
1064 \end_layout
1066 \begin_layout Standard
1067 Takes 'src=<name of audio output channel>', 'file=<output-filename>' and
1068  'offset=<offset>' as arguments, separated by ','.
1069  Does not require nor use GUI.
1070 \end_layout
1072 \begin_layout Standard
1073 Dumps output from specified audio output channel (src, mandatory) to RAW-format
1074  file (file, mandatory).
1075  The resulting file consists of records, 4 or 8 bytes each.
1076  4 byte record consists of 0xFF 0xFF 0xFF 0xFF and means to increase next
1077  time delta by 
1078 \begin_inset Formula $2^{32}-1$
1079 \end_inset
1082  Otherwise record is 8 bytes.
1083  Each 8 byte record has three fields.
1084  First 4 byte unsinged big endian timedelta value (in nanoseconds, must
1085  be smaller than 
1086 \begin_inset Formula $2^{32}-1$
1087 \end_inset
1089 ), then 2 byte signed big endian new left channel volume, then 2 byte signed
1090  big endian new right channel volume.
1091  Optionally 'offset' can be set to positive value (in nanoseconds) to delay
1092  the audio by.
1093 \end_layout
1095 \begin_layout Subsubsection
1096 plugin: org.jpc.plugins.LuaPlugin
1097 \end_layout
1099 \begin_layout Standard
1100 Takes 'kernel=<name of lua kernel file>', other parameters are passed to
1101  kernel, requires and uses GUI.
1102 \end_layout
1104 \begin_layout Standard
1105 Lua VM for executing scripts.
1106 \end_layout
1108 \begin_layout Subsubsection
1109 plugin: org.jpc.plugins.JoystickInput
1110 \end_layout
1112 \begin_layout Standard
1113 No parameters.
1114  Displays window for sending joystick input.
1115 \end_layout
1117 \begin_layout Section
1118 Modules
1119 \end_layout
1121 \begin_layout Subsection
1122 org.jpc.modules.Joystick:
1123 \end_layout
1125 \begin_layout Itemize
1126 Arguments: none.
1127 \end_layout
1129 \begin_layout Itemize
1130 Resources: I/O port 0x201
1131 \end_layout
1133 \begin_layout Standard
1134 Emulates joystick game port.
1135 \end_layout
1137 \begin_layout Subsection
1138 org.jpc.modules.SoundCard
1139 \end_layout
1141 \begin_layout Itemize
1142 Arguments: Optional resources specification
1143 \end_layout
1145 \begin_layout Itemize
1146 Resources (defaults): I/O port 0x220-0x22F, IRQ 5, DMA 1, DMA 5
1147 \end_layout
1149 \begin_layout Standard
1150 Emulates Sound card.
1151 \end_layout
1153 \begin_layout Subsection
1154 org.jpc.modules.FMCard
1155 \end_layout
1157 \begin_layout Itemize
1158 Arguments: Optional resources specification
1159 \end_layout
1161 \begin_layout Itemize
1162 Resources (defaults): I/O port 0x338-0x33B
1163 \end_layout
1165 \begin_layout Standard
1166 Emulates FM card.
1167 \end_layout
1169 \begin_layout Subsection
1170 org.jpc.modules.BasicFPU:
1171 \end_layout
1173 \begin_layout Itemize
1174 Arguments: none.
1175 \end_layout
1177 \begin_layout Itemize
1178 Resources: None.
1179 \end_layout
1181 \begin_layout Standard
1182 Crude FPU (x87) emulator.
1183 \end_layout
1185 \begin_layout Section
1186 Hacks
1187 \end_layout
1189 \begin_layout Standard
1190 Hacks are saved to savestates but not movies.
1191 \end_layout
1193 \begin_layout Subsection
1194 NO_FPU
1195 \end_layout
1197 \begin_layout Standard
1198 Force bit 1 of physical address 0x0410 to zero, signaling that the system
1199  has no FPU.
1200  BIOS assumes system has FPU but some games use that bit to detect FPU,
1201  trying to use it if it is 
1202 \begin_inset Quotes eld
1203 \end_inset
1205 present
1206 \begin_inset Quotes erd
1207 \end_inset
1210  Try this if game startup hangs with lots of trying to use FPU but not present
1211  errors.
1212  Don't use if there is FPU present.
1213  Needed to get games like Blake Stone / Wolfenstein 3-D to work (FPU emulator
1214  allows it to start but causes graphical glitches).
1215 \end_layout
1217 \begin_layout Subsection
1218 VGA_DRAW
1219 \end_layout
1221 \begin_layout Standard
1222 Update basic VGA parameters before vretrace, not after it.
1223  Some games (e.g.
1224  Commander Keen 4) don't like if this isn't done and some games (e.g.
1225  Mario & Luigi) don't like if it is done.
1226  Wrong value manifests as jerky scrolling (scrolling back and forth and
1227  fixed statusbars move).
1228 \end_layout
1230 \begin_layout Section
1231 Some error messages and explanations
1232 \end_layout
1234 \begin_layout Itemize
1235 <filename> is Not a valid image file
1236 \end_layout
1238 \begin_layout Itemize
1239 <filename> is not image file
1240 \end_layout
1242 \begin_layout Itemize
1243 <filename> claims to be floppy with illegal geometry: <x> tracks, <y> sides
1244  and <z> sectors.
1245 \end_layout
1247 \begin_layout Itemize
1248 <filename> claims to be HDD with illegal geometry: <x> tracks, <y> sides
1249  and <z> sectors.
1250 \end_layout
1252 \begin_layout Itemize
1253 Can't read disk image sector map.
1254 \end_layout
1256 \begin_layout Itemize
1257 Can't read disk image extent.
1258 \end_layout
1260 \begin_layout Standard
1261 Code expects <filename> to be valid JPC-RR format image, but it isn't JPC-RR
1262  image at all or its corrupt.
1263 \end_layout
1265 \begin_layout Itemize
1266 <filename> is image of unknown type.
1267 \end_layout
1269 \begin_layout Itemize
1270 <filename> has unrecognized geometry <x> <y> <z>
1271 \end_layout
1273 \begin_layout Standard
1274 Possibly corrupt image, not JPC-RR image, or JPC-RR image from future version
1275  containing something current version can't comprehend.
1276 \end_layout
1278 \begin_layout Itemize
1279 Invalid format specifier <something>.
1280 \end_layout
1282 \begin_layout Itemize
1283 Invalid syntax of --floppy= or --HDD= option.
1284 \end_layout
1286 \begin_layout Itemize
1287 Invalid format specifier/option <something>.
1288 \end_layout
1290 \begin_layout Standard
1291 Invalid option or format specifier was given.
1292  Check for typos.
1293 \end_layout
1295 \begin_layout Itemize
1296 java ImageMaker [<options>...] <format> <destination> <source> <diskname>
1297 \end_layout
1299 \begin_layout Standard
1300 Check syntax of command.
1301  Especially that diskname is present!
1302 \end_layout
1304 \begin_layout Itemize
1305 The image has <nnn> sectors while it should have <yyy> according to selected
1306  geometry.
1307 \end_layout
1309 \begin_layout Itemize
1310 Raw image file length not divisible by 512.
1311 \end_layout
1313 \begin_layout Itemize
1314 Trying to read sector out of range.
1315 \end_layout
1317 \begin_layout Standard
1318 The selected geometry is wrong or raw image is incomplete.
1319 \end_layout
1321 \begin_layout Itemize
1322 Invalid disk name (Should not happen!).
1323 \end_layout
1325 \begin_layout Itemize
1326 Invalid geometry to be written.
1327 \end_layout
1329 \begin_layout Standard
1330 This is a very likely a bug in program.
1331 \end_layout
1333 \begin_layout Itemize
1334 What the heck <filename> is? It's not regular file nor directory.
1335 \end_layout
1337 \begin_layout Standard
1338 That sort of file can't be used as input for image making, or the file just
1339  doesn't exist.
1340 \end_layout
1342 \begin_layout Itemize
1343 BIOS images can only be made out of regular files.
1344 \end_layout
1346 \begin_layout Itemize
1347 CD images can only be made out of regular files.
1348 \end_layout
1350 \begin_layout Standard
1351 Source image specified is not regular file, but image of that type can't
1352  be made of anything else.
1353 \end_layout
1355 \begin_layout Itemize
1356 Can't read raw bios image file.
1357 \end_layout
1359 \begin_layout Itemize
1360 Can't read sector <nnn> from image.
1361 \end_layout
1363 \begin_layout Standard
1364 Reading the raw image file failed for some reason.
1365 \end_layout
1367 \begin_layout Itemize
1368 Bad library line: "<something>".
1369  Ignored.
1370 \end_layout
1372 \begin_layout Standard
1373 Syntax error in image library.
1374 \end_layout
1376 \begin_layout Itemize
1377 Removing image <something> a.k.a.
1378  "<something>" as it no longer exists.
1379 \end_layout
1381 \begin_layout Standard
1382 The image file no longer exists so it gets removed from library.
1383 \end_layout
1385 \begin_layout Itemize
1386 Removing image <something> a.k.a.
1387  "<something>" due to <some> conflict.
1388 \end_layout
1390 \begin_layout Standard
1391 Image library code killed some image from library due to some kind of conflict
1392  with image being added.
1393 \end_layout
1395 \begin_layout Itemize
1396 Too much data to fit into given space.
1397 \end_layout
1399 \begin_layout Standard
1400 The tree you gave contains takes just too much space to fit into disk of
1401  this size.
1402 \end_layout
1404 \begin_layout Section
1405 Advanced: Savestate/movie format
1406 \end_layout
1408 \begin_layout Subsection
1409 Special character classes
1410 \end_layout
1412 \begin_layout Subsubsection
1413 SPACE
1414 \end_layout
1416 \begin_layout Standard
1417 Following Unicode codepoints (encoded as UTF-8) are interpretted as space
1418  characters:
1419 \end_layout
1421 \begin_layout Itemize
1422 Codepoints 0x20, and 0x09.
1423 \end_layout
1425 \begin_layout Itemize
1426 Codepoints 0x1680, 0x180E, 0x2028, 0x205F and 0x3000
1427 \end_layout
1429 \begin_layout Itemize
1430 Codepoints 0x2000-0x200A.
1431 \end_layout
1433 \begin_layout Subsubsection
1434 LINEFEED
1435 \end_layout
1437 \begin_layout Standard
1438 Following byte sequences are interpretted as linefeeds (line change):
1439 \end_layout
1441 \begin_layout Itemize
1442 Byte 0x0A (UTF-8 encoded codepoint 0x0A)
1443 \end_layout
1445 \begin_layout Itemize
1446 Byte 0x0D (UTF-8 encoded codepoint 0x0D)
1447 \end_layout
1449 \begin_layout Itemize
1450 Byte 0x1C (UTF-8 encoded codepoint 0x1C)
1451 \end_layout
1453 \begin_layout Itemize
1454 Byte 0x1D (UTF-8 encoded codepoint 0x1D)
1455 \end_layout
1457 \begin_layout Itemize
1458 Byte 0x1E (UTF-8 encoded codepoint 0x1E)
1459 \end_layout
1461 \begin_layout Itemize
1462 Bytes 0xC2 0x85 (UTF-8 for unicode control character NL, codepoint 0x85)
1463 \end_layout
1465 \begin_layout Itemize
1466 Bytes 0xE2 0x80 0xA9 (UTF-8 encoded codepoint 0x2029)
1467 \end_layout
1469 \begin_layout Subsection
1470 JRSR archive
1471 \end_layout
1473 \begin_layout Standard
1474 JRSR archive format packs multiple text archive members to text archive.
1475  It does not support binary members.
1476  JRSR archives have first five or six bytes form the magic.
1477  It is 
1478 \begin_inset Quotes eld
1479 \end_inset
1481 JRSR
1482 \begin_inset Quotes erd
1483 \end_inset
1485  followed by LINEFEED character There are four kinds of lines after that
1486  (lines are terminated by LINEFEED byte/bytes):
1487 \end_layout
1489 \begin_layout Itemize
1490 Start member
1491 \end_layout
1493 \begin_layout Itemize
1494 Member line
1495 \end_layout
1497 \begin_layout Itemize
1498 End member
1499 \end_layout
1501 \begin_layout Itemize
1502 Blank line
1503 \end_layout
1505 \begin_layout Standard
1506 Sequencing rules are as follows: Start member is allowed anywhere (after
1507  magic).
1508  Member line is allowed only inside member (member started but not ended).
1509  End member is only allowed inside member.
1510  End of file is only allowed outside member.
1511  Blank line is allowed anywhere after magic.
1512 \end_layout
1514 \begin_layout Subsubsection
1515 Start member
1516 \end_layout
1518 \begin_layout Standard
1519 Start member line is given as 
1520 \begin_inset Quotes eld
1521 \end_inset
1523 !BEGIN
1524 \begin_inset Quotes erd
1525 \end_inset
1527  <SPACE>+ <membername> <LINEFEED>.
1528  <SPACE>+ any number of SPACE characters at least one and <LINEFEED> is
1529  LINEFEED chacter.
1530  The member name is UTF-8 encoded and maximum allowed line length is 2048
1531  bytes (including LINEFEED, which means name is limited to 509-2040 codepoints
1532  depending on characters used).
1533  Starting member inside another implicitly ends the previous member.
1534 \end_layout
1536 \begin_layout Subsubsection
1537 Member line:
1538 \end_layout
1540 \begin_layout Standard
1541 Member line is given as 
1542 \begin_inset Quotes eld
1543 \end_inset
1546 \begin_inset Quotes erd
1547 \end_inset
1549 <content><LINEFEED>.
1550  It gives another line for member contents.
1551  <content> is passed raw to layers above (followed by line termination)
1552 \end_layout
1554 \begin_layout Subsubsection
1555 End member
1556 \end_layout
1558 \begin_layout Standard
1559 End member line is given as 
1560 \begin_inset Quotes eld
1561 \end_inset
1563 !END
1564 \begin_inset Quotes erd
1565 \end_inset
1567 <LINEFEED>.
1568  It ends the current member.
1569  The following line can only be start member line or file may end.
1570 \end_layout
1572 \begin_layout Subsubsection
1573 Blank line
1574 \end_layout
1576 \begin_layout Standard
1577 Blank line is given as <LINEFEED>.
1578  Lines like that are ignored.
1579 \end_layout
1581 \begin_layout Subsection
1582 Four-to-Five encoding
1583 \end_layout
1585 \begin_layout Standard
1586 Binary members are encoded into text by so-called four-to-five encoding.
1587  This encoding can encode single byte to two, two bytes to three, three
1588  bytes to four and four bytes to five.
1589  Four-to-five encoding has five kinds of blocks.
1590  All SPACE and LINEFEED characters are completely ignored, even in middle
1591  of blocks.
1592 \end_layout
1594 \begin_layout Subsubsection
1595 End stream block
1596 \end_layout
1598 \begin_layout Standard
1599 End stream block is encoded as '!'.
1600  It ends the stream instantly.
1601  There is also implicit end of stream at end of input to decoding.
1602 \end_layout
1604 \begin_layout Subsubsection
1605 Other four block types
1606 \end_layout
1608 \begin_layout Standard
1609 Other four block types take the value to be encoded, read it as big-endian
1610  value.
1611  Then they write it as base-93 big-endian value.
1612  Then length specific constants are added to digits of that number to yield
1613  ASCII values for characters (those are stored in order):
1614 \end_layout
1616 \begin_layout Standard
1617 \begin_inset Tabular
1618 <lyxtabular version="3" rows="5" columns="6">
1619 <features>
1620 <column alignment="center" valignment="top" width="0">
1621 <column alignment="center" valignment="top" width="0">
1622 <column alignment="center" valignment="top" width="0">
1623 <column alignment="center" valignment="top" width="0">
1624 <column alignment="center" valignment="top" width="0">
1625 <column alignment="center" valignment="top" width="0">
1626 <row>
1627 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1628 \begin_inset Text
1630 \begin_layout Plain Layout
1631 To encode
1632 \end_layout
1634 \end_inset
1635 </cell>
1636 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1637 \begin_inset Text
1639 \begin_layout Plain Layout
1640 1st char.
1641 \end_layout
1643 \end_inset
1644 </cell>
1645 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1646 \begin_inset Text
1648 \begin_layout Plain Layout
1649 2nd char.
1650 \end_layout
1652 \end_inset
1653 </cell>
1654 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1655 \begin_inset Text
1657 \begin_layout Plain Layout
1658 3rd char.
1659 \end_layout
1661 \end_inset
1662 </cell>
1663 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1664 \begin_inset Text
1666 \begin_layout Plain Layout
1667 4th char.
1668 \end_layout
1670 \end_inset
1671 </cell>
1672 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
1673 \begin_inset Text
1675 \begin_layout Plain Layout
1676 5th char.
1677 \end_layout
1679 \end_inset
1680 </cell>
1681 </row>
1682 <row>
1683 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1684 \begin_inset Text
1686 \begin_layout Plain Layout
1687 1 byte
1688 \end_layout
1690 \end_inset
1691 </cell>
1692 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1693 \begin_inset Text
1695 \begin_layout Plain Layout
1697 \end_layout
1699 \end_inset
1700 </cell>
1701 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1702 \begin_inset Text
1704 \begin_layout Plain Layout
1706 \end_layout
1708 \end_inset
1709 </cell>
1710 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1711 \begin_inset Text
1713 \begin_layout Plain Layout
1715 \end_layout
1717 \end_inset
1718 </cell>
1719 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1720 \begin_inset Text
1722 \begin_layout Plain Layout
1724 \end_layout
1726 \end_inset
1727 </cell>
1728 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1729 \begin_inset Text
1731 \begin_layout Plain Layout
1733 \end_layout
1735 \end_inset
1736 </cell>
1737 </row>
1738 <row>
1739 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1740 \begin_inset Text
1742 \begin_layout Plain Layout
1743 2 bytes
1744 \end_layout
1746 \end_inset
1747 </cell>
1748 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1749 \begin_inset Text
1751 \begin_layout Plain Layout
1753 \end_layout
1755 \end_inset
1756 </cell>
1757 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1758 \begin_inset Text
1760 \begin_layout Plain Layout
1762 \end_layout
1764 \end_inset
1765 </cell>
1766 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1767 \begin_inset Text
1769 \begin_layout Plain Layout
1771 \end_layout
1773 \end_inset
1774 </cell>
1775 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1776 \begin_inset Text
1778 \begin_layout Plain Layout
1780 \end_layout
1782 \end_inset
1783 </cell>
1784 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1785 \begin_inset Text
1787 \begin_layout Plain Layout
1789 \end_layout
1791 \end_inset
1792 </cell>
1793 </row>
1794 <row>
1795 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1796 \begin_inset Text
1798 \begin_layout Plain Layout
1799 3 bytes
1800 \end_layout
1802 \end_inset
1803 </cell>
1804 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1805 \begin_inset Text
1807 \begin_layout Plain Layout
1809 \end_layout
1811 \end_inset
1812 </cell>
1813 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1814 \begin_inset Text
1816 \begin_layout Plain Layout
1818 \end_layout
1820 \end_inset
1821 </cell>
1822 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1823 \begin_inset Text
1825 \begin_layout Plain Layout
1827 \end_layout
1829 \end_inset
1830 </cell>
1831 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1832 \begin_inset Text
1834 \begin_layout Plain Layout
1836 \end_layout
1838 \end_inset
1839 </cell>
1840 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1841 \begin_inset Text
1843 \begin_layout Plain Layout
1845 \end_layout
1847 \end_inset
1848 </cell>
1849 </row>
1850 <row>
1851 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1852 \begin_inset Text
1854 \begin_layout Plain Layout
1855 4 bytes
1856 \end_layout
1858 \end_inset
1859 </cell>
1860 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1861 \begin_inset Text
1863 \begin_layout Plain Layout
1865 \end_layout
1867 \end_inset
1868 </cell>
1869 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1870 \begin_inset Text
1872 \begin_layout Plain Layout
1874 \end_layout
1876 \end_inset
1877 </cell>
1878 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1879 \begin_inset Text
1881 \begin_layout Plain Layout
1883 \end_layout
1885 \end_inset
1886 </cell>
1887 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1888 \begin_inset Text
1890 \begin_layout Plain Layout
1892 \end_layout
1894 \end_inset
1895 </cell>
1896 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
1897 \begin_inset Text
1899 \begin_layout Plain Layout
1901 \end_layout
1903 \end_inset
1904 </cell>
1905 </row>
1906 </lyxtabular>
1908 \end_inset
1911 \end_layout
1913 \begin_layout Standard
1914 Blocks which encode values greater than what is possible for value of that
1915  length are fatal errors.
1917 \end_layout
1919 \begin_layout Subsection
1920 Line component encoing
1921 \end_layout
1923 \begin_layout Standard
1924 Line component encoding sits on top of UTF-8 encoding.
1925  Line component encoding encodes non-empty 1-D array of non-empty strings
1926  into line, and thus array of those into member.
1927  Empty lines or lines that don't contain any components are ignored.
1928  Line starts with depth value of 0 and must end with depth value of zero.
1929 \end_layout
1931 \begin_layout Standard
1932 Components are seperated by component separators.
1933  Empty components are ignored.
1934  Following codepoints are separators on depth 0 if not escaped:
1935 \end_layout
1937 \begin_layout Itemize
1938 Codepoint of '('.
1939  The depth is read pre-increment.
1940 \end_layout
1942 \begin_layout Itemize
1943 Codepoint of ')'.
1944  The depth is read post-decrement.
1945 \end_layout
1947 \begin_layout Itemize
1948 Any SPACE character
1949 \end_layout
1951 \begin_layout Standard
1952 The following characters are special:
1953 \end_layout
1955 \begin_layout Itemize
1956 '('.
1957  Increments depth by 1 if not escaped (and appears in component).
1958 \end_layout
1960 \begin_layout Itemize
1961 ')'.
1962  Decrements depth by 1 if not escaped (and appears in component).
1963  Depth going negative is an error.
1964 \end_layout
1966 \begin_layout Itemize
1968 \backslash
1970  Next character is interpretted as literal.
1971  Error if at end of line.
1972 \end_layout
1974 \begin_layout Standard
1975 Otherwise, characters are interpretted as literals and appear in components.
1976  Depth must be zero at end of line.
1977 \end_layout
1979 \begin_layout Subsection
1980 Header section:
1981 \end_layout
1983 \begin_layout Standard
1984 Header section is in archive member "header".
1985  It uses line component encoding.
1986  The first component of each line is name of header, and subsequent ones
1987  are arguments.
1988  How many parameters are expected is dependent on what header it is:
1989 \end_layout
1991 \begin_layout Subsubsection
1992 PROJECTID header:
1993 \end_layout
1995 \begin_layout Itemize
1996 Header name: "PROJECTID"
1997 \end_layout
1999 \begin_layout Itemize
2000 Components: 2
2001 \end_layout
2003 \begin_layout Itemize
2004 Argument #1: <project-id-string>
2005 \end_layout
2007 \begin_layout Itemize
2008 Mandatory: Yes
2009 \end_layout
2011 \begin_layout Standard
2012 Gives project ID.
2013  Project ID is generated when PC is assembled and is then preserved in save
2014  states.
2015  It is used for computing rerecord counts.
2016  Emulator treats it as opaque string, the IDs it generates are formed by
2017  48 random hexadecimal digits.
2018 \end_layout
2020 \begin_layout Subsubsection
2021 SAVESTATEID header:
2022 \end_layout
2024 \begin_layout Itemize
2025 Header name: "SAVESTATEID"
2026 \end_layout
2028 \begin_layout Itemize
2029 Components: 2
2030 \end_layout
2032 \begin_layout Itemize
2033 Argument #1: <savestate-id-string>
2034 \end_layout
2036 \begin_layout Itemize
2037 Mandatory: No
2038 \end_layout
2040 \begin_layout Standard
2041 Gives save state ID.
2042  Each save state has its own save state ID.
2043  Treated as opaque string, but generated as 48 random hexadecimal digits.
2044  The presence of this header signals whether there is save state to be loaded.
2045  If this header is present, save state load will be attempted.
2046  If absent, save state is not to be loaded even if present (and correct
2047  savestate load would be technically impossible anyway).
2048 \end_layout
2050 \begin_layout Standard
2051 The value is used to prevent loading incompatible save states in preserve
2052  event stream mode and also to find the point in event stream where one
2053  left off.
2054 \end_layout
2056 \begin_layout Subsubsection
2057 RERECORDS header:
2058 \end_layout
2060 \begin_layout Itemize
2061 Header name: "RERECORDS"
2062 \end_layout
2064 \begin_layout Itemize
2065 Components: 2
2066 \end_layout
2068 \begin_layout Itemize
2069 Argument #1: <rerecords>
2070 \end_layout
2072 \begin_layout Itemize
2073 Mandatory: Yes
2074 \end_layout
2076 \begin_layout Standard
2077 Gives rerecord count.
2078  PC assembly (except when loading save state) initializes current rerecord
2079  count to zero.
2080  Must be non-negative and decimal number using ASCII digit characters.
2081 \end_layout
2083 \begin_layout LyX-Code
2084 On loading save state:
2085 \end_layout
2087 \begin_layout LyX-Code
2088 1) If project ID matches with previous:
2089 \end_layout
2091 \begin_layout LyX-Code
2092 1a) If loaded rerecord count is larger or equal to current rerecord count:
2093 \end_layout
2095 \begin_layout LyX-Code
2096 1a-a) Current rerecord count is loaded rerecord count + 1.
2097 \end_layout
2099 \begin_layout LyX-Code
2100 1b) Otherwise
2101 \end_layout
2103 \begin_layout LyX-Code
2104 1b-a) Current rerecord count increments by 1.
2105 \end_layout
2107 \begin_layout LyX-Code
2108 2) Otherwise
2109 \end_layout
2111 \begin_layout LyX-Code
2112 2a) Current rerecord count is loaded rerecord count + 1.
2113 \end_layout
2115 \begin_layout Standard
2116 The current rerecord count at time of save is saved to save state.
2117 \end_layout
2119 \begin_layout Subsubsection
2120 AUTHORS header:
2121 \end_layout
2123 \begin_layout Itemize
2124 Header name: "AUTHORS"
2125 \end_layout
2127 \begin_layout Itemize
2128 Components: 2 or more
2129 \end_layout
2131 \begin_layout Itemize
2132 Arguments: free form
2133 \end_layout
2135 \begin_layout Itemize
2136 Mandatory: No
2137 \end_layout
2139 \begin_layout Standard
2140 Gives authors of run.
2141  Each argument gives one author.
2142  May be present multiple times.
2143 \end_layout
2145 \begin_layout Subsubsection
2146 COMMENT header:
2147 \end_layout
2149 \begin_layout Itemize
2150 Header name: "COMMENT"
2151 \end_layout
2153 \begin_layout Itemize
2154 Components: 2 or more
2155 \end_layout
2157 \begin_layout Itemize
2158 Arguments: free form
2159 \end_layout
2161 \begin_layout Itemize
2162 Mandatory: No
2163 \end_layout
2165 \begin_layout Standard
2166 Various kinds of free form data.
2167  Not parsed further by emulator.
2168 \end_layout
2170 \begin_layout Subsection
2171 Initialization segment:
2172 \end_layout
2174 \begin_layout Standard
2175 If SAVESTATEID header isn't present (not a save state), member "initialization"
2176  gives PC initialization parameters for assembling the PC.
2177  It is present anyway even if SAVESTATEID is present (savestate).
2178 \end_layout
2180 \begin_layout Standard
2181 Following parameters are used (space separates components):
2182 \end_layout
2184 \begin_layout LyX-Code
2185 "BIOS" <id>
2186 \end_layout
2188 \begin_layout Standard
2189 Gives Image ID of main system BIOS (mandatory)
2190 \end_layout
2192 \begin_layout LyX-Code
2193 "VGABIOS" <id>
2194 \end_layout
2196 \begin_layout Standard
2197 Gives Image ID of VGA BIOS (mandatory).
2198 \end_layout
2200 \begin_layout LyX-Code
2201 "HDA" <id>
2202 \end_layout
2204 \begin_layout Standard
2205 Gives Image ID of hda.
2206  Present only if system has hard disk hda.
2207 \end_layout
2209 \begin_layout LyX-Code
2210 "HDB" <id>
2211 \end_layout
2213 \begin_layout Standard
2214 Gives Image ID of hdb.
2215  Present only if system has hard disk hdb.
2216 \end_layout
2218 \begin_layout LyX-Code
2219 "HDC" <id>
2220 \end_layout
2222 \begin_layout Standard
2223 Gives Image ID of hdc.
2224  Present only if system has hard disk hdc.
2225 \end_layout
2227 \begin_layout LyX-Code
2228 "HDD" <id>
2229 \end_layout
2231 \begin_layout Standard
2232 Gives Image ID of hdd.
2233  Present only if system has hard disk hdd.
2234 \end_layout
2236 \begin_layout LyX-Code
2237 "DISK" <num> <id>
2238 \end_layout
2240 \begin_layout Standard
2241 Gives Image ID of disk in slot <num>.
2242  Slot number must be non-negative.
2243 \end_layout
2245 \begin_layout LyX-Code
2246 \begin_inset Quotes eld
2247 \end_inset
2249 DISKNAME
2250 \begin_inset Quotes erd
2251 \end_inset
2253  <num> <name>
2254 \end_layout
2256 \begin_layout Standard
2257 kGives image name of disk in slot <num>.
2258  Slot number must be non-negative.
2259  The slot must be previously declared using 
2260 \begin_inset Quotes eld
2261 \end_inset
2263 DISK
2264 \begin_inset Quotes erd
2265 \end_inset
2268 \end_layout
2270 \begin_layout LyX-Code
2271 "FDA" <num>
2272 \end_layout
2274 \begin_layout Standard
2275 Gives Image slot to initially put into floppy drive fda.
2276  Disk must be of floppy type.
2277  If none present, no disk is initially put there.
2278 \end_layout
2280 \begin_layout LyX-Code
2281 "FDB" <num>
2282 \end_layout
2284 \begin_layout Standard
2285 Gives Image slot to initially put into floppy drive fdb.
2286  Disk must be of floppy type.
2287  If none present, no disk is initially put there.
2288 \end_layout
2290 \begin_layout LyX-Code
2291 "CDROM" <num>
2292 \end_layout
2294 \begin_layout Standard
2295 Gives Image slot to initially put into CD-ROM drive hdc.
2296  Not allowed if hard disk hdc is present.
2297  Disk must be of CD-ROM type.
2298  If none present no disk is initially put there.
2299 \end_layout
2301 \begin_layout LyX-Code
2302 "INITIALTIME" <time>
2303 \end_layout
2305 \begin_layout Standard
2306 Number of milliseconds since Unix epoch to system start up time.
2307  Allowed range:
2308 \end_layout
2310 \begin_layout Standard
2311 0-4102444799999.
2312  Mandatory.
2313 \end_layout
2315 \begin_layout LyX-Code
2316 "CPUDIVIDER" <divider>
2317 \end_layout
2319 \begin_layout Standard
2320 Set CPU frequency divider (dividing the 1GHz master clock).
2321  Allowed range is 1-256.
2322  Mandatory.
2323 \end_layout
2325 \begin_layout LyX-Code
2326 "MEMORYSIZE" <pages>
2327 \end_layout
2329 \begin_layout Standard
2330 Number of 4KiB pages of RAM memory.
2331  Allowed range 256-262144.
2332  Mandatory.
2333 \end_layout
2335 \begin_layout LyX-Code
2336 "BOOT" <device>
2337 \end_layout
2339 \begin_layout Standard
2340 Set boot device.
2341  Valid devices are "FLOPPY" (boot from fda), "HDD" (boot from hda) and "CDROM"
2342  (boot from CD).
2343 \end_layout
2345 \begin_layout LyX-Code
2346 "LOADMODULEA" <module> <parameters>
2347 \end_layout
2349 \begin_layout Standard
2350 Load module <module> with parameters <parameters>.
2351 \end_layout
2353 \begin_layout LyX-Code
2354 "LOADMODULE" <module>
2355 \end_layout
2357 \begin_layout Standard
2358 Load module <module> with no parameters
2359 \end_layout
2361 \begin_layout LyX-Code
2362 \begin_inset Quotes eld
2363 \end_inset
2366 \begin_inset Quotes erd
2367 \end_inset
2369  <fpu>
2370 \end_layout
2372 \begin_layout Standard
2373 Use class <fpu> as FPU emulator.
2374 \end_layout
2376 \begin_layout LyX-Code
2377 \begin_inset Quotes eld
2378 \end_inset
2380 IOPORTDELAY
2381 \begin_inset Quotes erd
2382 \end_inset
2385 \end_layout
2387 \begin_layout Standard
2388 Use I/O port delay emulation (each I/O port read/write takes 666ns).
2389 \end_layout
2391 \begin_layout LyX-Code
2392 \begin_inset Quotes eld
2393 \end_inset
2395 VGAHRETRACE
2396 \begin_inset Quotes erd
2397 \end_inset
2400 \end_layout
2402 \begin_layout Standard
2403 Emulate VGA horizontal retrace.
2404 \end_layout
2406 \begin_layout Subsection
2407 Event record format:
2408 \end_layout
2410 \begin_layout Standard
2411 Event record is in archive member "events".
2412  It uses line component encoding.
2413  Each line gives an event.
2414  First component of each line gives time stamp.
2415  These timestamps MUST be in increasing order and all MUST be non-negative.
2416  Time stamp time unit is exactly 1 nanosecond of emulated time.
2417 \end_layout
2419 \begin_layout Standard
2420 The second component of each line is name of class to dispatch to.
2421  Further components are passed as-is to event handlers.
2422  Classes with names consisting only of uppercase A-Z and 0-9 are special
2423  and reserved.
2424  It is error to encounter unknown such special class.
2425 \end_layout
2427 \begin_layout Subsubsection
2428 Savestate event
2429 \end_layout
2431 \begin_layout Itemize
2432 Dispatch to: SAVESTATE
2433 \end_layout
2435 \begin_layout Itemize
2436 Argument #1: Savestate id
2437 \end_layout
2439 \begin_layout Itemize
2440 Argument #2 (optional): Rerecord count at time of saving savestate
2441 \end_layout
2443 \begin_layout Standard
2444 Signals that savestate has occured here.
2445  The save state IDs MUST be unique in entire event stream.
2446  The second argument to savestate (if present) is rerecord count at time
2447  of saving that savestate (useful for calulating rerecord count of movie
2448  starting from savestate).
2449  No time restrictions
2450 \end_layout
2452 \begin_layout Subsubsection
2453 Option event
2454 \end_layout
2456 \begin_layout Itemize
2457 Dispatch to: OPTION
2458 \end_layout
2460 \begin_layout Itemize
2461 Argument #1: 
2462 \begin_inset Quotes eld
2463 \end_inset
2465 ABSOLUTE
2466 \begin_inset Quotes erd
2467 \end_inset
2469  or 
2470 \begin_inset Quotes eld
2471 \end_inset
2473 RELATIVE
2474 \begin_inset Quotes erd
2475 \end_inset
2478 \end_layout
2480 \begin_layout Standard
2481 Controls various options.
2483 \begin_inset Quotes eld
2484 \end_inset
2486 ABSOLUTE
2487 \begin_inset Quotes erd
2488 \end_inset
2490  turns on absolute mode (default) where event timestamps are absolute.
2492 \begin_inset Quotes eld
2493 \end_inset
2495 RELATIVE
2496 \begin_inset Quotes erd
2497 \end_inset
2499  turns on relative mode where event timestamps are relative to last event
2500  in stream.
2501  The OPTION event itself is not affected by timing change.
2502  No time restrictions.
2503  Unknown arguments are errors.
2504 \end_layout
2506 \begin_layout Subsubsection
2507 Keyboard keypress/keyrelease event:
2508 \end_layout
2510 \begin_layout Itemize
2511 Dispatch to: org.jpc.emulator.peripheral.Keyboard
2512 \end_layout
2514 \begin_layout Itemize
2515 Argument #1: Fixed: "KEYEDGE"
2516 \end_layout
2518 \begin_layout Itemize
2519 Argument #2: Key number.
2520  Valid values are 1-83, 85-95, 129-197 and 199-223
2521 \end_layout
2523 \begin_layout Standard
2524 Send key press or key release.
2525  Keys work in toggle button manner.
2526  The event time must be multiple of 66 666, and must not be less than 60
2527  * 66 666 TUs after last PAUSE event, 20 * 66 666 TUs after last KEYEDGE
2528  on key >128 and 10 * 66 666 TUs after last KEYEDGE on key <128.
2529 \end_layout
2531 \begin_layout Subsubsection
2532 Pause event:
2533 \end_layout
2535 \begin_layout Itemize
2536 Dispatch to: org.jpc.emulator.peripheral.Keyboard
2537 \end_layout
2539 \begin_layout Itemize
2540 Argument #1: Fixed: "PAUSE"
2541 \end_layout
2543 \begin_layout Standard
2544 Send pause key event.
2545  The time restrictions are identical to KEYEDGE event.
2546 \end_layout
2548 \begin_layout Subsubsection
2549 Mouse button event:
2550 \end_layout
2552 \begin_layout Itemize
2553 Dispatch to: org.jpc.emulator.peripheral.Keyboard
2554 \end_layout
2556 \begin_layout Itemize
2557 Argument #1: Fixed: "MOUSEBUTTON"
2558 \end_layout
2560 \begin_layout Itemize
2561 Argument #2: Number of button to release or press (0-4)
2562 \end_layout
2564 \begin_layout Standard
2565 Presses or releases the designated mouse button.
2566 \end_layout
2568 \begin_layout Subsubsection
2569 X mouse motion event:
2570 \end_layout
2572 \begin_layout Itemize
2573 Dispatch to: org.jpc.emulator.peripheral.Keyboard
2574 \end_layout
2576 \begin_layout Itemize
2577 Argument #1: Fixed: "XMOUSEMOTION"
2578 \end_layout
2580 \begin_layout Itemize
2581 Argument #2: Number of units to move (-255 - 255)
2582 \end_layout
2584 \begin_layout Standard
2585 Move the mouse in X direction by specified amount.
2586  Positive is right.
2587 \end_layout
2589 \begin_layout Subsubsection
2590 Y mouse motion event:
2591 \end_layout
2593 \begin_layout Itemize
2594 Dispatch to: org.jpc.emulator.peripheral.Keyboard
2595 \end_layout
2597 \begin_layout Itemize
2598 Argument #1: Fixed: "YMOUSEMOTION"
2599 \end_layout
2601 \begin_layout Itemize
2602 Argument #2: Number of units to move (-255 - 255)
2603 \end_layout
2605 \begin_layout Standard
2606 Move the mouse in Y direction by specified amount.
2607  Positive is up.
2608 \end_layout
2610 \begin_layout Subsubsection
2611 Z mouse motion event:
2612 \end_layout
2614 \begin_layout Itemize
2615 Dispatch to: org.jpc.emulator.peripheral.Keyboard
2616 \end_layout
2618 \begin_layout Itemize
2619 Argument #1: Fixed: "ZMOUSEMOTION"
2620 \end_layout
2622 \begin_layout Itemize
2623 Argument #2: Number of units to move (-7 - 7)
2624 \end_layout
2626 \begin_layout Standard
2627 Move the mouse in Z direction (scrollwheel) by specified amount.
2628 \end_layout
2630 \begin_layout Subsubsection
2631 Joystick button event:
2632 \end_layout
2634 \begin_layout Itemize
2635 Dispatch to: org.jpc.modules.Joystick
2636 \end_layout
2638 \begin_layout Itemize
2639 Argument #1: 
2640 \begin_inset Quotes eld
2641 \end_inset
2643 BUTTONA
2644 \begin_inset Quotes erd
2645 \end_inset
2648 \begin_inset Quotes eld
2649 \end_inset
2651 BUTTONB
2652 \begin_inset Quotes erd
2653 \end_inset
2656 \begin_inset Quotes eld
2657 \end_inset
2659 BUTTONC
2660 \begin_inset Quotes erd
2661 \end_inset
2663  or 
2664 \begin_inset Quotes eld
2665 \end_inset
2667 BUTTOND
2668 \begin_inset Quotes erd
2669 \end_inset
2672 \end_layout
2674 \begin_layout Itemize
2675 Argument #2: 
2676 \begin_inset Quotes eld
2677 \end_inset
2680 \begin_inset Quotes erd
2681 \end_inset
2683  if released, 
2684 \begin_inset Quotes eld
2685 \end_inset
2688 \begin_inset Quotes erd
2689 \end_inset
2691  if pressed
2692 \end_layout
2694 \begin_layout Standard
2695 Send button down/up event.
2696  No time restrictions.
2697 \end_layout
2699 \begin_layout Subsubsection
2700 Joystick axis event:
2701 \end_layout
2703 \begin_layout Itemize
2704 Dispatch to: org.jpc.modules.Joystick
2705 \end_layout
2707 \begin_layout Itemize
2708 Argument #1: 
2709 \begin_inset Quotes eld
2710 \end_inset
2712 AXISA
2713 \begin_inset Quotes erd
2714 \end_inset
2717 \begin_inset Quotes eld
2718 \end_inset
2720 AXISB
2721 \begin_inset Quotes erd
2722 \end_inset
2725 \begin_inset Quotes eld
2726 \end_inset
2728 AXISC
2729 \begin_inset Quotes erd
2730 \end_inset
2732  or 
2733 \begin_inset Quotes eld
2734 \end_inset
2736 AXISD
2737 \begin_inset Quotes erd
2738 \end_inset
2741 \end_layout
2743 \begin_layout Itemize
2744 Argument #2: Multivibrator unstable state length in ns.
2745 \end_layout
2747 \begin_layout Standard
2748 Set amount of time multivibrator remains in unstable state.
2749  No time restrictions.
2750 \end_layout
2752 \begin_layout Subsubsection
2753 Reboot:
2754 \end_layout
2756 \begin_layout Itemize
2757 Dispatch to: org.jpc.emulator.PC$ResetButton
2758 \end_layout
2760 \begin_layout Itemize
2761 No arguments
2762 \end_layout
2764 \begin_layout Standard
2765 Reboots the PC.
2766 \end_layout
2768 \begin_layout Subsubsection
2769 Fda disk change:
2770 \end_layout
2772 \begin_layout Itemize
2773 Dispatch to: org.jpc.emulator.PC$DiskChanger
2774 \end_layout
2776 \begin_layout Itemize
2777 Argument #1: Fixed: "FDA"
2778 \end_layout
2780 \begin_layout Itemize
2781 Argument #2: Number of image slot to put there.
2783 \end_layout
2785 \begin_layout Standard
2786 The disk number MUST be -1 or valid disk number.
2787  -1 MUST NOT be used if there is no disk in floppy drive A.
2788  This event causes specified disk to be placed to FDA or FDA disk to be
2789  ejected with no replacement if disk number is -1.
2790  The specified disk if not -1 must be of floppy type.
2791  The specified disk if valid must not be in any other drive.
2792 \end_layout
2794 \begin_layout Subsubsection
2795 Fdb disk change:
2796 \end_layout
2798 \begin_layout Itemize
2799 Dispatch to: org.jpc.emulator.PC$DiskChanger
2800 \end_layout
2802 \begin_layout Itemize
2803 Argument #1: Fixed: "FDB"
2804 \end_layout
2806 \begin_layout Itemize
2807 Argument #2: Number of image slot to put there.
2809 \end_layout
2811 \begin_layout Standard
2812 The disk number MUST be -1 or valid disk number.
2813  -1 MUST NOT be used if there is no disk in floppy drive B.
2814  This event causes specified disk to be placed to FDB or FDB disk to be
2815  ejected with no replacement if disk number is -1.
2816  The specified disk if not -1 must be of floppy type.
2817  The specified disk if valid must not be in any other drive.
2818 \end_layout
2820 \begin_layout Subsubsection
2821 Change CDROM:
2822 \end_layout
2824 \begin_layout Itemize
2825 Dispatch to: org.jpc.emulator.PC$DiskChanger
2826 \end_layout
2828 \begin_layout Itemize
2829 Argument #1: Fixed: "CDROM"
2830 \end_layout
2832 \begin_layout Itemize
2833 Argument #2: Number of image slot to put there.
2835 \end_layout
2837 \begin_layout Standard
2838 The disk number MUST be -1 or valid disk number.
2839  -1 MUST NOT be used if there is no disk in CD-ROM.
2840  This event causes specified disk to be placed to CD-ROM or CD-ROM disk
2841  to be ejected with no replacement if disk number is -1.
2842  The specified disk if not -1 must be of CD-ROM type.
2843 \end_layout
2845 \begin_layout Standard
2846 This event has no effect if CD-ROM is locked.
2847 \end_layout
2849 \begin_layout Subsubsection
2850 Write protect floppy:
2851 \end_layout
2853 \begin_layout Itemize
2854 Dispatch to: org.jpc.emulator.PC$DiskChanger
2855 \end_layout
2857 \begin_layout Itemize
2858 Argument #1: Fixed: "WRITEPROTECT"
2859 \end_layout
2861 \begin_layout Itemize
2862 Argument #2: Number of image slot to manipulate 
2863 \end_layout
2865 \begin_layout Standard
2866 Write protects specified disk.
2867  The disk MUST NOT be in any drive and MUST be valid floppy-type disk.
2868 \end_layout
2870 \begin_layout Subsubsection
2871 Write unprotect floppy:
2872 \end_layout
2874 \begin_layout Itemize
2875 Dispatch to: org.jpc.emulator.PC$DiskChanger
2876 \end_layout
2878 \begin_layout Itemize
2879 Argument #1: Fixed: "WRITEUNPROTECT"
2880 \end_layout
2882 \begin_layout Itemize
2883 Argument #2: Number of image slot to manipulate 
2884 \end_layout
2886 \begin_layout Standard
2887 Disables write protection specified disk.
2888  The disk MUST NOT be in any drive and MUST be valid floppy-type disk.
2889 \end_layout
2891 \begin_layout Subsection
2892 Diskinfo sections
2893 \end_layout
2895 \begin_layout Standard
2896 Diskinfo sections are named 
2897 \begin_inset Quotes eld
2898 \end_inset
2900 diskinfo-
2901 \begin_inset Quotes erd
2902 \end_inset
2904 <id of disk>.
2905  They use line component encoding, fieldtype being first component on each
2906  line (value being the second).
2907  Following fields are defined:
2908 \end_layout
2910 \begin_layout Subsubsection
2911 TYPE
2912 \end_layout
2914 \begin_layout Standard
2915 Gives type of image.
2916  Possible values are
2917 \end_layout
2919 \begin_layout Itemize
2920 \begin_inset Quotes eld
2921 \end_inset
2923 FLOPPY
2924 \begin_inset Quotes erd
2925 \end_inset
2927  (floppy disk)
2928 \end_layout
2930 \begin_layout Itemize
2931 \begin_inset Quotes eld
2932 \end_inset
2935 \begin_inset Quotes erd
2936 \end_inset
2938  (Hard disk)
2939 \end_layout
2941 \begin_layout Itemize
2942 \begin_inset Quotes eld
2943 \end_inset
2945 CDROM
2946 \begin_inset Quotes erd
2947 \end_inset
2949  (CD-ROM)
2950 \end_layout
2952 \begin_layout Itemize
2953 \begin_inset Quotes eld
2954 \end_inset
2956 BIOS
2957 \begin_inset Quotes erd
2958 \end_inset
2960  (BIOS/VGABIOS image)
2961 \end_layout
2963 \begin_layout Itemize
2964 \begin_inset Quotes eld
2965 \end_inset
2967 UNKNOWN
2968 \begin_inset Quotes erd
2969 \end_inset
2971  (what the heck is this???)
2972 \end_layout
2974 \begin_layout Subsubsection
2976 \end_layout
2978 \begin_layout Standard
2979 Gives ID of disk.
2980 \end_layout
2982 \begin_layout Subsubsection
2983 IMAGELENGTH
2984 \end_layout
2986 \begin_layout Standard
2987 (BIOS images only) Gives length of BIOS image
2988 \end_layout
2990 \begin_layout Subsubsection
2991 IMAGEMD5
2992 \end_layout
2994 \begin_layout Standard
2995 MD5 of raw disk/BIOS image without any headers or trailers.
2996 \end_layout
2998 \begin_layout Subsubsection
2999 TOTALSECTORS
3000 \end_layout
3002 \begin_layout Standard
3003 (FLOPPY/HDD/CDROM images only) Number of total sectors on disk.
3004 \end_layout
3006 \begin_layout Subsubsection
3007 TRACKS
3008 \end_layout
3010 \begin_layout Standard
3011 (FLOPPY/HDD images only) Number of tracks on disk per side (1-256 for floppy,
3012  1-1024 for HDD).
3013 \end_layout
3015 \begin_layout Subsubsection
3016 SIDES
3017 \end_layout
3019 \begin_layout Standard
3020 (FLOPPY/HDD images only) Number of sides on disk (1 or 2 for floppy, 1-16
3021  for HDD).
3022 \end_layout
3024 \begin_layout Subsubsection
3025 SECTORS
3026 \end_layout
3028 \begin_layout Standard
3029 (FLOPPY/HDD images only) Number of sectors per track (1-255 for floppy,
3030  1-63 for HDD).
3031 \end_layout
3033 \begin_layout Subsubsection
3034 COMMENT
3035 \end_layout
3037 \begin_layout Standard
3038 Line from image comment block.
3039  Usually give data about files image has.
3040  May or may not be present (multiple times)
3041 \end_layout
3043 \begin_layout Subsection
3044 Output info
3045 \end_layout
3047 \begin_layout Standard
3048 Output info is stored in section 
3049 \begin_inset Quotes eld
3050 \end_inset
3052 output-info
3053 \begin_inset Quotes erd
3054 \end_inset
3057  Its relatively new, so it might not be present (then the contents have
3058  to be guessed based on modules present).
3059  Each line gives information about one output, first field being the type
3060  of output.
3061 \end_layout
3063 \begin_layout Subsubsection
3064 Video output
3065 \end_layout
3067 \begin_layout Standard
3068 For video output, there are no parameters so line is just 
3069 \begin_inset Quotes eld
3070 \end_inset
3072 VIDEO
3073 \begin_inset Quotes erd
3074 \end_inset
3076  (one component).
3077 \end_layout
3079 \begin_layout Subsubsection
3080 Audio output
3081 \end_layout
3083 \begin_layout Standard
3084 For audio output, the only parameter is name of output, so first component
3085  is 
3086 \begin_inset Quotes eld
3087 \end_inset
3089 AUDIO
3090 \begin_inset Quotes erd
3091 \end_inset
3093  and second component is name of audio output.
3094 \end_layout
3096 \begin_layout Subsection
3097 Savestates
3098 \end_layout
3100 \begin_layout Standard
3101 Actual savestate format is not documented here.
3102  It is close to impossible to comprehend without access to emulator source
3103  anyway.
3104 \end_layout
3106 \begin_layout Section
3107 Advanced: Making class dumpable
3108 \end_layout
3110 \begin_layout Standard
3111 Class is made dumpable by implementing interface org.jpc.emulator.SRDumpable
3112  and implementing method dumpSRPartial(org.jpc.emulator.SRDumper) and constructor
3113  <init>(org.jpc.emulator.SRLoader).
3114  Non-static inner classes can not be dumpable (make them static using tricks
3115  similar to what javac uses).
3116 \end_layout
3118 \begin_layout Standard
3119 If dumped class has dumpable superclass, the first thing dumping function
3120  needs to do is to call dumper function of superclass and first thing loading
3121  constructor needs to do is to call loading constructor of superclass.
3122  If class has no dumpable superclass, dumper doesn't need to do anything
3123  special, while loader needs to call objectCreated(this) on SRLoader object
3124  passed as parameter.
3126 \end_layout
3128 \begin_layout Standard
3129 Following these fixed parts, dump all members that are part of mutable state
3130  in emulator core.
3131 \end_layout
3133 \begin_layout Subsection
3134 Member dumping/loading functions
3135 \end_layout
3137 \begin_layout Standard
3138 There is dumping/loading function for following (all functions dumping/loading
3139  reference types can handle null):
3140 \end_layout
3142 \begin_layout Itemize
3143 boolean: SRDumper.dumpBoolean, SRLoader.loadBoolean
3144 \end_layout
3146 \begin_layout Itemize
3147 byte: SRDumper.dumpByte, SRLoader.loadByte
3148 \end_layout
3150 \begin_layout Itemize
3151 short: SRDumper.dumpShort, SRLoader.loadShort
3152 \end_layout
3154 \begin_layout Itemize
3155 int: SRDumper.dumpInt, SRLoader.loadInt
3156 \end_layout
3158 \begin_layout Itemize
3159 long: SRDumper.dumpLong, SRLoader.loadLong
3160 \end_layout
3162 \begin_layout Itemize
3163 String: SRDumper.dumpString, SRLoader.loadString
3164 \end_layout
3166 \begin_layout Itemize
3167 boolean[]: SRDumper.dumpArray, SRLoader.loadArrayBoolean
3168 \end_layout
3170 \begin_layout Itemize
3171 byte[]: SRDumper.dumpArray, SRLoader.loadArrayByte
3172 \end_layout
3174 \begin_layout Itemize
3175 short[]: SRDumper.dumpArray, SRLoader.loadArrayShort
3176 \end_layout
3178 \begin_layout Itemize
3179 int[]: SRDumper.dumpArray, SRLoader.loadArrayInt
3180 \end_layout
3182 \begin_layout Itemize
3183 long[]: SRDumper.dumpArray, SRLoader.loadArrayLong
3184 \end_layout
3186 \begin_layout Itemize
3187 double[]: SRDumper.dumpArray, SRLoader.loadArrayDouble
3188 \end_layout
3190 \begin_layout Itemize
3191 <dumpable type>: SRDumper.dumpObject, SRLoader.loadObject
3192 \end_layout
3194 \begin_layout Itemize
3195 special object: SRDumper.specialObject, SRLoader.specialObject
3196 \end_layout
3198 \begin_layout Subsubsection
3199 Notes:
3200 \end_layout
3202 \begin_layout Itemize
3203 Dumpable objects come out as type of org.jpc.emulator.SRDumpable.
3204 \end_layout
3206 \begin_layout Itemize
3207 Special objects are various static objects that don't need to be stored
3208  because they don't have mutable fields.
3209 \end_layout
3211 \begin_layout Itemize
3212 Don't dump fields related to event state feedback.
3213 \end_layout
3215 \begin_layout Itemize
3216 Don't dump temporary flags that are only used while PC is running.
3217  Savestate when PC is running isn't possible anyway.
3218 \end_layout
3220 \begin_layout Itemize
3221 Some connectors dump fields related to connector output, some don't.
3222 \end_layout
3224 \begin_layout Section
3225 Advanced: Making output connectors
3226 \end_layout
3228 \begin_layout Standard
3229 Implementing interface org.jpc.emulator.DisplayController signals that this
3230  is display controller, inhibiting loading of the standard VGA display controlle
3231 r if loaded as module.
3233 \end_layout
3235 \begin_layout Subsection
3236 Interface org.jpc.emulator.OutputConnector
3237 \end_layout
3239 \begin_layout Standard
3240 Class is made to be output connector by implementing this interface.
3241  This interface specifies the methods used for output hold locking.
3242  Class org.jpc.emulator.OutputConnectorLocking has implementations of these
3243  that are suitable for calling.
3245 \end_layout
3247 \begin_layout Subsubsection
3248 Method subscribeOutput(Object)
3249 \end_layout
3251 \begin_layout Standard
3252 Subscribes the output, with specified object as handle.
3253 \end_layout
3255 \begin_layout Subsubsection
3256 Method unsubscribeOutput(Object)
3257 \end_layout
3259 \begin_layout Standard
3260 Unsubscribe the specified handle object from output.
3261 \end_layout
3263 \begin_layout Subsubsection
3264 Method waitOutput(Object)
3265 \end_layout
3267 \begin_layout Standard
3268 Wait for output on specified connector using specified handle object.
3269  Returns true on success, false if wait was interrupted by thread interrupt.
3270  Blocking.
3271 \end_layout
3273 \begin_layout Subsubsection
3274 Method releaseOutput(Object)
3275 \end_layout
3277 \begin_layout Standard
3278 Release connector from p.o.v.
3279  of given handle.
3280  Does not block.
3281 \end_layout
3283 \begin_layout Subsubsection
3284 Method holdOutput()
3285 \end_layout
3287 \begin_layout Standard
3288 Release threads waiting on waitOutput() and block until all subscribers
3289  have returned from waitOutput() and enteired releaseOutput().
3290 \end_layout
3292 \begin_layout Subsubsection
3293 Method releaseOutputWaitAll(object)
3294 \end_layout
3296 \begin_layout Standard
3297 Like releaseOutput(), but waits until all handles have released their output.
3298 \end_layout
3300 \begin_layout Subsection
3301 Class org.jpc.emulator.VGADigtalOut
3302 \end_layout
3304 \begin_layout Standard
3305 Class org.jpc.emulator.VGADigtalOut (already implements OutputConnector) implements
3306  VGA output connector.
3307  If module provodes output connector, it needs to implement org.jpc.emulator.Displa
3308 yController.
3309 \end_layout
3311 \begin_layout Subsubsection
3312 Method getWidth()
3313 \end_layout
3315 \begin_layout Standard
3316 Get width of display (watch out, can return 0).
3317 \end_layout
3319 \begin_layout Subsubsection
3320 Method getHeight()
3321 \end_layout
3323 \begin_layout Standard
3324 Get height of display (watch out, can return 0).
3325 \end_layout
3327 \begin_layout Subsubsection
3328 Methods getDirtyXMin(), getDirtyXMax(), getDirtyYMin(), getDirtyYMax()
3329 \end_layout
3331 \begin_layout Standard
3332 Returns the dirty region (region modified since last output).
3333 \end_layout
3335 \begin_layout Subsubsection
3336 Method getBuffer()
3337 \end_layout
3339 \begin_layout Standard
3340 Get buffer of ints, at least width * height elements (left-to-right, top-down,
3341  one value per pixel) giving pixel data.
3342  Value for each pixel is 65536 * <red-component> + 256 * <green-component>
3343  + <blue-component>.
3344 \end_layout
3346 \begin_layout Subsubsection
3347 Method resizeDisplay(int _width, int _height)
3348 \end_layout
3350 \begin_layout Standard
3351 Resize the display to be of specified size.
3352 \end_layout
3354 \begin_layout Subsubsection
3355 Method dirtyDisplayRegion(int x, int y, int w, int h)
3356 \end_layout
3358 \begin_layout Standard
3359 Mark the specified region as dirty.
3360 \end_layout
3362 \begin_layout Subsubsection
3363 Method resetDirtyRegion()
3364 \end_layout
3366 \begin_layout Standard
3367 Resets the dirty region to be empty.
3368 \end_layout
3370 \begin_layout Subsection
3371 Class org.jpc.emulator.PC method getVideoOutput()
3372 \end_layout
3374 \begin_layout Standard
3375 Get VGA output connector for PC.
3376 \end_layout
3378 \begin_layout Subsection
3379 Interface org.jpc.emulator.DisplayController.
3380 \end_layout
3382 \begin_layout Standard
3383 Implementing this class signals that module is VGA controller.
3384  There can be only one such module active at time and presence of such module
3385  prevents loading builtin VGA controller emulation code.
3386 \end_layout
3388 \begin_layout Subsubsection
3389 Method getOutputDevice()
3390 \end_layout
3392 \begin_layout Standard
3393 Get VGA output connector for this VGA device.
3394 \end_layout
3396 \begin_layout Subsection
3397 Class org.jpc.emulator.SoundDigitalOut
3398 \end_layout
3400 \begin_layout Standard
3401 Class org.jpc.emulator.SoundDigitalOut provodes output connector for sound.
3402  Each connector can transfer stereo signal at arbitiary sampling rate.
3403  Modules that have audio connectors need to implement interface org.jpc.emulator.So
3404 undOutputDevice, as this signals that output connectors should be created.
3405 \end_layout
3407 \begin_layout Subsubsection
3408 Method addSample(long, short, short)
3409 \end_layout
3411 \begin_layout Standard
3412 Add stereo sample at time given by first argument.
3413  The second and third arguments give volume on left and right channels.
3414 \end_layout
3416 \begin_layout Subsubsection
3417 Method addSample(long, short)
3418 \end_layout
3420 \begin_layout Standard
3421 Add mono sample at time given by first argument.
3422  The second argument give volume on both channels.
3423 \end_layout
3425 \begin_layout Subsubsection
3426 Method readBlock(Block)
3427 \end_layout
3429 \begin_layout Standard
3430 Reads block of output (atomic versus addSample).
3431  Block structure has following fields which are filled:
3432 \end_layout
3434 \begin_layout Itemize
3435 timeBase: Time base for block.
3436 \end_layout
3438 \begin_layout Itemize
3439 baseLeft: Left volume at time base.
3440 \end_layout
3442 \begin_layout Itemize
3443 baseRight: Right volume at time base
3444 \end_layout
3446 \begin_layout Itemize
3447 blockNo: Sequence number of block filled.
3448 \end_layout
3450 \begin_layout Itemize
3451 samples: Number of samples in block
3452 \end_layout
3454 \begin_layout Itemize
3455 sampleTiming: Number of nanoseconds since last sample
3456 \end_layout
3458 \begin_layout Itemize
3459 sampleLeft: Left channel samples
3460 \end_layout
3462 \begin_layout Itemize
3463 sampleRight: Right channel samples
3464 \end_layout
3466 \begin_layout Subsection
3467 Interface org.jpc.emulator.SoundOutputDevice
3468 \end_layout
3470 \begin_layout Standard
3471 Implementing this interface signals that module has audio output channels.
3472 \end_layout
3474 \begin_layout Subsubsection
3475 Method org.jpc.emulator.SoundOutputDevice.requestedSoundChannels()
3476 \end_layout
3478 \begin_layout Standard
3479 Return the number of sound channels module has.
3480 \end_layout
3482 \begin_layout Subsubsection
3483 Method org.jpc.emulator.SoundOutputDevice.soundChannelCallback(SoundDigitalOut)
3484 \end_layout
3486 \begin_layout Standard
3487 This is called once per sound channel requested giving precreated sound
3488  channel.
3489 \end_layout
3491 \begin_layout Subsection
3492 Class org.jpc.emulator.PC method getSoundOut(String)
3493 \end_layout
3495 \begin_layout Standard
3496 Get sound output with specified name.
3497 \end_layout
3499 \begin_layout Section
3500 Advanced: Writing event targets
3501 \end_layout
3503 \begin_layout Standard
3504 Whereas output connectors are the way output is dispatched, input is dispatched
3505  via event targets.
3506  Event targets need to implement interface org.jpc.emulator.EventDispatchTarget.
3507 \end_layout
3509 \begin_layout Standard
3510 Event targets also provode methods which then encode events and dispatch
3511  them forward (without doing anything else) to event recorder.
3512  Also, event targets may have methods for obtaining state.
3513 \end_layout
3515 \begin_layout Subsection
3516 Interface org.jpc.emulator.EventDispatchTarget
3517 \end_layout
3519 \begin_layout Standard
3520 Interface that marks class capable of receiving events.
3521 \end_layout
3523 \begin_layout Subsubsection
3524 Method setEventRecorder(EventRecorder)
3525 \end_layout
3527 \begin_layout Standard
3528 Set the event recorder input events are sent to.
3529 \end_layout
3531 \begin_layout Subsubsection
3532 Method startEventCheck()
3533 \end_layout
3535 \begin_layout Standard
3536 Signals target to reset all state related to event checking and state feedback.
3537  This may be called at any time in order to reinitialialize event checking/feedb
3538 ack state.
3539 \end_layout
3541 \begin_layout Subsubsection
3542 Method doEvent(long, String[], int) throws IOException
3543 \end_layout
3545 \begin_layout Standard
3546 Event dispatch handler.
3547  The first argument is event time, second is parameters and third is what
3548  to do with it.
3549  If target doesn't like the event, throw IOException.
3550  Following types (the integer parameter) are used:
3551 \end_layout
3553 \begin_layout LyX-Code
3554 0 (EventRecorder.EVENT_TIMED): Time has been assigned for event.
3555 \end_layout
3557 \begin_layout LyX-Code
3558 1 (EventRecorder.EVENT_STATE_EFFECT_FUTURE): Future event in event replay
3559  for reinitialization
3560 \end_layout
3562 \begin_layout LyX-Code
3563 2 (EventRecorder.EVENT_STATE_EFFECT): Past event in event replay reinitialization
3564 \end_layout
3566 \begin_layout LyX-Code
3567 3 (EventRecorder.EVENT_EXECUTE): This event occurs now.
3568  Execute the effect.
3569 \end_layout
3571 \begin_layout Subsubsection
3572 Method endEventCheock()
3573 \end_layout
3575 \begin_layout Standard
3576 End event reinitialization.
3577  Usually unused.
3578 \end_layout
3580 \begin_layout Subsubsection
3581 Method getEventTimeLowBound(long, String[]) throws IOException
3582 \end_layout
3584 \begin_layout Standard
3585 Return the time value that's the earliest possiblity for this event to occur.
3586  Returning any time in past (including -1) causes event to fire as soon
3587  as possible.
3588  The long parameter gives the current scheduled time for event.
3589 \end_layout
3591 \begin_layout Section
3592 Writing modules
3593 \end_layout
3595 \begin_layout Standard
3596 Modules are various extensions that run inside emulator core.
3597  As such, they affect sync.
3598  Modules must implement interface org.jpc.emulator.HardwareComponent (they
3599  are hardware components) and must be dumpable.
3600  Additionally, they need either constructor <init>() or <init>(String).
3601  The first is if no parameters are passed, the second is for case where
3602  parameters are passed.
3603 \end_layout
3605 \begin_layout Standard
3606 Aside of the constructors, modules need to obey the ordinary conventions
3607  for hardware components.
3608  No code outside modules needs to know that module exists.
3609 \end_layout
3611 \begin_layout Section
3612 Writing plugins
3613 \end_layout
3615 \begin_layout Standard
3616 Plugins handle various UI tasks.
3617  They need to implement interface org.jpc.Plugin.
3618 \end_layout
3620 \begin_layout Subsection
3621 Interface org.jpc.pluginsbase.Plugin
3622 \end_layout
3624 \begin_layout Subsubsection
3625 Method systemShutdown()
3626 \end_layout
3628 \begin_layout Standard
3629 Called when emulator shuts down.
3630  Either called in dedicated thread or in thread that called emulatorShutdown().
3631  These handlers should do the bare minimum to get files on disk to consistent
3632  state.
3633  After these calls from all plugins have finished, emulator exits.
3634  Do not try to manipulate UI from these methods, as doing that easily leads
3635  into deadlock.
3636 \end_layout
3638 \begin_layout Subsubsection
3639 Method reconnect(PC) 
3640 \end_layout
3642 \begin_layout Standard
3643 Gives new PC to connect to.
3644  Null is passed if plugin should disconnect.
3645 \end_layout
3647 \begin_layout Subsubsection
3648 Method main()
3649 \end_layout
3651 \begin_layout Standard
3652 Called in dedicated thread after plugin is initialized.
3653 \end_layout
3655 \begin_layout Subsubsection
3656 Method pcStopping()
3657 \end_layout
3659 \begin_layout Standard
3660 Called after PC has stopped.
3661 \end_layout
3663 \begin_layout Subsubsection
3664 Method pcStarting()
3665 \end_layout
3667 \begin_layout Standard
3668 Called before PC starts.
3669 \end_layout
3671 \begin_layout Subsubsection
3672 Method notifyArguments(String[])
3673 \end_layout
3675 \begin_layout Standard
3676 Pass arguments from command line.
3677 \end_layout
3679 \begin_layout Subsubsection
3680 Constructor <init>(Plugins)
3681 \end_layout
3683 \begin_layout Standard
3684 This constructor is used to initialize plugins that don't take parameters.
3685 \end_layout
3687 \begin_layout Subsubsection
3688 Constructor <init>(Plugins, String)
3689 \end_layout
3691 \begin_layout Standard
3692 This constructor is used to initialize plugins that take parameters.
3693 \end_layout
3695 \begin_layout Subsection
3696 Class org.jpc.pluginsbase.Plugins
3697 \end_layout
3699 \begin_layout Standard
3700 This class provodes various methods for manipulating plugins.
3701 \end_layout
3703 \begin_layout Subsubsection
3704 Method isShuttingDown()
3705 \end_layout
3707 \begin_layout Standard
3708 Returns true if Plugins.shutdownEmulator() has been called somehow, either
3709  via VM exit, CTRL+C or explicitly.
3710  Useful to skip cleanups involving GUI, as these are too deadlock-prone.
3711 \end_layout
3713 \begin_layout Subsubsection
3714 Method shutdownEmulator()
3715 \end_layout
3717 \begin_layout Standard
3718 Shut down and exit the emulator.
3719  All plugin shutdown functions are called in this thread.
3720 \end_layout
3722 \begin_layout Subsubsection
3723 Method reconnectPC(PC)
3724 \end_layout
3726 \begin_layout Standard
3727 Signal reconnectPC event to all plugins.
3728 \end_layout
3730 \begin_layout Subsubsection
3731 Method pcStarted()
3732 \end_layout
3734 \begin_layout Standard
3735 Signal pcStarting() event to all plugins.
3736 \end_layout
3738 \begin_layout Subsubsection
3739 Method pcStopped()
3740 \end_layout
3742 \begin_layout Standard
3743 Signal pcStopping() event to all plugins.
3744 \end_layout
3746 \begin_layout Section
3747 Inter-plugin communication
3748 \end_layout
3750 \begin_layout Subsection
3751 Receiving communications
3752 \end_layout
3754 \begin_layout Standard
3755 To receive invocation/call by name 'foo-bar', declare public method named
3756  'eci_foo_bar'.
3757  Arguments to this method can currently be String, Integer (int) or Long
3758  (long).
3759  Last argument may be array over these types to get variable number of arguments.
3760  On call, each argument gets value from call.
3761  If last argument is array, it gets all overflowing arguments.
3762  If return type is void or method returns boolean false, call is assumed
3763  to have completed.
3764  If return value is boolean true, it is assumed that there is more processing.
3765 \end_layout
3767 \begin_layout Subsection
3768 void org.jpc.pluginsbase.Plugins.invokeExternalCommand(String cmd, Object[]
3769  args) 
3770 \end_layout
3772 \begin_layout Standard
3773 Invoke command asynchronously, broadcasting to all plugins.
3774  Does not wait for slow commands to complete.
3775  cmd is the name to send and args are the arguments to pass.
3776 \end_layout
3778 \begin_layout Subsection
3779 void org.jpc.pluginsbase.Plugins.invokeExternalCommandSynchronous(String cmd,
3780  Object[] args) 
3781 \end_layout
3783 \begin_layout Standard
3784 Same as invokeExternalCommand, but waits for slow commands to complete.
3785 \end_layout
3787 \begin_layout Subsection
3788 Object[] org.jpc.pluginsbase.Plugins.invokeExternalCommandReturn(String cmd,
3789  Object[] args) 
3790 \end_layout
3792 \begin_layout Standard
3793 Similar to invokeExternalCommandSynchornous, but:
3794 \end_layout
3796 \begin_layout Itemize
3797 Quits calling more plugins when it gets successful reply.
3798 \end_layout
3800 \begin_layout Itemize
3801 Returns said reply
3802 \end_layout
3804 \begin_layout Subsection
3805 void org.jpc.pluginsbase.Plugins.returnValue(Object...
3806  ret)
3807 \end_layout
3809 \begin_layout Standard
3810 Gives return value to return from call and signals that command has completed.
3811 \end_layout
3813 \begin_layout Subsection
3814 void org.jpc.pluginsbase.Plugins.signalCommandCompletion()
3815 \end_layout
3817 \begin_layout Standard
3818 Signals that command has completed.
3819  Only needed if there is no return value and eci_ method returned false
3820  (not done yet).
3821 \end_layout
3823 \begin_layout Section
3824 Lua kernel programming
3825 \end_layout
3827 \begin_layout Standard
3828 At startup, kernel gets its arguments in 'args' table and the script name
3829  to run in 'scriptname' string.
3830  It should enter the named script in protected mode.
3831 \end_layout
3833 \begin_layout Standard
3834 The Lua VM exports numerious callbacks to kernel.
3835  The kernel can then choose to omit, wrap or re-export these to Lua scripts.
3836 \end_layout
3838 \begin_layout Itemize
3839 Always grab any functions used into local variables so nobody can mess with
3840  them
3841 \end_layout
3843 \begin_layout Itemize
3844 Don't use global variables in kernel (except for those passed).
3845 \end_layout
3847 \end_body
3848 \end_document