Difference between revisions of "Pk howto"

From Felixl.com
Jump to navigationJump to search
 
Line 50: Line 50:
 
  {  
 
  {  
 
   int maintask;// this will be our task handler
 
   int maintask;// this will be our task handler
//
+
  //
//
+
  //
 
   pg_init(); // init of graphics subsystem
 
   pg_init(); // init of graphics subsystem
 
   pc_init(); // init of control subsystem
 
   pc_init(); // init of control subsystem
 
   ps_init(); // init of systemwide parameters, including libc
 
   ps_init(); // init of systemwide parameters, including libc
//
+
  //
 
   maintask=pk_createtask(task1,100);//task creation -- priority is set to average (255 - max. 0 - min)
 
   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
 
   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_yield();  // yield CPU time to any one.... be nice to others
//
+
  //
 
   pk_destroytask(main); //perform suicide :)
 
   pk_destroytask(main); //perform suicide :)
 
  }
 
  }
//
+
//
//
+
//
 
  int task1(void * param1,void * param2)
 
  int task1(void * param1,void * param2)
 
  {
 
  {
 
     int m_vbl; /// our vbl handler
 
     int m_vbl; /// our vbl handler
 
     int m_bitmap; // our bitmap handler
 
     int m_bitmap; // our bitmap handler
//
+
//
 
     m_vbl=pg_createvbl(VBL_DEFAULT); // create standard vbl
 
     m_vbl=pg_createvbl(VBL_DEFAULT); // create standard vbl
//
+
//
 
     m_bitmap=pg_createbitmap(320,240,16); // create bitmap, 320x240 pixels with 16 bit colors  
 
     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_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_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
 
     pg_applyvbl(m_vbl);                  // attach our vbl into system display list -- enables our display
//
+
//
 
     printf("Hello world\n");
 
     printf("Hello world\n");
 
     printf("(c) 2006 Felix.\n");          // :)
 
     printf("(c) 2006 Felix.\n");          // :)
//
+
//
 
     while(pc_padhit(0)==0)          //wait for any button press on joypad 0
 
     while(pc_padhit(0)==0)          //wait for any button press on joypad 0
 
       pk_yield();                  //be nice to others  
 
       pk_yield();                  //be nice to others  
//
+
//
 
     pg_attachstream(m_bitmap,0);    // remove stream attachement
 
     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_removevbl(m_vbl);            // remove our vbl from system display list --- at this point all user will see is a blank screen
Line 90: Line 90:
 
     pg_destroybitmap(m_bitmap);          // destroy our bitmap  
 
     pg_destroybitmap(m_bitmap);          // destroy our bitmap  
 
     pg_destroyvbl(m_vbl);                // destroy our vbl
 
     pg_destroyvbl(m_vbl);                // destroy our vbl
//
+
//
 
     pk_destroytask(task1);              // perform suicide  
 
     pk_destroytask(task1);              // perform suicide  
 
  }
 
  }

Latest revision as of 20:24, 5 September 2006

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 
}