Update user manual
[jpcrr.git] / manual.lyx
blobb139f94f653e3aa81b4b4d743141416f29a4e740
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.bat that has fairly reasonable
121  defaults.
122  To use it:
123 \end_layout
125 \begin_layout LyX-Code
126 java JPCApplication -library library -autoexec assemble.bat
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 -library <library> Use the specified directory when searching for images
811  (can only be specified once).
812 \end_layout
814 \begin_layout LyX-Code
815 -autoexec <script> Execute contents of specified file as commands when starting
816  up.
817 \end_layout
819 \begin_layout Subsection
820 Command line
821 \end_layout
823 \begin_layout Standard
824 When emulator is started, command line comes up.
825  Following commands are known:
826 \end_layout
828 \begin_layout Itemize
829 'exit': exit immediately
830 \end_layout
832 \begin_layout Itemize
833 'load <plugin>': Load plugin (no arguments)
834 \end_layout
836 \begin_layout Itemize
837 'load <plugin>(<arguments>)': load plugin with arguments.
838 \end_layout
840 \begin_layout Itemize
841 'command <command> [<arguments>...]': Invoke command via external command interface.
842 \end_layout
844 \begin_layout Itemize
845 'call<command> [<arguments>...]': Invoke command via external command interface
846  and print return values.
847 \end_layout
849 \begin_layout Standard
850 When one gets command line, its useful to load some plugins.
851  See section about plugins.
852  Note: Load runner plugin (PCControl/PCRunner and so) last, as some runners
853  like to start PC immediately.
854 \end_layout
856 \begin_layout Subsection
857 PC settings dialog notes
858 \end_layout
860 \begin_layout Itemize
861 CPU divider base frequency before division is 1GHz.
862 \end_layout
864 \begin_layout Itemize
865 Images can be specified by name or by ID.
866  Name is relative to library directory.
867  If the image is in subdirectory of image directory, the directory separator
868  is is '/' regardless of what the host OS uses.
869 \end_layout
871 \begin_layout Itemize
872 CD-ROM and hdc are mutually exclusive
873 \end_layout
875 \begin_layout Itemize
876 Modules is comma-seperated list of modules to load.
877  To pass arguments to some modules, enclose the arguments in ().
878  Same module can be specified twice only if parameters differ.
879 \end_layout
881 \begin_layout Itemize
882 Setting boot device doesn't work with some BIOS versions.
883  Those versions prompt the boot device anyway.
884 \end_layout
886 \begin_layout Subsection
887 Audio output channels
888 \end_layout
890 \begin_layout Standard
891 PC can have one or more audio output channels.
892  The name of audio output associated with PC speaker is: 'org.jpc.emulator.peripher
893 al.PCSpeaker-0'.
894  Modules that have audio outputs get channel names of form <classname>-<sequenti
895 al>, where <classname> is name of main module class and sequential is number
896  starting from zero.
897  Note that same module can have multiple output channels.
898  If multiple modules of same class request audio outputs, the <sequential>
899  values of subsequent module start where previous left off.
900 \end_layout
902 \begin_layout Subsection
903 Plugins
904 \end_layout
906 \begin_layout Standard
907 Plugins actually execute the tasks of the emulator.
908  They can be loaded using 
909 \begin_inset Quotes eld
910 \end_inset
912 load <plugin>
913 \begin_inset Quotes erd
914 \end_inset
916  or 'load <plugin>(<arguments>)
917 \begin_inset Quotes erd
918 \end_inset
920  from command line.
921 \end_layout
923 \begin_layout Standard
924 Different Plugins using the same output (like running PCMonitor and RAWVideoDump
925 er) should not conflict because connector output hold locking is desinged
926  to handle multiple readers.
927 \end_layout
929 \begin_layout Standard
930 If no plugin used requires GUI, then the emulator can be run without having
931  GUI available.
932 \end_layout
934 \begin_layout Subsubsection
935 plugin: org.jpc.plugins.PCControl
936 \end_layout
938 \begin_layout Standard
939 No arguments, requires and uses GUI.
940 \end_layout
942 \begin_layout Standard
943 Runs the PC emulator core.
944  Has capability to start/stop emulation, breakpoint after certain time or
945  start/end of VGA vertical retrace.
946  Also can create, savestate and loadstate PC emulation.
947  Memory dumping is supported.
949 \end_layout
951 \begin_layout Subsubsection
952 plugin: org.jpc.plugins.PCRunner
953 \end_layout
955 \begin_layout Standard
956 Takes 'movie=<file>' as argument and optionally 'stoptime=<time>' Does not
957  require nor use GUI.
958 \end_layout
960 \begin_layout Standard
961 Loads PC from savestate and just runs it.
962  CTRL+C to quit.
963  Also automatically quits once stoptime is reached.
964 \end_layout
966 \begin_layout Subsubsection
967 plugin: org.jpc.plugins.PCMonitor
968 \end_layout
970 \begin_layout Standard
971 No arguments, requires and uses GUI.
972 \end_layout
974 \begin_layout Standard
975 VGA monitor for emulated PC.
976 \end_layout
978 \begin_layout Subsubsection
979 plugin: org.jpc.plugins.VirtualKeyboard
980 \end_layout
982 \begin_layout Standard
983 No arguments, requires and uses GUI.
984 \end_layout
986 \begin_layout Standard
987 On-screen keyboard for emulated PC.
988 \end_layout
990 \begin_layout Subsubsection
991 plugin: org.jpc.plugins.PCStartStopTest
992 \end_layout
994 \begin_layout Standard
995 No arguments, requires and uses GUI.
996 \end_layout
998 \begin_layout Standard
999 Small plugin testing remote PC start/stop.
1000  Also supports sending some common keypresses.
1001 \end_layout
1003 \begin_layout Subsubsection
1004 plugin: org.jpc.plugins.RAWVideoDumper
1005 \end_layout
1007 \begin_layout Standard
1008 Takes 'rawoutput=<file>' as argument.
1009  Does not require nor use GUI.
1010 \end_layout
1012 \begin_layout Standard
1013 Dumps all generated frames to RAW file <file>.
1014  Rawoutput is required.
1015  The raw file consists of concatenation of zlib streams.
1016  The uncompressed stream is concatenation of time skips (FFh FFh FFh FFh),
1017  each acting as time offset of 2^32-1 nanoseconds and saved frames.
1018  The saved frame has time offset in nanoseconds (big endian) as first four
1019  bytes (must be at most 2^32-2, as 2^32-1 is reserved for time skip).
1020  The next two bytes are big-endian width, next two big-endian height.
1021  Finally frame has 4 * width * height bytes of data that encodes pixels
1022  using 4 bytes per pixel, in left-to-right, up-to-down order.
1023  Byte 0 of each pixel is reserved, byte 1 is the red channel, byte 2 is
1024  green channel and byte 3 is blue channel.
1025 \end_layout
1027 \begin_layout Standard
1028 Dumping to pipe is supported.
1029 \end_layout
1031 \begin_layout Subsubsection
1032 plugin: org.jpc.plugins.RAWAudioDumper
1033 \end_layout
1035 \begin_layout Standard
1036 Takes 'src=<name of audio output channel>', 'file=<output-filename>' and
1037  'offset=<offset>' as arguments, separated by ','.
1038  Does not require nor use GUI.
1039 \end_layout
1041 \begin_layout Standard
1042 Dumps output from specified audio output channel (src, mandatory) to RAW-format
1043  file (file, mandatory).
1044  The resulting file consists of records, 4 or 8 bytes each.
1045  4 byte record consists of 0xFF 0xFF 0xFF 0xFF and means to increase next
1046  time delta by 
1047 \begin_inset Formula $2^{32}-1$
1048 \end_inset
1051  Otherwise record is 8 bytes.
1052  Each 8 byte record has three fields.
1053  First 4 byte unsinged big endian timedelta value (in nanoseconds, must
1054  be smaller than 
1055 \begin_inset Formula $2^{32}-1$
1056 \end_inset
1058 ), then 2 byte signed big endian new left channel volume, then 2 byte signed
1059  big endian new right channel volume.
1060  Optionally 'offset' can be set to positive value (in nanoseconds) to delay
1061  the audio by.
1062 \end_layout
1064 \begin_layout Subsubsection
1065 plugin: org.jpc.plugins.LuaPlugin
1066 \end_layout
1068 \begin_layout Standard
1069 Takes 'kernel=<name of lua kernel file>', other parameters are passed to
1070  kernel, requires and uses GUI.
1071 \end_layout
1073 \begin_layout Standard
1074 Lua VM for executing scripts.
1075 \end_layout
1077 \begin_layout Subsubsection
1078 plugin: org.jpc.plugins.JoystickInput
1079 \end_layout
1081 \begin_layout Standard
1082 No parameters.
1083  Displays window for sending joystick input.
1084 \end_layout
1086 \begin_layout Section
1087 Modules
1088 \end_layout
1090 \begin_layout Subsection
1091 org.jpc.modules.Joystick:
1092 \end_layout
1094 \begin_layout Itemize
1095 Arguments: none.
1096 \end_layout
1098 \begin_layout Itemize
1099 Resources: I/O port 0x201
1100 \end_layout
1102 \begin_layout Standard
1103 Emulates joystick game port.
1104 \end_layout
1106 \begin_layout Subsection
1107 org.jpc.modules.BasicFPU:
1108 \end_layout
1110 \begin_layout Itemize
1111 Arguments: none.
1112 \end_layout
1114 \begin_layout Itemize
1115 Resources: None.
1116 \end_layout
1118 \begin_layout Standard
1119 Crude FPU (x87) emulator.
1120 \end_layout
1122 \begin_layout Section
1123 Hacks
1124 \end_layout
1126 \begin_layout Standard
1127 Hacks are saved to savestates but not movies.
1128 \end_layout
1130 \begin_layout Subsection
1131 NO_FPU
1132 \end_layout
1134 \begin_layout Standard
1135 Force bit 1 of physical address 0x0410 to zero, signaling that the system
1136  has no FPU.
1137  BIOS assumes system has FPU but some games use that bit to detect FPU,
1138  trying to use it if it is 
1139 \begin_inset Quotes eld
1140 \end_inset
1142 present
1143 \begin_inset Quotes erd
1144 \end_inset
1147  Try this if game startup hangs with lots of trying to use FPU but not present
1148  errors.
1149  Don't use if there is FPU present.
1150  Needed to get games like Blake Stone to work (FPU emulator allows it to
1151  start but causes graphical glitches).
1152 \end_layout
1154 \begin_layout Subsection
1155 VGA_DRAW
1156 \end_layout
1158 \begin_layout Standard
1159 Update basic VGA parameters before vretrace, not after it.
1160  Some games (e.g.
1161  Commander Keen 4) don't like if this isn't done and some games (e.g.
1162  Mario & Luigi) don't like if it is done.
1163  Wrong value manifests as jerky scrolling (scrolling back and forth and
1164  fixed statusbars move).
1165 \end_layout
1167 \begin_layout Section
1168 Some error messages and explanations
1169 \end_layout
1171 \begin_layout Itemize
1172 <filename> is Not a valid image file
1173 \end_layout
1175 \begin_layout Itemize
1176 <filename> is not image file
1177 \end_layout
1179 \begin_layout Itemize
1180 <filename> claims to be floppy with illegal geometry: <x> tracks, <y> sides
1181  and <z> sectors.
1182 \end_layout
1184 \begin_layout Itemize
1185 <filename> claims to be HDD with illegal geometry: <x> tracks, <y> sides
1186  and <z> sectors.
1187 \end_layout
1189 \begin_layout Itemize
1190 Can't read disk image sector map.
1191 \end_layout
1193 \begin_layout Itemize
1194 Can't read disk image extent.
1195 \end_layout
1197 \begin_layout Standard
1198 Code expects <filename> to be valid JPC-RR format image, but it isn't JPC-RR
1199  image at all or its corrupt.
1200 \end_layout
1202 \begin_layout Itemize
1203 <filename> is image of unknown type.
1204 \end_layout
1206 \begin_layout Itemize
1207 <filename> has unrecognized geometry <x> <y> <z>
1208 \end_layout
1210 \begin_layout Standard
1211 Possibly corrupt image, not JPC-RR image, or JPC-RR image from future version
1212  containing something current version can't comprehend.
1213 \end_layout
1215 \begin_layout Itemize
1216 Invalid format specifier <something>.
1217 \end_layout
1219 \begin_layout Itemize
1220 Invalid syntax of --floppy= or --HDD= option.
1221 \end_layout
1223 \begin_layout Itemize
1224 Invalid format specifier/option <something>.
1225 \end_layout
1227 \begin_layout Standard
1228 Invalid option or format specifier was given.
1229  Check for typos.
1230 \end_layout
1232 \begin_layout Itemize
1233 java ImageMaker [<options>...] <format> <destination> <source> <diskname>
1234 \end_layout
1236 \begin_layout Standard
1237 Check syntax of command.
1238  Especially that diskname is present!
1239 \end_layout
1241 \begin_layout Itemize
1242 The image has <nnn> sectors while it should have <yyy> according to selected
1243  geometry.
1244 \end_layout
1246 \begin_layout Itemize
1247 Raw image file length not divisible by 512.
1248 \end_layout
1250 \begin_layout Itemize
1251 Trying to read sector out of range.
1252 \end_layout
1254 \begin_layout Standard
1255 The selected geometry is wrong or raw image is incomplete.
1256 \end_layout
1258 \begin_layout Itemize
1259 Invalid disk name (Should not happen!).
1260 \end_layout
1262 \begin_layout Itemize
1263 Invalid geometry to be written.
1264 \end_layout
1266 \begin_layout Standard
1267 This is a very likely a bug in program.
1268 \end_layout
1270 \begin_layout Itemize
1271 What the heck <filename> is? It's not regular file nor directory.
1272 \end_layout
1274 \begin_layout Standard
1275 That sort of file can't be used as input for image making, or the file just
1276  doesn't exist.
1277 \end_layout
1279 \begin_layout Itemize
1280 BIOS images can only be made out of regular files.
1281 \end_layout
1283 \begin_layout Itemize
1284 CD images can only be made out of regular files.
1285 \end_layout
1287 \begin_layout Standard
1288 Source image specified is not regular file, but image of that type can't
1289  be made of anything else.
1290 \end_layout
1292 \begin_layout Itemize
1293 Can't read raw bios image file.
1294 \end_layout
1296 \begin_layout Itemize
1297 Can't read sector <nnn> from image.
1298 \end_layout
1300 \begin_layout Standard
1301 Reading the raw image file failed for some reason.
1302 \end_layout
1304 \begin_layout Itemize
1305 Bad library line: "<something>".
1306  Ignored.
1307 \end_layout
1309 \begin_layout Standard
1310 Syntax error in image library.
1311 \end_layout
1313 \begin_layout Itemize
1314 Removing image <something> a.k.a.
1315  "<something>" as it no longer exists.
1316 \end_layout
1318 \begin_layout Standard
1319 The image file no longer exists so it gets removed from library.
1320 \end_layout
1322 \begin_layout Itemize
1323 Removing image <something> a.k.a.
1324  "<something>" due to <some> conflict.
1325 \end_layout
1327 \begin_layout Standard
1328 Image library code killed some image from library due to some kind of conflict
1329  with image being added.
1330 \end_layout
1332 \begin_layout Itemize
1333 Too much data to fit into given space.
1334 \end_layout
1336 \begin_layout Standard
1337 The tree you gave contains takes just too much space to fit into disk of
1338  this size.
1339 \end_layout
1341 \begin_layout Section
1342 Advanced: Savestate/movie format
1343 \end_layout
1345 \begin_layout Subsection
1346 Special character classes
1347 \end_layout
1349 \begin_layout Subsubsection
1350 SPACE
1351 \end_layout
1353 \begin_layout Standard
1354 Following Unicode codepoints (encoded as UTF-8) are interpretted as space
1355  characters:
1356 \end_layout
1358 \begin_layout Itemize
1359 Codepoints 0x20, and 0x09.
1360 \end_layout
1362 \begin_layout Itemize
1363 Codepoints 0x1680, 0x180E, 0x2028, 0x205F and 0x3000
1364 \end_layout
1366 \begin_layout Itemize
1367 Codepoints 0x2000-0x200A.
1368 \end_layout
1370 \begin_layout Subsubsection
1371 LINEFEED
1372 \end_layout
1374 \begin_layout Standard
1375 Following byte sequences are interpretted as linefeeds (line change):
1376 \end_layout
1378 \begin_layout Itemize
1379 Byte 0x0A
1380 \end_layout
1382 \begin_layout Itemize
1383 Byte 0x0D
1384 \end_layout
1386 \begin_layout Itemize
1387 Bytes 0x0D 0x0A (interpretted as single line change, not two!)
1388 \end_layout
1390 \begin_layout Itemize
1391 Bytes 0xC2 0x85 (UTF-8 for unicode control character NL)
1392 \end_layout
1394 \begin_layout Subsection
1395 JRSR archive
1396 \end_layout
1398 \begin_layout Standard
1399 JRSR archive format packs multiple text archive members to text archive.
1400  It does not support binary members.
1401  JRSR archives have first five or six bytes form the magic.
1402  It is 
1403 \begin_inset Quotes eld
1404 \end_inset
1406 JRSR
1407 \begin_inset Quotes erd
1408 \end_inset
1410  followed by LINEFEED character There are four kinds of lines after that
1411  (lines are terminated by LINEFEED byte/bytes):
1412 \end_layout
1414 \begin_layout Itemize
1415 Start member
1416 \end_layout
1418 \begin_layout Itemize
1419 Member line
1420 \end_layout
1422 \begin_layout Itemize
1423 End member
1424 \end_layout
1426 \begin_layout Itemize
1427 Blank line
1428 \end_layout
1430 \begin_layout Standard
1431 Sequencing rules are as follows: Start member is allowed anywhere (after
1432  magic).
1433  Member line is allowed only inside member (member started but not ended).
1434  End member is only allowed inside member.
1435  End of file is only allowed outside member.
1436  Blank line is allowed anywhere after magic.
1437 \end_layout
1439 \begin_layout Subsubsection
1440 Start member
1441 \end_layout
1443 \begin_layout Standard
1444 Start member line is given as 
1445 \begin_inset Quotes eld
1446 \end_inset
1448 !BEGIN
1449 \begin_inset Quotes erd
1450 \end_inset
1452  <SPACE>+ <membername> <LINEFEED>.
1453  <SPACE>+ any number of SPACE characters at least one and <LINEFEED> is
1454  LINEFEED chacter.
1455  The member name is UTF-8 encoded and maximum allowed line length is 2048
1456  bytes (including LINEFEED, which means name is limited to 509-2040 codepoints
1457  depending on characters used).
1458  Starting member inside another implicitly ends the previous member.
1459 \end_layout
1461 \begin_layout Subsubsection
1462 Member line:
1463 \end_layout
1465 \begin_layout Standard
1466 Member line is given as 
1467 \begin_inset Quotes eld
1468 \end_inset
1471 \begin_inset Quotes erd
1472 \end_inset
1474 <content><LINEFEED>.
1475  It gives another line for member contents.
1476  <content> is passed raw to layers above (followed by line termination)
1477 \end_layout
1479 \begin_layout Subsubsection
1480 End member
1481 \end_layout
1483 \begin_layout Standard
1484 End member line is given as 
1485 \begin_inset Quotes eld
1486 \end_inset
1488 !END
1489 \begin_inset Quotes erd
1490 \end_inset
1492 <LINEFEED>.
1493  It ends the current member.
1494  The following line can only be start member line or file may end.
1495 \end_layout
1497 \begin_layout Subsubsection
1498 Blank line
1499 \end_layout
1501 \begin_layout Standard
1502 Blank line is given as <LINEFEED>.
1503  Lines like that are ignored.
1504 \end_layout
1506 \begin_layout Subsection
1507 Four-to-Five encoding
1508 \end_layout
1510 \begin_layout Standard
1511 Binary members are encoded into text by so-called four-to-five encoding.
1512  This encoding can encode single byte to two, two bytes to three, three
1513  bytes to four and four bytes to five.
1514  Four-to-five encoding has five kinds of blocks.
1515  All SPACE and LINEFEED characters are completely ignored, even in middle
1516  of blocks.
1517 \end_layout
1519 \begin_layout Subsubsection
1520 End stream block
1521 \end_layout
1523 \begin_layout Standard
1524 End stream block is encoded as '!'.
1525  It ends the stream instantly.
1526  There is also implicit end of stream at end of input to decoding.
1527 \end_layout
1529 \begin_layout Subsubsection
1530 Other four block types
1531 \end_layout
1533 \begin_layout Standard
1534 Other four block types take the value to be encoded, read it as big-endian
1535  value.
1536  Then they write it as base-93 big-endian value.
1537  Then length specific constants are added to digits of that number to yield
1538  ASCII values for characters (those are stored in order):
1539 \end_layout
1541 \begin_layout Standard
1542 \begin_inset Tabular
1543 <lyxtabular version="3" rows="5" columns="6">
1544 <features>
1545 <column alignment="center" valignment="top" width="0">
1546 <column alignment="center" valignment="top" width="0">
1547 <column alignment="center" valignment="top" width="0">
1548 <column alignment="center" valignment="top" width="0">
1549 <column alignment="center" valignment="top" width="0">
1550 <column alignment="center" valignment="top" width="0">
1551 <row>
1552 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1553 \begin_inset Text
1555 \begin_layout Plain Layout
1556 To encode
1557 \end_layout
1559 \end_inset
1560 </cell>
1561 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1562 \begin_inset Text
1564 \begin_layout Plain Layout
1565 1st char.
1566 \end_layout
1568 \end_inset
1569 </cell>
1570 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1571 \begin_inset Text
1573 \begin_layout Plain Layout
1574 2nd char.
1575 \end_layout
1577 \end_inset
1578 </cell>
1579 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1580 \begin_inset Text
1582 \begin_layout Plain Layout
1583 3rd char.
1584 \end_layout
1586 \end_inset
1587 </cell>
1588 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1589 \begin_inset Text
1591 \begin_layout Plain Layout
1592 4th char.
1593 \end_layout
1595 \end_inset
1596 </cell>
1597 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
1598 \begin_inset Text
1600 \begin_layout Plain Layout
1601 5th char.
1602 \end_layout
1604 \end_inset
1605 </cell>
1606 </row>
1607 <row>
1608 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1609 \begin_inset Text
1611 \begin_layout Plain Layout
1612 1 byte
1613 \end_layout
1615 \end_inset
1616 </cell>
1617 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1618 \begin_inset Text
1620 \begin_layout Plain Layout
1622 \end_layout
1624 \end_inset
1625 </cell>
1626 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1627 \begin_inset Text
1629 \begin_layout Plain Layout
1631 \end_layout
1633 \end_inset
1634 </cell>
1635 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1636 \begin_inset Text
1638 \begin_layout Plain Layout
1640 \end_layout
1642 \end_inset
1643 </cell>
1644 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1645 \begin_inset Text
1647 \begin_layout Plain Layout
1649 \end_layout
1651 \end_inset
1652 </cell>
1653 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1654 \begin_inset Text
1656 \begin_layout Plain Layout
1658 \end_layout
1660 \end_inset
1661 </cell>
1662 </row>
1663 <row>
1664 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1665 \begin_inset Text
1667 \begin_layout Plain Layout
1668 2 bytes
1669 \end_layout
1671 \end_inset
1672 </cell>
1673 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1674 \begin_inset Text
1676 \begin_layout Plain Layout
1678 \end_layout
1680 \end_inset
1681 </cell>
1682 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1683 \begin_inset Text
1685 \begin_layout Plain Layout
1687 \end_layout
1689 \end_inset
1690 </cell>
1691 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1692 \begin_inset Text
1694 \begin_layout Plain Layout
1696 \end_layout
1698 \end_inset
1699 </cell>
1700 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1701 \begin_inset Text
1703 \begin_layout Plain Layout
1705 \end_layout
1707 \end_inset
1708 </cell>
1709 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1710 \begin_inset Text
1712 \begin_layout Plain Layout
1714 \end_layout
1716 \end_inset
1717 </cell>
1718 </row>
1719 <row>
1720 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1721 \begin_inset Text
1723 \begin_layout Plain Layout
1724 3 bytes
1725 \end_layout
1727 \end_inset
1728 </cell>
1729 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1730 \begin_inset Text
1732 \begin_layout Plain Layout
1734 \end_layout
1736 \end_inset
1737 </cell>
1738 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1739 \begin_inset Text
1741 \begin_layout Plain Layout
1743 \end_layout
1745 \end_inset
1746 </cell>
1747 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1748 \begin_inset Text
1750 \begin_layout Plain Layout
1752 \end_layout
1754 \end_inset
1755 </cell>
1756 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1757 \begin_inset Text
1759 \begin_layout Plain Layout
1761 \end_layout
1763 \end_inset
1764 </cell>
1765 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1766 \begin_inset Text
1768 \begin_layout Plain Layout
1770 \end_layout
1772 \end_inset
1773 </cell>
1774 </row>
1775 <row>
1776 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1777 \begin_inset Text
1779 \begin_layout Plain Layout
1780 4 bytes
1781 \end_layout
1783 \end_inset
1784 </cell>
1785 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1786 \begin_inset Text
1788 \begin_layout Plain Layout
1790 \end_layout
1792 \end_inset
1793 </cell>
1794 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1795 \begin_inset Text
1797 \begin_layout Plain Layout
1799 \end_layout
1801 \end_inset
1802 </cell>
1803 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1804 \begin_inset Text
1806 \begin_layout Plain Layout
1808 \end_layout
1810 \end_inset
1811 </cell>
1812 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1813 \begin_inset Text
1815 \begin_layout Plain Layout
1817 \end_layout
1819 \end_inset
1820 </cell>
1821 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
1822 \begin_inset Text
1824 \begin_layout Plain Layout
1826 \end_layout
1828 \end_inset
1829 </cell>
1830 </row>
1831 </lyxtabular>
1833 \end_inset
1836 \end_layout
1838 \begin_layout Standard
1839 Blocks which encode values greater than what is possible for value of that
1840  length are fatal errors.
1842 \end_layout
1844 \begin_layout Subsection
1845 Line component encoing
1846 \end_layout
1848 \begin_layout Standard
1849 Line component encoding sits on top of UTF-8 encoding.
1850  Line component encoding encodes non-empty 1-D array of non-empty strings
1851  into line, and thus array of those into member.
1852  Empty lines or lines that don't contain any components are ignored.
1853  Line starts with depth value of 0 and must end with depth value of zero.
1854 \end_layout
1856 \begin_layout Standard
1857 Components are seperated by component separators.
1858  Empty components are ignored.
1859  Following codepoints are separators on depth 0 if not escaped:
1860 \end_layout
1862 \begin_layout Itemize
1863 Codepoint of '('.
1864  The depth is read pre-increment.
1865 \end_layout
1867 \begin_layout Itemize
1868 Codepoint of ')'.
1869  The depth is read post-decrement.
1870 \end_layout
1872 \begin_layout Itemize
1873 Any SPACE character
1874 \end_layout
1876 \begin_layout Standard
1877 The following characters are special:
1878 \end_layout
1880 \begin_layout Itemize
1881 '('.
1882  Increments depth by 1 if not escaped (and appears in component).
1883 \end_layout
1885 \begin_layout Itemize
1886 ')'.
1887  Decrements depth by 1 if not escaped (and appears in component).
1888  Depth going negative is an error.
1889 \end_layout
1891 \begin_layout Itemize
1893 \backslash
1895  Next character is interpretted as literal.
1896  Error if at end of line.
1897 \end_layout
1899 \begin_layout Standard
1900 Otherwise, characters are interpretted as literals and appear in components.
1901  Depth must be zero at end of line.
1902 \end_layout
1904 \begin_layout Subsection
1905 Header section:
1906 \end_layout
1908 \begin_layout Standard
1909 Header section is in archive member "header".
1910  It uses line component encoding.
1911  The first component of each line is name of header, and subsequent ones
1912  are arguments.
1913  How many parameters are expected is dependent on what header it is:
1914 \end_layout
1916 \begin_layout Subsubsection
1917 PROJECTID header:
1918 \end_layout
1920 \begin_layout Itemize
1921 Header name: "PROJECTID"
1922 \end_layout
1924 \begin_layout Itemize
1925 Components: 2
1926 \end_layout
1928 \begin_layout Itemize
1929 Argument #1: <project-id-string>
1930 \end_layout
1932 \begin_layout Itemize
1933 Mandatory: Yes
1934 \end_layout
1936 \begin_layout Standard
1937 Gives project ID.
1938  Project ID is generated when PC is assembled and is then preserved in save
1939  states.
1940  It is used for computing rerecord counts.
1941  Emulator treats it as opaque string, the IDs it generates are formed by
1942  48 random hexadecimal digits.
1943 \end_layout
1945 \begin_layout Subsubsection
1946 SAVESTATEID header:
1947 \end_layout
1949 \begin_layout Itemize
1950 Header name: "SAVESTATEID"
1951 \end_layout
1953 \begin_layout Itemize
1954 Components: 2
1955 \end_layout
1957 \begin_layout Itemize
1958 Argument #1: <savestate-id-string>
1959 \end_layout
1961 \begin_layout Itemize
1962 Mandatory: No
1963 \end_layout
1965 \begin_layout Standard
1966 Gives save state ID.
1967  Each save state has its own save state ID.
1968  Treated as opaque string, but generated as 48 random hexadecimal digits.
1969  The presence of this header signals whether there is save state to be loaded.
1970  If this header is present, save state load will be attempted.
1971  If absent, save state is not to be loaded even if present (and correct
1972  savestate load would be technically impossible anyway).
1973 \end_layout
1975 \begin_layout Standard
1976 The value is used to prevent loading incompatible save states in preserve
1977  event stream mode and also to find the point in event stream where one
1978  left off.
1979 \end_layout
1981 \begin_layout Subsubsection
1982 RERECORDS header:
1983 \end_layout
1985 \begin_layout Itemize
1986 Header name: "RERECORDS"
1987 \end_layout
1989 \begin_layout Itemize
1990 Components: 2
1991 \end_layout
1993 \begin_layout Itemize
1994 Argument #1: <rerecords>
1995 \end_layout
1997 \begin_layout Itemize
1998 Mandatory: Yes
1999 \end_layout
2001 \begin_layout Standard
2002 Gives rerecord count.
2003  PC assembly (except when loading save state) initializes current rerecord
2004  count to zero.
2005  Must be non-negative and decimal number using ASCII digit characters.
2006 \end_layout
2008 \begin_layout LyX-Code
2009 On loading save state:
2010 \end_layout
2012 \begin_layout LyX-Code
2013 1) If project ID matches with previous:
2014 \end_layout
2016 \begin_layout LyX-Code
2017 1a) If loaded rerecord count is larger or equal to current rerecord count:
2018 \end_layout
2020 \begin_layout LyX-Code
2021 1a-a) Current rerecord count is loaded rerecord count + 1.
2022 \end_layout
2024 \begin_layout LyX-Code
2025 1b) Otherwise
2026 \end_layout
2028 \begin_layout LyX-Code
2029 1b-a) Current rerecord count increments by 1.
2030 \end_layout
2032 \begin_layout LyX-Code
2033 2) Otherwise
2034 \end_layout
2036 \begin_layout LyX-Code
2037 2a) Current rerecord count is loaded rerecord count + 1.
2038 \end_layout
2040 \begin_layout Standard
2041 The current rerecord count at time of save is saved to save state.
2042 \end_layout
2044 \begin_layout Subsubsection
2045 AUTHORS header:
2046 \end_layout
2048 \begin_layout Itemize
2049 Header name: "AUTHORS"
2050 \end_layout
2052 \begin_layout Itemize
2053 Components: 2 or more
2054 \end_layout
2056 \begin_layout Itemize
2057 Arguments: free form
2058 \end_layout
2060 \begin_layout Itemize
2061 Mandatory: No
2062 \end_layout
2064 \begin_layout Standard
2065 Gives authors of run.
2066  Each argument gives one author.
2067  May be present multiple times.
2068 \end_layout
2070 \begin_layout Subsubsection
2071 COMMENT header:
2072 \end_layout
2074 \begin_layout Itemize
2075 Header name: "COMMENT"
2076 \end_layout
2078 \begin_layout Itemize
2079 Components: 2 or more
2080 \end_layout
2082 \begin_layout Itemize
2083 Arguments: free form
2084 \end_layout
2086 \begin_layout Itemize
2087 Mandatory: No
2088 \end_layout
2090 \begin_layout Standard
2091 Various kinds of free form data.
2092  Not parsed further by emulator.
2093 \end_layout
2095 \begin_layout Subsection
2096 Initialization segment:
2097 \end_layout
2099 \begin_layout Standard
2100 If SAVESTATEID header isn't present (not a save state), member "initialization"
2101  gives PC initialization parameters for assembling the PC.
2102  It is present anyway even if SAVESTATEID is present (savestate).
2103 \end_layout
2105 \begin_layout Standard
2106 Following parameters are used (space separates components):
2107 \end_layout
2109 \begin_layout LyX-Code
2110 "BIOS" <id>
2111 \end_layout
2113 \begin_layout Standard
2114 Gives Image ID of main system BIOS (mandatory)
2115 \end_layout
2117 \begin_layout LyX-Code
2118 "VGABIOS" <id>
2119 \end_layout
2121 \begin_layout Standard
2122 Gives Image ID of VGA BIOS (mandatory).
2123 \end_layout
2125 \begin_layout LyX-Code
2126 "HDA" <id>
2127 \end_layout
2129 \begin_layout Standard
2130 Gives Image ID of hda.
2131  Present only if system has hard disk hda.
2132 \end_layout
2134 \begin_layout LyX-Code
2135 "HDB" <id>
2136 \end_layout
2138 \begin_layout Standard
2139 Gives Image ID of hdb.
2140  Present only if system has hard disk hdb.
2141 \end_layout
2143 \begin_layout LyX-Code
2144 "HDC" <id>
2145 \end_layout
2147 \begin_layout Standard
2148 Gives Image ID of hdc.
2149  Present only if system has hard disk hdc.
2150 \end_layout
2152 \begin_layout LyX-Code
2153 "HDD" <id>
2154 \end_layout
2156 \begin_layout Standard
2157 Gives Image ID of hdd.
2158  Present only if system has hard disk hdd.
2159 \end_layout
2161 \begin_layout LyX-Code
2162 "DISK" <num> <id>
2163 \end_layout
2165 \begin_layout Standard
2166 Gives Image ID of disk in slot <num>.
2167  Slot number must be non-negative.
2168 \end_layout
2170 \begin_layout LyX-Code
2171 \begin_inset Quotes eld
2172 \end_inset
2174 DISKNAME
2175 \begin_inset Quotes erd
2176 \end_inset
2178  <num> <name>
2179 \end_layout
2181 \begin_layout Standard
2182 kGives image name of disk in slot <num>.
2183  Slot number must be non-negative.
2184  The slot must be previously declared using 
2185 \begin_inset Quotes eld
2186 \end_inset
2188 DISK
2189 \begin_inset Quotes erd
2190 \end_inset
2193 \end_layout
2195 \begin_layout LyX-Code
2196 "FDA" <num>
2197 \end_layout
2199 \begin_layout Standard
2200 Gives Image slot to initially put into floppy drive fda.
2201  Disk must be of floppy type.
2202  If none present, no disk is initially put there.
2203 \end_layout
2205 \begin_layout LyX-Code
2206 "FDB" <num>
2207 \end_layout
2209 \begin_layout Standard
2210 Gives Image slot to initially put into floppy drive fdb.
2211  Disk must be of floppy type.
2212  If none present, no disk is initially put there.
2213 \end_layout
2215 \begin_layout LyX-Code
2216 "CDROM" <num>
2217 \end_layout
2219 \begin_layout Standard
2220 Gives Image slot to initially put into CD-ROM drive hdc.
2221  Not allowed if hard disk hdc is present.
2222  Disk must be of CD-ROM type.
2223  If none present no disk is initially put there.
2224 \end_layout
2226 \begin_layout LyX-Code
2227 "INITIALTIME" <time>
2228 \end_layout
2230 \begin_layout Standard
2231 Number of milliseconds since Unix epoch to system start up time.
2232  Allowed range:
2233 \end_layout
2235 \begin_layout Standard
2236 0-4102444799999.
2237  Mandatory.
2238 \end_layout
2240 \begin_layout LyX-Code
2241 "CPUDIVIDER" <divider>
2242 \end_layout
2244 \begin_layout Standard
2245 Set CPU frequency divider (dividing the 1GHz master clock).
2246  Allowed range is 1-256.
2247  Mandatory.
2248 \end_layout
2250 \begin_layout LyX-Code
2251 "MEMORYSIZE" <pages>
2252 \end_layout
2254 \begin_layout Standard
2255 Number of 4KiB pages of RAM memory.
2256  Allowed range 256-262144.
2257  Mandatory.
2258 \end_layout
2260 \begin_layout LyX-Code
2261 "BOOT" <device>
2262 \end_layout
2264 \begin_layout Standard
2265 Set boot device.
2266  Valid devices are "FLOPPY" (boot from fda), "HDD" (boot from hda) and "CDROM"
2267  (boot from CD).
2268 \end_layout
2270 \begin_layout LyX-Code
2271 "LOADMODULEA" <module> <parameters>
2272 \end_layout
2274 \begin_layout Standard
2275 Load module <module> with parameters <parameters>.
2276 \end_layout
2278 \begin_layout LyX-Code
2279 "LOADMODULE" <module>
2280 \end_layout
2282 \begin_layout Standard
2283 Load module <module> with no parameters
2284 \end_layout
2286 \begin_layout LyX-Code
2287 \begin_inset Quotes eld
2288 \end_inset
2291 \begin_inset Quotes erd
2292 \end_inset
2294  <fpu>
2295 \end_layout
2297 \begin_layout Standard
2298 Use class <fpu> as FPU emulator.
2299 \end_layout
2301 \begin_layout Subsection
2302 Event record format:
2303 \end_layout
2305 \begin_layout Standard
2306 Event record is in archive member "events".
2307  It uses line component encoding.
2308  Each line gives an event.
2309  First component of each line gives time stamp.
2310  These timestamps MUST be in increasing order and all MUST be non-negative.
2311  Time stamp time unit is exactly 1 nanosecond of emulated time.
2312 \end_layout
2314 \begin_layout Standard
2315 The second component of each line is name of class to dispatch to.
2316  Further components are passed as-is to event handlers.
2318 \end_layout
2320 \begin_layout Subsubsection
2321 Savestate event
2322 \end_layout
2324 \begin_layout Itemize
2325 Dispatch to: SAVESTATE
2326 \end_layout
2328 \begin_layout Itemize
2329 Argument #1: Savestate id
2330 \end_layout
2332 \begin_layout Itemize
2333 Argument #2 (optional): Rerecord count at time of saving savestate
2334 \end_layout
2336 \begin_layout Standard
2337 Signals that savestate has occured here.
2338  The save state IDs MUST be unique in entire event stream.
2339  The second argument to savestate (if present) is rerecord count at time
2340  of saving that savestate (useful for calulating rerecord count of movie
2341  starting from savestate).
2342  No time restrictions
2343 \end_layout
2345 \begin_layout Subsubsection
2346 Option event
2347 \end_layout
2349 \begin_layout Itemize
2350 Dispatch to: OPTION
2351 \end_layout
2353 \begin_layout Itemize
2354 Argument #1: 
2355 \begin_inset Quotes eld
2356 \end_inset
2358 ABSOLUTE
2359 \begin_inset Quotes erd
2360 \end_inset
2362  or 
2363 \begin_inset Quotes eld
2364 \end_inset
2366 RELATIVE
2367 \begin_inset Quotes erd
2368 \end_inset
2371 \end_layout
2373 \begin_layout Standard
2374 Controls various options.
2376 \begin_inset Quotes eld
2377 \end_inset
2379 ABSOLUTE
2380 \begin_inset Quotes erd
2381 \end_inset
2383  turns on absolute mode (default) where event timestamps are absolute.
2385 \begin_inset Quotes eld
2386 \end_inset
2388 RELATIVE
2389 \begin_inset Quotes erd
2390 \end_inset
2392  turns on relative mode where event timestamps are relative to last event
2393  in stream.
2394  The OPTION event itself is not affected by timing change.
2395  No time restrictions
2396 \end_layout
2398 \begin_layout Subsubsection
2399 Keyboard keypress/keyrelease event:
2400 \end_layout
2402 \begin_layout Itemize
2403 Dispatch to: org.jpc.emulator.peripheral.Keyboard
2404 \end_layout
2406 \begin_layout Itemize
2407 Argument #1: Fixed: "KEYEDGE"
2408 \end_layout
2410 \begin_layout Itemize
2411 Argument #2: Key number.
2412  Valid values are 1-83, 85-95, 129-197 and 199-223
2413 \end_layout
2415 \begin_layout Standard
2416 Send key press or key release.
2417  Keys work in toggle button manner.
2418  The event time must be multiple of 66 666, and must not be less than 60
2419  * 66 666 TUs after last PAUSE event, 20 * 66 666 TUs after last KEYEDGE
2420  on key >128 and 10 * 66 666 TUs after last KEYEDGE on key <128.
2421 \end_layout
2423 \begin_layout Subsubsection
2424 Pause event:
2425 \end_layout
2427 \begin_layout Itemize
2428 Dispatch to: org.jpc.emulator.peripheral.Keyboard
2429 \end_layout
2431 \begin_layout Itemize
2432 Argument #1: Fixed: "PAUSE"
2433 \end_layout
2435 \begin_layout Standard
2436 Send pause key event.
2437  The time restrictions are identical to KEYEDGE event.
2438 \end_layout
2440 \begin_layout Subsubsection
2441 Joystick button event:
2442 \end_layout
2444 \begin_layout Itemize
2445 Dispatch to: org.jpc.modules.Joystick
2446 \end_layout
2448 \begin_layout Itemize
2449 Argument #1: 
2450 \begin_inset Quotes eld
2451 \end_inset
2453 BUTTONA
2454 \begin_inset Quotes erd
2455 \end_inset
2458 \begin_inset Quotes eld
2459 \end_inset
2461 BUTTONB
2462 \begin_inset Quotes erd
2463 \end_inset
2466 \begin_inset Quotes eld
2467 \end_inset
2469 BUTTONC
2470 \begin_inset Quotes erd
2471 \end_inset
2473  or 
2474 \begin_inset Quotes eld
2475 \end_inset
2477 BUTTOND
2478 \begin_inset Quotes erd
2479 \end_inset
2482 \end_layout
2484 \begin_layout Itemize
2485 Argument #2: 
2486 \begin_inset Quotes eld
2487 \end_inset
2490 \begin_inset Quotes erd
2491 \end_inset
2493  if released, 
2494 \begin_inset Quotes eld
2495 \end_inset
2498 \begin_inset Quotes erd
2499 \end_inset
2501  if pressed
2502 \end_layout
2504 \begin_layout Standard
2505 Send button down/up event.
2506  No time restrictions.
2507 \end_layout
2509 \begin_layout Subsubsection
2510 Joystick axis event:
2511 \end_layout
2513 \begin_layout Itemize
2514 Dispatch to: org.jpc.modules.Joystick
2515 \end_layout
2517 \begin_layout Itemize
2518 Argument #1: 
2519 \begin_inset Quotes eld
2520 \end_inset
2522 AXISA
2523 \begin_inset Quotes erd
2524 \end_inset
2527 \begin_inset Quotes eld
2528 \end_inset
2530 AXISB
2531 \begin_inset Quotes erd
2532 \end_inset
2535 \begin_inset Quotes eld
2536 \end_inset
2538 AXISC
2539 \begin_inset Quotes erd
2540 \end_inset
2542  or 
2543 \begin_inset Quotes eld
2544 \end_inset
2546 AXISD
2547 \begin_inset Quotes erd
2548 \end_inset
2551 \end_layout
2553 \begin_layout Itemize
2554 Argument #2: Multivibrator unstable state length in ns.
2555 \end_layout
2557 \begin_layout Standard
2558 Set amount of time multivibrator remains in unstable state.
2559  No time restrictions.
2560 \end_layout
2562 \begin_layout Subsubsection
2563 Reboot:
2564 \end_layout
2566 \begin_layout Itemize
2567 Dispatch to: org.jpc.emulator.PC$ResetButton
2568 \end_layout
2570 \begin_layout Itemize
2571 No arguments
2572 \end_layout
2574 \begin_layout Standard
2575 Reboots the PC.
2576 \end_layout
2578 \begin_layout Subsubsection
2579 Fda disk change:
2580 \end_layout
2582 \begin_layout Itemize
2583 Dispatch to: org.jpc.emulator.PC$DiskChanger
2584 \end_layout
2586 \begin_layout Itemize
2587 Argument #1: Fixed: "FDA"
2588 \end_layout
2590 \begin_layout Itemize
2591 Argument #2: Number of image slot to put there.
2593 \end_layout
2595 \begin_layout Standard
2596 The disk number MUST be -1 or valid disk number.
2597  -1 MUST NOT be used if there is no disk in floppy drive A.
2598  This event causes specified disk to be placed to FDA or FDA disk to be
2599  ejected with no replacement if disk number is -1.
2600  The specified disk if not -1 must be of floppy type.
2601  The specified disk if valid must not be in any other drive.
2602 \end_layout
2604 \begin_layout Subsubsection
2605 Fdb disk change:
2606 \end_layout
2608 \begin_layout Itemize
2609 Dispatch to: org.jpc.emulator.PC$DiskChanger
2610 \end_layout
2612 \begin_layout Itemize
2613 Argument #1: Fixed: "FDB"
2614 \end_layout
2616 \begin_layout Itemize
2617 Argument #2: Number of image slot to put there.
2619 \end_layout
2621 \begin_layout Standard
2622 The disk number MUST be -1 or valid disk number.
2623  -1 MUST NOT be used if there is no disk in floppy drive B.
2624  This event causes specified disk to be placed to FDB or FDB disk to be
2625  ejected with no replacement if disk number is -1.
2626  The specified disk if not -1 must be of floppy type.
2627  The specified disk if valid must not be in any other drive.
2628 \end_layout
2630 \begin_layout Subsubsection
2631 Change CDROM:
2632 \end_layout
2634 \begin_layout Itemize
2635 Dispatch to: org.jpc.emulator.PC$DiskChanger
2636 \end_layout
2638 \begin_layout Itemize
2639 Argument #1: Fixed: "CDROM"
2640 \end_layout
2642 \begin_layout Itemize
2643 Argument #2: Number of image slot to put there.
2645 \end_layout
2647 \begin_layout Standard
2648 The disk number MUST be -1 or valid disk number.
2649  -1 MUST NOT be used if there is no disk in CD-ROM.
2650  This event causes specified disk to be placed to CD-ROM or CD-ROM disk
2651  to be ejected with no replacement if disk number is -1.
2652  The specified disk if not -1 must be of CD-ROM type.
2653 \end_layout
2655 \begin_layout Standard
2656 This event has no effect if CD-ROM is locked.
2657 \end_layout
2659 \begin_layout Subsubsection
2660 Write protect floppy:
2661 \end_layout
2663 \begin_layout Itemize
2664 Dispatch to: org.jpc.emulator.PC$DiskChanger
2665 \end_layout
2667 \begin_layout Itemize
2668 Argument #1: Fixed: "WRITEPROTECT"
2669 \end_layout
2671 \begin_layout Itemize
2672 Argument #2: Number of image slot to manipulate 
2673 \end_layout
2675 \begin_layout Standard
2676 Write protects specified disk.
2677  The disk MUST NOT be in any drive and MUST be valid floppy-type disk.
2678 \end_layout
2680 \begin_layout Subsubsection
2681 Write unprotect floppy:
2682 \end_layout
2684 \begin_layout Itemize
2685 Dispatch to: org.jpc.emulator.PC$DiskChanger
2686 \end_layout
2688 \begin_layout Itemize
2689 Argument #1: Fixed: "WRITEUNPROTECT"
2690 \end_layout
2692 \begin_layout Itemize
2693 Argument #2: Number of image slot to manipulate 
2694 \end_layout
2696 \begin_layout Standard
2697 Disables write protection specified disk.
2698  The disk MUST NOT be in any drive and MUST be valid floppy-type disk.
2699 \end_layout
2701 \begin_layout Subsection
2702 Diskinfo sections
2703 \end_layout
2705 \begin_layout Standard
2706 Diskinfo sections are named 
2707 \begin_inset Quotes eld
2708 \end_inset
2710 diskinfo-
2711 \begin_inset Quotes erd
2712 \end_inset
2714 <id of disk>.
2715  They use line component encoding, fieldtype being first component on each
2716  line (value being the second).
2717  Following fields are defined:
2718 \end_layout
2720 \begin_layout Subsubsection
2721 TYPE
2722 \end_layout
2724 \begin_layout Standard
2725 Gives type of image.
2726  Possible values are
2727 \end_layout
2729 \begin_layout Itemize
2730 \begin_inset Quotes eld
2731 \end_inset
2733 FLOPPY
2734 \begin_inset Quotes erd
2735 \end_inset
2737  (floppy disk)
2738 \end_layout
2740 \begin_layout Itemize
2741 \begin_inset Quotes eld
2742 \end_inset
2745 \begin_inset Quotes erd
2746 \end_inset
2748  (Hard disk)
2749 \end_layout
2751 \begin_layout Itemize
2752 \begin_inset Quotes eld
2753 \end_inset
2755 CDROM
2756 \begin_inset Quotes erd
2757 \end_inset
2759  (CD-ROM)
2760 \end_layout
2762 \begin_layout Itemize
2763 \begin_inset Quotes eld
2764 \end_inset
2766 BIOS
2767 \begin_inset Quotes erd
2768 \end_inset
2770  (BIOS/VGABIOS image)
2771 \end_layout
2773 \begin_layout Itemize
2774 \begin_inset Quotes eld
2775 \end_inset
2777 UNKNOWN
2778 \begin_inset Quotes erd
2779 \end_inset
2781  (what the heck is this???)
2782 \end_layout
2784 \begin_layout Subsubsection
2786 \end_layout
2788 \begin_layout Standard
2789 Gives ID of disk.
2790 \end_layout
2792 \begin_layout Subsubsection
2793 IMAGELENGTH
2794 \end_layout
2796 \begin_layout Standard
2797 (BIOS images only) Gives length of BIOS image
2798 \end_layout
2800 \begin_layout Subsubsection
2801 IMAGEMD5
2802 \end_layout
2804 \begin_layout Standard
2805 MD5 of raw disk/BIOS image without any headers or trailers.
2806 \end_layout
2808 \begin_layout Subsubsection
2809 TOTALSECTORS
2810 \end_layout
2812 \begin_layout Standard
2813 (FLOPPY/HDD/CDROM images only) Number of total sectors on disk.
2814 \end_layout
2816 \begin_layout Subsubsection
2817 TRACKS
2818 \end_layout
2820 \begin_layout Standard
2821 (FLOPPY/HDD images only) Number of tracks on disk per side (1-256 for floppy,
2822  1-1024 for HDD).
2823 \end_layout
2825 \begin_layout Subsubsection
2826 SIDES
2827 \end_layout
2829 \begin_layout Standard
2830 (FLOPPY/HDD images only) Number of sides on disk (1 or 2 for floppy, 1-16
2831  for HDD).
2832 \end_layout
2834 \begin_layout Subsubsection
2835 SECTORS
2836 \end_layout
2838 \begin_layout Standard
2839 (FLOPPY/HDD images only) Number of sectors per track (1-255 for floppy,
2840  1-63 for HDD).
2841 \end_layout
2843 \begin_layout Subsubsection
2844 COMMENT
2845 \end_layout
2847 \begin_layout Standard
2848 Line from image comment block.
2849  Usually give data about files image has.
2850  May or may not be present (multiple times)
2851 \end_layout
2853 \begin_layout Subsection
2854 Savestates
2855 \end_layout
2857 \begin_layout Standard
2858 Actual savestate format is not documented here.
2859  It is close to impossible to comprehend without access to emulator source
2860  anyway.
2861 \end_layout
2863 \begin_layout Section
2864 Advanced: Making class dumpable
2865 \end_layout
2867 \begin_layout Standard
2868 Class is made dumpable by implementing interface org.jpc.emulator.SRDumpable
2869  and implementing method dumpSRPartial(org.jpc.emulator.SRDumper) and constructor
2870  <init>(org.jpc.emulator.SRLoader).
2871  Non-static inner classes can not be dumpable (make them static using tricks
2872  similar to what javac uses).
2873 \end_layout
2875 \begin_layout Standard
2876 If dumped class has dumpable superclass, the first thing dumping function
2877  needs to do is to call dumper function of superclass and first thing loading
2878  constructor needs to do is to call loading constructor of superclass.
2879  If class has no dumpable superclass, dumper doesn't need to do anything
2880  special, while loader needs to call objectCreated(this) on SRLoader object
2881  passed as parameter.
2883 \end_layout
2885 \begin_layout Standard
2886 Following these fixed parts, dump all members that are part of mutable state
2887  in emulator core.
2888 \end_layout
2890 \begin_layout Subsection
2891 Member dumping/loading functions
2892 \end_layout
2894 \begin_layout Standard
2895 There is dumping/loading function for following (all functions dumping/loading
2896  reference types can handle null):
2897 \end_layout
2899 \begin_layout Itemize
2900 boolean: SRDumper.dumpBoolean, SRLoader.loadBoolean
2901 \end_layout
2903 \begin_layout Itemize
2904 byte: SRDumper.dumpByte, SRLoader.loadByte
2905 \end_layout
2907 \begin_layout Itemize
2908 short: SRDumper.dumpShort, SRLoader.loadShort
2909 \end_layout
2911 \begin_layout Itemize
2912 int: SRDumper.dumpInt, SRLoader.loadInt
2913 \end_layout
2915 \begin_layout Itemize
2916 long: SRDumper.dumpLong, SRLoader.loadLong
2917 \end_layout
2919 \begin_layout Itemize
2920 String: SRDumper.dumpString, SRLoader.loadString
2921 \end_layout
2923 \begin_layout Itemize
2924 boolean[]: SRDumper.dumpArray, SRLoader.loadArrayBoolean
2925 \end_layout
2927 \begin_layout Itemize
2928 byte[]: SRDumper.dumpArray, SRLoader.loadArrayByte
2929 \end_layout
2931 \begin_layout Itemize
2932 short[]: SRDumper.dumpArray, SRLoader.loadArrayShort
2933 \end_layout
2935 \begin_layout Itemize
2936 int[]: SRDumper.dumpArray, SRLoader.loadArrayInt
2937 \end_layout
2939 \begin_layout Itemize
2940 long[]: SRDumper.dumpArray, SRLoader.loadArrayLong
2941 \end_layout
2943 \begin_layout Itemize
2944 double[]: SRDumper.dumpArray, SRLoader.loadArrayDouble
2945 \end_layout
2947 \begin_layout Itemize
2948 <dumpable type>: SRDumper.dumpObject, SRLoader.loadObject
2949 \end_layout
2951 \begin_layout Itemize
2952 special object: SRDumper.specialObject, SRLoader.specialObject
2953 \end_layout
2955 \begin_layout Subsubsection
2956 Notes:
2957 \end_layout
2959 \begin_layout Itemize
2960 Dumpable objects come out as type of org.jpc.emulator.SRDumpable.
2961 \end_layout
2963 \begin_layout Itemize
2964 Special objects are various static objects that don't need to be stored
2965  because they don't have mutable fields.
2966 \end_layout
2968 \begin_layout Itemize
2969 Don't dump fields related to event state feedback.
2970 \end_layout
2972 \begin_layout Itemize
2973 Don't dump temporary flags that are only used while PC is running.
2974  Savestate when PC is running isn't possible anyway.
2975 \end_layout
2977 \begin_layout Itemize
2978 Some connectors dump fields related to connector output, some don't.
2979 \end_layout
2981 \begin_layout Section
2982 Advanced: Making output connectors
2983 \end_layout
2985 \begin_layout Standard
2986 Implementing interface org.jpc.emulator.DisplayController signals that this
2987  is display controller, inhibiting loading of the standard VGA display controlle
2988 r if loaded as module.
2990 \end_layout
2992 \begin_layout Subsection
2993 Interface org.jpc.emulator.OutputConnector
2994 \end_layout
2996 \begin_layout Standard
2997 Class is made to be output connector by implementing this interface.
2998  This interface specifies the methods used for output hold locking.
2999  Class org.jpc.emulator.OutputConnectorLocking has implementations of these
3000  that are suitable for calling.
3002 \end_layout
3004 \begin_layout Subsubsection
3005 Method subscribeOutput(Object)
3006 \end_layout
3008 \begin_layout Standard
3009 Subscribes the output, with specified object as handle.
3010 \end_layout
3012 \begin_layout Subsubsection
3013 Method unsubscribeOutput(Object)
3014 \end_layout
3016 \begin_layout Standard
3017 Unsubscribe the specified handle object from output.
3018 \end_layout
3020 \begin_layout Subsubsection
3021 Method waitOutput(Object)
3022 \end_layout
3024 \begin_layout Standard
3025 Wait for output on specified connector using specified handle object.
3026  Returns true on success, false if wait was interrupted by thread interrupt.
3027  Blocking.
3028 \end_layout
3030 \begin_layout Subsubsection
3031 Method releaseOutput(Object)
3032 \end_layout
3034 \begin_layout Standard
3035 Release connector from p.o.v.
3036  of given handle.
3037  Does not block.
3038 \end_layout
3040 \begin_layout Subsubsection
3041 Method holdOutput()
3042 \end_layout
3044 \begin_layout Standard
3045 Release threads waiting on waitOutput() and block until all subscribers
3046  have returned from waitOutput() and enteired releaseOutput().
3047 \end_layout
3049 \begin_layout Subsubsection
3050 Method releaseOutputWaitAll(object)
3051 \end_layout
3053 \begin_layout Standard
3054 Like releaseOutput(), but waits until all handles have released their output.
3055 \end_layout
3057 \begin_layout Subsection
3058 Class org.jpc.emulator.VGADigtalOut
3059 \end_layout
3061 \begin_layout Standard
3062 Class org.jpc.emulator.VGADigtalOut (already implements OutputConnector) implements
3063  VGA output connector.
3064  If module provodes output connector, it needs to implement org.jpc.emulator.Displa
3065 yController.
3066 \end_layout
3068 \begin_layout Subsubsection
3069 Method getWidth()
3070 \end_layout
3072 \begin_layout Standard
3073 Get width of display (watch out, can return 0).
3074 \end_layout
3076 \begin_layout Subsubsection
3077 Method getHeight()
3078 \end_layout
3080 \begin_layout Standard
3081 Get height of display (watch out, can return 0).
3082 \end_layout
3084 \begin_layout Subsubsection
3085 Methods getDirtyXMin(), getDirtyXMax(), getDirtyYMin(), getDirtyYMax()
3086 \end_layout
3088 \begin_layout Standard
3089 Returns the dirty region (region modified since last output).
3090 \end_layout
3092 \begin_layout Subsubsection
3093 Method getBuffer()
3094 \end_layout
3096 \begin_layout Standard
3097 Get buffer of ints, at least width * height elements (left-to-right, top-down,
3098  one value per pixel) giving pixel data.
3099  Value for each pixel is 65536 * <red-component> + 256 * <green-component>
3100  + <blue-component>.
3101 \end_layout
3103 \begin_layout Subsubsection
3104 Method resizeDisplay(int _width, int _height)
3105 \end_layout
3107 \begin_layout Standard
3108 Resize the display to be of specified size.
3109 \end_layout
3111 \begin_layout Subsubsection
3112 Method dirtyDisplayRegion(int x, int y, int w, int h)
3113 \end_layout
3115 \begin_layout Standard
3116 Mark the specified region as dirty.
3117 \end_layout
3119 \begin_layout Subsubsection
3120 Method resetDirtyRegion()
3121 \end_layout
3123 \begin_layout Standard
3124 Resets the dirty region to be empty.
3125 \end_layout
3127 \begin_layout Subsection
3128 Class org.jpc.emulator.PC method getVideoOutput()
3129 \end_layout
3131 \begin_layout Standard
3132 Get VGA output connector for PC.
3133 \end_layout
3135 \begin_layout Subsection
3136 Interface org.jpc.emulator.DisplayController.
3137 \end_layout
3139 \begin_layout Standard
3140 Implementing this class signals that module is VGA controller.
3141  There can be only one such module active at time and presence of such module
3142  prevents loading builtin VGA controller emulation code.
3143 \end_layout
3145 \begin_layout Subsubsection
3146 Method getOutputDevice()
3147 \end_layout
3149 \begin_layout Standard
3150 Get VGA output connector for this VGA device.
3151 \end_layout
3153 \begin_layout Subsection
3154 Class org.jpc.emulator.SoundDigitalOut
3155 \end_layout
3157 \begin_layout Standard
3158 Class org.jpc.emulator.SoundDigitalOut provodes output connector for sound.
3159  Each connector can transfer stereo signal at arbitiary sampling rate.
3160  Modules that have audio connectors need to implement interface org.jpc.emulator.So
3161 undOutputDevice, as this signals that output connectors should be created.
3162 \end_layout
3164 \begin_layout Subsubsection
3165 Method addSample(long, short, short)
3166 \end_layout
3168 \begin_layout Standard
3169 Add stereo sample at time given by first argument.
3170  The second and third arguments give volume on left and right channels.
3171 \end_layout
3173 \begin_layout Subsubsection
3174 Method addSample(long, short)
3175 \end_layout
3177 \begin_layout Standard
3178 Add mono sample at time given by first argument.
3179  The second argument give volume on both channels.
3180 \end_layout
3182 \begin_layout Subsubsection
3183 Method readBlock(Block)
3184 \end_layout
3186 \begin_layout Standard
3187 Reads block of output (atomic versus addSample).
3188  Block structure has following fields which are filled:
3189 \end_layout
3191 \begin_layout Itemize
3192 timeBase: Time base for block.
3193 \end_layout
3195 \begin_layout Itemize
3196 baseLeft: Left volume at time base.
3197 \end_layout
3199 \begin_layout Itemize
3200 baseRight: Right volume at time base
3201 \end_layout
3203 \begin_layout Itemize
3204 blockNo: Sequence number of block filled.
3205 \end_layout
3207 \begin_layout Itemize
3208 samples: Number of samples in block
3209 \end_layout
3211 \begin_layout Itemize
3212 sampleTiming: Number of nanoseconds since last sample
3213 \end_layout
3215 \begin_layout Itemize
3216 sampleLeft: Left channel samples
3217 \end_layout
3219 \begin_layout Itemize
3220 sampleRight: Right channel samples
3221 \end_layout
3223 \begin_layout Subsection
3224 Interface org.jpc.emulator.SoundOutputDevice
3225 \end_layout
3227 \begin_layout Standard
3228 Implementing this interface signals that module has audio output channels.
3229 \end_layout
3231 \begin_layout Subsubsection
3232 Method org.jpc.emulator.SoundOutputDevice.requestedSoundChannels()
3233 \end_layout
3235 \begin_layout Standard
3236 Return the number of sound channels module has.
3237 \end_layout
3239 \begin_layout Subsubsection
3240 Method org.jpc.emulator.SoundOutputDevice.soundChannelCallback(SoundDigitalOut)
3241 \end_layout
3243 \begin_layout Standard
3244 This is called once per sound channel requested giving precreated sound
3245  channel.
3246 \end_layout
3248 \begin_layout Subsection
3249 Class org.jpc.emulator.PC method getSoundOut(String)
3250 \end_layout
3252 \begin_layout Standard
3253 Get sound output with specified name.
3254 \end_layout
3256 \begin_layout Section
3257 Advanced: Writing event targets
3258 \end_layout
3260 \begin_layout Standard
3261 Whereas output connectors are the way output is dispatched, input is dispatched
3262  via event targets.
3263  Event targets need to implement interface org.jpc.emulator.EventDispatchTarget.
3264 \end_layout
3266 \begin_layout Standard
3267 Event targets also provode methods which then encode events and dispatch
3268  them forward (without doing anything else) to event recorder.
3269  Also, event targets may have methods for obtaining state.
3270 \end_layout
3272 \begin_layout Subsection
3273 Interface org.jpc.emulator.EventDispatchTarget
3274 \end_layout
3276 \begin_layout Standard
3277 Interface that marks class capable of receiving events.
3278 \end_layout
3280 \begin_layout Subsubsection
3281 Method setEventRecorder(EventRecorder)
3282 \end_layout
3284 \begin_layout Standard
3285 Set the event recorder input events are sent to.
3286 \end_layout
3288 \begin_layout Subsubsection
3289 Method startEventCheck()
3290 \end_layout
3292 \begin_layout Standard
3293 Signals target to reset all state related to event checking and state feedback.
3294  This may be called at any time in order to reinitialialize event checking/feedb
3295 ack state.
3296 \end_layout
3298 \begin_layout Subsubsection
3299 Method doEvent(long, String[], int) throws IOException
3300 \end_layout
3302 \begin_layout Standard
3303 Event dispatch handler.
3304  The first argument is event time, second is parameters and third is what
3305  to do with it.
3306  If target doesn't like the event, throw IOException.
3307  Following types (the integer parameter) are used:
3308 \end_layout
3310 \begin_layout LyX-Code
3311 0 (EventRecorder.EVENT_TIMED): Time has been assigned for event.
3312 \end_layout
3314 \begin_layout LyX-Code
3315 1 (EventRecorder.EVENT_STATE_EFFECT_FUTURE): Future event in event replay
3316  for reinitialization
3317 \end_layout
3319 \begin_layout LyX-Code
3320 2 (EventRecorder.EVENT_STATE_EFFECT): Past event in event replay reinitialization
3321 \end_layout
3323 \begin_layout LyX-Code
3324 3 (EventRecorder.EVENT_EXECUTE): This event occurs now.
3325  Execute the effect.
3326 \end_layout
3328 \begin_layout Subsubsection
3329 Method endEventCheock()
3330 \end_layout
3332 \begin_layout Standard
3333 End event reinitialization.
3334  Usually unused.
3335 \end_layout
3337 \begin_layout Subsubsection
3338 Method getEventTimeLowBound(long, String[]) throws IOException
3339 \end_layout
3341 \begin_layout Standard
3342 Return the time value that's the earliest possiblity for this event to occur.
3343  Returning any time in past (including -1) causes event to fire as soon
3344  as possible.
3345  The long parameter gives the current scheduled time for event.
3346 \end_layout
3348 \begin_layout Section
3349 Writing modules
3350 \end_layout
3352 \begin_layout Standard
3353 Modules are various extensions that run inside emulator core.
3354  As such, they affect sync.
3355  Modules must implement interface org.jpc.emulator.HardwareComponent (they
3356  are hardware components) and must be dumpable.
3357  Additionally, they need either constructor <init>() or <init>(String).
3358  The first is if no parameters are passed, the second is for case where
3359  parameters are passed.
3360 \end_layout
3362 \begin_layout Standard
3363 Aside of the constructors, modules need to obey the ordinary conventions
3364  for hardware components.
3365  No code outside modules needs to know that module exists.
3366 \end_layout
3368 \begin_layout Section
3369 Writing plugins
3370 \end_layout
3372 \begin_layout Standard
3373 Plugins handle various UI tasks.
3374  They need to implement interface org.jpc.Plugin.
3375 \end_layout
3377 \begin_layout Subsection
3378 Interface org.jpc.pluginsbase.Plugin
3379 \end_layout
3381 \begin_layout Subsubsection
3382 Method systemShutdown()
3383 \end_layout
3385 \begin_layout Standard
3386 Called when emulator shuts down.
3387  Either called in dedicated thread or in thread that called emulatorShutdown().
3388  These handlers should do the bare minimum to get files on disk to consistent
3389  state.
3390  After these calls from all plugins have finished, emulator exits.
3391  Do not try to manipulate UI from these methods, as doing that easily leads
3392  into deadlock.
3393 \end_layout
3395 \begin_layout Subsubsection
3396 Method reconnect(PC) 
3397 \end_layout
3399 \begin_layout Standard
3400 Gives new PC to connect to.
3401  Null is passed if plugin should disconnect.
3402 \end_layout
3404 \begin_layout Subsubsection
3405 Method main()
3406 \end_layout
3408 \begin_layout Standard
3409 Called in dedicated thread after plugin is initialized.
3410 \end_layout
3412 \begin_layout Subsubsection
3413 Method pcStopping()
3414 \end_layout
3416 \begin_layout Standard
3417 Called after PC has stopped.
3418 \end_layout
3420 \begin_layout Subsubsection
3421 Method pcStarting()
3422 \end_layout
3424 \begin_layout Standard
3425 Called before PC starts.
3426 \end_layout
3428 \begin_layout Subsubsection
3429 Method notifyArguments(String[])
3430 \end_layout
3432 \begin_layout Standard
3433 Pass arguments from command line.
3434 \end_layout
3436 \begin_layout Subsubsection
3437 Constructor <init>(Plugins)
3438 \end_layout
3440 \begin_layout Standard
3441 This constructor is used to initialize plugins that don't take parameters.
3442 \end_layout
3444 \begin_layout Subsubsection
3445 Constructor <init>(Plugins, String)
3446 \end_layout
3448 \begin_layout Standard
3449 This constructor is used to initialize plugins that take parameters.
3450 \end_layout
3452 \begin_layout Subsection
3453 Class org.jpc.pluginsbase.Plugins
3454 \end_layout
3456 \begin_layout Standard
3457 This class provodes various methods for manipulating plugins.
3458 \end_layout
3460 \begin_layout Subsubsection
3461 Method isShuttingDown()
3462 \end_layout
3464 \begin_layout Standard
3465 Returns true if Plugins.shutdownEmulator() has been called somehow, either
3466  via VM exit, CTRL+C or explicitly.
3467  Useful to skip cleanups involving GUI, as these are too deadlock-prone.
3468 \end_layout
3470 \begin_layout Subsubsection
3471 Method shutdownEmulator()
3472 \end_layout
3474 \begin_layout Standard
3475 Shut down and exit the emulator.
3476  All plugin shutdown functions are called in this thread.
3477 \end_layout
3479 \begin_layout Subsubsection
3480 Method reconnectPC(PC)
3481 \end_layout
3483 \begin_layout Standard
3484 Signal reconnectPC event to all plugins.
3485 \end_layout
3487 \begin_layout Subsubsection
3488 Method pcStarted()
3489 \end_layout
3491 \begin_layout Standard
3492 Signal pcStarting() event to all plugins.
3493 \end_layout
3495 \begin_layout Subsubsection
3496 Method pcStopped()
3497 \end_layout
3499 \begin_layout Standard
3500 Signal pcStopping() event to all plugins.
3501 \end_layout
3503 \begin_layout Section
3504 Inter-plugin communication
3505 \end_layout
3507 \begin_layout Subsection
3508 Receiving communications
3509 \end_layout
3511 \begin_layout Standard
3512 To receive invocation/call by name 'foo-bar', declare public method named
3513  'eci_foo_bar'.
3514  Arguments to this method can currently be String, Integer (int) or Long
3515  (long).
3516  Last argument may be array over these types to get variable number of arguments.
3517  On call, each argument gets value from call.
3518  If last argument is array, it gets all overflowing arguments.
3519  If return type is void or method returns boolean false, call is assumed
3520  to have completed.
3521  If return value is boolean true, it is assumed that there is more processing.
3522 \end_layout
3524 \begin_layout Subsection
3525 void org.jpc.pluginsbase.Plugins.invokeExternalCommand(String cmd, Object[]
3526  args) 
3527 \end_layout
3529 \begin_layout Standard
3530 Invoke command asynchronously, broadcasting to all plugins.
3531  Does not wait for slow commands to complete.
3532  cmd is the name to send and args are the arguments to pass.
3533 \end_layout
3535 \begin_layout Subsection
3536 void org.jpc.pluginsbase.Plugins.invokeExternalCommandSynchronous(String cmd,
3537  Object[] args) 
3538 \end_layout
3540 \begin_layout Standard
3541 Same as invokeExternalCommand, but waits for slow commands to complete.
3542 \end_layout
3544 \begin_layout Subsection
3545 Object[] org.jpc.pluginsbase.Plugins.invokeExternalCommandReturn(String cmd,
3546  Object[] args) 
3547 \end_layout
3549 \begin_layout Standard
3550 Similar to invokeExternalCommandSynchornous, but:
3551 \end_layout
3553 \begin_layout Itemize
3554 Quits calling more plugins when it gets successful reply.
3555 \end_layout
3557 \begin_layout Itemize
3558 Returns said reply
3559 \end_layout
3561 \begin_layout Subsection
3562 void org.jpc.pluginsbase.Plugins.returnValue(Object...
3563  ret)
3564 \end_layout
3566 \begin_layout Standard
3567 Gives return value to return from call and signals that command has completed.
3568 \end_layout
3570 \begin_layout Subsection
3571 void org.jpc.pluginsbase.Plugins.signalCommandCompletion()
3572 \end_layout
3574 \begin_layout Standard
3575 Signals that command has completed.
3576  Only needed if there is no return value and eci_ method returned false
3577  (not done yet).
3578 \end_layout
3580 \begin_layout Section
3581 Lua kernel programminsignalCommandCompletion()g
3582 \end_layout
3584 \begin_layout Standard
3585 At startup, kernel gets its arguments in 'args' table and the script name
3586  to run in 'scriptname' string.
3587  It should enter the named script in protected mode.
3588 \end_layout
3590 \begin_layout Standard
3591 The Lua VM exports numerious callbacks to kernel.
3592  The kernel can then choose to omit, wrap or re-export these to Lua scripts.
3593 \end_layout
3595 \begin_layout Itemize
3596 Always grab any functions used into local variables so nobody can mess with
3597  them
3598 \end_layout
3600 \begin_layout Itemize
3601 Don't use global variables in kernel (except for those passed).
3602 \end_layout
3604 \end_body
3605 \end_document