Pk howto

From Felixl.com
Revision as of 20:24, 5 September 2006 by Felix (talk | contribs)
(diff) ←Older revision | view current revision (diff) | Newer revision→ (diff)
Jump to navigationJump to search

The typical Phantom development flow is

development of the title -> compilation -> creating the disk structure -> mkisofs -> blessiso -> sign

all steps are obvious besides, may be, creating of the disk structure.

here is the sample disk structure

/
|
+---Phantom.sys
|
|
+---foo
|    |
|    |
|    +--- foo2.elf
|
+--- autostart.cmd



where -- Phantom.sys is directory, supplied with Phantom SDK, just copy it to the root of the disk; foo -- sample directory, foo2.elf -- sample file executable file, autostart.cmd -- script, executed upon disk booting.


In order to sucessfully initialize Phantom SDK one should include following lines in the begining of the autostart.cmd

 !kernel.complete
 !graphics.load
 !sound.load
 !hardware.complete
 !hardware.authorize
 !device.load
 !device.createevents
 /foo/foo2.elf

where foo2.elf -- is name of your main executable, which should start upon disk boot-up.

And here is the sample "Hello world" program.


#include <phantom.h>
#include <stdio.h>
//
//definition of virtual task1 function
int task1(void * param1,void * param2);
//
//our main
void main()
{ 
  int maintask;// this will be our task handler
 //
 //
  pg_init(); // init of graphics subsystem
  pc_init(); // init of control subsystem
  ps_init(); // init of systemwide parameters, including libc
 //
  maintask=pk_createtask(task1,100);//task creation -- priority is set to average (255 - max. 0 - min)
 //
 //
  while(maintask) // waiting for task completion -- the handler of destroyed task will be 0
    pk_yield();   // yield CPU time to any one.... be nice to others
 //
  pk_destroytask(main); //perform suicide :)
}
//
//
int task1(void * param1,void * param2)
{
   int m_vbl; /// our vbl handler
   int m_bitmap; // our bitmap handler
//
   m_vbl=pg_createvbl(VBL_DEFAULT); // create standard vbl
//
   m_bitmap=pg_createbitmap(320,240,16); // create bitmap, 320x240 pixels with 16 bit colors 
//
   pg_attachstream(m_bitmap,stdio);      // attach our stdio stream, to appear on bitmap as text
   pg_vblattachbitmap(m_vbl,m_bitmap);   // attach our bitmap to our vbl -- currently no other parameters
   pg_applyvbl(m_vbl);                   // attach our vbl into system display list -- enables our display
//
   printf("Hello world\n");
   printf("(c) 2006 Felix.\n");          // :)
//
   while(pc_padhit(0)==0)          //wait for any button press on joypad 0
     pk_yield();                   //be nice to others 
//
   pg_attachstream(m_bitmap,0);    // remove stream attachement
   pg_removevbl(m_vbl);            // remove our vbl from system display list --- at this point all user will see is a blank screen
   pg_vblremovebitmap(m_vbl,m_bitmap);   // remove our bitmap from our vbl
   pg_destroybitmap(m_bitmap);          // destroy our bitmap 
   pg_destroyvbl(m_vbl);                // destroy our vbl
//
   pk_destroytask(task1);              // perform suicide 
}