home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Exec 3 / CD_Magazyn_EXEC_nr_3.iso / Programy / Biblioteki / ppclibemu07.lha / README < prev   
Text File  |  1999-12-12  |  16KB  |  459 lines

  1.  
  2. ---------- ppclibemu V0.7  - The ppc.library emulation for WarpOS ----------
  3.  
  4.  
  5. INTRODUCTION
  6.     The importance of WarpOS for PowerPC equipped Amigas is constantly
  7.     increasing. OS3.5 supports WarpOS and future PowerPC G3/G4 boards
  8.     might be based on this kernel too.
  9.  
  10.     Some may like it and some not. I like features in both kernels,
  11.     and in my opinion there must be a possibility to run most of the old
  12.     PowerUp software under WarpOS in future. I'm also sick of rebooting
  13.     my system, when switching the kernel. So the only solution is:
  14.     ppc.library emulation under WarpOS!
  15.  
  16.  
  17. FEATURES
  18.     Since V0.5 you can start ELF objects directly (from shell or
  19.     from Workbench). The emulation library installs a LoadSeg()-patch
  20.     which detects and starts ELF objects. But in opposition to the
  21.     original library, the patch can be removed when the library is
  22.     expunged ("avail flush"). ;)
  23.  
  24.     Of course you can also start ELF objects by using SAS/C's RunElf,
  25.     Ralph Schmidt's PPCLoad or vbcc's PPCRun.
  26.  
  27.     Since V0.6 the whole PowerUp message system is supported. It's
  28.     slower than the original, but there is still room for improvement.
  29.  
  30.     The SAS/C HunkObj format is supported since V0.6d. It uses an
  31.     illegal version of 0 in the ELF header's e_ident[EI_VERSION] field.
  32.  
  33.     New in this release (V0.7):
  34.     - Load and create new PPC tasks and threads from the PPC side:
  35.       PPCLoadObject(), PPCLoadObjectTagList(), PPCUnLoadObject() and
  36.       PPCCreateTask().
  37.     - A limited implementation of PPCprintf().
  38.     - PPCSetTaskAttrs().
  39.     - Task priorities are recognized and converted into a nice-value.
  40.     - PPCAllocMem/Vec() will return 32-byte aligned memory for
  41.       compatibility reasons (there will be no cache line problems
  42.       under WarpOS, though).
  43.     - Asynchronous PPC tasks will inherit the current directory and
  44.       PROGDIR: paths from their parent task. Before, all paths were
  45.       reset to SYS:, which was a problem for many PowerUp programs,
  46.       like MAME for example.
  47.       No, I don't think that MAME will work now, but in some ver-
  48.       sions you can already start a game (35.12 for example, which
  49.       doesn't work at all with original PowerUp on my system. The
  50.       latest 36.8 crashes a lot). MAME needs PortLists, which are
  51.       still unsupported. Wait for V0.8 and a more stable MAME. :)
  52.  
  53.     The following functions from the original ppc.library are supported:
  54.       o PPCLoadObject
  55.       o PPCUnLoadObject
  56.       o PPCRunObject
  57.       o PPCAllocMem (NOCACHESYNCM68K simulated by allocating chip RAM)
  58.       o PPCFreeMem
  59.       o PPCAllocVec (NOCACHESYNCM68K simulated by allocating chip RAM)
  60.       o PPCFreeVec
  61.       o PPCCreatePool (NOCACHESYNCM68K simulated by allocating chip RAM)
  62.       o PPCDeletePool
  63.       o PPCAllocPooled
  64.       o PPCFreePooled
  65.       o PPCAllocVecPooled
  66.       o PPCFreeVecPooled
  67.       o PPCDebugMode (private, doesn't work like the original)
  68.       o PPCCreateTask
  69.       o PPCDeleteTask
  70.       o PPCGetTaskAttrs (not all tags supported)
  71.       o PPCGetAttrs (PPCINFOTAG_EXCEPTIONHOOK not supported)
  72.       o PPCReadLong
  73.       o PPCWriteLong
  74.       o PPCGetObjectAttrs
  75.       o PPCWriteLongFlush
  76.       o PPCReadWord
  77.       o PPCWriteWord
  78.       o PPCReadByte
  79.       o PPCWriteByte
  80.       o PPCCacheClearE
  81.       o PPCCacheInvalidE
  82.       o PPCCacheTrashE
  83.       o PPCLoadObjectTagList
  84.       o PPCCreatePort
  85.       o PPCDeletePort
  86.       o PPCObtainPort
  87.       o PPCReleasePort
  88.       o PPCWaitPort
  89.       o PPCCreateMessage
  90.       o PPCDeleteMessage
  91.       o PPCGetMessage
  92.       o PPCGetMessageAttr
  93.       o PPCReplyMessage
  94.       o PPCSendMessage
  95.       o PPCSetTaskAttrs()
  96.  
  97.     The following functions of the original PowerUp kernel are supported:
  98.       o PPCAdd64
  99.       o PPCAdd64p
  100.       o PPCAddHead
  101.       o PPCAddHeadSync (implementation might be incorrect)
  102.       o PPCAddTail
  103.       o PPCAddTailSync (implementation might be incorrect)
  104.       o PPCAllocMem (NOCACHESYNCM68K simulated by allocating chip RAM)
  105.       o PPCAllocPooled (No pooled mem under WOS, same as PPCAllocMem)
  106.       o PPCAllocSignal
  107.       o PPCAllocVec (NOCACHESYNCM68K simulated by allocating chip RAM)
  108.       o PPCAllocVecPooled (No pooled mem under WOS, same as PPCAllocVec)
  109.       o PPCAnd64
  110.       o PPCAnd64p
  111.       o PPCAsl64
  112.       o PPCAsl64p
  113.       o PPCAsr64
  114.       o PPCAsr64p
  115.       o PPCAttemptSemaphore
  116.       o PPCAttemptSemaphoreByName
  117.       o PPCAttemptSemaphoreShared
  118.       o PPCCacheFlush
  119.       o PPCCacheFlushAll
  120.       o PPCCacheInvalid
  121.       o PPCCallM68k (Flags ignored. Asynchronous calls are synchronous.)
  122.       o PPCCallOS (Flags ignored. Asynchronous calls are synchronous.)
  123.       o PPCClose
  124.       o PPCCloseLibrary
  125.       o PPCCmp64
  126.       o PPCCmp64p
  127.       o PPCCreateMessage
  128.       o PPCCreatePool
  129.       o PPCCreatePort
  130.       o PPCCreateSemaphore
  131.       o PPCCreateTask
  132.       o PPCCreateTimerObject
  133.       o PPCDeleteMessage
  134.       o PPCDeletePool
  135.       o PPCDeletePort
  136.       o PPCDeleteTimerObject
  137.       o PPCDeleteSemaphore
  138.       o PPCDivRem64
  139.       o PPCDivRem64p
  140.       o PPCDivs64
  141.       o PPCDivs64p
  142.       o PPCDivu64
  143.       o PPCDivu64p
  144.       o PPCEnqueue
  145.       o PPCEnqueueSync (implementation might be incorrect)
  146.       o PPCFindName
  147.       o PPCFindNameSync (implementation might be incorrect)
  148.       o PPCFindTagItem
  149.       o PPCFindTask
  150.       o PPCFinishTask
  151.       o PPCFreeMem
  152.       o PPCFreePooled
  153.       o PPCFreeSignal
  154.       o PPCFreeVec
  155.       o PPCFreeVecPooled
  156.       o PPCGetAttr
  157.       o PPCGetLibSymbol
  158.       o PPCGetMessage
  159.       o PPCGetMessageAttr
  160.       o PPCGetTagData
  161.       o PPCGetTaskAttr (not all tags supported)
  162.       o PPCGetTimerObject
  163.       o PPCInput
  164.       o PPCInsert
  165.       o PPCInsertSync (implementation might be incorrect)
  166.       o PPCLoadObject
  167.       o PPCLoadObjectTagList
  168.       o PPCLsl64
  169.       o PPCLsl64p
  170.       o PPCLsr64
  171.       o PPCLsr64p
  172.       o PPCMods64
  173.       o PPCMods64p
  174.       o PPCModu64
  175.       o PPCModu64p
  176.       o PPCMuls64
  177.       o PPCMuls64p
  178.       o PPCMulu64
  179.       o PPCMulu64p
  180.       o PPCNeg64
  181.       o PPCNeg64p
  182.       o PPCNewList
  183.       o PPCNextTagItem
  184.       o PPCObtainPort
  185.       o PPCObtainSemaphore
  186.       o PPCObtainSemaphoreByName
  187.       o PPCObtainSemaphoreShared
  188.       o PPCOpen
  189.       o PPCOpenLibrary
  190.       o PPCOr64
  191.       o PPCOr64p
  192.       o PPCOutput
  193.       o PPCRawDoFmt
  194.       o PPCRead
  195.       o PPCReadByte
  196.       o PPCReadLong
  197.       o PPCReadWord
  198.       o PPCReleasePort
  199.       o PPCReleaseSemaphore
  200.       o PPCRemHead
  201.       o PPCRemHeadSync (implementation might be incorrect)
  202.       o PPCRemove
  203.       o PPCRemoveSync (implementation might be incorrect)
  204.       o PPCRemTail
  205.       o PPCRemTailSync (implementation might be incorrect)
  206.       o PPCReplyMessage
  207.       o PPCRevision
  208.       o PPCSeek
  209.       o PPCSendMessage
  210.       o PPCSetSignal
  211.       o PPCSetTaskAttr (not all tags supported)
  212.       o PPCSetTimerObject
  213.       o PPCSignal (might not work, because of different task definitions)
  214.       o PPCSub64
  215.       o PPCSub64p
  216.       o PPCUnLoadObject
  217.       o PPCVersion
  218.       o PPCWait
  219.       o PPCWaitPort
  220.       o PPCWrite
  221.       o PPCWriteByte
  222.       o PPCWriteLong
  223.       o PPCWriteWord
  224.       o PPCXor64
  225.       o PPCXor64p
  226.       o PPCprintf
  227.       o memcpy
  228.       o strcmp
  229.       o strcpy
  230.       o strlen
  231.       o __adddi3
  232.       o __anddi3
  233.       o __ashldi3
  234.       o __ashrdi3
  235.       o __cmpdi2
  236.       o __divdi3
  237.       o __fixdfdi
  238.       o __fixsfdi
  239.       o __fixunsdfdi
  240.       o __fixunssfdi
  241.       o __floatdidf
  242.       o __floatdisf
  243.       o __floatunsdidf
  244.       o __iordi3
  245.       o __lmulq
  246.       o __lshldi3
  247.       o __lshrdi3
  248.       o __moddi3
  249.       o __muldi3
  250.       o __negdi2
  251.       o __qdivrem
  252.       o __subdi3
  253.       o __ucmpdi2
  254.       o __udivdi3
  255.       o __umoddi3
  256.       o __xordi3
  257.  
  258.     Unimplemented M68k functions will return with d0=0 and PPC
  259.     functions return with r3=0.
  260.  
  261.     These are still missing:
  262.       o Asynchronous 68k function calls
  263.       o Exception handling, debugger support
  264.       o Port lists (The documentation is nearly unusable, so if anybody
  265.         knows exactly how to use port lists, then please mail me!)
  266.       o Some stdio-compatible vararg functions in the kernel
  267.         (this makes no sense IMHO, as va_list is compiler dependant
  268.          and original ppc.library works with gcc only)
  269.       o PPCDoMethodA/SuperMethodA (anybody with an example source?)
  270.       o Some tags are missing for the GetAttrs and GetTaskAttrs functions.
  271.  
  272.  
  273. POWERUP DEVELOPERS
  274.     If you are the author of a program, which doesn't work under
  275.     emulation, then I need your help! Please try to determine the
  276.     reason for crashes or failures in your source and tell me about the
  277.     problem. I think the whole Amiga community would be very grateful!
  278.  
  279.     By using your source and the debugging facilities of ppclibemu it
  280.     should be not too hard. Refer to the BUGS section for debugging
  281.     informations.
  282.  
  283.  
  284. REQUIREMENTS
  285.     o 68040 or 68060
  286.     o WarpOS V4 (powerpc.library V15)
  287.  
  288.  
  289. BLIZZARD PPC NOTES
  290.     You will get some problems on a BPPC with a new flash ROM, because
  291.     the original ppc.library is a resident module and will be
  292.     initialized during reset.
  293.  
  294.     The only chance is to use BPPCFix (should be included in the
  295.     WarpOS V4 distribution) and install another resident module, which
  296.     removes the ppc.library from the system before it can initialize
  297.     itself. Refer to INSTALLATION for further informations.
  298.  
  299.     Afterwards you have a 'clean' system, which allows you to start
  300.     WarpOS without using a Terminator (as with a CSPPC). Please use a
  301.     Terminator setting of '1' or '0'. The emulation will not work with
  302.     WarpOS in terminator-mode '2'.
  303.  
  304.  
  305. INSTALLATION
  306.     Just start the "Installer_Script". Or if you want to do it manually:
  307.  
  308.     Save your original ppc.library:
  309.  
  310.       > copy libs:ppc.library libs:ppc.library.orig
  311.  
  312.     Copy the ppc.library emulation from this directory to libs:
  313.  
  314.       > copy ppc.library libs:
  315.  
  316.     Set the environment variable powerpc/NoPatch to "1":
  317.  
  318.       > setenv powerpc/NoPatch 1
  319.       > copy ENV:powerpc/NoPatch ENVARC:powerpc/
  320.  
  321.     Finally reboot your system to flush the old ppc.library.
  322.  
  323.     BLIZZARD PPC OWNERS ONLY:
  324.       Disable the original ppc.library resident module with
  325.         > BPPCFix install
  326.  
  327.       If you want to disable the original library for a longer
  328.       time, you may also put the BPPCFix into your S:Startup-Sequence:
  329.         ; $VER: Startup-Sequence_HardDrive 40.2 (25.2.93)
  330.         ; Startup-Sequence for hard drive systems
  331.         BPPCFix install reboot >NIL:
  332.         [...]
  333.  
  334.       If the fix is not already installed, it will do so and
  335.       automatically reboot the system.
  336.  
  337.  
  338. USAGE
  339.     Either you install the emulation ppc.library permamently in LIBS:
  340.     or use "LoadLib" (included) to temporarily activate the emulation
  341.     library. It can be flushed completely from the system at any time,
  342.     by typing "avail flush" (provided that no application needs it
  343.     anymore).
  344.  
  345.     Please remove PPCInstall from your startup-sequence. You will get
  346.     the same effect by using "loadlib path:ppc.library", but don't
  347.     place the call before "C:Copy >NIL: ENVARC: RAM:ENV ALL NOREQ" !
  348.  
  349.     For a check, you might want to try some of the supplied test ELF
  350.     objects, which were compiled by vbcc-ppc. For example:
  351.  
  352.       > hello_world.elf
  353.       Hello World!
  354.  
  355.     or:
  356.       > runelf hello_world.elf
  357.       Hello World!
  358.  
  359.     timerobj.elf demonstrates the usage of TimerObjects.
  360.  
  361.     objattr_demo is a 68k program for testing the PPCGetObjectAttrs()
  362.     function. For example, you can try to list all symbols of
  363.     hello_world.elf:
  364.  
  365.       > objattr_demo hello_world.elf
  366.       0x08D45A40      0x00000000      
  367.       0x08586860      0x00000000      
  368.       0x08587280      0x00000000      
  369.       0x085868C0      0x00000000      
  370.       0x08586940      0x00000000      
  371.       0x08D45B50      0x00000000      __error
  372.       0x08D45C38      0x00000100      parse_cli_args
  373.       [...]
  374.  
  375.     msgtest is a 68k program which starts an asynchronous PPC task
  376.     (msgtest.elf) to test the message system. It sends one message
  377.     to the PPC task and waits for reply.
  378.  
  379.     threadtest.elf starts a PPC thread, using the PPCCreateTask()
  380.     function implemented in V0.7, which counts from 1 to 10.
  381.  
  382.  
  383. COMPATIBILITY
  384.     The emulation is nearly complete, but still there might be some
  385.     programs which don't run. Though, since the implementation of the
  386.     message system emulation in V0.6, there are first life-signs from
  387.     some of the 'difficult' candidates. For example MAME and IsisPPC
  388.     are starting now, but refuse to work some time later (MAME runs a
  389.     lot better in V0.7, but depending on the MAME version used, still
  390.     not good enough). Since V0.6d the SAS/C HunkObj files are supported,
  391.     which means that the RC5-client will run under emulation. Also some
  392.     more demos, like VA_OffShore, are running since this version (not
  393.     on my P96 system - but it says "screen mode not found", so I think
  394.     it should do on others :). Since V0.7 Frogger (an mpeg video player)
  395.     works, which calls PPCCreateTask() to spawn new threads.
  396.  
  397.     The following list of programs should work under emulation:
  398.  
  399.       o Games: VDoom (PPCLoad or old PPCRun only!),
  400.         ADoomPPC (when started by runelf, use "setenv DOOMWADDIR"),
  401.         ADoM, HereticPPC, HexenPPC
  402.       o Some demos: VAEDies, VAGhost, VA_OffShore, ...
  403.       o musicin, musicout, mpeg2encode, "Lame" MP3 encoder
  404.       o Packers: unlzx, lha, unrar, uuencode, uudecode, etc.
  405.       o Emulators: PPCFrodo, AmigaVGBPPC, PCEmulator, UAE-PPC, Ami-Generator
  406.       o Graphics: SManPPC, PowerView, Benoit, Reflections 4.3,
  407.         Tornado 3D, ShowPPC
  408.       o Anim: Ripley, Frogger
  409.       o Misc: qmap, ADFLibPPC
  410.       o ak-PPC-datatypes, SuperView NG
  411.       o rc5des_PPC
  412.       o PowerUp developer examples
  413.       o PowerUp demos: Plane, Mountain, Memtest
  414.  
  415.  
  416. BUGS
  417.     There are still some functions of ppc.library and the PowerUp kernel
  418.     which are not supported (and there might be a lot of bugs in the
  419.     functions which *are* supported :).
  420.  
  421.     If you get any difficulties (I'm sure you will :), then try to
  422.     isolate the problem by enabling the debugging mode. You can
  423.     enable debugging mode on the 68k-side by using the ppcdbmode
  424.     utility:
  425.       ppcdbmode 1      - enables all error requesters
  426.       ppcdbmode 0x8000 - enables serial debugging (you can use Sushi)
  427.     (or ppcdbmode 0x8001 to enable both).
  428.  
  429.     You can get full serial debugging (kernel emulation too) by
  430.     exchanging ppc.library with ppc.library.debug. This is the
  431.     recommended method - but execution will be *much* slower.
  432.  
  433.     If you think that you found a bug, then send me your serial debugging
  434.     output, which you got from Sushi or a terminal. Also give me the name
  435.     of the program and the arguments used. You should be able to determine
  436.     by yourself, if it's a real bug or only an unimplemented function
  437.     which causes the problems.
  438.  
  439.  
  440. SOURCE
  441.     Since V0.7 the full source text of ppclibemu is included. This
  442.     is because I can't guarantee that I always have enough time for
  443.     ppclibemu (there are so many other projects to care for :).
  444.     Other developers could take a look at the source and help me
  445.     finding bugs or suggest improvements, while I am busy with other
  446.     projects.
  447.  
  448.     To compile the source, you need vbcc 0.7, which also includes
  449.     the required PhxAss and pasm assemblers, and a make-utility.
  450.     I'm using GNU-make V3.74 (the SAS/C-compiled one). "Makefile"
  451.     builds the standard ppc.library and "Makefile.debug" the
  452.     ppc.library.debug, which does debugging output to the serial
  453.     port. Check the include paths in the Makefiles and change them
  454.     to your needs. The rest should fit.
  455.  
  456.  
  457.  
  458. Frank Wille                  12-Dec-1999                frank@phoenix.owl.de
  459.