Browse Source

* Fixed nds rtl
* Changes for gba:
* Random number generator is now embedded in the rtl
* Improved heap
* Updated the linker script
- Removed the outdated gbaunits library and
+ replaced by libgbafpc package

git-svn-id: trunk@10986 -

Legolas 17 years ago
parent
commit
3a21b6e5a6
81 changed files with 14682 additions and 3947 deletions
  1. 49 25
      .gitattributes
  2. 1 1
      compiler/systems/i_gba.pas
  3. 19 15
      compiler/systems/t_gba.pas
  4. 0 37
      packages/gbaunits/Makefile.fpc
  5. 0 504
      packages/gbaunits/lgpl.txt
  6. 0 51
      packages/gbaunits/libGBA4fpc.txt
  7. 0 329
      packages/gbaunits/src/bios_asm.as
  8. 0 37
      packages/gbaunits/src/def.inc
  9. 0 159
      packages/gbaunits/src/gba_bg.pas
  10. 0 80
      packages/gbaunits/src/gba_bios.pas
  11. 0 92
      packages/gbaunits/src/gba_blend.pas
  12. 0 105
      packages/gbaunits/src/gba_core.pas
  13. 0 150
      packages/gbaunits/src/gba_dma.pas
  14. 0 203
      packages/gbaunits/src/gba_fade.pas
  15. 0 172
      packages/gbaunits/src/gba_input.pas
  16. 0 70
      packages/gbaunits/src/gba_irq.pas
  17. 0 68
      packages/gbaunits/src/gba_mosaic.pas
  18. 0 269
      packages/gbaunits/src/gba_regs.pas
  19. 0 95
      packages/gbaunits/src/gba_sio.pas
  20. 0 149
      packages/gbaunits/src/gba_sprites.pas
  21. 0 47
      packages/gbaunits/src/gba_timer.pas
  22. 0 181
      packages/gbaunits/src/gba_types.pas
  23. 0 284
      packages/gbaunits/src/gba_video.pas
  24. 0 83
      packages/gbaunits/src/gba_window.pas
  25. 390 169
      packages/libgbafpc/Makefile
  26. 37 0
      packages/libgbafpc/Makefile.fpc
  27. 2286 0
      packages/libgbafpc/examples/Makefile
  28. 20 0
      packages/libgbafpc/examples/Makefile.fpc
  29. 1647 0
      packages/libgbafpc/examples/devkitPro/audio/PlayBoyScout/Makefile
  30. 36 0
      packages/libgbafpc/examples/devkitPro/audio/PlayBoyScout/Makefile.fpc
  31. 73 0
      packages/libgbafpc/examples/devkitPro/audio/PlayBoyScout/PlayBoyScout.pp
  32. BIN
      packages/libgbafpc/examples/devkitPro/audio/PlayBoyScout/data/ScoutSplash.pcx
  33. BIN
      packages/libgbafpc/examples/devkitPro/audio/PlayBoyScout/data/tune.bgf
  34. 1645 0
      packages/libgbafpc/examples/devkitPro/graphics/PCXView/Makefile
  35. 34 0
      packages/libgbafpc/examples/devkitPro/graphics/PCXView/Makefile.fpc
  36. BIN
      packages/libgbafpc/examples/devkitPro/graphics/PCXView/data/ScoutSplash.pcx
  37. BIN
      packages/libgbafpc/examples/devkitPro/graphics/PCXView/data/splash.pcx
  38. 46 0
      packages/libgbafpc/examples/devkitPro/graphics/PCXView/pcx_view.pp
  39. 1644 0
      packages/libgbafpc/examples/devkitPro/graphics/SimpleBGScroll/Makefile
  40. 33 0
      packages/libgbafpc/examples/devkitPro/graphics/SimpleBGScroll/Makefile.fpc
  41. 162 0
      packages/libgbafpc/examples/devkitPro/graphics/SimpleBGScroll/SimpleBGScroll.pp
  42. BIN
      packages/libgbafpc/examples/devkitPro/graphics/SimpleBGScroll/data/r6502_portfont.bin
  43. 1600 0
      packages/libgbafpc/examples/devkitPro/graphics/ansi_console/Makefile
  44. 26 0
      packages/libgbafpc/examples/devkitPro/graphics/ansi_console/Makefile.fpc
  45. 60 0
      packages/libgbafpc/examples/devkitPro/graphics/ansi_console/console.pp
  46. 1600 0
      packages/libgbafpc/examples/devkitPro/template/Makefile
  47. 26 0
      packages/libgbafpc/examples/devkitPro/template/Makefile.fpc
  48. 45 0
      packages/libgbafpc/examples/devkitPro/template/template.pp
  49. 3 3
      packages/libgbafpc/fpmake.pp
  50. 31 0
      packages/libgbafpc/src/gba.pp
  51. 149 0
      packages/libgbafpc/src/gba/BoyScout.inc
  52. 1 1
      packages/libgbafpc/src/gba/core_asm.as
  53. 57 0
      packages/libgbafpc/src/gba/fade.inc
  54. 24 0
      packages/libgbafpc/src/gba/gba.inc
  55. 90 0
      packages/libgbafpc/src/gba/gba_affine.inc
  56. 112 0
      packages/libgbafpc/src/gba/gba_base.inc
  57. 69 0
      packages/libgbafpc/src/gba/gba_compression.inc
  58. 101 0
      packages/libgbafpc/src/gba/gba_console.inc
  59. 145 0
      packages/libgbafpc/src/gba/gba_dma.inc
  60. 79 0
      packages/libgbafpc/src/gba/gba_input.inc
  61. 99 0
      packages/libgbafpc/src/gba/gba_interrupt.inc
  62. 72 0
      packages/libgbafpc/src/gba/gba_multiboot.inc
  63. 126 0
      packages/libgbafpc/src/gba/gba_sio.inc
  64. 470 0
      packages/libgbafpc/src/gba/gba_sound.inc
  65. 240 0
      packages/libgbafpc/src/gba/gba_sprites.inc
  66. 134 0
      packages/libgbafpc/src/gba/gba_systemcalls.inc
  67. 65 0
      packages/libgbafpc/src/gba/gba_timers.inc
  68. 65 0
      packages/libgbafpc/src/gba/gba_types.inc
  69. 385 0
      packages/libgbafpc/src/gba/gba_video.inc
  70. 181 0
      packages/libgbafpc/src/gba/helper.inc
  71. 88 0
      packages/libgbafpc/src/gba/mappy.inc
  72. 150 0
      packages/libgbafpc/src/gba/mbv2.inc
  73. 64 0
      packages/libgbafpc/src/gba/pcx.inc
  74. 61 117
      rtl/gba/Makefile
  75. 5 2
      rtl/gba/Makefile.fpc
  76. 0 310
      rtl/gba/lnkscript
  77. 4 1
      rtl/gba/sysheap.inc
  78. 57 16
      rtl/gba/system.pp
  79. 59 117
      rtl/nds/Makefile
  80. 2 2
      rtl/nds/Makefile.fpc
  81. 15 3
      rtl/nds/system.pp

+ 49 - 25
.gitattributes

@@ -1715,30 +1715,6 @@ packages/fv/src/unixsmsg.inc svneol=native#text/plain
 packages/fv/src/validate.pas svneol=native#text/plain
 packages/fv/src/validate.pas svneol=native#text/plain
 packages/fv/src/views.pas svneol=native#text/plain
 packages/fv/src/views.pas svneol=native#text/plain
 packages/fv/src/w32smsg.inc svneol=native#text/plain
 packages/fv/src/w32smsg.inc svneol=native#text/plain
-packages/gbaunits/Makefile svneol=native#text/plain
-packages/gbaunits/Makefile.fpc svneol=native#text/plain
-packages/gbaunits/fpmake.pp svneol=native#text/plain
-packages/gbaunits/lgpl.txt svneol=native#text/plain
-packages/gbaunits/libGBA4fpc.txt svneol=native#text/plain
-packages/gbaunits/src/bios_asm.as svneol=native#text/plain
-packages/gbaunits/src/core_asm.as svneol=native#text/plain
-packages/gbaunits/src/def.inc svneol=native#text/plain
-packages/gbaunits/src/gba_bg.pas svneol=native#text/plain
-packages/gbaunits/src/gba_bios.pas svneol=native#text/plain
-packages/gbaunits/src/gba_blend.pas svneol=native#text/plain
-packages/gbaunits/src/gba_core.pas svneol=native#text/plain
-packages/gbaunits/src/gba_dma.pas svneol=native#text/plain
-packages/gbaunits/src/gba_fade.pas svneol=native#text/plain
-packages/gbaunits/src/gba_input.pas svneol=native#text/plain
-packages/gbaunits/src/gba_irq.pas svneol=native#text/plain
-packages/gbaunits/src/gba_mosaic.pas svneol=native#text/plain
-packages/gbaunits/src/gba_regs.pas svneol=native#text/plain
-packages/gbaunits/src/gba_sio.pas svneol=native#text/plain
-packages/gbaunits/src/gba_sprites.pas svneol=native#text/plain
-packages/gbaunits/src/gba_timer.pas svneol=native#text/plain
-packages/gbaunits/src/gba_types.pas svneol=native#text/plain
-packages/gbaunits/src/gba_video.pas svneol=native#text/plain
-packages/gbaunits/src/gba_window.pas svneol=native#text/plain
 packages/gdbint/Makefile svneol=native#text/plain
 packages/gdbint/Makefile svneol=native#text/plain
 packages/gdbint/Makefile.fpc svneol=native#text/plain
 packages/gdbint/Makefile.fpc svneol=native#text/plain
 packages/gdbint/fpmake.pp svneol=native#text/plain
 packages/gdbint/fpmake.pp svneol=native#text/plain
@@ -3001,6 +2977,55 @@ packages/libcurl/fpmake.pp svneol=native#text/plain
 packages/libcurl/src/libcurl.pp svneol=native#text/plain
 packages/libcurl/src/libcurl.pp svneol=native#text/plain
 packages/libcurl/tests/testcurl.pp svneol=native#text/plain
 packages/libcurl/tests/testcurl.pp svneol=native#text/plain
 packages/libcurl/tests/teststream.pp svneol=native#text/plain
 packages/libcurl/tests/teststream.pp svneol=native#text/plain
+packages/libgbafpc/Makefile svneol=native#text/plain
+packages/libgbafpc/Makefile.fpc svneol=native#text/plain
+packages/libgbafpc/examples/Makefile svneol=native#text/plain
+packages/libgbafpc/examples/Makefile.fpc svneol=native#text/plain
+packages/libgbafpc/examples/devkitPro/audio/PlayBoyScout/Makefile svneol=native#text/plain
+packages/libgbafpc/examples/devkitPro/audio/PlayBoyScout/Makefile.fpc svneol=native#text/plain
+packages/libgbafpc/examples/devkitPro/audio/PlayBoyScout/PlayBoyScout.pp svneol=native#text/plain
+packages/libgbafpc/examples/devkitPro/audio/PlayBoyScout/data/ScoutSplash.pcx -text svneol=unset#image/pcx
+packages/libgbafpc/examples/devkitPro/audio/PlayBoyScout/data/tune.bgf -text
+packages/libgbafpc/examples/devkitPro/graphics/PCXView/Makefile svneol=native#text/plain
+packages/libgbafpc/examples/devkitPro/graphics/PCXView/Makefile.fpc svneol=native#text/plain
+packages/libgbafpc/examples/devkitPro/graphics/PCXView/data/ScoutSplash.pcx -text svneol=unset#image/pcx
+packages/libgbafpc/examples/devkitPro/graphics/PCXView/data/splash.pcx -text svneol=unset#image/pcx
+packages/libgbafpc/examples/devkitPro/graphics/PCXView/pcx_view.pp svneol=native#text/plain
+packages/libgbafpc/examples/devkitPro/graphics/SimpleBGScroll/Makefile svneol=native#text/plain
+packages/libgbafpc/examples/devkitPro/graphics/SimpleBGScroll/Makefile.fpc svneol=native#text/plain
+packages/libgbafpc/examples/devkitPro/graphics/SimpleBGScroll/SimpleBGScroll.pp svneol=native#text/plain
+packages/libgbafpc/examples/devkitPro/graphics/SimpleBGScroll/data/r6502_portfont.bin -text
+packages/libgbafpc/examples/devkitPro/graphics/ansi_console/Makefile svneol=native#text/plain
+packages/libgbafpc/examples/devkitPro/graphics/ansi_console/Makefile.fpc svneol=native#text/plain
+packages/libgbafpc/examples/devkitPro/graphics/ansi_console/console.pp svneol=native#text/plain
+packages/libgbafpc/examples/devkitPro/template/Makefile svneol=native#text/plain
+packages/libgbafpc/examples/devkitPro/template/Makefile.fpc svneol=native#text/plain
+packages/libgbafpc/examples/devkitPro/template/template.pp svneol=native#text/plain
+packages/libgbafpc/fpmake.pp svneol=native#text/plain
+packages/libgbafpc/src/gba.pp svneol=native#text/plain
+packages/libgbafpc/src/gba/BoyScout.inc svneol=native#text/plain
+packages/libgbafpc/src/gba/core_asm.as svneol=native#text/plain
+packages/libgbafpc/src/gba/fade.inc svneol=native#text/plain
+packages/libgbafpc/src/gba/gba.inc svneol=native#text/plain
+packages/libgbafpc/src/gba/gba_affine.inc svneol=native#text/plain
+packages/libgbafpc/src/gba/gba_base.inc svneol=native#text/plain
+packages/libgbafpc/src/gba/gba_compression.inc svneol=native#text/plain
+packages/libgbafpc/src/gba/gba_console.inc svneol=native#text/plain
+packages/libgbafpc/src/gba/gba_dma.inc svneol=native#text/plain
+packages/libgbafpc/src/gba/gba_input.inc svneol=native#text/plain
+packages/libgbafpc/src/gba/gba_interrupt.inc svneol=native#text/plain
+packages/libgbafpc/src/gba/gba_multiboot.inc svneol=native#text/plain
+packages/libgbafpc/src/gba/gba_sio.inc svneol=native#text/plain
+packages/libgbafpc/src/gba/gba_sound.inc svneol=native#text/plain
+packages/libgbafpc/src/gba/gba_sprites.inc svneol=native#text/plain
+packages/libgbafpc/src/gba/gba_systemcalls.inc svneol=native#text/plain
+packages/libgbafpc/src/gba/gba_timers.inc svneol=native#text/plain
+packages/libgbafpc/src/gba/gba_types.inc svneol=native#text/plain
+packages/libgbafpc/src/gba/gba_video.inc svneol=native#text/plain
+packages/libgbafpc/src/gba/helper.inc svneol=native#text/plain
+packages/libgbafpc/src/gba/mappy.inc svneol=native#text/plain
+packages/libgbafpc/src/gba/mbv2.inc svneol=native#text/plain
+packages/libgbafpc/src/gba/pcx.inc svneol=native#text/plain
 packages/libgd/Makefile svneol=native#text/plain
 packages/libgd/Makefile svneol=native#text/plain
 packages/libgd/Makefile.fpc svneol=native#text/plain
 packages/libgd/Makefile.fpc svneol=native#text/plain
 packages/libgd/README svneol=native#text/plain
 packages/libgd/README svneol=native#text/plain
@@ -5040,7 +5065,6 @@ rtl/gba/cprt0.as svneol=native#text/plain
 rtl/gba/dos.pp svneol=native#text/plain
 rtl/gba/dos.pp svneol=native#text/plain
 rtl/gba/gbabios.inc svneol=native#text/plain
 rtl/gba/gbabios.inc svneol=native#text/plain
 rtl/gba/gbabiosh.inc svneol=native#text/plain
 rtl/gba/gbabiosh.inc svneol=native#text/plain
-rtl/gba/lnkscript -text
 rtl/gba/prt0.as svneol=native#text/plain
 rtl/gba/prt0.as svneol=native#text/plain
 rtl/gba/sysdir.inc svneol=native#text/plain
 rtl/gba/sysdir.inc svneol=native#text/plain
 rtl/gba/sysfile.inc svneol=native#text/plain
 rtl/gba/sysfile.inc svneol=native#text/plain

+ 1 - 1
compiler/systems/i_gba.pas

@@ -83,7 +83,7 @@ unit i_gba;
                 maxCrecordalign : 4
                 maxCrecordalign : 4
               );
               );
             first_parm_offset : 8;
             first_parm_offset : 8;
-            stacksize    : 262144;
+            stacksize    : 16384;
             abi : abi_default
             abi : abi_default
           );
           );
 
 

+ 19 - 15
compiler/systems/t_gba.pas

@@ -291,8 +291,8 @@ begin
       add('__eheap_end	=	ORIGIN(ewram) + LENGTH(ewram);');
       add('__eheap_end	=	ORIGIN(ewram) + LENGTH(ewram);');
       add('__iwram_start	=	ORIGIN(iwram);');
       add('__iwram_start	=	ORIGIN(iwram);');
       add('__iwram_top	=	ORIGIN(iwram) + LENGTH(iwram);;');
       add('__iwram_top	=	ORIGIN(iwram) + LENGTH(iwram);;');
-      add('__sp_irq	=	__iwram_top - 0x100;');
-      add('__sp_usr	=	__sp_irq - 0x100;');
+      add('__sp_irq	=	__iwram_top - 0x060;');
+      add('__sp_usr	=	__sp_irq - 0x0a0;');
       add('__irq_flags	=	0x03007ff8;');
       add('__irq_flags	=	0x03007ff8;');
       add('');
       add('');
       add('SECTIONS');
       add('SECTIONS');
@@ -313,13 +313,11 @@ begin
       add('	.text  :   /* ALIGN (4): */');
       add('	.text  :   /* ALIGN (4): */');
       add('	{');
       add('	{');
       add('		*(EXCLUDE_FILE (*.iwram*) .text)');
       add('		*(EXCLUDE_FILE (*.iwram*) .text)');
-      add('		*(.text.*)');
-      add('		*(.stub)');
+      add('		*(.text .stub .text.* .gnu.linkonce.t.*)');
+      add('		KEEP (*(.text.*personality*))');
       add('		/* .gnu.warning sections are handled specially by elf32.em.  */');
       add('		/* .gnu.warning sections are handled specially by elf32.em.  */');
       add('		*(.gnu.warning)');
       add('		*(.gnu.warning)');
-      add('		*(.gnu.linkonce.t*)');
-      add('		*(.glue_7)');
-      add('		*(.glue_7t)');
+      add('		*(.glue_7t) *(.glue_7) *(.vfp11_veneer)');
       add('		. = ALIGN(4);  /* REQUIRED. LD is flaky without it. */');
       add('		. = ALIGN(4);  /* REQUIRED. LD is flaky without it. */');
       add('	} >rom = 0xff');
       add('	} >rom = 0xff');
       add('');
       add('');
@@ -395,7 +393,7 @@ begin
       add('');
       add('');
       add('	__data_lma = __iwram_lma + SIZEOF(.iwram) ;');
       add('	__data_lma = __iwram_lma + SIZEOF(.iwram) ;');
       add('');
       add('');
-      add('	.bss ALIGN(4) :');
+      add('	.bss ALIGN(4) (NOLOAD) :');
       add('	{');
       add('	{');
       add('		__bss_start = ABSOLUTE(.);');
       add('		__bss_start = ABSOLUTE(.);');
       add('		__bss_start__ = ABSOLUTE(.);');
       add('		__bss_start__ = ABSOLUTE(.);');
@@ -406,7 +404,7 @@ begin
       add('		. = ALIGN(4);    /* REQUIRED. LD is flaky without it. */');
       add('		. = ALIGN(4);    /* REQUIRED. LD is flaky without it. */');
       add('		__bss_end = ABSOLUTE(.) ;');
       add('		__bss_end = ABSOLUTE(.) ;');
       add('');
       add('');
-      add('	} >iwram');
+      add('	} AT>iwram');
       add('');
       add('');
       add('	__bss_end__ = __bss_end ;');
       add('	__bss_end__ = __bss_end ;');
       add('');
       add('');
@@ -416,7 +414,7 @@ begin
       add('		*(.data)');
       add('		*(.data)');
       add('		*(.data.*)');
       add('		*(.data.*)');
       add('		*(.gnu.linkonce.d*)');
       add('		*(.gnu.linkonce.d*)');
-      add('		*(.fpc*)');
+      add('		*(.fpc*)');      
       add('		CONSTRUCTORS');
       add('		CONSTRUCTORS');
       add('		. = ALIGN(4);');
       add('		. = ALIGN(4);');
       add('	} >iwram = 0xff');
       add('	} >iwram = 0xff');
@@ -461,9 +459,9 @@ begin
       add('		.iwram9 { *(.iwram9) . = ALIGN(4);}');
       add('		.iwram9 { *(.iwram9) . = ALIGN(4);}');
       add('	}>iwram = 0xff');
       add('	}>iwram = 0xff');
       add('');
       add('');
-      add('	__ewram_lma = __load_stop_iwram9;');
-      add('');
       add('	__iwram_overlay_end = . ;');
       add('	__iwram_overlay_end = . ;');
+      add('  __ewram_lma = __iwram_overlay_lma + (__iwram_overlay_end - __iwram_overlay_start) ;');
+      add('');
       add('	__iheap_start = . ;');
       add('	__iheap_start = . ;');
       add('');
       add('');
       add('	__ewram_start = ORIGIN(ewram);');
       add('	__ewram_start = ORIGIN(ewram);');
@@ -475,19 +473,18 @@ begin
       add('');
       add('');
       add('	__pad_lma = __ewram_lma + SIZEOF(.ewram);');
       add('	__pad_lma = __ewram_lma + SIZEOF(.ewram);');
       add('');
       add('');
-      add('	.sbss ALIGN(4):');
+      add('	.sbss ALIGN(4)(NOLOAD):');
       add(' 	{');
       add(' 	{');
       add('		__sbss_start = ABSOLUTE(.);');
       add('		__sbss_start = ABSOLUTE(.);');
       add(' 		*(.sbss)');
       add(' 		*(.sbss)');
       add(' 		. = ALIGN(4);');
       add(' 		. = ALIGN(4);');
       add('		__sbss_end  = ABSOLUTE(.);');
       add('		__sbss_end  = ABSOLUTE(.);');
-      add(' 	} >ewram');
+      add(' 	} AT>ewram');
       add('');
       add('');
       add('');
       add('');
       add('	__ewram_end = __sbss_end ;');
       add('	__ewram_end = __sbss_end ;');
       add('	__eheap_start = __sbss_end;');
       add('	__eheap_start = __sbss_end;');
       add('	__end__ = __sbss_end;');
       add('	__end__ = __sbss_end;');
-      add('	end = __sbss_end;');
       add('');
       add('');
       add('	/* EZF Advance strips trailing 0xff bytes, add a pad section so nothing important is removed */');
       add('	/* EZF Advance strips trailing 0xff bytes, add a pad section so nothing important is removed */');
       add('	.pad ALIGN(4) : AT (__pad_lma)');
       add('	.pad ALIGN(4) : AT (__pad_lma)');
@@ -496,6 +493,7 @@ begin
       add('		LONG(0x4d)');
       add('		LONG(0x4d)');
       add('		. = ALIGN(4);  /* REQUIRED. LD is flaky without it. */');
       add('		. = ALIGN(4);  /* REQUIRED. LD is flaky without it. */');
       add('	} = 0xff');
       add('	} = 0xff');
+      add('	__rom_end__ = __pad_lma + SIZEOF(.pad);');
       add('');
       add('');
       add('');
       add('');
       add('	/* Stabs debugging sections.  */');
       add('	/* Stabs debugging sections.  */');
@@ -606,6 +604,12 @@ begin
         current_module.exefilename^,true,false);
         current_module.exefilename^,true,false);
     end;
     end;
 
 
+  if success then 
+    begin
+      success:=DoExec(FindUtil('gbafix'), current_module.exefilename^,true,false);
+    end;
+
+
   MakeExecutable:=success;   { otherwise a recursive call to link method }
   MakeExecutable:=success;   { otherwise a recursive call to link method }
 end;
 end;
 
 

+ 0 - 37
packages/gbaunits/Makefile.fpc

@@ -1,37 +0,0 @@
-#
-#   Makefile.fpc for gba units
-#
-
-[package]
-name=gbaunits
-version=0.1.4
-
-[target]
-loaders=bios_asm core_asm
-units=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs \
-gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
-examples=
-
-[compiler]
-options=-CX
-includedir=src
-sourcedir=src tests
-
-[install]
-fpcpackage=y
-#prefix=d:/fpc4gba
-
-[default]
-cpu=arm
-target=gba
-fpcdir=../..
-
-[require]
-nortl=y
-
-[rules]
-.NOTPARALLEL:
-core_asm$(OEXT):src/core_asm.as
-        $(AS) -o $(UNITTARGETDIRPREFIX)core_asm$(OEXT) src/core_asm.as
-bios_asm$(OEXT):src/bios_asm.as
-        $(AS) -o $(UNITTARGETDIRPREFIX)bios_asm$(OEXT) src/bios_asm.as

+ 0 - 504
packages/gbaunits/lgpl.txt

@@ -1,504 +0,0 @@
-		  GNU LESSER GENERAL PUBLIC LICENSE
-		       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-		  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-			    NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-

+ 0 - 51
packages/gbaunits/libGBA4fpc.txt

@@ -1,51 +0,0 @@
-libGba[4fpc] (ver. 0.1.5)
-------------
-
-  This lib is a raw porting of libgba library for gba (you can find it at
-  http://www.devkitpro.org).
-  
-  As this is a direct port from c, I'm pretty sure that something could not work
-  as you expect. I am even more sure that this code could be written better, so 
-  if you think that I have made some mistakes or you have some better 
-  implemented functions, let me know [francky74 (at) gmail (dot) com]
-  Enjoy!
-
-  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
-  (http://www.freepascal.org)
-  
-  Copyright (C) 2006  Francesco Lombardi
-  
-  This library is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Lesser General Public
-  License as published by the Free Software Foundation; either
-  version 2.1 of the License, or (at your option) any later version.
-  
-  This library is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-  Lesser General Public License for more details.
-  
-  You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, write to the Free Software
-  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
-
-
-History
--------
-ver. 0.1.5 - Removed useless optimization switches.
-
-ver. 0.1.4 - Changed var declaration to standard types, to be freepascal 
-             consistent.
-
-ver. 0.1.3 - Changed naming convention, to be more pascal standard.
-
-ver. 0.1.2 - Added fading routines; added lgpl license and header.
-
-ver. 0.1.1 - Added some inlning and macros.
-
-ver. 0.1.0 - Major rewritting (units based on libgba from devkitPro).
-
-ver. 0.0.2 - Added some other units (window, mosaic, timer, dma, blend); 
-             moved some functions in more sigificant places.
-
-ver. 0.0.1 - First raw port.

+ 0 - 329
packages/gbaunits/src/bios_asm.as

@@ -1,329 +0,0 @@
-@ 00h
-@ extern void SoftReset(void);
-@
-      .GLOBAL  SoftReset
-      .THUMB_FUNC
-SoftReset:
-  swi   1
-  swi   0
- 
-@--------------------------------------------------
-@ 01h
-@ extern void RegisterRamReset(u32 flags);
- 
-      .GLOBAL  RegisterRamReset
-      .THUMB_FUNC
-RegisterRamReset:
-  swi   1
-  bx    lr
- 
-@--------------------------------------------------
-@ 02h
-@ extern void Halt(void);
- 
-      .GLOBAL  Halt
-      .THUMB_FUNC
-Halt:       
-  swi   2
-  bx    lr
- 
-@--------------------------------------------------
-@ 03h
-@ extern void Stop(void);
- 
-      .GLOBAL  Stop
-      .THUMB_FUNC
-Stop:       swi      3
-            bx    lr
- 
-@--------------------------------------------------
-@ 04h
-@ extern void IntrWait(u32 flagClear, u32 irq);
- 
-      .GLOBAL  IntrWait
-      .THUMB_FUNC
-IntrWait:      swi      4
-            bx    lr
- 
-@--------------------------------------------------
-@ 05h
-@ extern void VBlankIntrWait(void);
- 
-      .GLOBAL  VBlankIntrWait
-      .THUMB_FUNC
-VBlankIntrWait:
-            swi      5
-            bx    lr
- 
-@--------------------------------------------------
-@ 06h
-@ extern s32 Divi(s32 numerator, s32 denominator); 
- 
-      .GLOBAL  Divi
-      .THUMB_FUNC
-Divi:       swi      6
-            bx    lr
- 
- 
-@--------------------------------------------------
-@ 07h
-@ extern s32 DiviArm(s32 denominator, s32 numerator);   
- 
-      .GLOBAL  DiviArm
-      .THUMB_FUNC
-DiviArm:    swi      7
-            bx    lr
- 
-@--------------------------------------------------
-@ 08h
-@ extern u32 Sqrt(u32 value);
- 
-      .GLOBAL  Sqrt
-      .THUMB_FUNC
-Sqrt:       swi      8
-            bx    lr
- 
- 
-@--------------------------------------------------
-@ 09h
-@ extern s16 ArcTan(s16 ang);
- 
-      .GLOBAL  ArcTan
-      .THUMB_FUNC
-ArcTan:        swi      9
-            bx    lr
- 
-@--------------------------------------------------
-@ 0Ah
-@ extern u16 ArcTan2(s16 x, s16 y);
- 
-      .GLOBAL  ArcTan2
-      .THUMB_FUNC
-ArcTan2:    swi      10
-            bx    lr
- 
-@--------------------------------------------------
-@ 0Bh
-@ extern void CpuSet(void *source, void *dest, u32 mode);
- 
-      .GLOBAL  CpuSet
-      .THUMB_FUNC
-CpuSet:        swi      11
-            bx    lr
- 
-@--------------------------------------------------
-@ 0Ch
-@ extern void CpuFastSet(void *source, void *dest, u32 mode);
- 
-      .GLOBAL  CpuFastSet
-      .THUMB_FUNC
-CpuFastSet:    swi      12
-            bx    lr
- 
-@--------------------------------------------------
-@ 0Eh
-@ extern void BgAffineSet(BgAffineSrcData *source, BgAffineDestData *dest, s32 num);
- 
-      .GLOBAL  BgAffineSet
-      .THUMB_FUNC
-BgAffineSet:   swi      14
-            bx    lr
- 
-@--------------------------------------------------
-@ 0Fh
-@ extern void ObjAffineSet(ObjAffineSrcData *source, void *dest, s32 num, s32 offset);
- 
-      .GLOBAL  ObjAffineSet
-      .THUMB_FUNC
-ObjAffineSet:  swi      15
-            bx    lr
- 
-@--------------------------------------------------
-@ 10h
-@ extern void BitUnPack(void  *source, void *dest, BUP* bup);
- 
-      .GLOBAL  BitUnPack
-      .THUMB_FUNC
-BitUnPack:     swi      16
-            bx    lr
- 
-@--------------------------------------------------
-@ 11h
-@ extern void LZ77UnCompWram(void *source, void *dest);
- 
-      .GLOBAL  LZ77UnCompWram
-      .THUMB_FUNC
-LZ77UnCompWram:
-            swi      17
-            bx    lr
- 
-@--------------------------------------------------
-@ 12h
-@ extern void LZ77UnCompVram(void *source, void *dest);
- 
-      .GLOBAL  LZ77UnCompVram
-      .THUMB_FUNC
-LZ77UnCompVram:
-            swi      18
-            bx    lr
- 
-@--------------------------------------------------
-@ 13h
-@ extern void HuffUnComp(void *source, void *dest);
- 
-      .GLOBAL  HuffUnComp
-      .THUMB_FUNC
-HuffUnComp:    swi      19
-            bx    lr
- 
-@--------------------------------------------------
-@ 14h
-@ extern void RLUnCompWram(void *source, void *dest);
- 
-      .GLOBAL  RLUnCompWram
-      .THUMB_FUNC
-RLUnCompWram:  swi      20
-            bx    lr
- 
-@--------------------------------------------------
-@ 15h
-@ extern void RLUnCompVram(void *source, void *dest);
- 
-      .GLOBAL  RLUnCompVram
-      .THUMB_FUNC
-RLUnCompVram:  swi      21
-            bx    lr
- 
-@--------------------------------------------------
-@ 16h
-@ extern void Diff8bitUnFilterWram(void *source, void *dest);
- 
-      .GLOBAL  Diff8bitUnFilterWram
-      .THUMB_FUNC
-Diff8bitUnFilterWram:
-            swi      22
-            bx    lr
- 
-@--------------------------------------------------
-@ 17h
-@ extern void Diff8bitUnFilterVram(void *source, void *dest);
- 
-      .GLOBAL  Diff8bitUnFilterVram
-      .THUMB_FUNC
-Diff8bitUnFilterVram:
-            swi      23
-            bx    lr
- 
-@--------------------------------------------------
-@ 18h
-@ extern void Diff16bitUnFilter(void *source, void *dest);
- 
-      .GLOBAL  Diff16bitUnFilter
-      .THUMB_FUNC
-Diff16bitUnFilter:
-            swi      24
-            bx    lr
- 
- 
-@--------------------------------------------------
-@ 19h
-@ extern void SoundBias(void);
- 
-      .GLOBAL  SoundBias
-      .THUMB_FUNC
-SoundBiasSet:
-            swi      25
-            bx    lr
- 
-@--------------------------------------------------
-@ 1Ah
-@ extern void SoundDriverInit(void);
- 
-      .GLOBAL  SoundDriverInit
-      .THUMB_FUNC
-SoundDriverInit:
-            swi      26
-            bx    lr
- 
- 
-@--------------------------------------------------
-@ 1Bh
-@ extern void SoundDriverMode(u32 mode);
- 
-      .GLOBAL  SoundDriverMode
-      .THUMB_FUNC
-SoundDriverMode:
-            swi      27
-            bx    lr
- 
-@--------------------------------------------------
-@ 1Ch
-@ extern void SoundDriverMain(void);
- 
-      .GLOBAL  SoundDriverMain
-      .THUMB_FUNC
-SoundDriverMain:
-            swi      28
-            bx    lr
- 
-@--------------------------------------------------
-@ 1Dh
-@ extern void SoundDriverVSync(void);
- 
-      .GLOBAL  SoundDriverVSync
-      .THUMB_FUNC
-SoundDriverVSync:
-            swi      29
-            bx    lr
- 
-@--------------------------------------------------
-@ 1Eh
-@ extern void SoundChannelClear(void);
- 
-      .GLOBAL  SoundChannelClear
-      .THUMB_FUNC
-SoundChannelClear:
-            swi      30
-            bx    lr
- 
- 
-@--------------------------------------------------
-@ 1Fh
-@ extern void  MidiKey2Freq(void);
- 
-      .GLOBAL  MidiKey2Freq
-      .THUMB_FUNC
-MidiKey2Freq:
-            swi      31
-            bx    lr
- 
-@--------------------------------------------------
-@ 25h
-@ extern int MultiBoot(void)
- 
-      .GLOBAL  MultiBoot
-      .THUMB_FUNC
-MultiBoot:
-            swi      37
-            bx    lr
- 
-@--------------------------------------------------
-@ 28h
-@ extern void SoundDriverVSyncOff(void);
- 
-      .GLOBAL  SoundDriverVSyncOff
-      .THUMB_FUNC
-SoundDriverVSyncOff:
-            swi      40
-            bx    lr
- 
-@--------------------------------------------------
-@ 29h
-@ extern void SoundDriverVSyncOn(void);
- 
-      .GLOBAL  SoundDriverVSyncOn
-      .THUMB_FUNC
-SoundDriverVSyncOn:
-            swi      41
-            bx    lr
-  .END

+ 0 - 37
packages/gbaunits/src/def.inc

@@ -1,37 +0,0 @@
-(*
-  def.inc
-  ------------------------------------------------------------------------------
-  This lib is a raw porting of libgba library for gba (you can find it at
-  http://www.devkitpro.org).
-  
-  As this is a direct port from c, I'm pretty sure that something could not work
-  as you expect. I am even more sure that this code could be written better, so 
-  if you think that I have made some mistakes or you have some better 
-  implemented functions, let me know [francky74 (at) gmail (dot) com]
-  Enjoy!
-
-  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
-  (http://www.freepascal.org)
-  
-  Copyright (C) 2006  Francesco Lombardi
-  
-  This library is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Lesser General Public
-  License as published by the Free Software Foundation; either
-  version 2.1 of the License, or (at your option) any later version.
-  
-  This library is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-  Lesser General Public License for more details.
-  
-  You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, write to the Free Software
-  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
-  ------------------------------------------------------------------------------
-*)
-
-{$MODE OBJFPC}
-{$J+}
-{$INLINE ON}
-{$MACRO ON}

+ 0 - 159
packages/gbaunits/src/gba_bg.pas

@@ -1,159 +0,0 @@
-(*
-  gba_bg.pas  18/06/2006 4.07.57
-  ------------------------------------------------------------------------------
-  This lib is a raw porting of libgba library for gba (you can find it at
-  http://www.devkitpro.org).
-  
-  As this is a direct port from c, I'm pretty sure that something could not work
-  as you expect. I am even more sure that this code could be written better, so 
-  if you think that I have made some mistakes or you have some better 
-  implemented functions, let me know [francky74 (at) gmail (dot) com]
-  Enjoy!
-
-  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
-  (http://www.freepascal.org)
-  
-  Copyright (C) 2006  Francesco Lombardi
-  
-  This library is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Lesser General Public
-  License as published by the Free Software Foundation; either
-  version 2.1 of the License, or (at your option) any later version.
-  
-  This library is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-  Lesser General Public License for more details.
-  
-  You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, write to the Free Software
-  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
-  ------------------------------------------------------------------------------
-*)
-
-unit gba_bg;
-{$i def.inc}
-
-interface
-
-uses
-  gba_types;
-
-
-const 
-  DISP_HBLANK_PROCESS_ON = (0 shl 5);
-  DISP_HBLANK_PROCESS_OFF = (1 shl 5);
-
-  DISP_SPRITE_TYPE_1D = (1 shl 6);
-  DISP_SPRITE_TYPE_2D = (0 shl 6);
-
-  DISP_FORCE_BLANK  = (1 shl 7);
-
-  DISP_BG0  = (1 shl 8);
-  DISP_BG1  = (1 shl 9);
-  DISP_BG2  = (1 shl 10);
-  DISP_BG3  = (1 shl 11);
-  DISP_OBJ  = (1 shl 12);
-
-  DISP_WND0 = (1 shl 13);
-  DISP_WND1 = (1 shl 14);
-  DISP_OBJWND = (1 shl 15);
-
-  DSTAT_BIT_VBLANK  = (1);
-  DSTAT_BIT_HBLANK  = (1 shl 1);
-  DSTAT_BIT_VCOUNT  = (1 shl 2);
-
-  DSTAT_USE_VBLANK  = (1 shl 3);
-  DSTAT_USE_HBLANK  = (1 shl 4);
-  DSTAT_USE_VCOUNT  = (1 shl 5);
-
-  BG_SIZEA_256_256  = 0;
-  BG_SIZEA_512_256  = (1 shl 14);
-  BG_SIZEA_256_512  = (2 shl 14);
-  BG_SIZEA_512_512  = (3 shl 14);
-
-  BG_SIZEB_128_128  = 0;
-  BG_SIZEB_256_256  = (1 shl 14);
-  BG_SIZEB_512_512  = (2 shl 14);
-  BG_SIZEB_1024_1024= (2 shl 14);
-
-  BG_OVERLAP  = (1 shl 13);
-
-  BG_COLOR_16   = 0;
-  BG_COLOR_256  = (1 shl 7);
-
-  BG_MOZAIC_ON  = (1 shl 6);
-
-  BG_MAP_YFLIP  = (1 shl 11);
-  BG_MAP_XFLIP  = (1 shl 10);
-
-  MEM_BG_PAL  : ^word = pointer($5000000);
-
-function DispBgMode(x: dword): dword;
-function DispSelectBuffer(x: dword): dword;
-function BgMapTile(x: word): word;
-function MemBgChar(x: word): pointer;
-function MemBgMap(x: word): pointer;
-function BgCharBase(x: dword): dword;
-function BgPriority(x: dword): dword;
-function BgMapPal(x: dword): dword;
-function BgMapBase(x: dword): dword;
-function DStatVCountLine(x: dword): dword;
-
-
-implementation
-
-function DispBgMode(x: dword): dword;
-begin
-  DispBgMode := x;
-end;
-
-function DispSelectBuffer(x: dword): dword;
-begin
-  DispSelectBuffer := (x shl 4);
-end;
-
-function BgMapTile(x: word): word;
-begin
-  BgMapTile := (x);
-end;
-
-function MemBgChar(x: word): pointer;
-begin
-  MemBgChar := pointer($6000000 + (x)*$4000);
-end;
-
-function MemBgMap(x: word): pointer;
-begin
-  MemBgMap :=  pointer($6000000 + (x)* $800);
-end;
-
-function BgCharBase(x: dword): dword;
-begin
-  BgCharBase := ((x) shl 2);
-end;
-
-function BgPriority(x: dword): dword;
-begin
-  BgPriority := x;
-end;
-
-
-function BgMapPal(x: dword): dword;
-begin
-  BgMapPal := ((x) shl 12);
-end;
-
-function BgMapBase(x: dword): dword;
-begin
-  BgMapBase := ((x) shl 8);
-end;
-
-function DStatVCountLine(x: dword): dword;
-begin
-  DStatVCountLine := ((x) shl 8);
-end;
-
-
-end.
-

+ 0 - 80
packages/gbaunits/src/gba_bios.pas

@@ -1,80 +0,0 @@
-(*
-  gba_bios.pas  18/06/2006 4.17.48
-  ------------------------------------------------------------------------------
-  This lib is a raw porting of libgba library for gba (you can find it at
-  http://www.devkitpro.org).
-  
-  As this is a direct port from c, I'm pretty sure that something could not work
-  as you expect. I am even more sure that this code could be written better, so 
-  if you think that I have made some mistakes or you have some better 
-  implemented functions, let me know [francky74 (at) gmail (dot) com]
-  Enjoy!
-
-  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
-  (http://www.freepascal.org)
-  
-  Copyright (C) 2006  Francesco Lombardi
-  
-  This library is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Lesser General Public
-  License as published by the Free Software Foundation; either
-  version 2.1 of the License, or (at your option) any later version.
-  
-  This library is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-  Lesser General Public License for more details.
-  
-  You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, write to the Free Software
-  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
-  ------------------------------------------------------------------------------
-*)
-unit gba_bios;
-{$i def.inc}
-
-interface
-
-uses
-  gba_types;
-   
-procedure SoftReset();cdecl; external;
-procedure RegisterRamReset(flags: dword); cdecl; external;
-procedure Halt(); cdecl; external;
-procedure Stop(); cdecl; external;
-procedure IntrWait(flagClear, irq: dword); cdecl; external;
-procedure VBlankIntrWait(); cdecl; external;
-function Divi(numerator, denominator: longint): longint;  cdecl; external;     
-function DiviArm(denominator, numerator: longint): longint; cdecl; external;
-function Sqrt(value: dword): dword; cdecl; external;
-function ArcTan(ang: smallint): smallint; cdecl; external;
-function ArcTan2(x, y: smallint): word; cdecl; external;
-procedure CpuSet(source, dest: pointer; mode: dword); cdecl; external;
-procedure CpuFastSet(source, dest: pointer; mode: dword); cdecl; external;
-procedure ObjAffineSet(source: PObjAffineSource; dest: pointer; num: longint; offset: longint); cdecl; external;
-procedure BgAffineSet(source: PBGAffineSource; dest: PBGAffineDest; num: longint); cdecl; external;
-procedure BitUnPack(source: pointer; dest: pointer; _bup: PBUP); cdecl; external;
-procedure LZ77UnCompWram(source, dest: pointer); cdecl; external;
-procedure LZ77UnCompVram(source, dest: pointer); cdecl; external;
-procedure HuffUnComp(source, dest: pointer); cdecl; external;
-procedure RLUnCompWram(source, dest: pointer); cdecl; external;
-procedure RLUnCompVram(source, dest: pointer); cdecl; external;
-procedure Diff8bitUnFilterWram(source, dest: pointer); cdecl; external;
-procedure Diff8bitUnFilterVram(source, dest: pointer); cdecl; external;
-procedure Diff16bitUnFilter(source, dest: pointer); cdecl; external;
-function MultiBoot(mb: PMultiBootParam; mode: dword): integer; cdecl; external;
-procedure SoundBias(); cdecl; external;
-procedure SoundDriverInit(); cdecl; external;
-procedure SoundDriverMode(mode: dword); cdecl; external;
-procedure SoundDriverMain(); cdecl; external;
-procedure SoundDriverVSync(); cdecl; external;
-procedure SoundChannelClear(); cdecl; external;
-procedure MidiKey2Freq(); cdecl; external;
-procedure SoundDriverVSyncOff(); cdecl; external;
-procedure SoundDriverVSyncOn(); cdecl; external;
- 
-implementation
-
-{$l bios_asm.o}
-
-end.

+ 0 - 92
packages/gbaunits/src/gba_blend.pas

@@ -1,92 +0,0 @@
-(*
-  gba_blend.pas 18/06/2006 4.17.40
-  ------------------------------------------------------------------------------
-  As this is a direct port from c, I'm pretty sure that something could not work
-  as you expect. I am even more sure that this code could be written better, so 
-  if you think that I have made some mistakes or you have some better 
-  implemented functions, let me know [francky74 (at) gmail (dot) com]
-  Enjoy!
-
-  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
-  (http://www.freepascal.org)
-  
-  Copyright (C) 2006  Francesco Lombardi
-  
-  This library is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Lesser General Public
-  License as published by the Free Software Foundation; either
-  version 2.1 of the License, or (at your option) any later version.
-  
-  This library is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-  Lesser General Public License for more details.
-  
-  You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, write to the Free Software
-  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
-  ------------------------------------------------------------------------------
-*)
-unit gba_blend;
-{$i def.inc}
-
-interface
-
-uses
-  gba_types;
-
-const
-  BLEND_TOP_BG0 = (1 shl 0); 
-  BLEND_TOP_BG1 = (1 shl 1);
-  BLEND_TOP_BG2 = (1 shl 2);
-  BLEND_TOP_BG3 = (1 shl 3);
-  BLEND_TOP_OBJ = (1 shl 4);
-  BLEND_TOP_BD  = (1 shl 5);
-  
-  BLEND_LOW_BG0 = (1 shl 8); 
-  BLEND_LOW_BG1 = (1 shl 9);
-  BLEND_LOW_BG2 = (1 shl 10);
-  BLEND_LOW_BG3 = (1 shl 11);
-  BLEND_LOW_OBJ = (1 shl 12);
-  BLEND_LOW_BD  = (1 shl 13);
-
-  BLEND_MODE_OFF    = (0 shl 6);
-  BLEND_MODE_ALPHA  = (1 shl 6);
-  BLEND_MODE_LIGHT  = (2 shl 6);
-  BLEND_MODE_DARK   = (3 shl 6);
-
-function BlendLow(n: dword): dword; inline;
-function BlendHigh(n: dword): dword; inline;
-function BlendLevel(n: dword): dword; inline;
-function BlendBalance(n: dword): dword; inline;
-function BlendDepth(n: dword): dword; inline;
-
-implementation
-
-function BlendLow(n: dword): dword; inline;
-begin
-  BlendLow := (n shl 0);
-end;
-
-function BlendHigh(n: dword): dword; inline;
-begin
-  BlendHigh := (n shl 8);
-end;
-
-function BlendLevel(n: dword): dword; inline;
-begin
-  BlendLevel := (BlendLow(n) or BlendHigh(n));
-end;
-
-function BlendBalance(n: dword): dword; inline;
-begin
-  BlendBalance := (BlendLow(n) or BlendHigh(16-n));
-end;
-
-function BlendDepth(n: dword): dword; inline;
-begin
-  BlendDepth := (n shl 0);
-end;
-
-
-end.

+ 0 - 105
packages/gbaunits/src/gba_core.pas

@@ -1,105 +0,0 @@
-(*
-  gba_core.pas  01/09/2006 19.17.35
-  ------------------------------------------------------------------------------
-  This lib is a raw porting of tonclib library for gba (you can find it at
-  http://user.chem.tue.nl/jakvijn/index.htm).
-  
-  As this is a direct port from c, I'm pretty sure that something could not work
-  as you expect. I am even more sure that this code could be written better, so 
-  if you think that I have made some mistakes or you have some better 
-  implemented functions, let me know [francky74 (at) gmail (dot) com]
-  Enjoy!
-
-  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
-  (http://www.freepascal.org)
-  
-  Copyright (C) 2006  Francesco Lombardi
-  
-  This library is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Lesser General Public
-  License as published by the Free Software Foundation; either
-  version 2.1 of the License, or (at your option) any later version.
-  
-  This library is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-  Lesser General Public License for more details.
-  
-  You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, write to the Free Software
-  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
-  ------------------------------------------------------------------------------
-*)
-unit gba_core;
-{$i def.inc}
-
-interface
-
-uses 
-  gba_types;
-
-
-// random numbers  -- courtesy of Cearn (TONClib)
-const
-  QRAN_SHIFT  = 15;
-  QRAN_MASK   = ((1 shl QRAN_SHIFT) - 1);
-  QRAN_MAX    = QRAN_MASK;
-  QRAN_A      = 1664525;
-  QRAN_C      = 1013904223;
-
-var
-  gbaRandSeed: dword = 42;
-
-function gbaRandomize(seed: dword): dword;
-function gbaRand(): dword;
-function gbaRand(value: integer): dword;
-
-procedure memset16(dest: pointer; hw: word; hwcount: dword); cdecl; external;
-procedure memcpy16(dest: pointer; const src: pointer; hwcount: dword); cdecl; external;
-
-procedure memset32(dest: pointer; wd: dword; wcount: dword); cdecl; external;
-procedure memcpy32(dest: pointer; const src: pointer; wcount: dword); cdecl; external;
-
-procedure DebugPrint(s: string); assembler; inline;
-
-implementation
-
-function gbaRandomize(seed: dword): dword;
-var
-  old: dword;
-begin	
-	old := gbaRandSeed;
-	gbaRandSeed := seed; 
-	gbaRandomize := old;	
-end;
-
-function gbaRand(): dword;
-begin	
-	gbaRandSeed := QRAN_A * gbaRandSeed + QRAN_C;
-	gbaRand := (gbaRandSeed shr 16) and QRAN_MAX;
-end;
-
-function gbaRand(value: integer): dword;
-var
-  a: dword;
-begin	
-	gbaRandSeed := QRAN_A * gbaRandSeed + QRAN_C;
-	a := (gbaRandSeed shr 16) and QRAN_MAX;
-  gbaRand := (a * value) shr 15;
-end;
-
-// memory handling routines
-// these are in ASM and optimized; use when possible
-{$l core_asm.o}
-
-
-{$OPTIMIZATION OFF}
-procedure DebugPrint(s: string); assembler; inline;
-asm
-  mov r0,s
-  swi #0xff0000
-end['r0'];
-{$OPTIMIZATION ON}                  
-
-
-end.

+ 0 - 150
packages/gbaunits/src/gba_dma.pas

@@ -1,150 +0,0 @@
-(*
-  gba_dma.pas 18/06/2006 4.18.32
-  ------------------------------------------------------------------------------
-  This lib is a raw porting of libgba library for gba (you can find it at
-  http://www.devkitpro.org).
-  
-  As this is a direct port from c, I'm pretty sure that something could not work
-  as you expect. I am even more sure that this code could be written better, so 
-  if you think that I have made some mistakes or you have some better 
-  implemented functions, let me know [francky74 (at) gmail (dot) com]
-  Enjoy!
-
-  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
-  (http://www.freepascal.org)
-  
-  Copyright (C) 2006  Francesco Lombardi
-  
-  This library is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Lesser General Public
-  License as published by the Free Software Foundation; either
-  version 2.1 of the License, or (at your option) any later version.
-  
-  This library is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-  Lesser General Public License for more details.
-  
-  You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, write to the Free Software
-  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
-  ------------------------------------------------------------------------------
-*)
-
-unit gba_dma;
-{$i def.inc}
-
-interface
-
-uses
-  gba_types, gba_regs;
-
-const
-  DMA_SHIFT       = 16;
-
-  // destination control
-  _DMA_DST_INC    = ($0000 shl DMA_SHIFT);
-  DMA_DST_DEC     = ($0020 shl DMA_SHIFT);
-  DMA_DST_FIX     = ($0040 shl DMA_SHIFT);
-  DMA_DST_RESET   = ($0060 shl DMA_SHIFT);
-  
-  // source control
-  _DMA_SRC_INC    = ($0000 shl DMA_SHIFT);
-  DMA_SRC_DEC     = ($0080 shl DMA_SHIFT);
-  DMA_SRC_FIX     = ($0100 shl DMA_SHIFT);
-  DMA_SRC_RESET   = ($0180 shl DMA_SHIFT);
-
-  DMA_REPEAT      = ($0200 shl DMA_SHIFT);
-  
-  // chunks
-  _DMA_16         = ($0000 shl DMA_SHIFT);
-  DMA_32          = ($0400 shl DMA_SHIFT);
-
-  // timing
-  _DMA_AT_NOW     = ($0000 shl DMA_SHIFT);
-  DMA_AT_VBLANK   = ($1000 shl DMA_SHIFT);
-  DMA_AT_HBLANK   = ($2000 shl DMA_SHIFT);
-  DMA_AT_FIFO     = ($3000 shl DMA_SHIFT);		// for sound ( DMA 1 & 2)
-  DMA_AT_REFRESH  = ($3000 shl DMA_SHIFT);		// for video ( DMA 3)
-
-  DMA_IRQ         = ($4000 shl DMA_SHIFT);
-  DMA_ON          = ($8000 shl DMA_SHIFT);
-
-  // I want it NOW!
-  DMA_NOW         = DMA_ON or _DMA_AT_NOW;
-  DMA_16NOW       = DMA_NOW or _DMA_16;
-  DMA_32NOW       = DMA_NOW or DMA_32;
-  
-  // copies
-  DMA_CPY16       = DMA_NOW or _DMA_16;
-  DMA_CPY32       = DMA_NOW or DMA_32;
-  
-  // fills
-  DMA_FILL16      = DMA_NOW or DMA_SRC_FIX or _DMA_16;
-  DMA_FILL32      = DMA_NOW or DMA_SRC_FIX or DMA_32;
-
-  DMA_TRANSFER_ON	    = (1 shl 15);
-  DMA_TRANSFER_OFF    = (0 shl 15);
-
-  DMA_INTR_ON         = (1 shl 14);
-  DMA_INTR_OFF        = (0 shl 14);
-
-  DMA_TIMING_NOW      = (0 shl 12);
-  DMA_TIMING_VBLANK   = (1 shl 12);
-  DMA_TIMING_HBLANK   = (2 shl 12);
-  DMA_TIMING_FIFO     = (3 shl 12);
-  DMA_TIMING_DRAWLINE = (3 shl 12);
-  
-  DMA_ROM_REQUEST     = (1 shl 11);
-
-  DMA_SIZE_16         = (0 shl 10);
-  DMA_SIZE_32         = (1 shl 10);
-  
-  DMA_REPEAT_ON       = (1 shl 9);
-  DMA_REPEAT_OFF      = (0 shl 9);
-
-  DMA_SAD_INC         = (0 shl 7);
-  DMA_SAD_DEC         = (1 shl 7);
-  DMA_SAD_FIX         = (2 shl 7);
-
-  DMA_DAD_INC         = (0 shl 5);
-  DMA_DAD_DEC         = (1 shl 5);
-  DMA_DAD_FIX         = (2 shl 5);
-  DMA_DAD_RESET       = (3 shl 5);
-
-procedure DMA0Copy(sad: pword; dad: pword; size: dword; mode: dword); inline;
-procedure DMA1Copy(sad: pword; dad: pword; size: dword; mode: dword); inline;
-procedure DMA2Copy(sad: pword; dad: pword; size: dword; mode: dword); inline;
-procedure DMA3Copy(sad: pword; dad: pword; size: dword; mode: dword); inline;
-
-implementation
-
-procedure DMA0Copy(sad: pword; dad: pword; size: dword; mode: dword); inline;
-begin
-  REG_DM0SAD^ := dword(sad);
-  REG_DM0DAD^ := dword(dad);
-  REG_DM0CNT^ := size or mode;
-end; 
-
-procedure DMA1Copy(sad: pword; dad: pword; size: dword; mode: dword); inline;
-begin
-  REG_DM1SAD^ := dword(sad);
-  REG_DM1DAD^ := dword(dad);
-  REG_DM1CNT^ := size or mode;
-end; 
-
-procedure DMA2Copy(sad: pword; dad: pword; size: dword; mode: dword); inline;
-begin
-  REG_DM2SAD^ := dword(sad);
-  REG_DM2DAD^ := dword(dad);
-  REG_DM2CNT^ := size or mode;
-end; 
-
-procedure DMA3Copy(sad: pword; dad: pword; size: dword; mode: dword); inline;
-begin
-  REG_DM3SAD^ := dword(sad);
-  REG_DM3DAD^ := dword(dad);
-  REG_DM3CNT^ := size or mode;
-end; 
-
-end.

+ 0 - 203
packages/gbaunits/src/gba_fade.pas

@@ -1,203 +0,0 @@
-(*
-  gba_fade.pas  18/06/2006 4.19.14
-  ------------------------------------------------------------------------------
-  Part of this file is a raw porting of libgba library for gba (you can find it 
-  at http://www.devkitpro.org).
-  
-  As this is a direct port from c, I'm pretty sure that something could not work
-  as you expect. I am even more sure that this code could be written better, so 
-  if you think that I have made some mistakes or you have some better 
-  implemented functions, let me know [francky74 (at) gmail (dot) com]
-  Enjoy!
-
-  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
-  (http://www.freepascal.org)
-  
-  Copyright (C) 2006  Francesco Lombardi
-  
-  This library is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Lesser General Public
-  License as published by the Free Software Foundation; either
-  version 2.1 of the License, or (at your option) any later version.
-  
-  This library is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-  Lesser General Public License for more details.
-  
-  You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, write to the Free Software
-  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
-  ------------------------------------------------------------------------------
-*)
- 
-unit gba_fade;
-{$i def.inc}
-interface
-
-uses 
-  gba_types, gba_regs, gba_video, gba_core;
-
-var
-  CurrentPalette: array [0..511] of word;
-  FadeTable: array [0..(512*3*2)-1] of smallint;
-  
-procedure GetCurrentPalette();
-procedure SetPalette(Palette: pword);
-procedure DoFade(FadeCount: dword);
-procedure FadeToGrayScale(FrameCount: dword);
-procedure FadeToPalette(const NewPalette: pword; FrameCount: dword);
-procedure FadeToGray(gray: word; FrameCount: dword);
-
-implementation
-
-procedure GetCurrentPalette();
-var
-  i: dword;
-  Src: ^word;
-  Dest: ^word;
-begin
-  Src := BG_COLORS;
-  Dest := CurrentPalette;
-	for i := 0 to 511 do
-	  Dest[i] := dword(Src[i]);
-end;
-
-
-procedure SetPalette(Palette: pword);
-var
-  i: dword;
-  Src, Dest: ^word;
-begin	
-	Src := Palette;
-	Dest := BG_COLORS;
-	for i := 0 to 511 do
-		Dest[i] := dword(Src[i]);
-end;
-
-procedure DoFade(FadeCount: dword);
-var
-  r, g, b: word;
-	i, count, color: dword;
-	src: ^smallint;
-  dest: ^word;
-begin
-  for count := 0 to FadeCount - 1 do
-  begin
-    src := FadeTable;
-    dest := CurrentPalette;
-
-    i := 0;
-    while i < 512 do
-    begin
-      r := Src[(i*6)+1];
-      r := r + Src[(i*6)];
-      Src[(i*6)+1] := r;
-      
-      g := Src[(i*6)+3];
-      g := g + Src[(i*6)+2];
-      Src[(i*6)+3] := g;
-      
-      b := Src[(i*6)+5];
-      b := b + Src[(i*6)+4];
-      Src[(i*6)+5] := b;
-      
-      color := (r shr 8) or ((g shr 8) shl 5) or ((b shr 8) shl 10);
-      Dest[i] := color;
-      inc(i);
-    end;
-    WaitForVBlank();
-    SetPalette(CurrentPalette);
-	end;
-end;
-
-procedure FadeToGray(gray: word; FrameCount: dword);
-var
-	index, r, g, b, color: dword;
- 	src: ^word;
-	table: ^smallint; 
-begin
-  GetCurrentPalette();
-  src := CurrentPalette;
-  
-  for index :=0  to 511 do 
-  begin
-    color := src[index];
-    r := (color and $1f) shl 8;
-    g := ((color shr 5) and $1f) shl 8;
-    b := ((color shr 10) and $1f) shl 8;
-    
-    FadeTable[(index*6)] := ((gray shl 8)-r) div FrameCount;
-    FadeTable[(index*6)+1] := r;
-    
-    FadeTable[(index*6)+2] := ((gray shl 8)-g) div FrameCount;
-    FadeTable[(index*6)+3] := g;
-    
-    FadeTable[(index*6)+4] := ((gray shl 8)-b) div FrameCount;
-    FadeTable[(index*6)+5] := b;
-  end;
-  DoFade( FrameCount);
-end;
-
-procedure FadeToPalette(const NewPalette: pword; FrameCount: dword);
-var
-  index: dword;
-  color: word;
-  r1, r2, g1, g2, b1, b2: smallint;
-  Src: ^word;
-  Dest: ^word;
-  Table: ^smallint;
-begin
-  GetCurrentPalette();
-  Src := CurrentPalette;
-  Dest := NewPalette;
-  Table := FadeTable;
-  
-  for index := 0 to 511 do
-  begin
-    color := Src[index];
-    r1 := (color and $1f) shl 8;
-    g1 := ((color shr 5) and $1f) shl 8;
-    b1 := ((color shr 10) and $1f) shl 8;
-    
-    color := Dest[index];
-    r2 := (color and $1f) shl 8;
-    g2 := ((color shr 5) and $1f) shl 8;
-    b2 := ((color shr 10) and $1f) shl 8;
-    
-    Table[(index*6)] := (r2 - r1) div FrameCount;
-    Table[(index*6)+1] := r1;
-    Table[(index*6)+2] := (g2 - g1) div FrameCount;
-    Table[(index*6)+3] := g1;
-    Table[(index*6)+4] := (b2 - b1) div FrameCount;
-    Table[(index*6)+5] := b1;
-  end;
-  DoFade(FrameCount);
-end;
-
-procedure FadeToGrayScale(FrameCount: dword);
-var
-  index: dword;
-  gray: word;
-  r,g,b: smallint;
-  Src: ^word;
-  Dest: ^word;
-  Table: ^smallint;
-  GrayScalePalette: array [0..511] of word; 
-begin
-  GetCurrentPalette();
-  Src := CurrentPalette;
-  Table := FadeTable;
-
-  for index := 0 to 511 do
-  begin
-    r := (Src[index] and $1f);
-    g := ((Src[index] shr 5) and $1f);
-    b := ((Src[index] shr 10) and $1f);
-    Gray := (r shr 2) + (r shr 4) + (g shr 1) + (g shr 4) + (b shr 3); 
-    GrayScalePalette[index] := RGB(gray, gray, gray);
-  end;
-  FadeToPalette(GrayScalePalette, FrameCount);
-end;
-
-end.

+ 0 - 172
packages/gbaunits/src/gba_input.pas

@@ -1,172 +0,0 @@
-(*
-  gba_input.pas 01/09/2006 19.57.16
-  ------------------------------------------------------------------------------
-  This lib is a raw porting of libgba library for gba (you can find it at
-  http://www.devkitpro.org).
-  
-  As this is a direct port from c, I'm pretty sure that something could not work
-  as you expect. I am even more sure that this code could be written better, so 
-  if you think that I have made some mistakes or you have some better 
-  implemented functions, let me know [francky74 (at) gmail (dot) com]
-  Enjoy!
-
-  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
-  (http://www.freepascal.org)
-  
-  Copyright (C) 2006  Francesco Lombardi
-  
-  This library is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Lesser General Public
-  License as published by the Free Software Foundation; either
-  version 2.1 of the License, or (at your option) any later version.
-  
-  This library is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-  Lesser General Public License for more details.
-  
-  You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, write to the Free Software
-  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
-  ------------------------------------------------------------------------------
-*)
-unit gba_input;
-{$i def.inc}
-interface
-
-uses 
-  gba_types, gba_regs;
-
-
-
-const
-  KEY_A: TKeyPadBits       = (1 shl 0);
-  KEY_B: TKeyPadBits       = (1 shl 1);
-  KEY_SELECT: TKeyPadBits  = (1 shl 2);
-  KEY_START: TKeyPadBits   = (1 shl 3);	
-  KEY_RIGHT: TKeyPadBits   = (1 shl 4);
-  KEY_LEFT: TKeyPadBits    = (1 shl 5);
-  KEY_UP: TKeyPadBits      = (1 shl 6);
-  KEY_DOWN: TKeyPadBits    = (1 shl 7);
-  KEY_R: TKeyPadBits       = (1 shl 8);
-  KEY_L: TKeyPadBits       = (1 shl 9);
-
-  KEYIRQ_ENABLE: TKeyPadBits = (1 shl 14);
-  KEYIRQ_OR: TKeyPadBits     = (0 shl 15);
-  KEYIRQ_AND: TKeyPadBits    = (1 shl 15);
-  DPAD: TKeyPadBits          = (1 shl 6) or (1 shl 7) or (1 shl 5) or (1 shl 4);
-
-
-
-type
-  KeyInput = packed record
-    Up: word;
-    Down: word;
-    Held: word;
-    Last: word;
-    DownRepeat: word;
-  end;
-  TKeyInput = KeyInput;
-//---------------------------------------------------------------------------------
-// Global variables
-//---------------------------------------------------------------------------------
-
-var
-  Keys: TKeyInput;
-  delay: byte = 60;
-  rept: byte = 30; 
-  count: byte = 60;
-
-procedure ScanKeys();
-function KeysDown(): word;
-function KeysDownRepeat(): word;
-function KeysUp(): word;
-function KeysHeld(): word;
-procedure SetRepeat(SetDelay, SetRepeat: integer);
-
-
-
-
-implementation
-
-procedure SetRepeat(SetDelay, SetRepeat: integer);
-begin
-  delay := SetDelay;
-  rept := SetRepeat;
-end;
-
-//---------------------------------------------------------------------------------
-procedure ScanKeys();
-var
-  pressed, released: word;
-begin
-  Keys.Last := Keys.Held;
-  Keys.Held := (REG_KEYINPUT^ and $03ff) xor $03ff; // upper 6 bits clear on hw not emulated
-
-
-	pressed := Keys.Held and ( Keys.Last xor $03ff);
-
-	Keys.DownRepeat	:= Keys.DownRepeat or pressed;
-	Keys.Down := Keys.Down or pressed;
-
-
-	released := ((Keys.Held xor $03ff) and Keys.Last);
-
-	Keys.Up	:= Keys.Up or released;
-
-	Keys.Down := Keys.Down and not released;
-	Keys.DownRepeat := Keys.DownRepeat and not released;
-
-	Keys.Up := Keys.Up and not pressed;
-
-	if ( Keys.Last <> Keys.Held) then 
-    count := delay;
-
-
-	if ( delay <> 0) then
-	begin
-		dec(count);
-		if (count = 0) then
-		begin
-			count := rept;
-			Keys.DownRepeat := Keys.DownRepeat or Keys.Held;
-		end;
-	end;
-end;
-
-function KeysDownRepeat(): word;
-var
-	tmp: word; 
-begin
-  tmp := Keys.DownRepeat;
-	Keys.DownRepeat := 0;
-
-	KeysDownRepeat := tmp;
-end;
-
-function KeysDown(): word;
-var
-  tmp: word;
-begin
-  tmp := Keys.Down;
-  Keys.Down := 0;
-
-	KeysDown := tmp;
-end;
-
-function KeysUp(): word;
-var
-  tmp: word;
-begin
-  tmp := Keys.Up;
-	Keys.Up := 0;
-
-	KeysUp := tmp;
-end;
-
-function KeysHeld(): word;
-begin
-  KeysHeld := Keys.Held;
-end;
-
-end.

+ 0 - 70
packages/gbaunits/src/gba_irq.pas

@@ -1,70 +0,0 @@
-(*
-  gba_irq.pas 18/06/2006 4.20.45
-  ------------------------------------------------------------------------------
-  This lib is a raw porting of libgba library for gba (you can find it at
-  http://www.devkitpro.org).
-  
-  As this is a direct port from c, I'm pretty sure that something could not work
-  as you expect. I am even more sure that this code could be written better, so 
-  if you think that I have made some mistakes or you have some better 
-  implemented functions, let me know [francky74 (at) gmail (dot) com]
-  Enjoy!
-
-  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
-  (http://www.freepascal.org)
-  
-  Copyright (C) 2006  Francesco Lombardi
-  
-  This library is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Lesser General Public
-  License as published by the Free Software Foundation; either
-  version 2.1 of the License, or (at your option) any later version.
-  
-  This library is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-  Lesser General Public License for more details.
-  
-  You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, write to the Free Software
-  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
-  ------------------------------------------------------------------------------
-*)
-unit gba_irq;
-{$i def.inc}
-
-interface
-
-uses
-  gba_types, gba_regs;
-
-const
-  IRQ_MASTER_ON  = 1;
-  IRQ_MASTER_OFF = 0;
-  IRQ_BIT_VBLANK  = (1 shl 0);
-  IRQ_BIT_HBLANK  = (1 shl 1);
-  IRQ_BIT_VCOUNT  = (1 shl 2);
-  IRQ_BIT_TIMER0  = (1 shl 3);
-  IRQ_BIT_TIMER1  = (1 shl 4);
-  IRQ_BIT_TIMER2  = (1 shl 5);
-  IRQ_BIT_TIMER3  = (1 shl 6);
-  IRQ_BIT_SERIAL  = (1 shl 7);
-  IRQ_BIT_DMA0    = (1 shl 8);
-  IRQ_BIT_DMA1    = (1 shl 9);
-  IRQ_BIT_DMA2    = (1 shl 10);
-  IRQ_BIT_DMA3    = (1 shl 11);
-  IRQ_BIT_KEYS    = (1 shl 12);
-  IRQ_BIT_CART    = (1 shl 13);
-
-procedure SetIRQ(x: dword);
-
-implementation
-
-procedure SetIRQ(x: dword);
-begin
-  REG_INTERRUPT^ := x;
-end;
-
-
-end.
-

+ 0 - 68
packages/gbaunits/src/gba_mosaic.pas

@@ -1,68 +0,0 @@
-(*
-  gba_mosaic.pas  18/06/2006 4.22.03
-  ------------------------------------------------------------------------------
-  This lib is a raw porting of libgba library for gba (you can find it at
-  http://www.devkitpro.org).
-  
-  As this is a direct port from c, I'm pretty sure that something could not work
-  as you expect. I am even more sure that this code could be written better, so 
-  if you think that I have made some mistakes or you have some better 
-  implemented functions, let me know [francky74 (at) gmail (dot) com]
-  Enjoy!
-
-  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
-  (http://www.freepascal.org)
-  
-  Copyright (C) 2006  Francesco Lombardi
-  
-  This library is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Lesser General Public
-  License as published by the Free Software Foundation; either
-  version 2.1 of the License, or (at your option) any later version.
-  
-  This library is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-  Lesser General Public License for more details.
-  
-  You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, write to the Free Software
-  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
-  ------------------------------------------------------------------------------
-*)
-
-unit gba_mosaic;
-{$i def.inc}
-interface
-
-uses
-  gba_types;
-
-function MosaicBgH(x: dword): dword;
-function MosaicBgV(x: dword): dword;
-function MosaicObjH(x: dword): dword;
-function MosaicObjV(x: dword): dword;
-
-implementation 
-
-function MosaicBgH(x: dword): dword;
-begin
-  MosaicBgH := (x shl 0);
-end;
-
-function MosaicBgV(x: dword): dword;
-begin
-  MosaicBgV := (x shl 4);
-end;
-  
-function MosaicObjH(x: dword): dword;
-begin
-  MosaicObjH := (x shl 8);
-end;
-
-function MosaicObjV(x: dword): dword;
-begin
-  MosaicObjV := (x shl 12);
-end;
-
-end.

+ 0 - 269
packages/gbaunits/src/gba_regs.pas

@@ -1,269 +0,0 @@
-(*
-  gba_regs.pas  18/06/2006 4.22.49
-  ------------------------------------------------------------------------------
-  This lib is a raw porting of libgba library for gba (you can find it at
-  http://www.devkitpro.org).
-  
-  As this is a direct port from c, I'm pretty sure that something could not work
-  as you expect. I am even more sure that this code could be written better, so 
-  if you think that I have made some mistakes or you have some better 
-  implemented functions, let me know [francky74 (at) gmail (dot) com]
-  Enjoy!
-
-  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
-  (http://www.freepascal.org)
-  
-  Copyright (C) 2006  Francesco Lombardi
-  
-  This library is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Lesser General Public
-  License as published by the Free Software Foundation; either
-  version 2.1 of the License, or (at your option) any later version.
-  
-  This library is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-  Lesser General Public License for more details.
-  
-  You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, write to the Free Software
-  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
-  ------------------------------------------------------------------------------
-*)
-
-unit gba_regs;
-{$i def.inc}
-interface
-
-uses
-  gba_types;
-
-const
-  OAMMem          : ^word = pointer($7000000); // Sprites(128), coordinates, size..(total 1Kb)
-  VideoBuffer     : ^word = pointer($6000000); // Front Display Memory (the screen in mode 3-5)
-  SecondBuffer    : ^word = pointer($600A000); // Back Display Memory
-  
-  OAMData         : ^word = pointer($6010000); // Sprite data (bitmapped)
-  OAMdataTile     : ^word = pointer($6010000);
-  OAMdataBmp      : ^word = pointer($6014000);
-
-  BG_COLORS       : ^word = pointer($5000000); // Background Palette(256/16 colors)
-  OBJ_COLORS      : ^word = pointer($5000200); // Sprite Palette(256/16 colors)
-
-  REG_INTERRUPT   : ^dword = pointer($3007FFC);
-  REG_DISPCNT     : ^dword = pointer($4000000);  // Display control mode
-  REG_DISPCNT_L   : ^word = pointer($4000000);
-  REG_DISPCNT_H   : ^word = pointer($4000002);
-  REG_DISPSTAT    : ^word = pointer($4000004);
-{$OPTIMIZATION OFF}
-  REG_VCOUNT      : ^word = pointer($4000006);  // Vertical control sync
-{$OPTIMIZATION ON}
-  BGCTRL          : ^word = pointer($4000008);
-  REG_BG0CNT      : ^word = pointer($4000008);
-  REG_BG1CNT      : ^word = pointer($400000A);
-  REG_BG2CNT      : ^word = pointer($400000C);
-  REG_BG3CNT      : ^word = pointer($400000E);
-  
-  BG_OFFSET       : PBgScroll = pointer($4000010);
-  
-  REG_BG0HOFS     : ^word = pointer($4000010);
-  REG_BG0VOFS     : ^word = pointer($4000012);
-  REG_BG1HOFS     : ^word = pointer($4000014);
-  REG_BG1VOFS     : ^word = pointer($4000016);
-  REG_BG2HOFS     : ^word = pointer($4000018);
-  REG_BG2VOFS     : ^word = pointer($400001A);
-  REG_BG3HOFS     : ^word = pointer($400001C);
-  REG_BG3VOFS     : ^word = pointer($400001E);
-
-  REG_BG2PA       : ^word = pointer($4000020);
-  REG_BG2PB       : ^word = pointer($4000022);
-  REG_BG2PC       : ^word = pointer($4000024);
-  REG_BG2PD       : ^word = pointer($4000026);
-  REG_BG2X        : ^dword = pointer($4000028);
-  REG_BG2X_L      : ^word = pointer($4000028);
-  REG_BG2X_H      : ^word = pointer($400002A);
-  REG_BG2Y        : ^dword = pointer($400002C);
-  REG_BG2Y_L      : ^word = pointer($400002C);
-  REG_BG2Y_H      : ^word = pointer($400002E);
-  REG_BG3PA       : ^word = pointer($4000030);
-  REG_BG3PB       : ^word = pointer($4000032);
-  REG_BG3PC       : ^word = pointer($4000034);
-  REG_BG3PD       : ^word = pointer($4000036);
-  REG_BG3X        : ^dword = pointer($4000038);
-  REG_BG3X_L      : ^word = pointer($4000038);
-  REG_BG3X_H      : ^word = pointer($400003A);
-  REG_BG3Y        : ^dword = pointer($400003C);
-  REG_BG3Y_L      : ^word = pointer($400003C);
-  REG_BG3Y_H      : ^word = pointer($400003E);
-  REG_WIN0H       : ^word = pointer($4000040);
-  REG_WIN1H       : ^word = pointer($4000042);
-  REG_WIN0V       : ^word = pointer($4000044);
-  REG_WIN1V       : ^word = pointer($4000046);
-  REG_WININ       : ^word = pointer($4000048);
-  REG_WINOUT      : ^word = pointer($400004A);
-  
-  REG_MOSAIC      : ^dword = pointer($400004C);
-  REG_MOSAIC_L    : ^dword = pointer($400004C);
-  REG_MOSAIC_H    : ^dword = pointer($400004E);
-
-  REG_BLDMOD      : ^word = pointer($4000050);
-  REG_BLDCNT      : ^word = pointer($4000050);
-  REG_COLEV       : ^word = pointer($4000052);
-  REG_BLDALPHA    : ^word = pointer($4000052);
-  REG_COLEY       : ^word = pointer($4000054);
-  REG_BLDY        : ^word = pointer($4000054);
-  
-{$OPTIMIZATION OFF}
-  REG_SG10        : ^dword = pointer($4000060);
-  REG_SG10_L      : ^word = pointer($4000060);
-  REG_SG10_H      : ^word = pointer($4000062);
-  REG_SG11        : ^word = pointer($4000064);
-  REG_SG20        : ^word = pointer($4000068);
-  REG_SG21        : ^word = pointer($400006C);
-  REG_SG30        : ^dword = pointer($4000070);
-  REG_SG30_L      : ^word = pointer($4000070);
-  REG_SG30_H      : ^word = pointer($4000072);
-  REG_SG31        : ^word = pointer($4000074);
-  REG_SG40        : ^word = pointer($4000078);
-  REG_SG41        : ^word = pointer($400007C);
-  REG_SGCNT0      : ^dword = pointer($4000080);
-  REG_SGCNT0_L    : ^word = pointer($4000080);
-  REG_SGCNT0_H    : ^word = pointer($4000082);
-  REG_SGCNT1      : ^word = pointer($4000084);
-  REG_SGBIAS      : ^word = pointer($4000088);
-  REG_SGWR0       : ^dword = pointer($4000090);
-  REG_SGWR0_L     : ^word = pointer($4000090);
-  REG_SGWR0_H     : ^word = pointer($4000092);
-  REG_SGWR1       : ^dword = pointer($4000094);
-  REG_SGWR1_L     : ^word = pointer($4000094);
-  REG_SGWR1_H     : ^word = pointer($4000096);
-{$OPTIMIZATION ON}
-  REG_SGWR2       : ^dword = pointer($4000098);
-{$OPTIMIZATION OFF}
-  REG_SGWR2_L     : ^word = pointer($4000098);
-  REG_SGWR2_H     : ^word = pointer($400009A);
-  REG_SGWR3       : ^dword = pointer($400009C);
-  REG_SGWR3_L     : ^word = pointer($400009C);
-  REG_SGWR3_H     : ^word = pointer($400009E);
-  REG_SGFIF0A     : ^dword = pointer($40000A0);
-  REG_SGFIFOA_L   : ^word = pointer($40000A0);
-  REG_SGFIFOA_H   : ^word = pointer($40000A2);
-  REG_SGFIFOB     : ^dword = pointer($40000A4);
-  REG_SGFIFOB_L   : ^word = pointer($40000A4);
-  REG_SGFIFOB_H   : ^word = pointer($40000A6);
-{$OPTIMIZATION ON}
-
-  REG_DM0SAD      : ^dword = pointer($40000B0);
-  REG_DM0SAD_L    : ^word = pointer($40000B0);
-  REG_DM0SAD_H    : ^word = pointer($40000B2);
-  REG_DM0DAD      : ^dword = pointer($40000B4);
-  REG_DM0DAD_L    : ^word = pointer($40000B4);
-  REG_DM0DAD_H    : ^word = pointer($40000B6);
-  REG_DM0CNT      : ^dword = pointer($40000B8);
-  REG_DM0CNT_L    : ^word = pointer($40000B8);
-  REG_DM0CNT_H    : ^word = pointer($40000BA);
-  REG_DM1SAD      : ^dword = pointer($40000BC);
-  REG_DM1SAD_L    : ^word = pointer($40000BC);
-  REG_DM1SAD_H    : ^word = pointer($40000BE);
-  REG_DM1DAD      : ^dword = pointer($40000C0);
-  REG_DM1DAD_L    : ^word = pointer($40000C0);
-  REG_DM1DAD_H    : ^word = pointer($40000C2);
-  REG_DM1CNT      : ^dword = pointer($40000C4);
-  REG_DM1CNT_L    : ^word = pointer($40000C4);
-  REG_DM1CNT_H    : ^word = pointer($40000C6);
-  REG_DM2SAD      : ^dword = pointer($40000C8);
-  REG_DM2SAD_L    : ^word = pointer($40000C8);
-  REG_DM2SAD_H    : ^word = pointer($40000CA);
-  REG_DM2DAD      : ^dword = pointer($40000CC);
-  REG_DM2DAD_L    : ^word = pointer($40000CC);
-  REG_DM2DAD_H    : ^word = pointer($40000CE);
-  REG_DM2CNT      : ^dword = pointer($40000D0);
-  REG_DM2CNT_L    : ^word = pointer($40000D0);
-  REG_DM2CNT_H    : ^word = pointer($40000D2);
-  REG_DM3SAD      : ^dword = pointer($40000D4);
-  REG_DM3SAD_L    : ^word = pointer($40000D4);
-  REG_DM3SAD_H    : ^word = pointer($40000D6);
-  REG_DM3DAD      : ^dword = pointer($40000D8);
-  REG_DM3DAD_L    : ^word = pointer($40000D8);
-  REG_DM3DAD_H    : ^word = pointer($40000DA);
-  REG_DM3CNT      : ^dword = pointer($40000DC);
-  REG_DM3CNT_L    : ^word = pointer($40000DC);
-  REG_DM3CNT_H    : ^word = pointer($40000DE);
- 
-{$OPTIMIZATION OFF} 
-  REG_TM0CNT_L    : ^word = pointer($4000100);
-  REG_TM0CNT_H	  : ^word = pointer($4000102);
-  REG_TM1CNT_L	  : ^word = pointer($4000104);
-  REG_TM1CNT_H	  : ^word = pointer($4000106);
-  REG_TM2CNT_L	  : ^word = pointer($4000108);
-  REG_TM2CNT_H	  : ^word = pointer($400010A);
-  REG_TM3CNT_L	  : ^word = pointer($400010C);
-  REG_TM3CNT_H	  : ^word = pointer($400010E);
-{$OPTIMIZATION ON}
-
-{$OPTIMIZATION OFF}
-  REG_SCD0        : ^word = pointer($4000120);
-  REG_SCD1        : ^word = pointer($4000122);
-  REG_SCD2        : ^word = pointer($4000124);
-  REG_SCD3        : ^word = pointer($4000126);
- 
-  REG_SCCNT       : ^dword = pointer($4000128);
-  REG_SCCNT_L     : ^word = pointer($4000128);
-  REG_SIOCNT      : ^word = pointer($4000128);
-  REG_SCCNT_H     : ^word = pointer($400012A);
-  REG_SIODATA8    : ^word = pointer($400012A);
-  REG_SIODATA32   : ^dword = pointer($4000120);
-  REG_SIOMLT_SEND : ^word = pointer($400012A);
-  REG_SIOMLT_RECV : ^word = pointer($4000120);
-  REG_SIOMULTI0   : ^word = pointer($4000120);
-  REG_SIOMULTI1   : ^word = pointer($4000122);
-  REG_SIOMULTI2   : ^word = pointer($4000124);
-  REG_SIOMULTI3   : ^word = pointer($4000126);
-
-  REG_RCNT        : ^word = pointer($4000134);
-
-  REG_P1          : ^word = pointer($4000130);
-  REG_KEYINPUT    : ^word = pointer($4000130);
-  REG_P1CNT       : ^word = pointer($4000132);
-  REG_KEYCNT      : ^word = pointer($4000132);
-  REG_R           : ^word = pointer($4000134);
-  
-{$OPTIMIZATION ON}
-
-
-  REG_HS_CTRL     : ^word = pointer($4000140);
-  REG_JOYRE       : ^dword = pointer($4000150);
-  REG_JOYRE_L     : ^word = pointer($4000150);
-  REG_JOYRE_H     : ^word = pointer($4000152);
-  REG_JOYTR       : ^dword = pointer($4000154);
-  REG_JOYTR_L     : ^word = pointer($4000154);
-  REG_JOYTR_H     : ^word = pointer($4000156);
-  REG_JSTAT       : ^dword = pointer($4000158);
-  REG_JSTAT_L     : ^word = pointer($4000158);
-  REG_JSTAT_H     : ^word = pointer($400015A);
-  REG_IE          : ^word = pointer($4000200);
-  REG_IF          : ^word = pointer($4000202);
-  REG_WSCNT       : ^word = pointer($4000204);
-  REG_IME         : ^word = pointer($4000208);
-  REG_PAUSE       : ^word = pointer($4000300);
-
-  BIT0  = 1;
-  BIT1  = 2;
-  BIT2  = 4;
-  BIT3  = 8;
-  BIT4  = 16;
-  BIT5  = 32;
-  BIT6  = 64;
-  BIT7  = 128;
-  BIT8  = 256;
-  BIT9  = 512;
-  BIT10 = 1024;
-  BIT11 = 2048;
-  BIT12 = 4096;
-  BIT13 = 8192;
-  BIT14 = 16384;
-  BIT15 = 32768;
-
-implementation
-
-end.

+ 0 - 95
packages/gbaunits/src/gba_sio.pas

@@ -1,95 +0,0 @@
-(*
-  gba_sio.pas 18/06/2006 4.23.01
-  ------------------------------------------------------------------------------
-  This lib is a raw porting of libgba library for gba (you can find it at
-  http://www.devkitpro.org).
-  
-  As this is a direct port from c, I'm pretty sure that something could not work
-  as you expect. I am even more sure that this code could be written better, so 
-  if you think that I have made some mistakes or you have some better 
-  implemented functions, let me know [francky74 (at) gmail (dot) com]
-  Enjoy!
-
-  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
-  (http://www.freepascal.org)
-  
-  Copyright (C) 2006  Francesco Lombardi
-  
-  This library is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Lesser General Public
-  License as published by the Free Software Foundation; either
-  version 2.1 of the License, or (at your option) any later version.
-  
-  This library is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-  Lesser General Public License for more details.
-  
-  You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, write to the Free Software
-  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
-  ------------------------------------------------------------------------------
-*)
-unit gba_sio;
-{$i def.inc}
-interface
-
-uses
-  gba_types;
-
-const
-  SIO_8BIT  = $0000;	// Normal 8-bit communication mode
-  SIO_32BIT = $1000;	// Normal 32-bit communication mode
-  SIO_MULTI = $2000;	// Multi-play communication mode
-  SIO_UART  = $3000;	// UART communication mode
-  SIO_IRQ   = $4000;	// Enable serial irq
-
-
-//---------------------------------------------------------------------------------
-// baud rate settings
-//---------------------------------------------------------------------------------
-  SIO_9600   = $0000;
-  SIO_38400  = $0001;
-  SIO_57600  = $0002;
-  SIO_115200 = $0003;
-
-  SIO_CLK_INT  = (1 shl 0);	// Select internal clock
-  SIO_2MHZ_CLK = (1 shl 1);	// Select 2MHz clock
-  SIO_RDY      = (1 shl 2);	// Opponent SO state
-  SIO_SO_HIGH  = (1 shl 3);	// Our SO state
-  SIO_START    = (1 shl 7);
-
-
-//---------------------------------------------------------------------------------
-// SIO modes set with REG_RCNT
-//---------------------------------------------------------------------------------
-  R_NORMAL  = $0000;
-  R_MULTI   = $0000;
-  R_UART    = $0000;
-  R_GPIO    = $8000;
-  R_JOYBUS  = $C000;
-
-//---------------------------------------------------------------------------------
-// General purpose mode control bits used with REG_RCNT
-//---------------------------------------------------------------------------------
-  GPIO_SC  = $0001;	// Data
-  GPIO_SD	 = $0002;
-  GPIO_SI	 = $0004;
-  GPIO_SO	 = $0008;
-  GPIO_SC_IO  = $0010;	// Select I/O
-  GPIO_SD_IO  = $0020;
-  GPIO_SI_IO  = $0040;
-  GPIO_SO_IO  = $0080;
-  GPIO_SC_INPUT  = $0000;	// Input setting
-  GPIO_SD_INPUT  = $0000;
-  GPIO_SI_INPUT  = $0000;
-  GPIO_SO_INPUT  = $0000;
-  GPIO_SC_OUTPUT = $0010;	// Output setting
-  GPIO_SD_OUTPUT = $0020;
-  GPIO_SI_OUTPUT = $0040;
-  GPIO_SO_OUTPUT = $0080;
-
-
-implementation 
-
-end.

+ 0 - 149
packages/gbaunits/src/gba_sprites.pas

@@ -1,149 +0,0 @@
-(*
-  gba_sprites.pas 18/06/2006 4.28.18
-  ------------------------------------------------------------------------------
-  This lib is a raw porting of libgba library for gba (you can find it at
-  http://www.devkitpro.org).
-  
-  As this is a direct port from c, I'm pretty sure that something could not work
-  as you expect. I am even more sure that this code could be written better, so 
-  if you think that I have made some mistakes or you have some better 
-  implemented functions, let me know [francky74 (at) gmail (dot) com]
-  Enjoy!
-
-  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
-  (http://www.freepascal.org)
-  
-  Copyright (C) 2006  Francesco Lombardi
-  
-  This library is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Lesser General Public
-  License as published by the Free Software Foundation; either
-  version 2.1 of the License, or (at your option) any later version.
-  
-  This library is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-  Lesser General Public License for more details.
-  
-  You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, write to the Free Software
-  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
-  ------------------------------------------------------------------------------
-*)
-
-unit gba_sprites;
-{$i def.inc}
-interface
-
-uses
-  gba_types, gba_regs;
-
-
-const
-  OAM	: POBJATTR =	pointer($07000000);
-  OBJ_BASE_ADR	=	pointer($06010000);
-  BITMAP_OBJ_BASE_ADR	= pointer($06014000);
-
-  OBJ_ROT_SCALE_ON  = (1 shl 8);
-  OBJ_DISABLE = (1 shl 9);
-  OBJ_DOUBLE  = (1 shl 9);
-
-  OBJ_MOSAIC    = (1 shl 12);
-  OBJ_256_COLOR = (1 shl 13);
-  OBJ_16_COLOR  = (0 shl 13);
-
-  OBJ_HFLIP = (1 shl 12);
-  OBJ_VFLIP = (1 shl 13);
-
-
-
-type
-  SPRITE_SHAPES = (
-    SQUARE,
-    WIDE,
-    TALL
-  );
-  TSpriteShapes = SPRITE_SHAPES;
-  
-  SPRITE_SIZECODE = (
-    Sprite_8x8,
-    Sprite_16x16,
-    Sprite_32x32,
-    Sprite_64x64,
-    Sprite_16x8,
-    Sprite_32x8,
-    Sprite_32x16,
-    Sprite_64x32,
-    Sprite_8x16,
-    Sprite_8x32,
-    Sprite_16x32,
-    Sprite_32x64
-  );
-  TSpriteSizeCode = SPRITE_SIZECODE;
-
-function ObjY(m: integer): integer; inline;
-function ObjMode(m: integer): integer; inline;
-function ObjShape(m: integer): integer; inline;
-function ObjX(m: integer): integer; inline;
-function ObjRotScale(m: integer): integer; inline;
-function ObjSize(m: integer): integer; inline;
-function ObjChar(m: integer): integer; inline;
-function ObjPriority(m: integer): integer; inline;
-function ObjPalette(m: integer): integer; inline;
-
-{$define ObjTranslucent := ObjMode(1)}
-{$define ObjObjWindow := ObjMode(2)}
-{$define ObjSquare := ObjShape(0)}
-{$define ObjWide := ObjShape(1)}
-{$define ObjTall := ObjShape(2)}
-
-
-implementation
-
-function ObjY(m: integer): integer; inline;
-begin
-  ObjY := ((m) and $00ff);
-end;
-
-function ObjMode(m: integer): integer; inline;
-begin
-  ObjMode := ((m) shl 10);
-end;
-
-function ObjShape(m: integer): integer; inline;
-begin
-  ObjShape := ((m) shl 14);
-end;
-
-function ObjX(m: integer): integer; inline;
-begin
-  ObjX := ((m) and $01ff);
-end;
-
-function ObjRotScale(m: integer): integer; inline;
-begin
-  ObjRotScale := ((m) shl 9);
-end;
-
-function ObjSize(m: integer): integer; inline;
-begin
-  ObjSize := ((m) shl 14);
-end;
-
-function ObjChar(m: integer): integer; inline;
-begin
-  ObjChar := ((m) and $03ff);
-end;
-
-function ObjPriority(m: integer): integer; inline;
-begin
-  ObjPriority := ((m) shl 10);
-end;
-
-function ObjPalette(m: integer): integer; inline;
-begin
-  ObjPalette := ((m) shl 12);
-end;
-
-end.
-

+ 0 - 47
packages/gbaunits/src/gba_timer.pas

@@ -1,47 +0,0 @@
-(*
-  gba_timer.pas 18/06/2006 4.29.04
-  ------------------------------------------------------------------------------
-  This lib is a raw porting of libgba library for gba (you can find it at
-  http://www.devkitpro.org).
-  
-  As this is a direct port from c, I'm pretty sure that something could not work
-  as you expect. I am even more sure that this code could be written better, so 
-  if you think that I have made some mistakes or you have some better 
-  implemented functions, let me know [francky74 (at) gmail (dot) com]
-  Enjoy!
-
-  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
-  (http://www.freepascal.org)
-  
-  Copyright (C) 2006  Francesco Lombardi
-  
-  This library is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Lesser General Public
-  License as published by the Free Software Foundation; either
-  version 2.1 of the License, or (at your option) any later version.
-  
-  This library is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-  Lesser General Public License for more details.
-  
-  You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, write to the Free Software
-  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
-  ------------------------------------------------------------------------------
-*)
-unit gba_timer;
-{$i def.inc}
-interface
-
-uses
-  gba_types, gba_regs;
-
-const
-  TIMER_COUNT = BIT2;
-  TIMER_IRQ	  = BIT6;
-  TIMER_START	= BIT7;
-
-implementation
-
-end.

+ 0 - 181
packages/gbaunits/src/gba_types.pas

@@ -1,181 +0,0 @@
-(*
-  gba_types.pas 01/09/2006 19.57.46
-  ------------------------------------------------------------------------------
-  This lib is a raw porting of libgba library for gba (you can find it at
-  http://www.devkitpro.org).
-  
-  As this is a direct port from c, I'm pretty sure that something could not work
-  as you expect. I am even more sure that this code could be written better, so 
-  if you think that I have made some mistakes or you have some better 
-  implemented functions, let me know [francky74 (at) gmail (dot) com]
-  Enjoy!
-
-  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
-  (http://www.freepascal.org)
-  
-  Copyright (C) 2006  Francesco Lombardi
-  
-  This library is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Lesser General Public
-  License as published by the Free Software Foundation; either
-  version 2.1 of the License, or (at your option) any later version.
-  
-  This library is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-  Lesser General Public License for more details.
-  
-  You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, write to the Free Software
-  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
-  ------------------------------------------------------------------------------
-*)
-unit gba_types;
-{$i def.inc}
-interface
-
-type
-  (* Unsigned types *)
-  u8  = byte;
-  u16 = word;
-  u32 = dword;
-  pu8 = ^u8;
-  pu16 = ^u16;
-  pu32 = ^u32;
-  
-  (* Signed types *)
-  s8  = shortint;
-  s16 = smallint;
-  s32 = longint;
-  ps8 = ^s8;
-  ps16 = ^s16;
-  ps32 = ^s32;
-
-  BGAffineSource = record
-    x: longint;
-    y: longint;
-    tX: smallint;
-    tY: smallint;
-    sX: smallint;
-    sY: smallint;
-    theta: smallint;
-  end;
-  TBgAffineSource = BGAffineSource;
-  PBgAffineSource = ^TBgAffineSource;
-   
-  BGAffineDest = record
-    pa: smallint;
-    pb: smallint;
-    pc: smallint;
-    pd: smallint;
-    x: longint;
-    y: longint;
-  end;
-  TBgAffineDest = BGAffineDest;
-  PBgAffineDest = ^TBgAffineDest;
-
-  ObjAffineSource = record
-    sX: smallint;
-    sY: smallint;
-    theta: word;
-  end;
-  TObjAffineSource = ObjAffineSource;
-  PObjAffineSource = ^TObjAffineSource;
-
-  ObjAffineDest = record
-    pa: smallint;
-    pb: smallint;
-    pc: smallint;
-    pd: smallint;
-  end;
-  TObjAffineDest = ObjAffineDest;
-  PObjAffineDest = ^TObjAffineDest;
-
-  BUP = record
-    SrcNum: word;				  // Source Data Byte Size
-    SrcBitNum: byte;			  // 1 Source Data Bit Number
-    DestBitNum: byte;			  // 1 Destination Data Bit Number
-    DestOffset: dword;		  // Number added to Source Data
-    DestOffset0_On: dword;	// Flag to add/not add Offset to 0 Data
-  end;
-  TBUP = BUP;
-  PBUP = ^TBUP;
-
-  FIXED = longint;
-  TFixed = FIXED;
-  
-  COLOR = word;
-  TColor = COLOR;
-
-  
-  MultiBootParam = record 
-    reserved1: array [0..4] of dword;
-    handshake_data: byte;
-    padding: byte;
-    handshake_timeout: word;
-    probe_count: byte;
-    client_data: array [0..2] of byte;
-    palette_data: byte;
-    response_bit: byte;
-    client_bit: byte;
-    reserved2: byte;
-    boot_srcp: ^byte;
-    boot_endp: ^byte;
-    masterp: ^byte;
-    reserved3: array [0..2] of ^byte;
-    system_work2: array [0..3] of dword;
-    sendflag: byte;
-    probe_target_bit: byte;
-    check_wait: byte;
-    server_type: byte;
-  end;
-  TMultiBootParam = MultiBootParam;
-  PMultiBootParam = ^TMultiBootParam;
-  
-  MULTIBOOT_MODES = ( MODE32_NORMAL, MODE16_MULTI, MODE32_2MHZ);
-  TMultiBootModes = MULTIBOOT_MODES;
-  
-  DMA_MODES = (
-    FILL    = (1 shl 24),
-    COPY16  = (0 shl 26),
-    COPY32  = (1 shl 26)
-  );
-  TDMAModes = DMA_MODES;
-
-  KEYPAD_BITS = integer;
-  TKeyPadBits = KEYPAD_BITS;
-  
-  OBJATTR = record
-    attr0: word;
-    attr1: word;
-    attr2: word;
-    dummy: word;
-  end;
-  TObjAttr = OBJATTR;
-  PObjAttr = ^TObjAttr;
-
-  OBJAFFINE = record
-    dummy0: array [0..2] of word;
-    pa: smallint;
-    dummy1: array [0..2] of word;
-    pb: smallint;
-    dummy2: array [0..2] of word;
-    pc: smallint;
-    dummy3: array [0..2] of word;
-    pd: smallint;
-  end;
-  TObjAffine = OBJAFFINE;
-  PObjAffine = ^TObjAffine;
-  
-  bg_scroll = record
-    x: word;
-    y: word;
-  end;
-  TBgScroll = bg_scroll;
-  PBgScroll = ^TBgScroll;  
-
-
-implementation
-
-
-end.

+ 0 - 284
packages/gbaunits/src/gba_video.pas

@@ -1,284 +0,0 @@
-(*
-  gba_video.pas 18/06/2006 4.38.37
-  ------------------------------------------------------------------------------
-  This lib is a raw porting of libgba library for gba (you can find it at
-  http://www.devkitpro.org).
-
-  As this is a direct port from c, I'm pretty sure that something could not work
-  as you expect. I am even more sure that this code could be written better, so
-  if you think that I have made some mistakes or you have some better
-  implemented functions, let me know [francky74 (at) gmail (dot) com]
-  Enjoy!
-
-  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
-  (http://www.freepascal.org)
-
-  Copyright (C) 2006  Francesco Lombardi
-
-  This library is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Lesser General Public
-  License as published by the Free Software Foundation; either
-  version 2.1 of the License, or (at your option) any later version.
-
-  This library is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-  Lesser General Public License for more details.
-
-  You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, write to the Free Software
-  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
-  ------------------------------------------------------------------------------
-*)
-unit gba_video;
-{$i def.inc}
-
-interface
-
-uses
-  gba_types, gba_regs;
-
-type
-  LCDC_IRQ = (
-    LCDC_VBL_FLAG   = (1 shl 0),
-    LCDC_HBL_FLAG   = (1 shl 1),
-    LCDC_VCNT_FLAG  = (1 shl 2),
-    LCDC_VBL        = (1 shl 3),
-    LCDC_HBL        = (1 shl 4),
-    LCDC_VCNT       = (1 shl 5)
-  );
-  TLCDCIRQ = LCDC_IRQ;
-
-  BG_CTRL_BITS = (
-    BG_MOSAIC     = BIT6,
-    BG_16_COLOR		=	(0 shl 7),
-    BG_256_COLOR	=	BIT7,
-    BG_WRAP			=	BIT13,
-    BG_SIZE_0		=	(0 shl 14),
-    BG_SIZE_1		=	(1 shl 14),
-    BG_SIZE_2		=	(2 shl 14),
-    BG_SIZE_3		=	(3 shl 14)
-  );
-  TBgCTRLBits = BG_CTRL_BITS;
-
-  NAMETABLE  = array [0..31, 0..31] of word;
-  TNameTable = NAMETABLE;
-  PNameTable = ^TNameTable;
-
-  MODE3_LINE = array [0..239] of word;
-  TMODE3Line = MODE3_LINE;
-
-  MODE5_LINE = array [0..159] of word;
-  TMODE5Line = MODE5_LINE;
-
-
-const
-  MODE_0	=	0;
-  MODE_1	=	1;
-  MODE_2	=	2;
-  MODE_3	=	3;
-  MODE_4	=	4;
-  MODE_5	=	5;
-
-  BACKBUFFER	=	BIT4;
-  OBJ_1D_MAP	=	BIT6;
-  LCDC_OFF	=	BIT7;
-  BG0_ON		=	BIT8;
-  BG1_ON		=	BIT9;
-  BG2_ON		=	BIT10;
-  BG3_ON		=	BIT11;
-  OBJ_ON		=	BIT12;
-  WIN0_ON		=	BIT13;
-  WIN1_ON		=	BIT14;
-  OBJ_WIN_ON	=	BIT15;
-
-  BG0_ENABLE		=	BG0_ON;
-  BG1_ENABLE		=	BG1_ON;
-  BG2_ENABLE		=	BG2_ON;
-  BG3_ENABLE		=	BG3_ON;
-  OBJ_ENABLE		=	OBJ_ON;
-  WIN0_ENABLE		=	WIN0_ON;
-  WIN1_ENABLE		=	WIN1_ON;
-  OBJ_WIN_ENABLE	=	BG0_ON;
-
-  BG_ALL_ON		=	BG0_ON or BG1_ON or BG2_ON or BG3_ON;
-  BG_ALL_ENABLE	=	BG0_ON or BG1_ON or BG2_ON or BG3_ON;
-
-
-const
-  MAP : PNameTable = pointer($06000000);
-  BG_WID_32 = BG_SIZE_0;
-  BG_WID_64 = BG_SIZE_1;
-  BG_HT_32  = BG_SIZE_0;
-  BG_HT_64  = BG_SIZE_2;
-//---------------------------------------------------------------------------------
-// Symbolic names for the rot/scale map sizes
-//---------------------------------------------------------------------------------
-  ROTBG_SIZE_16  = BG_SIZE_0;
-  ROTBG_SIZE_32  = BG_SIZE_1;
-  ROTBG_SIZE_64  = BG_SIZE_2;
-  ROTBG_SIZE_128 = BG_SIZE_3;
-  MODE3_FB: ^TMODE3Line = pointer($06000000);
-  MODE5_FB: ^TMODE5Line = pointer($06000000);
-  MODE5_BB: ^TMODE5Line = pointer($0600A000);
-
-
-function VCount(m: integer): dword; inline;
-function BgSize(m: integer): integer; inline;
-function CharBase(m: integer): integer; inline;
-function CharBaseAdr(m: integer): integer; inline;
-function MapBaseAdr(m: integer): integer; inline;
-function ScreenBase(m: integer): integer; inline;
-function TileBase(m: integer): integer; inline;
-function TileBaseAdr(m: integer): integer; inline;
-function BgPriority(m: integer): integer; inline;
-function BgPalette(m: integer): integer; inline;
-function PatRAM4(x, tn: integer): dword; inline;
-function PatRAM8(x, tn: integer): dword; inline;
-function SprVRAM(tn: integer): dword; inline;
-
-
-procedure SetMode(mode: dword); inline;
-procedure Wait(count: dword);
-procedure WaitForVBlank(); inline;
-procedure WaitForVDraw(); inline;
-procedure VSync(); inline;
-function Flip(): pword;
-
-function RGB(const r, g, b: word): word;inline;
-function RGB5(const r, g, b: word): word;inline;
-function RGB8(const r, g, b: word): word;inline;
-
-implementation
-
-function VCount(m: integer): dword; inline;
-begin
-  VCount := m shl 8;
-end;
-
-function BgSize(m: integer): integer; inline;
-begin
-  BgSize := ((m shl 14));
-end;
-
-function CharBase(m: integer): integer; inline;
-begin
-  CharBase := ((m) shl 2);
-end;
-
-function CharBaseAdr(m: integer): integer; inline;
-begin
-  CharBaseAdr := ($6000000 + ((m) shl 14));
-end;
-
-function MapBaseAdr(m: integer): integer; inline;
-begin
-  MapBaseAdr := ($6000000 + ((m) shl 11));
-end;
-
-function ScreenBase(m: integer): integer; inline;
-begin
-  ScreenBase := ((m) shl 8);
-end;
-
-//alternate names for char and screen base
-function TileBase(m: integer): integer; inline;
-begin
-  TileBase := ((m) shl 2);
-end;
-
-function TileBaseAdr(m: integer): integer; inline;
-begin
-  TileBaseAdr := ($6000000 + ((m) shl 14));
-end;
-
-function BgPriority(m: integer): integer; inline;
-begin
-  BgPriority := (m);
-end;
-
-function BgPalette(m: integer): integer; inline;
-begin
-  BgPalette := ((m) shl 12);
-end;
-
-(*---------------------------------------------------------------------------------
-	CHAR_BASE_ADR() is the direct equivalent to old PATRAM(),
-	giving the base address of a chr bank.
-	These macros pinpoint the base address of a single tile.
----------------------------------------------------------------------------------*)
-function PatRAM4(x, tn: integer): dword; inline;
-begin
-  PatRAM4 := (dword($6000000 or (((x) shl 14) + ((tn) shl 5)) ));
-end;
-
-function PatRAM8(x, tn: integer): dword; inline;
-begin
-  PatRAM8 := (dword($6000000 or (((x) shl 14) + ((tn) shl 6)) ));
-end;
-
-function SprVRAM(tn: integer): dword; inline;
-begin
-  SprVRAM := (dword($6000000 or $10000 or ((tn) shl 5)));
-end;
-
-procedure SetMode(mode: dword); inline;
-begin
-  REG_DISPCNT^ := (mode);
-end;
-
-procedure Wait(count: dword);
-var
-  vline: word;
-begin
-	vline := REG_VCOUNT^;
-	dec(count);
-	while (count > 0) do
-	begin
-		while(vline = REG_VCOUNT^) do;
-		while(vline <> REG_VCOUNT^) do;
-		dec(count);
-	end;
-end;
-
-procedure WaitForVBlank(); inline;
-begin
-  while (REG_VCOUNT^ < 160) do
-end;
-
-procedure WaitForVDraw(); inline;
-begin
- 	while (REG_VCOUNT^ >= 160) do
-end;
-
-// wait till the _next_ vblank
-// Note that for real work, using a VBlank interrupt is preferred
-procedure VSync(); inline;
-begin
-	WaitForVDraw();	
-  WaitForVBlank();
-end;
-
-function Flip(): pword;
-begin
-  VideoBuffer := pword(dword(VideoBuffer) or $0000A000);
-  REG_DISPCNT^ := REG_DISPCNT^ or $0010;
-  Flip := VideoBuffer;
-end;
-
-function RGB(const r, g, b: word): word;inline;
-begin
-  RGB := ((r) + (g shl 5) + (b shl 10));
-end;
-
-function RGB5(const r, g, b: word): word;inline;
-begin
-  RGB5 := ((r) or ((g) shl 5) or ((b) shl 10));
-end;
-
-function RGB8(const r, g, b: word): word;inline;
-begin
-  RGB8 := ( (((b) shr 3) shl 10) or (((g) shr 3) shl 5) or ((r) shr 3) );
-end;
-
-end.

+ 0 - 83
packages/gbaunits/src/gba_window.pas

@@ -1,83 +0,0 @@
-(*
-  gba_window.pas  18/06/2006 4.40.07
-  ------------------------------------------------------------------------------
-  This lib is a raw porting of libgba library for gba (you can find it at
-  http://www.devkitpro.org).
-  
-  As this is a direct port from c, I'm pretty sure that something could not work
-  as you expect. I am even more sure that this code could be written better, so 
-  if you think that I have made some mistakes or you have some better 
-  implemented functions, let me know [francky74 (at) gmail (dot) com]
-  Enjoy!
-
-  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
-  (http://www.freepascal.org)
-  
-  Copyright (C) 2006  Francesco Lombardi
-  
-  This library is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Lesser General Public
-  License as published by the Free Software Foundation; either
-  version 2.1 of the License, or (at your option) any later version.
-  
-  This library is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-  Lesser General Public License for more details.
-  
-  You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, write to the Free Software
-  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
-  ------------------------------------------------------------------------------
-*)
-
-unit gba_window;
-{$i def.inc}
-interface
-
-uses 
-  gba_types;
-
-const 
-  WIN_0_BG0 = (1 shl 0);
-  WIN_0_BG1 = (1 shl 1);
-  WIN_0_BG2 = (1 shl 2);
-  WIN_0_BG3 = (1 shl 3);
-  WIN_0_OBJ = (1 shl 4);
-  WIN_0_SPE = (1 shl 5);
-  WIN_1_BG0 = (1 shl 8);
-  WIN_1_BG1 = (1 shl 9);
-  WIN_1_BG2 = (1 shl 10);
-  WIN_1_BG3 = (1 shl 11);
-  WIN_1_OBJ = (1 shl 12);
-  WIN_1_SPE = (1 shl 13);
-
-function WinRight(x: dword): dword;
-function WinLeft(x: dword): dword;
-function WinDown(x: dword): dword;
-function WinTop(x: dword): dword;
-
-
-implementation
-
-function WinRight(x: dword): dword;
-begin
-  WinRight := (x shl 0);
-end;
-
-function WinLeft(x: dword): dword;
-begin
-  WinLeft := (x shl 8);
-end;
-
-function WinDown(x: dword): dword;
-begin
-  WinDown := (x shl 0);
-end;
-
-function WinTop(x: dword): dword;
-begin
-  WinTop := (x shl 8);
-end;
-
-end.

+ 390 - 169
packages/gbaunits/Makefile → packages/libgbafpc/Makefile

@@ -1,5 +1,5 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/01/26]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/05/07]
 #
 #
 default: all
 default: all
 MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded
 MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded
@@ -242,486 +242,487 @@ ifeq ($(UNITSDIR),)
 UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
 UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
 endif
 endif
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
-override PACKAGE_NAME=gbaunits
-override PACKAGE_VERSION=0.1.4
+override PACKAGE_NAME=libgbafpc
+override PACKAGE_VERSION=2.0.0
+BINUTILSPREFIX=arm-eabi-
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),i386-win32)
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),i386-beos)
 ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
 ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netware)
 ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
 ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
 ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wince)
 ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
 ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
 ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
 ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
 ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
 ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
 ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
 ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
 ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
 ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),arm-linux)
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
 ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),arm-wince)
 ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),arm-gba)
 ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),arm-nds)
 ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
 ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
 ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_UNITS+=gba_bg gba_blend gba_core gba_dma gba_irq gba_sio gba_mosaic gba_regs gba_sprites gba_timer gba_types gba_video gba_window gba_bios gba_input gba_fade
+override TARGET_UNITS+=gba
 endif
 endif
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),i386-win32)
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),i386-beos)
 ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
 ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netware)
 ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
 ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
 ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wince)
 ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
 ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
 ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
 ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
 ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
 ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
 ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
 ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
 ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
 ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),arm-linux)
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
 ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),arm-wince)
 ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),arm-gba)
 ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),arm-nds)
 ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
 ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
 ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_LOADERS+=bios_asm core_asm
+override TARGET_LOADERS+=core_asm
 endif
 endif
-override INSTALL_FPCPACKAGE=y
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 ifeq ($(FULL_TARGET),i386-go32v2)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-win32)
 ifeq ($(FULL_TARGET),i386-win32)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 ifeq ($(FULL_TARGET),i386-os2)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
 ifeq ($(FULL_TARGET),i386-freebsd)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-beos)
 ifeq ($(FULL_TARGET),i386-beos)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
 ifeq ($(FULL_TARGET),i386-netbsd)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
 ifeq ($(FULL_TARGET),i386-solaris)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
 ifeq ($(FULL_TARGET),i386-qnx)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netware)
 ifeq ($(FULL_TARGET),i386-netware)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
 ifeq ($(FULL_TARGET),i386-openbsd)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
 ifeq ($(FULL_TARGET),i386-wdosx)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
 ifeq ($(FULL_TARGET),i386-darwin)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 ifeq ($(FULL_TARGET),i386-emx)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
 ifeq ($(FULL_TARGET),i386-watcom)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wince)
 ifeq ($(FULL_TARGET),i386-wince)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
 ifeq ($(FULL_TARGET),i386-embedded)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
 ifeq ($(FULL_TARGET),i386-symbian)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
 ifeq ($(FULL_TARGET),m68k-linux)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 ifeq ($(FULL_TARGET),m68k-amiga)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
 ifeq ($(FULL_TARGET),m68k-atari)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
 ifeq ($(FULL_TARGET),m68k-palmos)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
 ifeq ($(FULL_TARGET),m68k-embedded)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
 ifeq ($(FULL_TARGET),powerpc-linux)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
 ifeq ($(FULL_TARGET),powerpc-amiga)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
 ifeq ($(FULL_TARGET),powerpc-macos)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
 ifeq ($(FULL_TARGET),powerpc-embedded)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
 ifeq ($(FULL_TARGET),sparc-linux)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
 ifeq ($(FULL_TARGET),sparc-solaris)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
 ifeq ($(FULL_TARGET),sparc-embedded)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
 ifeq ($(FULL_TARGET),x86_64-linux)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
 ifeq ($(FULL_TARGET),x86_64-win64)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 ifeq ($(FULL_TARGET),x86_64-embedded)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),arm-linux)
 ifeq ($(FULL_TARGET),arm-linux)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
 ifeq ($(FULL_TARGET),arm-palmos)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),arm-wince)
 ifeq ($(FULL_TARGET),arm-wince)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),arm-gba)
 ifeq ($(FULL_TARGET),arm-gba)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),arm-nds)
 ifeq ($(FULL_TARGET),arm-nds)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
 ifeq ($(FULL_TARGET),arm-embedded)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
 ifeq ($(FULL_TARGET),arm-symbian)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 ifeq ($(FULL_TARGET),powerpc64-embedded)
-override COMPILER_OPTIONS+=-CX
+override TARGET_EXAMPLEDIRS+=examples
 endif
 endif
+override INSTALL_FPCPACKAGE=y
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
 override COMPILER_INCLUDEDIR+=src
 override COMPILER_INCLUDEDIR+=src
 endif
 endif
@@ -1980,6 +1981,24 @@ ifdef TARGET_RSTS
 override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
 override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
 override CLEANRSTFILES+=$(RSTFILES)
 override CLEANRSTFILES+=$(RSTFILES)
 endif
 endif
+.PHONY: fpc_examples
+ifneq ($(TARGET_EXAMPLES),)
+HASEXAMPLES=1
+override EXAMPLESOURCEFILES:=$(wildcard $(addsuffix .pp,$(TARGET_EXAMPLES)) $(addsuffix .pas,$(TARGET_EXAMPLES)) $(addsuffix .lpr,$(TARGET_EXAMPLES)) $(addsuffix .dpr,$(TARGET_EXAMPLES)))
+override EXAMPLEFILES:=$(addsuffix $(EXEEXT),$(TARGET_EXAMPLES))
+override EXAMPLEOFILES:=$(addsuffix $(OEXT),$(TARGET_EXAMPLES)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_EXAMPLES))) $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_EXAMPLES)))
+override CLEANEXEFILES+=$(EXAMPLEFILES) $(EXAMPLEOFILES)
+ifeq ($(OS_TARGET),os2)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_EXAMPLES))
+endif
+ifeq ($(OS_TARGET),emx)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_EXAMPLES))
+endif
+endif
+ifneq ($(TARGET_EXAMPLEDIRS),)
+HASEXAMPLES=1
+endif
+fpc_examples: all $(EXAMPLEFILES) $(addsuffix _all,$(TARGET_EXAMPLEDIRS))
 .PHONY: fpc_all fpc_smart fpc_debug fpc_release fpc_shared
 .PHONY: fpc_all fpc_smart fpc_debug fpc_release fpc_shared
 $(FPCMADE): $(ALLDEPENDENCIES) $(ALLTARGET)
 $(FPCMADE): $(ALLDEPENDENCIES) $(ALLTARGET)
 	@$(ECHOREDIR) Compiled > $(FPCMADE)
 	@$(ECHOREDIR) Compiled > $(FPCMADE)
@@ -2383,12 +2402,216 @@ endif
 fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS))
 fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS))
 fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
 fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
 fpc_makefiles: fpc_makefile fpc_makefile_dirs
 fpc_makefiles: fpc_makefile fpc_makefile_dirs
+ifeq ($(FULL_TARGET),i386-linux)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+TARGET_EXAMPLEDIRS_EXAMPLES=1
+endif
+ifdef TARGET_EXAMPLEDIRS_EXAMPLES
+examples_all:
+	$(MAKE) -C examples all
+examples_debug:
+	$(MAKE) -C examples debug
+examples_smart:
+	$(MAKE) -C examples smart
+examples_release:
+	$(MAKE) -C examples release
+examples_units:
+	$(MAKE) -C examples units
+examples_examples:
+	$(MAKE) -C examples examples
+examples_shared:
+	$(MAKE) -C examples shared
+examples_install:
+	$(MAKE) -C examples install
+examples_sourceinstall:
+	$(MAKE) -C examples sourceinstall
+examples_exampleinstall:
+	$(MAKE) -C examples exampleinstall
+examples_distinstall:
+	$(MAKE) -C examples distinstall
+examples_zipinstall:
+	$(MAKE) -C examples zipinstall
+examples_zipsourceinstall:
+	$(MAKE) -C examples zipsourceinstall
+examples_zipexampleinstall:
+	$(MAKE) -C examples zipexampleinstall
+examples_zipdistinstall:
+	$(MAKE) -C examples zipdistinstall
+examples_clean:
+	$(MAKE) -C examples clean
+examples_distclean:
+	$(MAKE) -C examples distclean
+examples_cleanall:
+	$(MAKE) -C examples cleanall
+examples_info:
+	$(MAKE) -C examples info
+examples_makefiles:
+	$(MAKE) -C examples makefiles
+examples:
+	$(MAKE) -C examples all
+.PHONY: examples_all examples_debug examples_smart examples_release examples_units examples_examples examples_shared examples_install examples_sourceinstall examples_exampleinstall examples_distinstall examples_zipinstall examples_zipsourceinstall examples_zipexampleinstall examples_zipdistinstall examples_clean examples_distclean examples_cleanall examples_info examples_makefiles examples
+endif
 all: fpc_all
 all: fpc_all
 debug: fpc_debug
 debug: fpc_debug
 smart: fpc_smart
 smart: fpc_smart
 release: fpc_release
 release: fpc_release
 units: fpc_units
 units: fpc_units
-examples:
+examples: fpc_examples
 shared: fpc_shared
 shared: fpc_shared
 install: fpc_install
 install: fpc_install
 sourceinstall: fpc_sourceinstall
 sourceinstall: fpc_sourceinstall
@@ -2398,7 +2621,7 @@ zipinstall: fpc_zipinstall
 zipsourceinstall: fpc_zipsourceinstall
 zipsourceinstall: fpc_zipsourceinstall
 zipexampleinstall: fpc_zipexampleinstall
 zipexampleinstall: fpc_zipexampleinstall
 zipdistinstall: fpc_zipdistinstall
 zipdistinstall: fpc_zipdistinstall
-clean: fpc_clean
+clean: fpc_clean $(addsuffix _clean,$(TARGET_EXAMPLEDIRS))
 distclean: fpc_distclean
 distclean: fpc_distclean
 cleanall: fpc_cleanall
 cleanall: fpc_cleanall
 info: fpc_info
 info: fpc_info
@@ -2408,7 +2631,5 @@ ifneq ($(wildcard fpcmake.loc),)
 include fpcmake.loc
 include fpcmake.loc
 endif
 endif
 .NOTPARALLEL:
 .NOTPARALLEL:
-core_asm$(OEXT):src/core_asm.as
-	$(AS) -o $(UNITTARGETDIRPREFIX)core_asm$(OEXT) src/core_asm.as
-bios_asm$(OEXT):src/bios_asm.as
-	$(AS) -o $(UNITTARGETDIRPREFIX)bios_asm$(OEXT) src/bios_asm.as
+core_asm$(OEXT):src/gba/core_asm.as
+	$(AS) -o $(UNITTARGETDIRPREFIX)core_asm$(OEXT) src/gba/core_asm.as

+ 37 - 0
packages/libgbafpc/Makefile.fpc

@@ -0,0 +1,37 @@
+#
+#   Makefile.fpc for gba units
+#
+
+[package]
+name=libgbafpc
+version=2.0.0
+
+[target]
+loaders=core_asm
+units=gba
+exampledirs=examples
+
+
+[compiler]
+options=
+includedir=src
+sourcedir=src tests
+
+[prerules]
+BINUTILSPREFIX=arm-eabi-
+
+[install]
+fpcpackage=y
+
+[default]
+cpu=arm
+target=gba
+fpcdir=../..
+
+[require]
+nortl=y
+
+[rules]
+.NOTPARALLEL:
+core_asm$(OEXT):src/gba/core_asm.as
+        $(AS) -o $(UNITTARGETDIRPREFIX)core_asm$(OEXT) src/gba/core_asm.as

+ 2286 - 0
packages/libgbafpc/examples/Makefile

@@ -0,0 +1,2286 @@
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/05/07]
+#
+default: all
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) solaris qnx
+LIMIT83fs = go32v2 os2 emx watcom
+OSNeedsComspecToRunBatch = go32v2 watcom
+FORCE:
+.PHONY: FORCE
+override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
+ifneq ($(findstring darwin,$(OSTYPE)),)
+inUnix=1 #darwin
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+endif
+SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifdef inUnix
+SRCBATCHEXT=.sh
+else
+ifdef inOS2
+SRCBATCHEXT=.cmd
+else
+SRCBATCHEXT=.bat
+endif
+endif
+ifdef COMSPEC
+ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
+RUNBATCH=$(COMSPEC) /C
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+override DEFAULT_FPCDIR=../../..
+ifndef FPC
+ifdef PP
+FPC=$(PP)
+endif
+endif
+ifndef FPC
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+ifneq ($(CPU_TARGET),)
+FPC:=$(shell $(FPCPROG) -P$(CPU_TARGET) -PB)
+else
+FPC:=$(shell $(FPCPROG) -PB)
+endif
+ifneq ($(findstring Error,$(FPC)),)
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+else
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+endif
+override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
+override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
+FOUNDFPC:=$(strip $(wildcard $(FPC)))
+ifeq ($(FOUNDFPC),)
+FOUNDFPC=$(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))
+ifeq ($(FOUNDFPC),)
+$(error Compiler $(FPC) not found)
+endif
+endif
+ifndef FPC_COMPILERINFO
+FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO)
+endif
+ifndef FPC_VERSION
+FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO))
+endif
+export FPC FPC_VERSION FPC_COMPILERINFO
+unexport CHECKDEPEND ALLDEPENDENCIES
+ifndef CPU_TARGET
+ifdef CPU_TARGET_DEFAULT
+CPU_TARGET=$(CPU_TARGET_DEFAULT)
+endif
+endif
+ifndef OS_TARGET
+ifdef OS_TARGET_DEFAULT
+OS_TARGET=$(OS_TARGET_DEFAULT)
+endif
+endif
+ifneq ($(words $(FPC_COMPILERINFO)),5)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSO)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTO)
+endif
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(word 2,$(FPC_COMPILERINFO))
+endif
+ifndef CPU_TARGET
+CPU_TARGET:=$(word 3,$(FPC_COMPILERINFO))
+endif
+ifndef OS_SOURCE
+OS_SOURCE:=$(word 4,$(FPC_COMPILERINFO))
+endif
+ifndef OS_TARGET
+OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
+endif
+FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+SOURCESUFFIX=$(OS_SOURCE)
+else
+TARGETSUFFIX=$(FULL_TARGET)
+SOURCESUFFIX=$(FULL_SOURCE)
+endif
+ifneq ($(FULL_TARGET),$(FULL_SOURCE))
+CROSSCOMPILE=1
+endif
+ifeq ($(findstring makefile,$(MAKECMDGOALS)),)
+ifeq ($(findstring $(FULL_TARGET),$(MAKEFILETARGETS)),)
+$(error The Makefile doesn't support target $(FULL_TARGET), please run fpcmake first)
+endif
+endif
+ifneq ($(findstring $(OS_TARGET),$(BSDs)),)
+BSDhier=1
+endif
+ifeq ($(OS_TARGET),linux)
+linuxHier=1
+endif
+export OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
+ifdef FPCDIR
+override FPCDIR:=$(subst \,/,$(FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+else
+override FPCDIR=wrong
+endif
+ifdef DEFAULT_FPCDIR
+ifeq ($(FPCDIR),wrong)
+override FPCDIR:=$(subst \,/,$(DEFAULT_FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+endif
+endif
+ifeq ($(FPCDIR),wrong)
+ifdef inUnix
+override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
+endif
+else
+override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))))
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(BASEDIR)
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=c:/pp
+endif
+endif
+endif
+endif
+endif
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(FPCDIR)/bin/$(TARGETSUFFIX))
+endif
+ifndef BINUTILSPREFIX
+ifndef CROSSBINDIR
+ifdef CROSSCOMPILE
+BINUTILSPREFIX=$(CPU_TARGET)-$(OS_TARGET)-
+endif
+endif
+endif
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(TARGETSUFFIX))
+ifeq ($(UNITSDIR),)
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
+endif
+PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
+ifeq ($(FULL_TARGET),i386-linux)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override TARGET_DIRS+=devkitPro/audio/PlayBoyScout devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll devkitPro/template
+endif
+override INSTALL_FPCPACKAGE=y
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=1
+endif
+else
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXHier
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef COMPILER_UNITTARGETDIR
+ifdef PACKAGEDIR_MAIN
+COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
+else
+COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
+endif
+endif
+ifndef COMPILER_TARGETDIR
+COMPILER_TARGETDIR=.
+endif
+ifndef INSTALL_BASEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXHier
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+ifdef CROSSCOMPILE
+ifdef CROSSINSTALL
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXHier
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXHier
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+ifdef linuxHier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+ifdef UNIXHier
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+ifdef linuxHier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+endif
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifndef INSTALL_SHAREDDIR
+INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+SHAREDLIBPREFIX=libfp
+STATICLIBPREFIX=libp
+IMPORTLIBPREFIX=libimp
+RSTEXT=.rst
+ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),go32v1)
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+OEXT=.obj
+ASMEXT=.asm
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=wat
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),emx)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=emx
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),morphos)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=mos
+endif
+ifeq ($(OS_TARGET),atari)
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nw
+endif
+ifeq ($(OS_TARGET),netwlibc)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nwl
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+endif
+ifeq ($(OS_TARGET),darwin)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=dwn
+endif
+ifeq ($(OS_TARGET),gba)
+EXEEXT=.gba
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gba
+endif
+ifeq ($(OS_TARGET),symbian)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=symbian
+endif
+else
+ifeq ($(OS_TARGET),go32v1)
+PPUEXT=.pp1
+OEXT=.o1
+ASMEXT=.s1
+SMARTEXT=.sl1
+STATICLIBEXT=.a1
+SHAREDLIBEXT=.so1
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+SHORTSUFFIX=wat
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+PPUEXT=.ppw
+OEXT=.ow
+ASMEXT=.sw
+SMARTEXT=.slw
+STATICLIBEXT=.aw
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+PPUEXT=.ppo
+ASMEXT=.so2
+OEXT=.oo2
+AOUTEXT=.out
+SMARTEXT=.sl2
+STATICLIBPREFIX=
+STATICLIBEXT=.ao2
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),atari)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nw
+endif
+ifeq ($(OS_TARGET),netwlibc)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nwl
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+endif
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+FPCMADE=fpcmade.$(SHORTSUFFIX)
+ZIPSUFFIX=$(SHORTSUFFIX)
+ZIPCROSSPREFIX=
+ZIPSOURCESUFFIX=src
+ZIPEXAMPLESUFFIX=exm
+else
+FPCMADE=fpcmade.$(TARGETSUFFIX)
+ZIPSOURCESUFFIX=.source
+ZIPEXAMPLESUFFIX=.examples
+ifdef CROSSCOMPILE
+ZIPSUFFIX=.$(SOURCESUFFIX)
+ZIPCROSSPREFIX=$(TARGETSUFFIX)-
+else
+ZIPSUFFIX=.$(TARGETSUFFIX)
+ZIPCROSSPREFIX=
+endif
+endif
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO= __missing_command_ECHO
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+ifndef DATE
+DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE= __missing_command_DATE
+else
+DATE:=$(firstword $(DATE))
+endif
+else
+DATE:=$(firstword $(DATE))
+endif
+endif
+export DATE
+ifndef GINSTALL
+GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL= __missing_command_GINSTALL
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+endif
+export GINSTALL
+ifndef CPPROG
+CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(CPPROG),)
+CPPROG= __missing_command_CPPROG
+else
+CPPROG:=$(firstword $(CPPROG))
+endif
+endif
+export CPPROG
+ifndef RMPROG
+RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(RMPROG),)
+RMPROG= __missing_command_RMPROG
+else
+RMPROG:=$(firstword $(RMPROG))
+endif
+endif
+export RMPROG
+ifndef MVPROG
+MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MVPROG),)
+MVPROG= __missing_command_MVPROG
+else
+MVPROG:=$(firstword $(MVPROG))
+endif
+endif
+export MVPROG
+ifndef MKDIRPROG
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /gmkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /mkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG= __missing_command_MKDIRPROG
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+endif
+export MKDIRPROG
+ifndef ECHOREDIR
+ifndef inUnix
+ECHOREDIR=echo
+else
+ECHOREDIR=$(ECHO)
+endif
+endif
+ifndef COPY
+COPY:=$(CPPROG) -fp
+endif
+ifndef COPYTREE
+COPYTREE:=$(CPPROG) -Rfp
+endif
+ifndef MKDIRTREE
+MKDIRTREE:=$(MKDIRPROG) -p
+endif
+ifndef MOVE
+MOVE:=$(MVPROG) -f
+endif
+ifndef DEL
+DEL:=$(RMPROG) -f
+endif
+ifndef DELTREE
+DELTREE:=$(RMPROG) -rf
+endif
+ifndef INSTALL
+ifdef inUnix
+INSTALL:=$(GINSTALL) -c -m 644
+else
+INSTALL:=$(COPY)
+endif
+endif
+ifndef INSTALLEXE
+ifdef inUnix
+INSTALLEXE:=$(GINSTALL) -c -m 755
+else
+INSTALLEXE:=$(COPY)
+endif
+endif
+ifndef MKDIR
+MKDIR:=$(GINSTALL) -m 755 -d
+endif
+export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
+ifndef PPUMOVE
+PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(PPUMOVE),)
+PPUMOVE= __missing_command_PPUMOVE
+else
+PPUMOVE:=$(firstword $(PPUMOVE))
+endif
+endif
+export PPUMOVE
+ifndef FPCMAKE
+FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(FPCMAKE),)
+FPCMAKE= __missing_command_FPCMAKE
+else
+FPCMAKE:=$(firstword $(FPCMAKE))
+endif
+endif
+export FPCMAKE
+ifndef ZIPPROG
+ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ZIPPROG),)
+ZIPPROG= __missing_command_ZIPPROG
+else
+ZIPPROG:=$(firstword $(ZIPPROG))
+endif
+endif
+export ZIPPROG
+ifndef TARPROG
+TARPROG:=$(strip $(wildcard $(addsuffix /gtar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG= __missing_command_TARPROG
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+endif
+export TARPROG
+ASNAME=$(BINUTILSPREFIX)as
+LDNAME=$(BINUTILSPREFIX)ld
+ARNAME=$(BINUTILSPREFIX)ar
+RCNAME=$(BINUTILSPREFIX)rc
+ifneq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),win32)
+ifeq ($(CROSSBINDIR),)
+ASNAME=asw
+LDNAME=ldw
+ARNAME=arw
+endif
+endif
+endif
+ifndef ASPROG
+ifdef CROSSBINDIR
+ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
+else
+ASPROG=$(ASNAME)
+endif
+endif
+ifndef LDPROG
+ifdef CROSSBINDIR
+LDPROG=$(CROSSBINDIR)/$(LDNAME)$(SRCEXEEXT)
+else
+LDPROG=$(LDNAME)
+endif
+endif
+ifndef RCPROG
+ifdef CROSSBINDIR
+RCPROG=$(CROSSBINDIR)/$(RCNAME)$(SRCEXEEXT)
+else
+RCPROG=$(RCNAME)
+endif
+endif
+ifndef ARPROG
+ifdef CROSSBINDIR
+ARPROG=$(CROSSBINDIR)/$(ARNAME)$(SRCEXEEXT)
+else
+ARPROG=$(ARNAME)
+endif
+endif
+AS=$(ASPROG)
+LD=$(LDPROG)
+RC=$(RCPROG)
+AR=$(ARPROG)
+PPAS=ppas$(SRCBATCHEXT)
+ifdef inUnix
+LDCONFIG=ldconfig
+else
+LDCONFIG=
+endif
+ifdef DATE
+DATESTR:=$(shell $(DATE) +%Y%m%d)
+else
+DATESTR=
+endif
+ifndef UPXPROG
+ifeq ($(OS_TARGET),go32v2)
+UPXPROG:=1
+endif
+ifeq ($(OS_TARGET),win32)
+UPXPROG:=1
+endif
+ifdef UPXPROG
+UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(UPXPROG),)
+UPXPROG=
+else
+UPXPROG:=$(firstword $(UPXPROG))
+endif
+else
+UPXPROG=
+endif
+endif
+export UPXPROG
+ZIPOPT=-9
+ZIPEXT=.zip
+ifeq ($(USETAR),bz2)
+TAROPT=vj
+TAREXT=.tar.bz2
+else
+TAROPT=vz
+TAREXT=.tar.gz
+endif
+override REQUIRE_PACKAGES=libgbafpc
+ifeq ($(FULL_TARGET),i386-linux)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifdef REQUIRE_PACKAGES_LIBGBAFPC
+PACKAGEDIR_LIBGBAFPC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /libgbafpc/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_LIBGBAFPC),)
+ifneq ($(wildcard $(PACKAGEDIR_LIBGBAFPC)/units/$(TARGETSUFFIX)),)
+UNITDIR_LIBGBAFPC=$(PACKAGEDIR_LIBGBAFPC)/units/$(TARGETSUFFIX)
+else
+UNITDIR_LIBGBAFPC=$(PACKAGEDIR_LIBGBAFPC)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_LIBGBAFPC)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_LIBGBAFPC) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_LIBGBAFPC)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_LIBGBAFPC=
+UNITDIR_LIBGBAFPC:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /libgbafpc/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_LIBGBAFPC),)
+UNITDIR_LIBGBAFPC:=$(firstword $(UNITDIR_LIBGBAFPC))
+else
+UNITDIR_LIBGBAFPC=
+endif
+endif
+ifdef UNITDIR_LIBGBAFPC
+override COMPILER_UNITDIR+=$(UNITDIR_LIBGBAFPC)
+endif
+endif
+ifndef NOCPUDEF
+override FPCOPTDEF=$(CPU_TARGET)
+endif
+ifneq ($(OS_TARGET),$(OS_SOURCE))
+override FPCOPT+=-T$(OS_TARGET)
+endif
+ifneq ($(CPU_TARGET),$(CPU_SOURCE))
+override FPCOPT+=-P$(CPU_TARGET)
+endif
+ifeq ($(OS_SOURCE),openbsd)
+override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
+endif
+ifndef CROSSBOOTSTRAP
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-XP$(BINUTILSPREFIX)
+endif
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-Xr$(RLINKPATH)
+endif
+endif
+ifdef UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
+endif
+ifdef LIBDIR
+override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
+endif
+ifdef OBJDIR
+override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
+endif
+ifdef INCDIR
+override FPCOPT+=$(addprefix -Fi,$(INCDIR))
+endif
+ifdef LINKSMART
+override FPCOPT+=-XX
+endif
+ifdef CREATESMART
+override FPCOPT+=-CX
+endif
+ifdef DEBUG
+override FPCOPT+=-gl
+override FPCOPTDEF+=DEBUG
+endif
+ifdef RELEASE
+ifneq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(CPU_TARGET),i386)
+FPCCPUOPT:=-OG2p3
+endif
+ifeq ($(CPU_TARGET),powerpc)
+FPCCPUOPT:=-O1r
+endif
+else
+FPCCPUOPT:=-O2
+endif
+override FPCOPT+=-Ur -Xs $(FPCCPUOPT) -n
+override FPCOPTDEF+=RELEASE
+endif
+ifdef STRIP
+override FPCOPT+=-Xs
+endif
+ifdef OPTIMIZE
+override FPCOPT+=-O2
+endif
+ifdef VERBOSE
+override FPCOPT+=-vwni
+endif
+ifdef COMPILER_OPTIONS
+override FPCOPT+=$(COMPILER_OPTIONS)
+endif
+ifdef COMPILER_UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(COMPILER_UNITDIR))
+endif
+ifdef COMPILER_LIBRARYDIR
+override FPCOPT+=$(addprefix -Fl,$(COMPILER_LIBRARYDIR))
+endif
+ifdef COMPILER_OBJECTDIR
+override FPCOPT+=$(addprefix -Fo,$(COMPILER_OBJECTDIR))
+endif
+ifdef COMPILER_INCLUDEDIR
+override FPCOPT+=$(addprefix -Fi,$(COMPILER_INCLUDEDIR))
+endif
+ifdef CROSSBINDIR
+override FPCOPT+=-FD$(CROSSBINDIR)
+endif
+ifdef COMPILER_TARGETDIR
+override FPCOPT+=-FE$(COMPILER_TARGETDIR)
+ifeq ($(COMPILER_TARGETDIR),.)
+override TARGETDIRPREFIX=
+else
+override TARGETDIRPREFIX=$(COMPILER_TARGETDIR)/
+endif
+endif
+ifdef COMPILER_UNITTARGETDIR
+override FPCOPT+=-FU$(COMPILER_UNITTARGETDIR)
+ifeq ($(COMPILER_UNITTARGETDIR),.)
+override UNITTARGETDIRPREFIX=
+else
+override UNITTARGETDIRPREFIX=$(COMPILER_UNITTARGETDIR)/
+endif
+else
+ifdef COMPILER_TARGETDIR
+override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR)
+override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
+endif
+endif
+ifdef CREATESHARED
+override FPCOPT+=-Cg
+ifeq ($(CPU_TARGET),i386)
+override FPCOPT+=-Aas
+endif
+endif
+ifeq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),x86_64)
+override FPCOPT+=-Cg
+endif
+endif
+endif
+ifdef LINKSHARED
+endif
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+ifdef FPCOPTDEF
+override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
+endif
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+ifdef USEENV
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+override AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(AFULL_TARGET),$(AFULL_SOURCE))
+override ACROSSCOMPILE=1
+endif
+ifdef ACROSSCOMPILE
+override FPCOPT+=$(CROSSOPT)
+endif
+override COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+ifdef RUNBATCH
+EXECPPAS:=@$(RUNBATCH) $(PPAS)
+else
+EXECPPAS:=@$(PPAS)
+endif
+endif
+endif
+ifdef TARGET_RSTS
+override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
+override CLEANRSTFILES+=$(RSTFILES)
+endif
+.PHONY: fpc_clean fpc_cleanall fpc_distclean
+ifdef EXEFILES
+override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
+endif
+ifdef CLEAN_UNITS
+override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
+endif
+ifdef CLEANPPUFILES
+override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES)))
+ifdef DEBUGSYMEXT
+override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPPUFILES))
+endif
+override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
+override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES)))
+endif
+fpc_clean: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
+endif
+ifdef LIB_NAME
+	-$(DEL) $(LIB_NAME) $(LIB_FULLNAME)
+endif
+	-$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT)
+fpc_cleanall: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef COMPILER_UNITTARGETDIR
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+endif
+	-$(DELTREE) units
+	-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
+ifneq ($(PPUEXT),.ppu)
+	-$(DEL) *.o *.ppu *.a
+endif
+	-$(DELTREE) *$(SMARTEXT)
+	-$(DEL) fpcmade.* Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *_ppas$(BATCHEXT)
+ifdef AOUTEXT
+	-$(DEL) *$(AOUTEXT)
+endif
+ifdef DEBUGSYMEXT
+	-$(DEL) *$(DEBUGSYMEXT)
+endif
+fpc_distclean: cleanall
+.PHONY: fpc_baseinfo
+override INFORULES+=fpc_baseinfo
+fpc_baseinfo:
+	@$(ECHO)
+	@$(ECHO)  == Package info ==
+	@$(ECHO)  Package Name..... $(PACKAGE_NAME)
+	@$(ECHO)  Package Version.. $(PACKAGE_VERSION)
+	@$(ECHO)
+	@$(ECHO)  == Configuration info ==
+	@$(ECHO)
+	@$(ECHO)  FPC.......... $(FPC)
+	@$(ECHO)  FPC Version.. $(FPC_VERSION)
+	@$(ECHO)  Source CPU... $(CPU_SOURCE)
+	@$(ECHO)  Target CPU... $(CPU_TARGET)
+	@$(ECHO)  Source OS.... $(OS_SOURCE)
+	@$(ECHO)  Target OS.... $(OS_TARGET)
+	@$(ECHO)  Full Source.. $(FULL_SOURCE)
+	@$(ECHO)  Full Target.. $(FULL_TARGET)
+	@$(ECHO)  SourceSuffix. $(SOURCESUFFIX)
+	@$(ECHO)  TargetSuffix. $(TARGETSUFFIX)
+	@$(ECHO)
+	@$(ECHO)  == Directory info ==
+	@$(ECHO)
+	@$(ECHO)  Required pkgs... $(REQUIRE_PACKAGES)
+	@$(ECHO)
+	@$(ECHO)  Basedir......... $(BASEDIR)
+	@$(ECHO)  FPCDir.......... $(FPCDIR)
+	@$(ECHO)  CrossBinDir..... $(CROSSBINDIR)
+	@$(ECHO)  UnitsDir........ $(UNITSDIR)
+	@$(ECHO)  PackagesDir..... $(PACKAGESDIR)
+	@$(ECHO)
+	@$(ECHO)  GCC library..... $(GCCLIBDIR)
+	@$(ECHO)  Other library... $(OTHERLIBDIR)
+	@$(ECHO)
+	@$(ECHO)  == Tools info ==
+	@$(ECHO)
+	@$(ECHO)  As........ $(AS)
+	@$(ECHO)  Ld........ $(LD)
+	@$(ECHO)  Ar........ $(AR)
+	@$(ECHO)  Rc........ $(RC)
+	@$(ECHO)
+	@$(ECHO)  Mv........ $(MVPROG)
+	@$(ECHO)  Cp........ $(CPPROG)
+	@$(ECHO)  Rm........ $(RMPROG)
+	@$(ECHO)  GInstall.. $(GINSTALL)
+	@$(ECHO)  Echo...... $(ECHO)
+	@$(ECHO)  Shell..... $(SHELL)
+	@$(ECHO)  Date...... $(DATE)
+	@$(ECHO)  FPCMake... $(FPCMAKE)
+	@$(ECHO)  PPUMove... $(PPUMOVE)
+	@$(ECHO)  Upx....... $(UPXPROG)
+	@$(ECHO)  Zip....... $(ZIPPROG)
+	@$(ECHO)
+	@$(ECHO)  == Object info ==
+	@$(ECHO)
+	@$(ECHO)  Target Loaders........ $(TARGET_LOADERS)
+	@$(ECHO)  Target Units.......... $(TARGET_UNITS)
+	@$(ECHO)  Target Implicit Units. $(TARGET_IMPLICITUNITS)
+	@$(ECHO)  Target Programs....... $(TARGET_PROGRAMS)
+	@$(ECHO)  Target Dirs........... $(TARGET_DIRS)
+	@$(ECHO)  Target Examples....... $(TARGET_EXAMPLES)
+	@$(ECHO)  Target ExampleDirs.... $(TARGET_EXAMPLEDIRS)
+	@$(ECHO)
+	@$(ECHO)  Clean Units......... $(CLEAN_UNITS)
+	@$(ECHO)  Clean Files......... $(CLEAN_FILES)
+	@$(ECHO)
+	@$(ECHO)  Install Units....... $(INSTALL_UNITS)
+	@$(ECHO)  Install Files....... $(INSTALL_FILES)
+	@$(ECHO)
+	@$(ECHO)  == Install info ==
+	@$(ECHO)
+	@$(ECHO)  DateStr.............. $(DATESTR)
+	@$(ECHO)  ZipName.............. $(ZIPNAME)
+	@$(ECHO)  ZipPrefix............ $(ZIPPREFIX)
+	@$(ECHO)  ZipCrossPrefix....... $(ZIPCROSSPREFIX)
+	@$(ECHO)  ZipSuffix............ $(ZIPSUFFIX)
+	@$(ECHO)  FullZipName.......... $(FULLZIPNAME)
+	@$(ECHO)  Install FPC Package.. $(INSTALL_FPCPACKAGE)
+	@$(ECHO)
+	@$(ECHO)  Install base dir..... $(INSTALL_BASEDIR)
+	@$(ECHO)  Install binary dir... $(INSTALL_BINDIR)
+	@$(ECHO)  Install library dir.. $(INSTALL_LIBDIR)
+	@$(ECHO)  Install units dir.... $(INSTALL_UNITDIR)
+	@$(ECHO)  Install source dir... $(INSTALL_SOURCEDIR)
+	@$(ECHO)  Install doc dir...... $(INSTALL_DOCDIR)
+	@$(ECHO)  Install example dir.. $(INSTALL_EXAMPLEDIR)
+	@$(ECHO)  Install data dir..... $(INSTALL_DATADIR)
+	@$(ECHO)
+	@$(ECHO)  Dist destination dir. $(DIST_DESTDIR)
+	@$(ECHO)  Dist zip name........ $(DIST_ZIPNAME)
+	@$(ECHO)
+.PHONY: fpc_info
+fpc_info: $(INFORULES)
+.PHONY: fpc_makefile fpc_makefiles fpc_makefile_sub1 fpc_makefile_sub2 \
+	fpc_makefile_dirs
+fpc_makefile:
+	$(FPCMAKE) -w -T$(OS_TARGET) Makefile.fpc
+fpc_makefile_sub1:
+ifdef TARGET_DIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_DIRS))
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_EXAMPLEDIRS))
+endif
+fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS))
+fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
+fpc_makefiles: fpc_makefile fpc_makefile_dirs
+ifeq ($(FULL_TARGET),i386-linux)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW=1
+TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL=1
+TARGET_DIRS_DEVKITPRO/TEMPLATE=1
+endif
+ifdef TARGET_DIRS_DEVKITPRO/AUDIO/PLAYBOYSCOUT
+devkitPro/audio/PlayBoyScout_all:
+	$(MAKE) -C devkitPro/audio/PlayBoyScout all
+devkitPro/audio/PlayBoyScout_debug:
+	$(MAKE) -C devkitPro/audio/PlayBoyScout debug
+devkitPro/audio/PlayBoyScout_smart:
+	$(MAKE) -C devkitPro/audio/PlayBoyScout smart
+devkitPro/audio/PlayBoyScout_release:
+	$(MAKE) -C devkitPro/audio/PlayBoyScout release
+devkitPro/audio/PlayBoyScout_units:
+	$(MAKE) -C devkitPro/audio/PlayBoyScout units
+devkitPro/audio/PlayBoyScout_examples:
+	$(MAKE) -C devkitPro/audio/PlayBoyScout examples
+devkitPro/audio/PlayBoyScout_shared:
+	$(MAKE) -C devkitPro/audio/PlayBoyScout shared
+devkitPro/audio/PlayBoyScout_install:
+	$(MAKE) -C devkitPro/audio/PlayBoyScout install
+devkitPro/audio/PlayBoyScout_sourceinstall:
+	$(MAKE) -C devkitPro/audio/PlayBoyScout sourceinstall
+devkitPro/audio/PlayBoyScout_exampleinstall:
+	$(MAKE) -C devkitPro/audio/PlayBoyScout exampleinstall
+devkitPro/audio/PlayBoyScout_distinstall:
+	$(MAKE) -C devkitPro/audio/PlayBoyScout distinstall
+devkitPro/audio/PlayBoyScout_zipinstall:
+	$(MAKE) -C devkitPro/audio/PlayBoyScout zipinstall
+devkitPro/audio/PlayBoyScout_zipsourceinstall:
+	$(MAKE) -C devkitPro/audio/PlayBoyScout zipsourceinstall
+devkitPro/audio/PlayBoyScout_zipexampleinstall:
+	$(MAKE) -C devkitPro/audio/PlayBoyScout zipexampleinstall
+devkitPro/audio/PlayBoyScout_zipdistinstall:
+	$(MAKE) -C devkitPro/audio/PlayBoyScout zipdistinstall
+devkitPro/audio/PlayBoyScout_clean:
+	$(MAKE) -C devkitPro/audio/PlayBoyScout clean
+devkitPro/audio/PlayBoyScout_distclean:
+	$(MAKE) -C devkitPro/audio/PlayBoyScout distclean
+devkitPro/audio/PlayBoyScout_cleanall:
+	$(MAKE) -C devkitPro/audio/PlayBoyScout cleanall
+devkitPro/audio/PlayBoyScout_info:
+	$(MAKE) -C devkitPro/audio/PlayBoyScout info
+devkitPro/audio/PlayBoyScout_makefiles:
+	$(MAKE) -C devkitPro/audio/PlayBoyScout makefiles
+devkitPro/audio/PlayBoyScout:
+	$(MAKE) -C devkitPro/audio/PlayBoyScout all
+.PHONY: devkitPro/audio/PlayBoyScout_all devkitPro/audio/PlayBoyScout_debug devkitPro/audio/PlayBoyScout_smart devkitPro/audio/PlayBoyScout_release devkitPro/audio/PlayBoyScout_units devkitPro/audio/PlayBoyScout_examples devkitPro/audio/PlayBoyScout_shared devkitPro/audio/PlayBoyScout_install devkitPro/audio/PlayBoyScout_sourceinstall devkitPro/audio/PlayBoyScout_exampleinstall devkitPro/audio/PlayBoyScout_distinstall devkitPro/audio/PlayBoyScout_zipinstall devkitPro/audio/PlayBoyScout_zipsourceinstall devkitPro/audio/PlayBoyScout_zipexampleinstall devkitPro/audio/PlayBoyScout_zipdistinstall devkitPro/audio/PlayBoyScout_clean devkitPro/audio/PlayBoyScout_distclean devkitPro/audio/PlayBoyScout_cleanall devkitPro/audio/PlayBoyScout_info devkitPro/audio/PlayBoyScout_makefiles devkitPro/audio/PlayBoyScout
+endif
+ifdef TARGET_DIRS_DEVKITPRO/GRAPHICS/ANSI_CONSOLE
+devkitPro/graphics/ansi_console_all:
+	$(MAKE) -C devkitPro/graphics/ansi_console all
+devkitPro/graphics/ansi_console_debug:
+	$(MAKE) -C devkitPro/graphics/ansi_console debug
+devkitPro/graphics/ansi_console_smart:
+	$(MAKE) -C devkitPro/graphics/ansi_console smart
+devkitPro/graphics/ansi_console_release:
+	$(MAKE) -C devkitPro/graphics/ansi_console release
+devkitPro/graphics/ansi_console_units:
+	$(MAKE) -C devkitPro/graphics/ansi_console units
+devkitPro/graphics/ansi_console_examples:
+	$(MAKE) -C devkitPro/graphics/ansi_console examples
+devkitPro/graphics/ansi_console_shared:
+	$(MAKE) -C devkitPro/graphics/ansi_console shared
+devkitPro/graphics/ansi_console_install:
+	$(MAKE) -C devkitPro/graphics/ansi_console install
+devkitPro/graphics/ansi_console_sourceinstall:
+	$(MAKE) -C devkitPro/graphics/ansi_console sourceinstall
+devkitPro/graphics/ansi_console_exampleinstall:
+	$(MAKE) -C devkitPro/graphics/ansi_console exampleinstall
+devkitPro/graphics/ansi_console_distinstall:
+	$(MAKE) -C devkitPro/graphics/ansi_console distinstall
+devkitPro/graphics/ansi_console_zipinstall:
+	$(MAKE) -C devkitPro/graphics/ansi_console zipinstall
+devkitPro/graphics/ansi_console_zipsourceinstall:
+	$(MAKE) -C devkitPro/graphics/ansi_console zipsourceinstall
+devkitPro/graphics/ansi_console_zipexampleinstall:
+	$(MAKE) -C devkitPro/graphics/ansi_console zipexampleinstall
+devkitPro/graphics/ansi_console_zipdistinstall:
+	$(MAKE) -C devkitPro/graphics/ansi_console zipdistinstall
+devkitPro/graphics/ansi_console_clean:
+	$(MAKE) -C devkitPro/graphics/ansi_console clean
+devkitPro/graphics/ansi_console_distclean:
+	$(MAKE) -C devkitPro/graphics/ansi_console distclean
+devkitPro/graphics/ansi_console_cleanall:
+	$(MAKE) -C devkitPro/graphics/ansi_console cleanall
+devkitPro/graphics/ansi_console_info:
+	$(MAKE) -C devkitPro/graphics/ansi_console info
+devkitPro/graphics/ansi_console_makefiles:
+	$(MAKE) -C devkitPro/graphics/ansi_console makefiles
+devkitPro/graphics/ansi_console:
+	$(MAKE) -C devkitPro/graphics/ansi_console all
+.PHONY: devkitPro/graphics/ansi_console_all devkitPro/graphics/ansi_console_debug devkitPro/graphics/ansi_console_smart devkitPro/graphics/ansi_console_release devkitPro/graphics/ansi_console_units devkitPro/graphics/ansi_console_examples devkitPro/graphics/ansi_console_shared devkitPro/graphics/ansi_console_install devkitPro/graphics/ansi_console_sourceinstall devkitPro/graphics/ansi_console_exampleinstall devkitPro/graphics/ansi_console_distinstall devkitPro/graphics/ansi_console_zipinstall devkitPro/graphics/ansi_console_zipsourceinstall devkitPro/graphics/ansi_console_zipexampleinstall devkitPro/graphics/ansi_console_zipdistinstall devkitPro/graphics/ansi_console_clean devkitPro/graphics/ansi_console_distclean devkitPro/graphics/ansi_console_cleanall devkitPro/graphics/ansi_console_info devkitPro/graphics/ansi_console_makefiles devkitPro/graphics/ansi_console
+endif
+ifdef TARGET_DIRS_DEVKITPRO/GRAPHICS/PCXVIEW
+devkitPro/graphics/PCXView_all:
+	$(MAKE) -C devkitPro/graphics/PCXView all
+devkitPro/graphics/PCXView_debug:
+	$(MAKE) -C devkitPro/graphics/PCXView debug
+devkitPro/graphics/PCXView_smart:
+	$(MAKE) -C devkitPro/graphics/PCXView smart
+devkitPro/graphics/PCXView_release:
+	$(MAKE) -C devkitPro/graphics/PCXView release
+devkitPro/graphics/PCXView_units:
+	$(MAKE) -C devkitPro/graphics/PCXView units
+devkitPro/graphics/PCXView_examples:
+	$(MAKE) -C devkitPro/graphics/PCXView examples
+devkitPro/graphics/PCXView_shared:
+	$(MAKE) -C devkitPro/graphics/PCXView shared
+devkitPro/graphics/PCXView_install:
+	$(MAKE) -C devkitPro/graphics/PCXView install
+devkitPro/graphics/PCXView_sourceinstall:
+	$(MAKE) -C devkitPro/graphics/PCXView sourceinstall
+devkitPro/graphics/PCXView_exampleinstall:
+	$(MAKE) -C devkitPro/graphics/PCXView exampleinstall
+devkitPro/graphics/PCXView_distinstall:
+	$(MAKE) -C devkitPro/graphics/PCXView distinstall
+devkitPro/graphics/PCXView_zipinstall:
+	$(MAKE) -C devkitPro/graphics/PCXView zipinstall
+devkitPro/graphics/PCXView_zipsourceinstall:
+	$(MAKE) -C devkitPro/graphics/PCXView zipsourceinstall
+devkitPro/graphics/PCXView_zipexampleinstall:
+	$(MAKE) -C devkitPro/graphics/PCXView zipexampleinstall
+devkitPro/graphics/PCXView_zipdistinstall:
+	$(MAKE) -C devkitPro/graphics/PCXView zipdistinstall
+devkitPro/graphics/PCXView_clean:
+	$(MAKE) -C devkitPro/graphics/PCXView clean
+devkitPro/graphics/PCXView_distclean:
+	$(MAKE) -C devkitPro/graphics/PCXView distclean
+devkitPro/graphics/PCXView_cleanall:
+	$(MAKE) -C devkitPro/graphics/PCXView cleanall
+devkitPro/graphics/PCXView_info:
+	$(MAKE) -C devkitPro/graphics/PCXView info
+devkitPro/graphics/PCXView_makefiles:
+	$(MAKE) -C devkitPro/graphics/PCXView makefiles
+devkitPro/graphics/PCXView:
+	$(MAKE) -C devkitPro/graphics/PCXView all
+.PHONY: devkitPro/graphics/PCXView_all devkitPro/graphics/PCXView_debug devkitPro/graphics/PCXView_smart devkitPro/graphics/PCXView_release devkitPro/graphics/PCXView_units devkitPro/graphics/PCXView_examples devkitPro/graphics/PCXView_shared devkitPro/graphics/PCXView_install devkitPro/graphics/PCXView_sourceinstall devkitPro/graphics/PCXView_exampleinstall devkitPro/graphics/PCXView_distinstall devkitPro/graphics/PCXView_zipinstall devkitPro/graphics/PCXView_zipsourceinstall devkitPro/graphics/PCXView_zipexampleinstall devkitPro/graphics/PCXView_zipdistinstall devkitPro/graphics/PCXView_clean devkitPro/graphics/PCXView_distclean devkitPro/graphics/PCXView_cleanall devkitPro/graphics/PCXView_info devkitPro/graphics/PCXView_makefiles devkitPro/graphics/PCXView
+endif
+ifdef TARGET_DIRS_DEVKITPRO/GRAPHICS/SIMPLEBGSCROLL
+devkitPro/graphics/SimpleBGScroll_all:
+	$(MAKE) -C devkitPro/graphics/SimpleBGScroll all
+devkitPro/graphics/SimpleBGScroll_debug:
+	$(MAKE) -C devkitPro/graphics/SimpleBGScroll debug
+devkitPro/graphics/SimpleBGScroll_smart:
+	$(MAKE) -C devkitPro/graphics/SimpleBGScroll smart
+devkitPro/graphics/SimpleBGScroll_release:
+	$(MAKE) -C devkitPro/graphics/SimpleBGScroll release
+devkitPro/graphics/SimpleBGScroll_units:
+	$(MAKE) -C devkitPro/graphics/SimpleBGScroll units
+devkitPro/graphics/SimpleBGScroll_examples:
+	$(MAKE) -C devkitPro/graphics/SimpleBGScroll examples
+devkitPro/graphics/SimpleBGScroll_shared:
+	$(MAKE) -C devkitPro/graphics/SimpleBGScroll shared
+devkitPro/graphics/SimpleBGScroll_install:
+	$(MAKE) -C devkitPro/graphics/SimpleBGScroll install
+devkitPro/graphics/SimpleBGScroll_sourceinstall:
+	$(MAKE) -C devkitPro/graphics/SimpleBGScroll sourceinstall
+devkitPro/graphics/SimpleBGScroll_exampleinstall:
+	$(MAKE) -C devkitPro/graphics/SimpleBGScroll exampleinstall
+devkitPro/graphics/SimpleBGScroll_distinstall:
+	$(MAKE) -C devkitPro/graphics/SimpleBGScroll distinstall
+devkitPro/graphics/SimpleBGScroll_zipinstall:
+	$(MAKE) -C devkitPro/graphics/SimpleBGScroll zipinstall
+devkitPro/graphics/SimpleBGScroll_zipsourceinstall:
+	$(MAKE) -C devkitPro/graphics/SimpleBGScroll zipsourceinstall
+devkitPro/graphics/SimpleBGScroll_zipexampleinstall:
+	$(MAKE) -C devkitPro/graphics/SimpleBGScroll zipexampleinstall
+devkitPro/graphics/SimpleBGScroll_zipdistinstall:
+	$(MAKE) -C devkitPro/graphics/SimpleBGScroll zipdistinstall
+devkitPro/graphics/SimpleBGScroll_clean:
+	$(MAKE) -C devkitPro/graphics/SimpleBGScroll clean
+devkitPro/graphics/SimpleBGScroll_distclean:
+	$(MAKE) -C devkitPro/graphics/SimpleBGScroll distclean
+devkitPro/graphics/SimpleBGScroll_cleanall:
+	$(MAKE) -C devkitPro/graphics/SimpleBGScroll cleanall
+devkitPro/graphics/SimpleBGScroll_info:
+	$(MAKE) -C devkitPro/graphics/SimpleBGScroll info
+devkitPro/graphics/SimpleBGScroll_makefiles:
+	$(MAKE) -C devkitPro/graphics/SimpleBGScroll makefiles
+devkitPro/graphics/SimpleBGScroll:
+	$(MAKE) -C devkitPro/graphics/SimpleBGScroll all
+.PHONY: devkitPro/graphics/SimpleBGScroll_all devkitPro/graphics/SimpleBGScroll_debug devkitPro/graphics/SimpleBGScroll_smart devkitPro/graphics/SimpleBGScroll_release devkitPro/graphics/SimpleBGScroll_units devkitPro/graphics/SimpleBGScroll_examples devkitPro/graphics/SimpleBGScroll_shared devkitPro/graphics/SimpleBGScroll_install devkitPro/graphics/SimpleBGScroll_sourceinstall devkitPro/graphics/SimpleBGScroll_exampleinstall devkitPro/graphics/SimpleBGScroll_distinstall devkitPro/graphics/SimpleBGScroll_zipinstall devkitPro/graphics/SimpleBGScroll_zipsourceinstall devkitPro/graphics/SimpleBGScroll_zipexampleinstall devkitPro/graphics/SimpleBGScroll_zipdistinstall devkitPro/graphics/SimpleBGScroll_clean devkitPro/graphics/SimpleBGScroll_distclean devkitPro/graphics/SimpleBGScroll_cleanall devkitPro/graphics/SimpleBGScroll_info devkitPro/graphics/SimpleBGScroll_makefiles devkitPro/graphics/SimpleBGScroll
+endif
+ifdef TARGET_DIRS_DEVKITPRO/TEMPLATE
+devkitPro/template_all:
+	$(MAKE) -C devkitPro/template all
+devkitPro/template_debug:
+	$(MAKE) -C devkitPro/template debug
+devkitPro/template_smart:
+	$(MAKE) -C devkitPro/template smart
+devkitPro/template_release:
+	$(MAKE) -C devkitPro/template release
+devkitPro/template_units:
+	$(MAKE) -C devkitPro/template units
+devkitPro/template_examples:
+	$(MAKE) -C devkitPro/template examples
+devkitPro/template_shared:
+	$(MAKE) -C devkitPro/template shared
+devkitPro/template_install:
+	$(MAKE) -C devkitPro/template install
+devkitPro/template_sourceinstall:
+	$(MAKE) -C devkitPro/template sourceinstall
+devkitPro/template_exampleinstall:
+	$(MAKE) -C devkitPro/template exampleinstall
+devkitPro/template_distinstall:
+	$(MAKE) -C devkitPro/template distinstall
+devkitPro/template_zipinstall:
+	$(MAKE) -C devkitPro/template zipinstall
+devkitPro/template_zipsourceinstall:
+	$(MAKE) -C devkitPro/template zipsourceinstall
+devkitPro/template_zipexampleinstall:
+	$(MAKE) -C devkitPro/template zipexampleinstall
+devkitPro/template_zipdistinstall:
+	$(MAKE) -C devkitPro/template zipdistinstall
+devkitPro/template_clean:
+	$(MAKE) -C devkitPro/template clean
+devkitPro/template_distclean:
+	$(MAKE) -C devkitPro/template distclean
+devkitPro/template_cleanall:
+	$(MAKE) -C devkitPro/template cleanall
+devkitPro/template_info:
+	$(MAKE) -C devkitPro/template info
+devkitPro/template_makefiles:
+	$(MAKE) -C devkitPro/template makefiles
+devkitPro/template:
+	$(MAKE) -C devkitPro/template all
+.PHONY: devkitPro/template_all devkitPro/template_debug devkitPro/template_smart devkitPro/template_release devkitPro/template_units devkitPro/template_examples devkitPro/template_shared devkitPro/template_install devkitPro/template_sourceinstall devkitPro/template_exampleinstall devkitPro/template_distinstall devkitPro/template_zipinstall devkitPro/template_zipsourceinstall devkitPro/template_zipexampleinstall devkitPro/template_zipdistinstall devkitPro/template_clean devkitPro/template_distclean devkitPro/template_cleanall devkitPro/template_info devkitPro/template_makefiles devkitPro/template
+endif
+all: $(addsuffix _all,$(TARGET_DIRS))
+debug: $(addsuffix _debug,$(TARGET_DIRS))
+smart: $(addsuffix _smart,$(TARGET_DIRS))
+release: $(addsuffix _release,$(TARGET_DIRS))
+units: $(addsuffix _units,$(TARGET_DIRS))
+examples: $(addsuffix _examples,$(TARGET_DIRS))
+shared: $(addsuffix _shared,$(TARGET_DIRS))
+install: $(addsuffix _install,$(TARGET_DIRS))
+sourceinstall: $(addsuffix _sourceinstall,$(TARGET_DIRS))
+exampleinstall: $(addsuffix _exampleinstall,$(TARGET_DIRS))
+distinstall: $(addsuffix _distinstall,$(TARGET_DIRS))
+zipinstall: $(addsuffix _zipinstall,$(TARGET_DIRS))
+zipsourceinstall: $(addsuffix _zipsourceinstall,$(TARGET_DIRS))
+zipexampleinstall: $(addsuffix _zipexampleinstall,$(TARGET_DIRS))
+zipdistinstall: $(addsuffix _zipdistinstall,$(TARGET_DIRS))
+clean: $(addsuffix _clean,$(TARGET_DIRS))
+distclean: $(addsuffix _distclean,$(TARGET_DIRS))
+cleanall: $(addsuffix _cleanall,$(TARGET_DIRS))
+info: fpc_info
+makefiles: fpc_makefiles $(addsuffix _makefiles,$(TARGET_DIRS))
+.PHONY: all debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall clean distclean cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+.NOTPARALLEL:

+ 20 - 0
packages/libgbafpc/examples/Makefile.fpc

@@ -0,0 +1,20 @@
+#
+#   Makefile.fpc for Free Pascal libgbafpc 2.x.y Examples
+#
+
+[target]
+dirs= devkitPro/audio/PlayBoyScout \
+      devkitPro/graphics/ansi_console devkitPro/graphics/PCXView devkitPro/graphics/SimpleBGScroll \
+      devkitPro/template
+
+[require]
+packages=libgbafpc
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../../..
+
+[rules]
+.NOTPARALLEL:

+ 1647 - 0
packages/libgbafpc/examples/devkitPro/audio/PlayBoyScout/Makefile

@@ -0,0 +1,1647 @@
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/04/20]
+#
+default: all
+MAKEFILETARGETS=arm-gba
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) solaris qnx
+LIMIT83fs = go32v2 os2 emx watcom
+OSNeedsComspecToRunBatch = go32v2 watcom
+FORCE:
+.PHONY: FORCE
+override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
+ifneq ($(findstring darwin,$(OSTYPE)),)
+inUnix=1 #darwin
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+endif
+SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifdef inUnix
+SRCBATCHEXT=.sh
+else
+ifdef inOS2
+SRCBATCHEXT=.cmd
+else
+SRCBATCHEXT=.bat
+endif
+endif
+ifdef COMSPEC
+ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
+RUNBATCH=$(COMSPEC) /C
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+override OS_TARGET_DEFAULT=gba
+override CPU_TARGET_DEFAULT=arm
+override DEFAULT_FPCDIR=../../../../..
+ifndef FPC
+ifdef PP
+FPC=$(PP)
+endif
+endif
+ifndef FPC
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+ifneq ($(CPU_TARGET),)
+FPC:=$(shell $(FPCPROG) -P$(CPU_TARGET) -PB)
+else
+FPC:=$(shell $(FPCPROG) -PB)
+endif
+ifneq ($(findstring Error,$(FPC)),)
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+else
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+endif
+override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
+override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
+FOUNDFPC:=$(strip $(wildcard $(FPC)))
+ifeq ($(FOUNDFPC),)
+FOUNDFPC=$(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))
+ifeq ($(FOUNDFPC),)
+$(error Compiler $(FPC) not found)
+endif
+endif
+ifndef FPC_COMPILERINFO
+FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO)
+endif
+ifndef FPC_VERSION
+FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO))
+endif
+export FPC FPC_VERSION FPC_COMPILERINFO
+unexport CHECKDEPEND ALLDEPENDENCIES
+ifndef CPU_TARGET
+ifdef CPU_TARGET_DEFAULT
+CPU_TARGET=$(CPU_TARGET_DEFAULT)
+endif
+endif
+ifndef OS_TARGET
+ifdef OS_TARGET_DEFAULT
+OS_TARGET=$(OS_TARGET_DEFAULT)
+endif
+endif
+ifneq ($(words $(FPC_COMPILERINFO)),5)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSO)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTO)
+endif
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(word 2,$(FPC_COMPILERINFO))
+endif
+ifndef CPU_TARGET
+CPU_TARGET:=$(word 3,$(FPC_COMPILERINFO))
+endif
+ifndef OS_SOURCE
+OS_SOURCE:=$(word 4,$(FPC_COMPILERINFO))
+endif
+ifndef OS_TARGET
+OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
+endif
+FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifeq ($(CPU_TARGET),armeb)
+ARCH=arm
+override FPCOPT+=-Cb
+else
+ifeq ($(CPU_TARGET),armel)
+ARCH=arm
+override FPCOPT+=-CaEABI
+else
+ARCH=$(CPU_TARGET)
+endif
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+SOURCESUFFIX=$(OS_SOURCE)
+else
+TARGETSUFFIX=$(FULL_TARGET)
+SOURCESUFFIX=$(FULL_SOURCE)
+endif
+ifneq ($(FULL_TARGET),$(FULL_SOURCE))
+CROSSCOMPILE=1
+endif
+ifeq ($(findstring makefile,$(MAKECMDGOALS)),)
+ifeq ($(findstring $(FULL_TARGET),$(MAKEFILETARGETS)),)
+$(error The Makefile doesn't support target $(FULL_TARGET), please run fpcmake first)
+endif
+endif
+ifneq ($(findstring $(OS_TARGET),$(BSDs)),)
+BSDhier=1
+endif
+ifeq ($(OS_TARGET),linux)
+linuxHier=1
+endif
+export OS_TARGET OS_SOURCE ARCH CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
+ifdef FPCDIR
+override FPCDIR:=$(subst \,/,$(FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+else
+override FPCDIR=wrong
+endif
+ifdef DEFAULT_FPCDIR
+ifeq ($(FPCDIR),wrong)
+override FPCDIR:=$(subst \,/,$(DEFAULT_FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+endif
+endif
+ifeq ($(FPCDIR),wrong)
+ifdef inUnix
+override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
+endif
+else
+override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))))
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(BASEDIR)
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=c:/pp
+endif
+endif
+endif
+endif
+endif
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(FPCDIR)/bin/$(TARGETSUFFIX))
+endif
+ifndef BINUTILSPREFIX
+ifndef CROSSBINDIR
+ifdef CROSSCOMPILE
+BINUTILSPREFIX=$(CPU_TARGET)-$(OS_TARGET)-
+endif
+endif
+endif
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(TARGETSUFFIX))
+ifeq ($(UNITSDIR),)
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
+endif
+PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_PROGRAMS+=PlayBoyScout
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_LOADERS+=data/ScoutSplash.pcx data/tune.bgf
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override CLEAN_UNITS+=*
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override CLEAN_FILES+=*.elf data/*.o data/*.s
+endif
+override INSTALL_FPCPACKAGE=y
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=1
+endif
+else
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXHier
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef COMPILER_UNITTARGETDIR
+ifdef PACKAGEDIR_MAIN
+COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
+else
+COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
+endif
+endif
+ifndef COMPILER_TARGETDIR
+COMPILER_TARGETDIR=.
+endif
+ifndef INSTALL_BASEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXHier
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+ifdef CROSSCOMPILE
+ifdef CROSSINSTALL
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXHier
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXHier
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+ifdef linuxHier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+ifdef UNIXHier
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+ifdef linuxHier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+endif
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifndef INSTALL_SHAREDDIR
+INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+SHAREDLIBPREFIX=libfp
+STATICLIBPREFIX=libp
+IMPORTLIBPREFIX=libimp
+RSTEXT=.rst
+ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),go32v1)
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+OEXT=.obj
+ASMEXT=.asm
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=wat
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),emx)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=emx
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),morphos)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=mos
+endif
+ifeq ($(OS_TARGET),atari)
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nw
+endif
+ifeq ($(OS_TARGET),netwlibc)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nwl
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+endif
+ifeq ($(OS_TARGET),darwin)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=dwn
+endif
+ifeq ($(OS_TARGET),gba)
+EXEEXT=.gba
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gba
+endif
+ifeq ($(OS_TARGET),nds)
+EXEEXT=.nds
+SHAREDLIBEXT=.so
+SHORTSUFFIX=nds
+endif
+ifeq ($(OS_TARGET),gamecube)
+EXEEXT=.dol
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gamecube
+endif
+ifeq ($(OS_TARGET),wii)
+EXEEXT=.dol
+SHAREDLIBEXT=.so
+SHORTSUFFIX=wii
+endif
+ifeq ($(OS_TARGET),symbian)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=symbian
+endif
+else
+ifeq ($(OS_TARGET),go32v1)
+PPUEXT=.pp1
+OEXT=.o1
+ASMEXT=.s1
+SMARTEXT=.sl1
+STATICLIBEXT=.a1
+SHAREDLIBEXT=.so1
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+SHORTSUFFIX=wat
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+PPUEXT=.ppw
+OEXT=.ow
+ASMEXT=.sw
+SMARTEXT=.slw
+STATICLIBEXT=.aw
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+PPUEXT=.ppo
+ASMEXT=.so2
+OEXT=.oo2
+AOUTEXT=.out
+SMARTEXT=.sl2
+STATICLIBPREFIX=
+STATICLIBEXT=.ao2
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),atari)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nw
+endif
+ifeq ($(OS_TARGET),netwlibc)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nwl
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+endif
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+FPCMADE=fpcmade.$(SHORTSUFFIX)
+ZIPSUFFIX=$(SHORTSUFFIX)
+ZIPCROSSPREFIX=
+ZIPSOURCESUFFIX=src
+ZIPEXAMPLESUFFIX=exm
+else
+FPCMADE=fpcmade.$(TARGETSUFFIX)
+ZIPSOURCESUFFIX=.source
+ZIPEXAMPLESUFFIX=.examples
+ifdef CROSSCOMPILE
+ZIPSUFFIX=.$(SOURCESUFFIX)
+ZIPCROSSPREFIX=$(TARGETSUFFIX)-
+else
+ZIPSUFFIX=.$(TARGETSUFFIX)
+ZIPCROSSPREFIX=
+endif
+endif
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO= __missing_command_ECHO
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+ifndef DATE
+DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE= __missing_command_DATE
+else
+DATE:=$(firstword $(DATE))
+endif
+else
+DATE:=$(firstword $(DATE))
+endif
+endif
+export DATE
+ifndef GINSTALL
+GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL= __missing_command_GINSTALL
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+endif
+export GINSTALL
+ifndef CPPROG
+CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(CPPROG),)
+CPPROG= __missing_command_CPPROG
+else
+CPPROG:=$(firstword $(CPPROG))
+endif
+endif
+export CPPROG
+ifndef RMPROG
+RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(RMPROG),)
+RMPROG= __missing_command_RMPROG
+else
+RMPROG:=$(firstword $(RMPROG))
+endif
+endif
+export RMPROG
+ifndef MVPROG
+MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MVPROG),)
+MVPROG= __missing_command_MVPROG
+else
+MVPROG:=$(firstword $(MVPROG))
+endif
+endif
+export MVPROG
+ifndef MKDIRPROG
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /gmkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /mkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG= __missing_command_MKDIRPROG
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+endif
+export MKDIRPROG
+ifndef ECHOREDIR
+ifndef inUnix
+ECHOREDIR=echo
+else
+ECHOREDIR=$(ECHO)
+endif
+endif
+ifndef COPY
+COPY:=$(CPPROG) -fp
+endif
+ifndef COPYTREE
+COPYTREE:=$(CPPROG) -Rfp
+endif
+ifndef MKDIRTREE
+MKDIRTREE:=$(MKDIRPROG) -p
+endif
+ifndef MOVE
+MOVE:=$(MVPROG) -f
+endif
+ifndef DEL
+DEL:=$(RMPROG) -f
+endif
+ifndef DELTREE
+DELTREE:=$(RMPROG) -rf
+endif
+ifndef INSTALL
+ifdef inUnix
+INSTALL:=$(GINSTALL) -c -m 644
+else
+INSTALL:=$(COPY)
+endif
+endif
+ifndef INSTALLEXE
+ifdef inUnix
+INSTALLEXE:=$(GINSTALL) -c -m 755
+else
+INSTALLEXE:=$(COPY)
+endif
+endif
+ifndef MKDIR
+MKDIR:=$(GINSTALL) -m 755 -d
+endif
+export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
+ifndef PPUMOVE
+PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(PPUMOVE),)
+PPUMOVE= __missing_command_PPUMOVE
+else
+PPUMOVE:=$(firstword $(PPUMOVE))
+endif
+endif
+export PPUMOVE
+ifndef FPCMAKE
+FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(FPCMAKE),)
+FPCMAKE= __missing_command_FPCMAKE
+else
+FPCMAKE:=$(firstword $(FPCMAKE))
+endif
+endif
+export FPCMAKE
+ifndef ZIPPROG
+ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ZIPPROG),)
+ZIPPROG= __missing_command_ZIPPROG
+else
+ZIPPROG:=$(firstword $(ZIPPROG))
+endif
+endif
+export ZIPPROG
+ifndef TARPROG
+TARPROG:=$(strip $(wildcard $(addsuffix /gtar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG= __missing_command_TARPROG
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+endif
+export TARPROG
+ASNAME=$(BINUTILSPREFIX)as
+LDNAME=$(BINUTILSPREFIX)ld
+ARNAME=$(BINUTILSPREFIX)ar
+RCNAME=$(BINUTILSPREFIX)rc
+ifneq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),win32)
+ifeq ($(CROSSBINDIR),)
+ASNAME=asw
+LDNAME=ldw
+ARNAME=arw
+endif
+endif
+endif
+ifndef ASPROG
+ifdef CROSSBINDIR
+ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
+else
+ASPROG=$(ASNAME)
+endif
+endif
+ifndef LDPROG
+ifdef CROSSBINDIR
+LDPROG=$(CROSSBINDIR)/$(LDNAME)$(SRCEXEEXT)
+else
+LDPROG=$(LDNAME)
+endif
+endif
+ifndef RCPROG
+ifdef CROSSBINDIR
+RCPROG=$(CROSSBINDIR)/$(RCNAME)$(SRCEXEEXT)
+else
+RCPROG=$(RCNAME)
+endif
+endif
+ifndef ARPROG
+ifdef CROSSBINDIR
+ARPROG=$(CROSSBINDIR)/$(ARNAME)$(SRCEXEEXT)
+else
+ARPROG=$(ARNAME)
+endif
+endif
+AS=$(ASPROG)
+LD=$(LDPROG)
+RC=$(RCPROG)
+AR=$(ARPROG)
+PPAS=ppas$(SRCBATCHEXT)
+ifdef inUnix
+LDCONFIG=ldconfig
+else
+LDCONFIG=
+endif
+ifdef DATE
+DATESTR:=$(shell $(DATE) +%Y%m%d)
+else
+DATESTR=
+endif
+ifndef UPXPROG
+ifeq ($(OS_TARGET),go32v2)
+UPXPROG:=1
+endif
+ifeq ($(OS_TARGET),win32)
+UPXPROG:=1
+endif
+ifdef UPXPROG
+UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(UPXPROG),)
+UPXPROG=
+else
+UPXPROG:=$(firstword $(UPXPROG))
+endif
+else
+UPXPROG=
+endif
+endif
+export UPXPROG
+ZIPOPT=-9
+ZIPEXT=.zip
+ifeq ($(USETAR),bz2)
+TAROPT=vj
+TAREXT=.tar.bz2
+else
+TAROPT=vz
+TAREXT=.tar.gz
+endif
+override REQUIRE_PACKAGES=rtl libgbafpc
+ifeq ($(FULL_TARGET),arm-gba)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifdef REQUIRE_PACKAGES_RTL
+PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_RTL),)
+ifneq ($(wildcard $(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)),)
+UNITDIR_RTL=$(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)
+else
+UNITDIR_RTL=$(PACKAGEDIR_RTL)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_RTL)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_RTL) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_RTL)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_RTL=
+UNITDIR_RTL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /rtl/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_RTL),)
+UNITDIR_RTL:=$(firstword $(UNITDIR_RTL))
+else
+UNITDIR_RTL=
+endif
+endif
+ifdef UNITDIR_RTL
+override COMPILER_UNITDIR+=$(UNITDIR_RTL)
+endif
+endif
+ifdef REQUIRE_PACKAGES_LIBGBAFPC
+PACKAGEDIR_LIBGBAFPC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /libgbafpc/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_LIBGBAFPC),)
+ifneq ($(wildcard $(PACKAGEDIR_LIBGBAFPC)/units/$(TARGETSUFFIX)),)
+UNITDIR_LIBGBAFPC=$(PACKAGEDIR_LIBGBAFPC)/units/$(TARGETSUFFIX)
+else
+UNITDIR_LIBGBAFPC=$(PACKAGEDIR_LIBGBAFPC)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_LIBGBAFPC)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_LIBGBAFPC) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_LIBGBAFPC)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_LIBGBAFPC=
+UNITDIR_LIBGBAFPC:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /libgbafpc/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_LIBGBAFPC),)
+UNITDIR_LIBGBAFPC:=$(firstword $(UNITDIR_LIBGBAFPC))
+else
+UNITDIR_LIBGBAFPC=
+endif
+endif
+ifdef UNITDIR_LIBGBAFPC
+override COMPILER_UNITDIR+=$(UNITDIR_LIBGBAFPC)
+endif
+endif
+ifndef NOCPUDEF
+override FPCOPTDEF=$(ARCH)
+endif
+ifneq ($(OS_TARGET),$(OS_SOURCE))
+override FPCOPT+=-T$(OS_TARGET)
+endif
+ifneq ($(CPU_TARGET),$(CPU_SOURCE))
+override FPCOPT+=-P$(ARCH)
+endif
+ifeq ($(OS_SOURCE),openbsd)
+override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
+endif
+ifndef CROSSBOOTSTRAP
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-XP$(BINUTILSPREFIX)
+endif
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-Xr$(RLINKPATH)
+endif
+endif
+ifdef UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
+endif
+ifdef LIBDIR
+override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
+endif
+ifdef OBJDIR
+override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
+endif
+ifdef INCDIR
+override FPCOPT+=$(addprefix -Fi,$(INCDIR))
+endif
+ifdef LINKSMART
+override FPCOPT+=-XX
+endif
+ifdef CREATESMART
+override FPCOPT+=-CX
+endif
+ifdef DEBUG
+override FPCOPT+=-gl
+override FPCOPTDEF+=DEBUG
+endif
+ifdef RELEASE
+ifneq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(CPU_TARGET),i386)
+FPCCPUOPT:=-OG2p3
+endif
+ifeq ($(CPU_TARGET),powerpc)
+FPCCPUOPT:=-O1r
+endif
+else
+FPCCPUOPT:=-O2
+endif
+override FPCOPT+=-Ur -Xs $(FPCCPUOPT) -n
+override FPCOPTDEF+=RELEASE
+endif
+ifdef STRIP
+override FPCOPT+=-Xs
+endif
+ifdef OPTIMIZE
+override FPCOPT+=-O2
+endif
+ifdef VERBOSE
+override FPCOPT+=-vwni
+endif
+ifdef COMPILER_OPTIONS
+override FPCOPT+=$(COMPILER_OPTIONS)
+endif
+ifdef COMPILER_UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(COMPILER_UNITDIR))
+endif
+ifdef COMPILER_LIBRARYDIR
+override FPCOPT+=$(addprefix -Fl,$(COMPILER_LIBRARYDIR))
+endif
+ifdef COMPILER_OBJECTDIR
+override FPCOPT+=$(addprefix -Fo,$(COMPILER_OBJECTDIR))
+endif
+ifdef COMPILER_INCLUDEDIR
+override FPCOPT+=$(addprefix -Fi,$(COMPILER_INCLUDEDIR))
+endif
+ifdef CROSSBINDIR
+override FPCOPT+=-FD$(CROSSBINDIR)
+endif
+ifdef COMPILER_TARGETDIR
+override FPCOPT+=-FE$(COMPILER_TARGETDIR)
+ifeq ($(COMPILER_TARGETDIR),.)
+override TARGETDIRPREFIX=
+else
+override TARGETDIRPREFIX=$(COMPILER_TARGETDIR)/
+endif
+endif
+ifdef COMPILER_UNITTARGETDIR
+override FPCOPT+=-FU$(COMPILER_UNITTARGETDIR)
+ifeq ($(COMPILER_UNITTARGETDIR),.)
+override UNITTARGETDIRPREFIX=
+else
+override UNITTARGETDIRPREFIX=$(COMPILER_UNITTARGETDIR)/
+endif
+else
+ifdef COMPILER_TARGETDIR
+override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR)
+override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
+endif
+endif
+ifdef CREATESHARED
+override FPCOPT+=-Cg
+ifeq ($(CPU_TARGET),i386)
+override FPCOPT+=-Aas
+endif
+endif
+ifeq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),x86_64)
+override FPCOPT+=-Cg
+endif
+endif
+endif
+ifdef LINKSHARED
+endif
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+ifdef FPCOPTDEF
+override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
+endif
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+ifdef USEENV
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+override AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(AFULL_TARGET),$(AFULL_SOURCE))
+override ACROSSCOMPILE=1
+endif
+ifdef ACROSSCOMPILE
+override FPCOPT+=$(CROSSOPT)
+endif
+override COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+ifdef RUNBATCH
+EXECPPAS:=@$(RUNBATCH) $(PPAS)
+else
+EXECPPAS:=@$(PPAS)
+endif
+endif
+endif
+.PHONY: fpc_loaders
+ifneq ($(TARGET_LOADERS),)
+override ALLTARGET+=fpc_loaders
+override CLEANTARGET+=fpc_loaders_clean
+override INSTALLTARGET+=fpc_loaders_install
+override LOADEROFILES:=$(addsuffix $(OEXT),$(TARGET_LOADERS))
+endif
+%$(OEXT): %$(LOADEREXT)
+ifdef COMPILER_UNITTARGETDIR
+	$(AS) -o $(COMPILER_UNITTARGETDIR)/$*$(OEXT) $<
+else
+	$(AS) -o $*$(OEXT) $<
+endif
+fpc_loaders: $(COMPILER_UNITTARGETDIR) $(LOADEROFILES)
+fpc_loaders_clean:
+ifdef COMPILER_UNITTARGETDIR
+	-$(DEL) $(addprefix $(COMPILER_UNITTARGETDIR)/,$(LOADEROFILES))
+else
+	-$(DEL) $(LOADEROFILES)
+endif
+fpc_loaders_install:
+	$(MKDIR) $(INSTALL_UNITDIR)
+ifdef COMPILER_UNITTARGETDIR
+	$(INSTALL) $(addprefix $(COMPILER_UNITTARGETDIR)/,$(LOADEROFILES)) $(INSTALL_UNITDIR)
+else
+	$(INSTALL) $(LOADEROFILES) $(INSTALL_UNITDIR)
+endif
+.PHONY: fpc_exes
+ifndef CROSSINSTALL
+ifneq ($(TARGET_PROGRAMS),)
+override EXEFILES=$(addsuffix $(EXEEXT),$(TARGET_PROGRAMS))
+override EXEOFILES:=$(addsuffix $(OEXT),$(TARGET_PROGRAMS)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS))) $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS)))
+override ALLTARGET+=fpc_exes
+override INSTALLEXEFILES+=$(EXEFILES)
+override CLEANEXEFILES+=$(EXEFILES) $(EXEOFILES)
+ifeq ($(OS_TARGET),os2)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+ifeq ($(OS_TARGET),emx)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+endif
+endif
+fpc_exes: $(COMPILER_TARGETDIR) $(COMPILER_UNITTARGETDIR) $(EXEFILES)
+ifdef TARGET_RSTS
+override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
+override CLEANRSTFILES+=$(RSTFILES)
+endif
+.PHONY: fpc_all fpc_smart fpc_debug fpc_release fpc_shared
+$(FPCMADE): $(ALLDEPENDENCIES) $(ALLTARGET)
+	@$(ECHOREDIR) Compiled > $(FPCMADE)
+fpc_all: $(FPCMADE)
+fpc_smart:
+	$(MAKE) all LINKSMART=1 CREATESMART=1
+fpc_debug:
+	$(MAKE) all DEBUG=1
+fpc_release:
+	$(MAKE) all RELEASE=1
+.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .lpr .dpr .pp .rc .res
+$(COMPILER_UNITTARGETDIR):
+	$(MKDIRTREE) $(COMPILER_UNITTARGETDIR)
+$(COMPILER_TARGETDIR):
+	$(MKDIRTREE) $(COMPILER_TARGETDIR)
+%$(PPUEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(PPUEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.lpr
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.dpr
+	$(COMPILER) $<
+	$(EXECPPAS)
+%.res: %.rc
+	windres -i $< -o $@
+vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.lpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.inc $(COMPILER_INCLUDEDIR)
+vpath %$(OEXT) $(COMPILER_UNITTARGETDIR)
+vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)
+.PHONY: fpc_shared
+override INSTALLTARGET+=fpc_shared_install
+ifndef SHARED_LIBVERSION
+SHARED_LIBVERSION=$(FPC_VERSION)
+endif
+ifndef SHARED_LIBNAME
+SHARED_LIBNAME=$(PACKAGE_NAME)
+endif
+ifndef SHARED_FULLNAME
+SHARED_FULLNAME=$(SHAREDLIBPREFIX)$(SHARED_LIBNAME)-$(SHARED_LIBVERSION)$(SHAREDLIBEXT)
+endif
+ifndef SHARED_LIBUNITS
+SHARED_LIBUNITS:=$(TARGET_UNITS) $(TARGET_IMPLICITUNITS)
+override SHARED_LIBUNITS:=$(filter-out $(INSTALL_BUILDUNIT),$(SHARED_LIBUNITS))
+endif
+fpc_shared:
+ifdef HASSHAREDLIB
+	$(MAKE) all CREATESHARED=1 LINKSHARED=1 CREATESMART=1
+ifneq ($(SHARED_BUILD),n)
+	$(PPUMOVE) -q $(SHARED_LIBUNITS) -i$(COMPILER_UNITTARGETDIR) -o$(SHARED_FULLNAME) -d$(COMPILER_UNITTARGETDIR)
+endif
+else
+	@$(ECHO) Shared Libraries not supported
+endif
+fpc_shared_install:
+ifneq ($(SHARED_BUILD),n)
+ifneq ($(SHARED_LIBUNITS),)
+ifneq ($(wildcard $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME)),)
+	$(INSTALL) $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME) $(INSTALL_SHAREDDIR)
+endif
+endif
+endif
+.PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall
+ifdef INSTALL_UNITS
+override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(INSTALL_UNITS))
+endif
+ifdef INSTALL_BUILDUNIT
+override INSTALLPPUFILES:=$(filter-out $(INSTALL_BUILDUNIT)$(PPUEXT),$(INSTALLPPUFILES))
+endif
+ifdef INSTALLPPUFILES
+override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES)))
+ifneq ($(UNITTARGETDIRPREFIX),)
+override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPUFILES)))
+override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPULINKFILES))))
+endif
+override INSTALL_CREATEPACKAGEFPC=1
+endif
+ifdef INSTALLEXEFILES
+ifneq ($(TARGETDIRPREFIX),)
+override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(notdir $(INSTALLEXEFILES)))
+endif
+endif
+fpc_install: all $(INSTALLTARGET)
+ifdef INSTALLEXEFILES
+	$(MKDIR) $(INSTALL_BINDIR)
+ifdef UPXPROG
+	-$(UPXPROG) $(INSTALLEXEFILES)
+endif
+	$(INSTALLEXE) $(INSTALLEXEFILES) $(INSTALL_BINDIR)
+endif
+ifdef INSTALL_CREATEPACKAGEFPC
+ifdef FPCMAKE
+ifdef PACKAGE_VERSION
+ifneq ($(wildcard Makefile.fpc),)
+	$(FPCMAKE) -p -T$(CPU_TARGET)-$(OS_TARGET) Makefile.fpc
+	$(MKDIR) $(INSTALL_UNITDIR)
+	$(INSTALL) Package.fpc $(INSTALL_UNITDIR)
+endif
+endif
+endif
+endif
+ifdef INSTALLPPUFILES
+	$(MKDIR) $(INSTALL_UNITDIR)
+	$(INSTALL) $(INSTALLPPUFILES) $(INSTALL_UNITDIR)
+ifneq ($(INSTALLPPULINKFILES),)
+	$(INSTALL) $(INSTALLPPULINKFILES) $(INSTALL_UNITDIR)
+endif
+ifneq ($(wildcard $(LIB_FULLNAME)),)
+	$(MKDIR) $(INSTALL_LIBDIR)
+	$(INSTALL) $(LIB_FULLNAME) $(INSTALL_LIBDIR)
+ifdef inUnix
+	ln -sf $(LIB_FULLNAME) $(INSTALL_LIBDIR)/$(LIB_NAME)
+endif
+endif
+endif
+ifdef INSTALL_FILES
+	$(MKDIR) $(INSTALL_DATADIR)
+	$(INSTALL) $(INSTALL_FILES) $(INSTALL_DATADIR)
+endif
+fpc_sourceinstall: distclean
+	$(MKDIR) $(INSTALL_SOURCEDIR)
+	$(COPYTREE) $(BASEDIR)/* $(INSTALL_SOURCEDIR)
+fpc_exampleinstall: $(addsuffix _distclean,$(TARGET_EXAMPLEDIRS))
+ifdef HASEXAMPLES
+	$(MKDIR) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef EXAMPLESOURCEFILES
+	$(COPY) $(EXAMPLESOURCEFILES) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(COPYTREE) $(addsuffix /*,$(TARGET_EXAMPLEDIRS)) $(INSTALL_EXAMPLEDIR)
+endif
+.PHONY: fpc_clean fpc_cleanall fpc_distclean
+ifdef EXEFILES
+override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
+endif
+ifdef CLEAN_UNITS
+override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
+endif
+ifdef CLEANPPUFILES
+override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES)))
+ifdef DEBUGSYMEXT
+override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPPUFILES))
+endif
+override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
+override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES)))
+endif
+fpc_clean: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
+endif
+ifdef LIB_NAME
+	-$(DEL) $(LIB_NAME) $(LIB_FULLNAME)
+endif
+	-$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT)
+fpc_cleanall: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef COMPILER_UNITTARGETDIR
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+endif
+	-$(DELTREE) units
+	-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
+ifneq ($(PPUEXT),.ppu)
+	-$(DEL) *.o *.ppu *.a
+endif
+	-$(DELTREE) *$(SMARTEXT)
+	-$(DEL) fpcmade.* Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *_ppas$(BATCHEXT)
+ifdef AOUTEXT
+	-$(DEL) *$(AOUTEXT)
+endif
+ifdef DEBUGSYMEXT
+	-$(DEL) *$(DEBUGSYMEXT)
+endif
+fpc_distclean: cleanall
+.PHONY: fpc_baseinfo
+override INFORULES+=fpc_baseinfo
+fpc_baseinfo:
+	@$(ECHO)
+	@$(ECHO)  == Package info ==
+	@$(ECHO)  Package Name..... $(PACKAGE_NAME)
+	@$(ECHO)  Package Version.. $(PACKAGE_VERSION)
+	@$(ECHO)
+	@$(ECHO)  == Configuration info ==
+	@$(ECHO)
+	@$(ECHO)  FPC.......... $(FPC)
+	@$(ECHO)  FPC Version.. $(FPC_VERSION)
+	@$(ECHO)  Source CPU... $(CPU_SOURCE)
+	@$(ECHO)  Target CPU... $(CPU_TARGET)
+	@$(ECHO)  Source OS.... $(OS_SOURCE)
+	@$(ECHO)  Target OS.... $(OS_TARGET)
+	@$(ECHO)  Full Source.. $(FULL_SOURCE)
+	@$(ECHO)  Full Target.. $(FULL_TARGET)
+	@$(ECHO)  SourceSuffix. $(SOURCESUFFIX)
+	@$(ECHO)  TargetSuffix. $(TARGETSUFFIX)
+	@$(ECHO)
+	@$(ECHO)  == Directory info ==
+	@$(ECHO)
+	@$(ECHO)  Required pkgs... $(REQUIRE_PACKAGES)
+	@$(ECHO)
+	@$(ECHO)  Basedir......... $(BASEDIR)
+	@$(ECHO)  FPCDir.......... $(FPCDIR)
+	@$(ECHO)  CrossBinDir..... $(CROSSBINDIR)
+	@$(ECHO)  UnitsDir........ $(UNITSDIR)
+	@$(ECHO)  PackagesDir..... $(PACKAGESDIR)
+	@$(ECHO)
+	@$(ECHO)  GCC library..... $(GCCLIBDIR)
+	@$(ECHO)  Other library... $(OTHERLIBDIR)
+	@$(ECHO)
+	@$(ECHO)  == Tools info ==
+	@$(ECHO)
+	@$(ECHO)  As........ $(AS)
+	@$(ECHO)  Ld........ $(LD)
+	@$(ECHO)  Ar........ $(AR)
+	@$(ECHO)  Rc........ $(RC)
+	@$(ECHO)
+	@$(ECHO)  Mv........ $(MVPROG)
+	@$(ECHO)  Cp........ $(CPPROG)
+	@$(ECHO)  Rm........ $(RMPROG)
+	@$(ECHO)  GInstall.. $(GINSTALL)
+	@$(ECHO)  Echo...... $(ECHO)
+	@$(ECHO)  Shell..... $(SHELL)
+	@$(ECHO)  Date...... $(DATE)
+	@$(ECHO)  FPCMake... $(FPCMAKE)
+	@$(ECHO)  PPUMove... $(PPUMOVE)
+	@$(ECHO)  Upx....... $(UPXPROG)
+	@$(ECHO)  Zip....... $(ZIPPROG)
+	@$(ECHO)
+	@$(ECHO)  == Object info ==
+	@$(ECHO)
+	@$(ECHO)  Target Loaders........ $(TARGET_LOADERS)
+	@$(ECHO)  Target Units.......... $(TARGET_UNITS)
+	@$(ECHO)  Target Implicit Units. $(TARGET_IMPLICITUNITS)
+	@$(ECHO)  Target Programs....... $(TARGET_PROGRAMS)
+	@$(ECHO)  Target Dirs........... $(TARGET_DIRS)
+	@$(ECHO)  Target Examples....... $(TARGET_EXAMPLES)
+	@$(ECHO)  Target ExampleDirs.... $(TARGET_EXAMPLEDIRS)
+	@$(ECHO)
+	@$(ECHO)  Clean Units......... $(CLEAN_UNITS)
+	@$(ECHO)  Clean Files......... $(CLEAN_FILES)
+	@$(ECHO)
+	@$(ECHO)  Install Units....... $(INSTALL_UNITS)
+	@$(ECHO)  Install Files....... $(INSTALL_FILES)
+	@$(ECHO)
+	@$(ECHO)  == Install info ==
+	@$(ECHO)
+	@$(ECHO)  DateStr.............. $(DATESTR)
+	@$(ECHO)  ZipName.............. $(ZIPNAME)
+	@$(ECHO)  ZipPrefix............ $(ZIPPREFIX)
+	@$(ECHO)  ZipCrossPrefix....... $(ZIPCROSSPREFIX)
+	@$(ECHO)  ZipSuffix............ $(ZIPSUFFIX)
+	@$(ECHO)  FullZipName.......... $(FULLZIPNAME)
+	@$(ECHO)  Install FPC Package.. $(INSTALL_FPCPACKAGE)
+	@$(ECHO)
+	@$(ECHO)  Install base dir..... $(INSTALL_BASEDIR)
+	@$(ECHO)  Install binary dir... $(INSTALL_BINDIR)
+	@$(ECHO)  Install library dir.. $(INSTALL_LIBDIR)
+	@$(ECHO)  Install units dir.... $(INSTALL_UNITDIR)
+	@$(ECHO)  Install source dir... $(INSTALL_SOURCEDIR)
+	@$(ECHO)  Install doc dir...... $(INSTALL_DOCDIR)
+	@$(ECHO)  Install example dir.. $(INSTALL_EXAMPLEDIR)
+	@$(ECHO)  Install data dir..... $(INSTALL_DATADIR)
+	@$(ECHO)
+	@$(ECHO)  Dist destination dir. $(DIST_DESTDIR)
+	@$(ECHO)  Dist zip name........ $(DIST_ZIPNAME)
+	@$(ECHO)
+.PHONY: fpc_info
+fpc_info: $(INFORULES)
+.PHONY: fpc_makefile fpc_makefiles fpc_makefile_sub1 fpc_makefile_sub2 \
+	fpc_makefile_dirs
+fpc_makefile:
+	$(FPCMAKE) -w -T$(OS_TARGET) Makefile.fpc
+fpc_makefile_sub1:
+ifdef TARGET_DIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_DIRS))
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_EXAMPLEDIRS))
+endif
+fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS))
+fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
+fpc_makefiles: fpc_makefile fpc_makefile_dirs
+ifndef BIN2S
+BIN2S:=$(strip $(wildcard $(addsuffix /bin2s$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(BIN2S),)
+BIN2S= __missing_command_BIN2S
+else
+BIN2S:=$(firstword $(BIN2S))
+endif
+endif
+export BIN2S
+all: fpc_all
+debug: fpc_debug
+smart: fpc_smart
+release: fpc_release
+units: fpc_units
+examples:
+shared: fpc_shared
+install: fpc_install
+sourceinstall: fpc_sourceinstall
+exampleinstall: fpc_exampleinstall
+distinstall:
+zipinstall:
+zipsourceinstall:
+zipexampleinstall:
+zipdistinstall:
+clean: fpc_clean
+distclean: fpc_distclean
+cleanall: fpc_cleanall
+info: fpc_info
+makefiles: fpc_makefiles
+.PHONY: all debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall clean distclean cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+.NOTPARALLEL:
+ifneq ($(BIN2S),)
+data/ScoutSplash.pcx.o:
+	$(BIN2S) data/ScoutSplash.pcx > data/ScoutSplash.pcx.s
+	$(AS) -o data/ScoutSplash.pcx.o data/ScoutSplash.pcx.s
+data/tune.bgf.o:
+	$(BIN2S) data/tune.bgf > data/tune.bgf.s
+	$(AS) -o data/tune.bgf.o data/tune.bgf.s
+endif

+ 36 - 0
packages/libgbafpc/examples/devkitPro/audio/PlayBoyScout/Makefile.fpc

@@ -0,0 +1,36 @@
+#
+#   Makefile.fpc for Free Pascal libgbafpc 2.x.y Examples
+#
+
+[target]
+loaders=data/ScoutSplash.pcx data/tune.bgf
+programs=PlayBoyScout
+
+[require]
+packages=libgbafpc
+tools=bin2s
+
+[install]
+fpcpackage=y
+
+[default]
+cpu=arm
+target=gba
+fpcdir=../../../../..
+
+[clean]
+files=*.elf data/*.o data/*.s
+units=*
+
+[prerules]
+
+[rules]
+.NOTPARALLEL:
+ifneq ($(BIN2S),)
+data/ScoutSplash.pcx.o:
+        $(BIN2S) data/ScoutSplash.pcx > data/ScoutSplash.pcx.s
+        $(AS) -o data/ScoutSplash.pcx.o data/ScoutSplash.pcx.s
+data/tune.bgf.o:
+        $(BIN2S) data/tune.bgf > data/tune.bgf.s
+        $(AS) -o data/tune.bgf.o data/tune.bgf.s
+endif

+ 73 - 0
packages/libgbafpc/examples/devkitPro/audio/PlayBoyScout/PlayBoyScout.pp

@@ -0,0 +1,73 @@
+program PlayBoyScout;
+
+{$l data/ScoutSplash.pcx.o}
+{$l data/tune.bgf.o}
+
+uses
+  ctypes, gba;
+  
+
+var
+  ScoutSplash_pcx: array [0..0] of cuint8; cvar; external;
+  ScoutSplash_pcx_size: array [0..0] of cuint32; cvar; external;
+  ScoutSplash_pcx_end: array [0..0] of cuint8; cvar; external;
+  tune_bgf: array [0..0] of cuint8; cvar; external;
+  tune_bgf_size: array [0..0] of cuint32; cvar; external;
+  tune_bgf_end: array [0..0] of cuint8; cvar; external;
+
+
+  PaletteBuffer: array [0..255] of u16;
+  frame: cuint;
+	nBSSongSize: cuint;
+
+procedure VblankInterrupt();
+begin
+  BoyScoutUpdateSong();
+  frame := frame + 1;
+end;
+
+
+begin
+	// Set up the interrupt handlers
+	irqInit();
+
+	// Initialize BoyScout
+	BoyScoutInitialize();
+
+	// Get needed song memory
+	nBSSongSize := BoyScoutGetNeededSongMemory(tune_bgf);
+
+	// Allocate and set BoyScout memory area
+	BoyScoutSetMemoryArea(u32(GetMem(nBSSongSize)));
+
+	// Open song
+	BoyScoutOpenSong(tune_bgf);
+
+	// Play song and loop
+	BoyScoutPlaySong(1);
+
+	irqSet(IRQ_VBLANK, @VblankInterrupt);
+
+	// Enable Vblank Interrupt to allow VblankIntrWait
+	irqEnable(IRQ_VBLANK);
+	// Allow Interrupts
+	REG_IME^ := 1;
+
+	SetMode( MODE_4 or BG2_ON );		// screen mode & background to display
+
+	DecodePCX(@ScoutSplash_pcx, pu16(VRAM), PaletteBuffer);
+
+	FadeToPalette( PaletteBuffer, 60);
+
+
+	while true do
+		VBlankIntrWait();
+
+	// This part will never be reached but just for completion
+	// Free memory
+	free(@BoyScoutGetMemoryArea);
+
+
+end.
+
+

BIN
packages/libgbafpc/examples/devkitPro/audio/PlayBoyScout/data/ScoutSplash.pcx


BIN
packages/libgbafpc/examples/devkitPro/audio/PlayBoyScout/data/tune.bgf


+ 1645 - 0
packages/libgbafpc/examples/devkitPro/graphics/PCXView/Makefile

@@ -0,0 +1,1645 @@
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/04/20]
+#
+default: all
+MAKEFILETARGETS=arm-gba
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) solaris qnx
+LIMIT83fs = go32v2 os2 emx watcom
+OSNeedsComspecToRunBatch = go32v2 watcom
+FORCE:
+.PHONY: FORCE
+override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
+ifneq ($(findstring darwin,$(OSTYPE)),)
+inUnix=1 #darwin
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+endif
+SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifdef inUnix
+SRCBATCHEXT=.sh
+else
+ifdef inOS2
+SRCBATCHEXT=.cmd
+else
+SRCBATCHEXT=.bat
+endif
+endif
+ifdef COMSPEC
+ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
+RUNBATCH=$(COMSPEC) /C
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+override OS_TARGET_DEFAULT=gba
+override CPU_TARGET_DEFAULT=arm
+override DEFAULT_FPCDIR=../../../../..
+ifndef FPC
+ifdef PP
+FPC=$(PP)
+endif
+endif
+ifndef FPC
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+ifneq ($(CPU_TARGET),)
+FPC:=$(shell $(FPCPROG) -P$(CPU_TARGET) -PB)
+else
+FPC:=$(shell $(FPCPROG) -PB)
+endif
+ifneq ($(findstring Error,$(FPC)),)
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+else
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+endif
+override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
+override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
+FOUNDFPC:=$(strip $(wildcard $(FPC)))
+ifeq ($(FOUNDFPC),)
+FOUNDFPC=$(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))
+ifeq ($(FOUNDFPC),)
+$(error Compiler $(FPC) not found)
+endif
+endif
+ifndef FPC_COMPILERINFO
+FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO)
+endif
+ifndef FPC_VERSION
+FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO))
+endif
+export FPC FPC_VERSION FPC_COMPILERINFO
+unexport CHECKDEPEND ALLDEPENDENCIES
+ifndef CPU_TARGET
+ifdef CPU_TARGET_DEFAULT
+CPU_TARGET=$(CPU_TARGET_DEFAULT)
+endif
+endif
+ifndef OS_TARGET
+ifdef OS_TARGET_DEFAULT
+OS_TARGET=$(OS_TARGET_DEFAULT)
+endif
+endif
+ifneq ($(words $(FPC_COMPILERINFO)),5)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSO)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTO)
+endif
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(word 2,$(FPC_COMPILERINFO))
+endif
+ifndef CPU_TARGET
+CPU_TARGET:=$(word 3,$(FPC_COMPILERINFO))
+endif
+ifndef OS_SOURCE
+OS_SOURCE:=$(word 4,$(FPC_COMPILERINFO))
+endif
+ifndef OS_TARGET
+OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
+endif
+FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifeq ($(CPU_TARGET),armeb)
+ARCH=arm
+override FPCOPT+=-Cb
+else
+ifeq ($(CPU_TARGET),armel)
+ARCH=arm
+override FPCOPT+=-CaEABI
+else
+ARCH=$(CPU_TARGET)
+endif
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+SOURCESUFFIX=$(OS_SOURCE)
+else
+TARGETSUFFIX=$(FULL_TARGET)
+SOURCESUFFIX=$(FULL_SOURCE)
+endif
+ifneq ($(FULL_TARGET),$(FULL_SOURCE))
+CROSSCOMPILE=1
+endif
+ifeq ($(findstring makefile,$(MAKECMDGOALS)),)
+ifeq ($(findstring $(FULL_TARGET),$(MAKEFILETARGETS)),)
+$(error The Makefile doesn't support target $(FULL_TARGET), please run fpcmake first)
+endif
+endif
+ifneq ($(findstring $(OS_TARGET),$(BSDs)),)
+BSDhier=1
+endif
+ifeq ($(OS_TARGET),linux)
+linuxHier=1
+endif
+export OS_TARGET OS_SOURCE ARCH CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
+ifdef FPCDIR
+override FPCDIR:=$(subst \,/,$(FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+else
+override FPCDIR=wrong
+endif
+ifdef DEFAULT_FPCDIR
+ifeq ($(FPCDIR),wrong)
+override FPCDIR:=$(subst \,/,$(DEFAULT_FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+endif
+endif
+ifeq ($(FPCDIR),wrong)
+ifdef inUnix
+override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
+endif
+else
+override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))))
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(BASEDIR)
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=c:/pp
+endif
+endif
+endif
+endif
+endif
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(FPCDIR)/bin/$(TARGETSUFFIX))
+endif
+ifndef BINUTILSPREFIX
+ifndef CROSSBINDIR
+ifdef CROSSCOMPILE
+BINUTILSPREFIX=$(CPU_TARGET)-$(OS_TARGET)-
+endif
+endif
+endif
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(TARGETSUFFIX))
+ifeq ($(UNITSDIR),)
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
+endif
+PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
+DATA_FILES=data/splash.pcx
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_PROGRAMS+=pcx_view
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_LOADERS+=$(DATA_FILES)
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override CLEAN_UNITS+=*
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override CLEAN_FILES+=*.elf data/*.o data/*.s
+endif
+override INSTALL_FPCPACKAGE=y
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=1
+endif
+else
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXHier
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef COMPILER_UNITTARGETDIR
+ifdef PACKAGEDIR_MAIN
+COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
+else
+COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
+endif
+endif
+ifndef COMPILER_TARGETDIR
+COMPILER_TARGETDIR=.
+endif
+ifndef INSTALL_BASEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXHier
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+ifdef CROSSCOMPILE
+ifdef CROSSINSTALL
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXHier
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXHier
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+ifdef linuxHier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+ifdef UNIXHier
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+ifdef linuxHier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+endif
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifndef INSTALL_SHAREDDIR
+INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+SHAREDLIBPREFIX=libfp
+STATICLIBPREFIX=libp
+IMPORTLIBPREFIX=libimp
+RSTEXT=.rst
+ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),go32v1)
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+OEXT=.obj
+ASMEXT=.asm
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=wat
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),emx)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=emx
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),morphos)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=mos
+endif
+ifeq ($(OS_TARGET),atari)
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nw
+endif
+ifeq ($(OS_TARGET),netwlibc)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nwl
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+endif
+ifeq ($(OS_TARGET),darwin)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=dwn
+endif
+ifeq ($(OS_TARGET),gba)
+EXEEXT=.gba
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gba
+endif
+ifeq ($(OS_TARGET),nds)
+EXEEXT=.nds
+SHAREDLIBEXT=.so
+SHORTSUFFIX=nds
+endif
+ifeq ($(OS_TARGET),gamecube)
+EXEEXT=.dol
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gamecube
+endif
+ifeq ($(OS_TARGET),wii)
+EXEEXT=.dol
+SHAREDLIBEXT=.so
+SHORTSUFFIX=wii
+endif
+ifeq ($(OS_TARGET),symbian)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=symbian
+endif
+else
+ifeq ($(OS_TARGET),go32v1)
+PPUEXT=.pp1
+OEXT=.o1
+ASMEXT=.s1
+SMARTEXT=.sl1
+STATICLIBEXT=.a1
+SHAREDLIBEXT=.so1
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+SHORTSUFFIX=wat
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+PPUEXT=.ppw
+OEXT=.ow
+ASMEXT=.sw
+SMARTEXT=.slw
+STATICLIBEXT=.aw
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+PPUEXT=.ppo
+ASMEXT=.so2
+OEXT=.oo2
+AOUTEXT=.out
+SMARTEXT=.sl2
+STATICLIBPREFIX=
+STATICLIBEXT=.ao2
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),atari)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nw
+endif
+ifeq ($(OS_TARGET),netwlibc)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nwl
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+endif
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+FPCMADE=fpcmade.$(SHORTSUFFIX)
+ZIPSUFFIX=$(SHORTSUFFIX)
+ZIPCROSSPREFIX=
+ZIPSOURCESUFFIX=src
+ZIPEXAMPLESUFFIX=exm
+else
+FPCMADE=fpcmade.$(TARGETSUFFIX)
+ZIPSOURCESUFFIX=.source
+ZIPEXAMPLESUFFIX=.examples
+ifdef CROSSCOMPILE
+ZIPSUFFIX=.$(SOURCESUFFIX)
+ZIPCROSSPREFIX=$(TARGETSUFFIX)-
+else
+ZIPSUFFIX=.$(TARGETSUFFIX)
+ZIPCROSSPREFIX=
+endif
+endif
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO= __missing_command_ECHO
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+ifndef DATE
+DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE= __missing_command_DATE
+else
+DATE:=$(firstword $(DATE))
+endif
+else
+DATE:=$(firstword $(DATE))
+endif
+endif
+export DATE
+ifndef GINSTALL
+GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL= __missing_command_GINSTALL
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+endif
+export GINSTALL
+ifndef CPPROG
+CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(CPPROG),)
+CPPROG= __missing_command_CPPROG
+else
+CPPROG:=$(firstword $(CPPROG))
+endif
+endif
+export CPPROG
+ifndef RMPROG
+RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(RMPROG),)
+RMPROG= __missing_command_RMPROG
+else
+RMPROG:=$(firstword $(RMPROG))
+endif
+endif
+export RMPROG
+ifndef MVPROG
+MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MVPROG),)
+MVPROG= __missing_command_MVPROG
+else
+MVPROG:=$(firstword $(MVPROG))
+endif
+endif
+export MVPROG
+ifndef MKDIRPROG
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /gmkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /mkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG= __missing_command_MKDIRPROG
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+endif
+export MKDIRPROG
+ifndef ECHOREDIR
+ifndef inUnix
+ECHOREDIR=echo
+else
+ECHOREDIR=$(ECHO)
+endif
+endif
+ifndef COPY
+COPY:=$(CPPROG) -fp
+endif
+ifndef COPYTREE
+COPYTREE:=$(CPPROG) -Rfp
+endif
+ifndef MKDIRTREE
+MKDIRTREE:=$(MKDIRPROG) -p
+endif
+ifndef MOVE
+MOVE:=$(MVPROG) -f
+endif
+ifndef DEL
+DEL:=$(RMPROG) -f
+endif
+ifndef DELTREE
+DELTREE:=$(RMPROG) -rf
+endif
+ifndef INSTALL
+ifdef inUnix
+INSTALL:=$(GINSTALL) -c -m 644
+else
+INSTALL:=$(COPY)
+endif
+endif
+ifndef INSTALLEXE
+ifdef inUnix
+INSTALLEXE:=$(GINSTALL) -c -m 755
+else
+INSTALLEXE:=$(COPY)
+endif
+endif
+ifndef MKDIR
+MKDIR:=$(GINSTALL) -m 755 -d
+endif
+export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
+ifndef PPUMOVE
+PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(PPUMOVE),)
+PPUMOVE= __missing_command_PPUMOVE
+else
+PPUMOVE:=$(firstword $(PPUMOVE))
+endif
+endif
+export PPUMOVE
+ifndef FPCMAKE
+FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(FPCMAKE),)
+FPCMAKE= __missing_command_FPCMAKE
+else
+FPCMAKE:=$(firstword $(FPCMAKE))
+endif
+endif
+export FPCMAKE
+ifndef ZIPPROG
+ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ZIPPROG),)
+ZIPPROG= __missing_command_ZIPPROG
+else
+ZIPPROG:=$(firstword $(ZIPPROG))
+endif
+endif
+export ZIPPROG
+ifndef TARPROG
+TARPROG:=$(strip $(wildcard $(addsuffix /gtar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG= __missing_command_TARPROG
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+endif
+export TARPROG
+ASNAME=$(BINUTILSPREFIX)as
+LDNAME=$(BINUTILSPREFIX)ld
+ARNAME=$(BINUTILSPREFIX)ar
+RCNAME=$(BINUTILSPREFIX)rc
+ifneq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),win32)
+ifeq ($(CROSSBINDIR),)
+ASNAME=asw
+LDNAME=ldw
+ARNAME=arw
+endif
+endif
+endif
+ifndef ASPROG
+ifdef CROSSBINDIR
+ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
+else
+ASPROG=$(ASNAME)
+endif
+endif
+ifndef LDPROG
+ifdef CROSSBINDIR
+LDPROG=$(CROSSBINDIR)/$(LDNAME)$(SRCEXEEXT)
+else
+LDPROG=$(LDNAME)
+endif
+endif
+ifndef RCPROG
+ifdef CROSSBINDIR
+RCPROG=$(CROSSBINDIR)/$(RCNAME)$(SRCEXEEXT)
+else
+RCPROG=$(RCNAME)
+endif
+endif
+ifndef ARPROG
+ifdef CROSSBINDIR
+ARPROG=$(CROSSBINDIR)/$(ARNAME)$(SRCEXEEXT)
+else
+ARPROG=$(ARNAME)
+endif
+endif
+AS=$(ASPROG)
+LD=$(LDPROG)
+RC=$(RCPROG)
+AR=$(ARPROG)
+PPAS=ppas$(SRCBATCHEXT)
+ifdef inUnix
+LDCONFIG=ldconfig
+else
+LDCONFIG=
+endif
+ifdef DATE
+DATESTR:=$(shell $(DATE) +%Y%m%d)
+else
+DATESTR=
+endif
+ifndef UPXPROG
+ifeq ($(OS_TARGET),go32v2)
+UPXPROG:=1
+endif
+ifeq ($(OS_TARGET),win32)
+UPXPROG:=1
+endif
+ifdef UPXPROG
+UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(UPXPROG),)
+UPXPROG=
+else
+UPXPROG:=$(firstword $(UPXPROG))
+endif
+else
+UPXPROG=
+endif
+endif
+export UPXPROG
+ZIPOPT=-9
+ZIPEXT=.zip
+ifeq ($(USETAR),bz2)
+TAROPT=vj
+TAREXT=.tar.bz2
+else
+TAROPT=vz
+TAREXT=.tar.gz
+endif
+override REQUIRE_PACKAGES=rtl libgbafpc
+ifeq ($(FULL_TARGET),arm-gba)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifdef REQUIRE_PACKAGES_RTL
+PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_RTL),)
+ifneq ($(wildcard $(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)),)
+UNITDIR_RTL=$(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)
+else
+UNITDIR_RTL=$(PACKAGEDIR_RTL)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_RTL)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_RTL) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_RTL)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_RTL=
+UNITDIR_RTL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /rtl/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_RTL),)
+UNITDIR_RTL:=$(firstword $(UNITDIR_RTL))
+else
+UNITDIR_RTL=
+endif
+endif
+ifdef UNITDIR_RTL
+override COMPILER_UNITDIR+=$(UNITDIR_RTL)
+endif
+endif
+ifdef REQUIRE_PACKAGES_LIBGBAFPC
+PACKAGEDIR_LIBGBAFPC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /libgbafpc/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_LIBGBAFPC),)
+ifneq ($(wildcard $(PACKAGEDIR_LIBGBAFPC)/units/$(TARGETSUFFIX)),)
+UNITDIR_LIBGBAFPC=$(PACKAGEDIR_LIBGBAFPC)/units/$(TARGETSUFFIX)
+else
+UNITDIR_LIBGBAFPC=$(PACKAGEDIR_LIBGBAFPC)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_LIBGBAFPC)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_LIBGBAFPC) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_LIBGBAFPC)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_LIBGBAFPC=
+UNITDIR_LIBGBAFPC:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /libgbafpc/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_LIBGBAFPC),)
+UNITDIR_LIBGBAFPC:=$(firstword $(UNITDIR_LIBGBAFPC))
+else
+UNITDIR_LIBGBAFPC=
+endif
+endif
+ifdef UNITDIR_LIBGBAFPC
+override COMPILER_UNITDIR+=$(UNITDIR_LIBGBAFPC)
+endif
+endif
+ifndef NOCPUDEF
+override FPCOPTDEF=$(ARCH)
+endif
+ifneq ($(OS_TARGET),$(OS_SOURCE))
+override FPCOPT+=-T$(OS_TARGET)
+endif
+ifneq ($(CPU_TARGET),$(CPU_SOURCE))
+override FPCOPT+=-P$(ARCH)
+endif
+ifeq ($(OS_SOURCE),openbsd)
+override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
+endif
+ifndef CROSSBOOTSTRAP
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-XP$(BINUTILSPREFIX)
+endif
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-Xr$(RLINKPATH)
+endif
+endif
+ifdef UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
+endif
+ifdef LIBDIR
+override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
+endif
+ifdef OBJDIR
+override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
+endif
+ifdef INCDIR
+override FPCOPT+=$(addprefix -Fi,$(INCDIR))
+endif
+ifdef LINKSMART
+override FPCOPT+=-XX
+endif
+ifdef CREATESMART
+override FPCOPT+=-CX
+endif
+ifdef DEBUG
+override FPCOPT+=-gl
+override FPCOPTDEF+=DEBUG
+endif
+ifdef RELEASE
+ifneq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(CPU_TARGET),i386)
+FPCCPUOPT:=-OG2p3
+endif
+ifeq ($(CPU_TARGET),powerpc)
+FPCCPUOPT:=-O1r
+endif
+else
+FPCCPUOPT:=-O2
+endif
+override FPCOPT+=-Ur -Xs $(FPCCPUOPT) -n
+override FPCOPTDEF+=RELEASE
+endif
+ifdef STRIP
+override FPCOPT+=-Xs
+endif
+ifdef OPTIMIZE
+override FPCOPT+=-O2
+endif
+ifdef VERBOSE
+override FPCOPT+=-vwni
+endif
+ifdef COMPILER_OPTIONS
+override FPCOPT+=$(COMPILER_OPTIONS)
+endif
+ifdef COMPILER_UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(COMPILER_UNITDIR))
+endif
+ifdef COMPILER_LIBRARYDIR
+override FPCOPT+=$(addprefix -Fl,$(COMPILER_LIBRARYDIR))
+endif
+ifdef COMPILER_OBJECTDIR
+override FPCOPT+=$(addprefix -Fo,$(COMPILER_OBJECTDIR))
+endif
+ifdef COMPILER_INCLUDEDIR
+override FPCOPT+=$(addprefix -Fi,$(COMPILER_INCLUDEDIR))
+endif
+ifdef CROSSBINDIR
+override FPCOPT+=-FD$(CROSSBINDIR)
+endif
+ifdef COMPILER_TARGETDIR
+override FPCOPT+=-FE$(COMPILER_TARGETDIR)
+ifeq ($(COMPILER_TARGETDIR),.)
+override TARGETDIRPREFIX=
+else
+override TARGETDIRPREFIX=$(COMPILER_TARGETDIR)/
+endif
+endif
+ifdef COMPILER_UNITTARGETDIR
+override FPCOPT+=-FU$(COMPILER_UNITTARGETDIR)
+ifeq ($(COMPILER_UNITTARGETDIR),.)
+override UNITTARGETDIRPREFIX=
+else
+override UNITTARGETDIRPREFIX=$(COMPILER_UNITTARGETDIR)/
+endif
+else
+ifdef COMPILER_TARGETDIR
+override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR)
+override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
+endif
+endif
+ifdef CREATESHARED
+override FPCOPT+=-Cg
+ifeq ($(CPU_TARGET),i386)
+override FPCOPT+=-Aas
+endif
+endif
+ifeq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),x86_64)
+override FPCOPT+=-Cg
+endif
+endif
+endif
+ifdef LINKSHARED
+endif
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+ifdef FPCOPTDEF
+override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
+endif
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+ifdef USEENV
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+override AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(AFULL_TARGET),$(AFULL_SOURCE))
+override ACROSSCOMPILE=1
+endif
+ifdef ACROSSCOMPILE
+override FPCOPT+=$(CROSSOPT)
+endif
+override COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+ifdef RUNBATCH
+EXECPPAS:=@$(RUNBATCH) $(PPAS)
+else
+EXECPPAS:=@$(PPAS)
+endif
+endif
+endif
+.PHONY: fpc_loaders
+ifneq ($(TARGET_LOADERS),)
+override ALLTARGET+=fpc_loaders
+override CLEANTARGET+=fpc_loaders_clean
+override INSTALLTARGET+=fpc_loaders_install
+override LOADEROFILES:=$(addsuffix $(OEXT),$(TARGET_LOADERS))
+endif
+%$(OEXT): %$(LOADEREXT)
+ifdef COMPILER_UNITTARGETDIR
+	$(AS) -o $(COMPILER_UNITTARGETDIR)/$*$(OEXT) $<
+else
+	$(AS) -o $*$(OEXT) $<
+endif
+fpc_loaders: $(COMPILER_UNITTARGETDIR) $(LOADEROFILES)
+fpc_loaders_clean:
+ifdef COMPILER_UNITTARGETDIR
+	-$(DEL) $(addprefix $(COMPILER_UNITTARGETDIR)/,$(LOADEROFILES))
+else
+	-$(DEL) $(LOADEROFILES)
+endif
+fpc_loaders_install:
+	$(MKDIR) $(INSTALL_UNITDIR)
+ifdef COMPILER_UNITTARGETDIR
+	$(INSTALL) $(addprefix $(COMPILER_UNITTARGETDIR)/,$(LOADEROFILES)) $(INSTALL_UNITDIR)
+else
+	$(INSTALL) $(LOADEROFILES) $(INSTALL_UNITDIR)
+endif
+.PHONY: fpc_exes
+ifndef CROSSINSTALL
+ifneq ($(TARGET_PROGRAMS),)
+override EXEFILES=$(addsuffix $(EXEEXT),$(TARGET_PROGRAMS))
+override EXEOFILES:=$(addsuffix $(OEXT),$(TARGET_PROGRAMS)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS))) $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS)))
+override ALLTARGET+=fpc_exes
+override INSTALLEXEFILES+=$(EXEFILES)
+override CLEANEXEFILES+=$(EXEFILES) $(EXEOFILES)
+ifeq ($(OS_TARGET),os2)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+ifeq ($(OS_TARGET),emx)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+endif
+endif
+fpc_exes: $(COMPILER_TARGETDIR) $(COMPILER_UNITTARGETDIR) $(EXEFILES)
+ifdef TARGET_RSTS
+override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
+override CLEANRSTFILES+=$(RSTFILES)
+endif
+.PHONY: fpc_all fpc_smart fpc_debug fpc_release fpc_shared
+$(FPCMADE): $(ALLDEPENDENCIES) $(ALLTARGET)
+	@$(ECHOREDIR) Compiled > $(FPCMADE)
+fpc_all: $(FPCMADE)
+fpc_smart:
+	$(MAKE) all LINKSMART=1 CREATESMART=1
+fpc_debug:
+	$(MAKE) all DEBUG=1
+fpc_release:
+	$(MAKE) all RELEASE=1
+.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .lpr .dpr .pp .rc .res
+$(COMPILER_UNITTARGETDIR):
+	$(MKDIRTREE) $(COMPILER_UNITTARGETDIR)
+$(COMPILER_TARGETDIR):
+	$(MKDIRTREE) $(COMPILER_TARGETDIR)
+%$(PPUEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(PPUEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.lpr
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.dpr
+	$(COMPILER) $<
+	$(EXECPPAS)
+%.res: %.rc
+	windres -i $< -o $@
+vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.lpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.inc $(COMPILER_INCLUDEDIR)
+vpath %$(OEXT) $(COMPILER_UNITTARGETDIR)
+vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)
+.PHONY: fpc_shared
+override INSTALLTARGET+=fpc_shared_install
+ifndef SHARED_LIBVERSION
+SHARED_LIBVERSION=$(FPC_VERSION)
+endif
+ifndef SHARED_LIBNAME
+SHARED_LIBNAME=$(PACKAGE_NAME)
+endif
+ifndef SHARED_FULLNAME
+SHARED_FULLNAME=$(SHAREDLIBPREFIX)$(SHARED_LIBNAME)-$(SHARED_LIBVERSION)$(SHAREDLIBEXT)
+endif
+ifndef SHARED_LIBUNITS
+SHARED_LIBUNITS:=$(TARGET_UNITS) $(TARGET_IMPLICITUNITS)
+override SHARED_LIBUNITS:=$(filter-out $(INSTALL_BUILDUNIT),$(SHARED_LIBUNITS))
+endif
+fpc_shared:
+ifdef HASSHAREDLIB
+	$(MAKE) all CREATESHARED=1 LINKSHARED=1 CREATESMART=1
+ifneq ($(SHARED_BUILD),n)
+	$(PPUMOVE) -q $(SHARED_LIBUNITS) -i$(COMPILER_UNITTARGETDIR) -o$(SHARED_FULLNAME) -d$(COMPILER_UNITTARGETDIR)
+endif
+else
+	@$(ECHO) Shared Libraries not supported
+endif
+fpc_shared_install:
+ifneq ($(SHARED_BUILD),n)
+ifneq ($(SHARED_LIBUNITS),)
+ifneq ($(wildcard $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME)),)
+	$(INSTALL) $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME) $(INSTALL_SHAREDDIR)
+endif
+endif
+endif
+.PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall
+ifdef INSTALL_UNITS
+override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(INSTALL_UNITS))
+endif
+ifdef INSTALL_BUILDUNIT
+override INSTALLPPUFILES:=$(filter-out $(INSTALL_BUILDUNIT)$(PPUEXT),$(INSTALLPPUFILES))
+endif
+ifdef INSTALLPPUFILES
+override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES)))
+ifneq ($(UNITTARGETDIRPREFIX),)
+override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPUFILES)))
+override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPULINKFILES))))
+endif
+override INSTALL_CREATEPACKAGEFPC=1
+endif
+ifdef INSTALLEXEFILES
+ifneq ($(TARGETDIRPREFIX),)
+override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(notdir $(INSTALLEXEFILES)))
+endif
+endif
+fpc_install: all $(INSTALLTARGET)
+ifdef INSTALLEXEFILES
+	$(MKDIR) $(INSTALL_BINDIR)
+ifdef UPXPROG
+	-$(UPXPROG) $(INSTALLEXEFILES)
+endif
+	$(INSTALLEXE) $(INSTALLEXEFILES) $(INSTALL_BINDIR)
+endif
+ifdef INSTALL_CREATEPACKAGEFPC
+ifdef FPCMAKE
+ifdef PACKAGE_VERSION
+ifneq ($(wildcard Makefile.fpc),)
+	$(FPCMAKE) -p -T$(CPU_TARGET)-$(OS_TARGET) Makefile.fpc
+	$(MKDIR) $(INSTALL_UNITDIR)
+	$(INSTALL) Package.fpc $(INSTALL_UNITDIR)
+endif
+endif
+endif
+endif
+ifdef INSTALLPPUFILES
+	$(MKDIR) $(INSTALL_UNITDIR)
+	$(INSTALL) $(INSTALLPPUFILES) $(INSTALL_UNITDIR)
+ifneq ($(INSTALLPPULINKFILES),)
+	$(INSTALL) $(INSTALLPPULINKFILES) $(INSTALL_UNITDIR)
+endif
+ifneq ($(wildcard $(LIB_FULLNAME)),)
+	$(MKDIR) $(INSTALL_LIBDIR)
+	$(INSTALL) $(LIB_FULLNAME) $(INSTALL_LIBDIR)
+ifdef inUnix
+	ln -sf $(LIB_FULLNAME) $(INSTALL_LIBDIR)/$(LIB_NAME)
+endif
+endif
+endif
+ifdef INSTALL_FILES
+	$(MKDIR) $(INSTALL_DATADIR)
+	$(INSTALL) $(INSTALL_FILES) $(INSTALL_DATADIR)
+endif
+fpc_sourceinstall: distclean
+	$(MKDIR) $(INSTALL_SOURCEDIR)
+	$(COPYTREE) $(BASEDIR)/* $(INSTALL_SOURCEDIR)
+fpc_exampleinstall: $(addsuffix _distclean,$(TARGET_EXAMPLEDIRS))
+ifdef HASEXAMPLES
+	$(MKDIR) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef EXAMPLESOURCEFILES
+	$(COPY) $(EXAMPLESOURCEFILES) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(COPYTREE) $(addsuffix /*,$(TARGET_EXAMPLEDIRS)) $(INSTALL_EXAMPLEDIR)
+endif
+.PHONY: fpc_clean fpc_cleanall fpc_distclean
+ifdef EXEFILES
+override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
+endif
+ifdef CLEAN_UNITS
+override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
+endif
+ifdef CLEANPPUFILES
+override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES)))
+ifdef DEBUGSYMEXT
+override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPPUFILES))
+endif
+override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
+override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES)))
+endif
+fpc_clean: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
+endif
+ifdef LIB_NAME
+	-$(DEL) $(LIB_NAME) $(LIB_FULLNAME)
+endif
+	-$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT)
+fpc_cleanall: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef COMPILER_UNITTARGETDIR
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+endif
+	-$(DELTREE) units
+	-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
+ifneq ($(PPUEXT),.ppu)
+	-$(DEL) *.o *.ppu *.a
+endif
+	-$(DELTREE) *$(SMARTEXT)
+	-$(DEL) fpcmade.* Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *_ppas$(BATCHEXT)
+ifdef AOUTEXT
+	-$(DEL) *$(AOUTEXT)
+endif
+ifdef DEBUGSYMEXT
+	-$(DEL) *$(DEBUGSYMEXT)
+endif
+fpc_distclean: cleanall
+.PHONY: fpc_baseinfo
+override INFORULES+=fpc_baseinfo
+fpc_baseinfo:
+	@$(ECHO)
+	@$(ECHO)  == Package info ==
+	@$(ECHO)  Package Name..... $(PACKAGE_NAME)
+	@$(ECHO)  Package Version.. $(PACKAGE_VERSION)
+	@$(ECHO)
+	@$(ECHO)  == Configuration info ==
+	@$(ECHO)
+	@$(ECHO)  FPC.......... $(FPC)
+	@$(ECHO)  FPC Version.. $(FPC_VERSION)
+	@$(ECHO)  Source CPU... $(CPU_SOURCE)
+	@$(ECHO)  Target CPU... $(CPU_TARGET)
+	@$(ECHO)  Source OS.... $(OS_SOURCE)
+	@$(ECHO)  Target OS.... $(OS_TARGET)
+	@$(ECHO)  Full Source.. $(FULL_SOURCE)
+	@$(ECHO)  Full Target.. $(FULL_TARGET)
+	@$(ECHO)  SourceSuffix. $(SOURCESUFFIX)
+	@$(ECHO)  TargetSuffix. $(TARGETSUFFIX)
+	@$(ECHO)
+	@$(ECHO)  == Directory info ==
+	@$(ECHO)
+	@$(ECHO)  Required pkgs... $(REQUIRE_PACKAGES)
+	@$(ECHO)
+	@$(ECHO)  Basedir......... $(BASEDIR)
+	@$(ECHO)  FPCDir.......... $(FPCDIR)
+	@$(ECHO)  CrossBinDir..... $(CROSSBINDIR)
+	@$(ECHO)  UnitsDir........ $(UNITSDIR)
+	@$(ECHO)  PackagesDir..... $(PACKAGESDIR)
+	@$(ECHO)
+	@$(ECHO)  GCC library..... $(GCCLIBDIR)
+	@$(ECHO)  Other library... $(OTHERLIBDIR)
+	@$(ECHO)
+	@$(ECHO)  == Tools info ==
+	@$(ECHO)
+	@$(ECHO)  As........ $(AS)
+	@$(ECHO)  Ld........ $(LD)
+	@$(ECHO)  Ar........ $(AR)
+	@$(ECHO)  Rc........ $(RC)
+	@$(ECHO)
+	@$(ECHO)  Mv........ $(MVPROG)
+	@$(ECHO)  Cp........ $(CPPROG)
+	@$(ECHO)  Rm........ $(RMPROG)
+	@$(ECHO)  GInstall.. $(GINSTALL)
+	@$(ECHO)  Echo...... $(ECHO)
+	@$(ECHO)  Shell..... $(SHELL)
+	@$(ECHO)  Date...... $(DATE)
+	@$(ECHO)  FPCMake... $(FPCMAKE)
+	@$(ECHO)  PPUMove... $(PPUMOVE)
+	@$(ECHO)  Upx....... $(UPXPROG)
+	@$(ECHO)  Zip....... $(ZIPPROG)
+	@$(ECHO)
+	@$(ECHO)  == Object info ==
+	@$(ECHO)
+	@$(ECHO)  Target Loaders........ $(TARGET_LOADERS)
+	@$(ECHO)  Target Units.......... $(TARGET_UNITS)
+	@$(ECHO)  Target Implicit Units. $(TARGET_IMPLICITUNITS)
+	@$(ECHO)  Target Programs....... $(TARGET_PROGRAMS)
+	@$(ECHO)  Target Dirs........... $(TARGET_DIRS)
+	@$(ECHO)  Target Examples....... $(TARGET_EXAMPLES)
+	@$(ECHO)  Target ExampleDirs.... $(TARGET_EXAMPLEDIRS)
+	@$(ECHO)
+	@$(ECHO)  Clean Units......... $(CLEAN_UNITS)
+	@$(ECHO)  Clean Files......... $(CLEAN_FILES)
+	@$(ECHO)
+	@$(ECHO)  Install Units....... $(INSTALL_UNITS)
+	@$(ECHO)  Install Files....... $(INSTALL_FILES)
+	@$(ECHO)
+	@$(ECHO)  == Install info ==
+	@$(ECHO)
+	@$(ECHO)  DateStr.............. $(DATESTR)
+	@$(ECHO)  ZipName.............. $(ZIPNAME)
+	@$(ECHO)  ZipPrefix............ $(ZIPPREFIX)
+	@$(ECHO)  ZipCrossPrefix....... $(ZIPCROSSPREFIX)
+	@$(ECHO)  ZipSuffix............ $(ZIPSUFFIX)
+	@$(ECHO)  FullZipName.......... $(FULLZIPNAME)
+	@$(ECHO)  Install FPC Package.. $(INSTALL_FPCPACKAGE)
+	@$(ECHO)
+	@$(ECHO)  Install base dir..... $(INSTALL_BASEDIR)
+	@$(ECHO)  Install binary dir... $(INSTALL_BINDIR)
+	@$(ECHO)  Install library dir.. $(INSTALL_LIBDIR)
+	@$(ECHO)  Install units dir.... $(INSTALL_UNITDIR)
+	@$(ECHO)  Install source dir... $(INSTALL_SOURCEDIR)
+	@$(ECHO)  Install doc dir...... $(INSTALL_DOCDIR)
+	@$(ECHO)  Install example dir.. $(INSTALL_EXAMPLEDIR)
+	@$(ECHO)  Install data dir..... $(INSTALL_DATADIR)
+	@$(ECHO)
+	@$(ECHO)  Dist destination dir. $(DIST_DESTDIR)
+	@$(ECHO)  Dist zip name........ $(DIST_ZIPNAME)
+	@$(ECHO)
+.PHONY: fpc_info
+fpc_info: $(INFORULES)
+.PHONY: fpc_makefile fpc_makefiles fpc_makefile_sub1 fpc_makefile_sub2 \
+	fpc_makefile_dirs
+fpc_makefile:
+	$(FPCMAKE) -w -T$(OS_TARGET) Makefile.fpc
+fpc_makefile_sub1:
+ifdef TARGET_DIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_DIRS))
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_EXAMPLEDIRS))
+endif
+fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS))
+fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
+fpc_makefiles: fpc_makefile fpc_makefile_dirs
+ifndef BIN2S
+BIN2S:=$(strip $(wildcard $(addsuffix /bin2s$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(BIN2S),)
+BIN2S= __missing_command_BIN2S
+else
+BIN2S:=$(firstword $(BIN2S))
+endif
+endif
+export BIN2S
+all: fpc_all
+debug: fpc_debug
+smart: fpc_smart
+release: fpc_release
+units: fpc_units
+examples:
+shared: fpc_shared
+install: fpc_install
+sourceinstall: fpc_sourceinstall
+exampleinstall: fpc_exampleinstall
+distinstall:
+zipinstall:
+zipsourceinstall:
+zipexampleinstall:
+zipdistinstall:
+clean: fpc_clean
+distclean: fpc_distclean
+cleanall: fpc_cleanall
+info: fpc_info
+makefiles: fpc_makefiles
+.PHONY: all debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall clean distclean cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+.NOTPARALLEL:
+ifneq ($(BIN2S),)
+$(DATA_FILES).o:
+	$(BIN2S) $(DATA_FILES) > $(DATA_FILES).s
+	$(AS) -o $(DATA_FILES).o $(DATA_FILES).s
+endif

+ 34 - 0
packages/libgbafpc/examples/devkitPro/graphics/PCXView/Makefile.fpc

@@ -0,0 +1,34 @@
+#
+#   Makefile.fpc for Free Pascal libgbafpc 2.x.y Examples
+#
+
+[target]
+loaders=$(DATA_FILES)
+programs=pcx_view
+
+[require]
+packages=libgbafpc
+tools=bin2s
+
+[install]
+fpcpackage=y
+
+[default]
+cpu=arm
+target=gba
+fpcdir=../../../../..
+
+[clean]
+files=*.elf data/*.o data/*.s
+units=*
+
+[prerules]
+DATA_FILES=data/splash.pcx
+
+[rules]
+.NOTPARALLEL:
+ifneq ($(BIN2S),)
+$(DATA_FILES).o:
+        $(BIN2S) $(DATA_FILES) > $(DATA_FILES).s
+        $(AS) -o $(DATA_FILES).o $(DATA_FILES).s
+endif

BIN
packages/libgbafpc/examples/devkitPro/graphics/PCXView/data/ScoutSplash.pcx


BIN
packages/libgbafpc/examples/devkitPro/graphics/PCXView/data/splash.pcx


+ 46 - 0
packages/libgbafpc/examples/devkitPro/graphics/PCXView/pcx_view.pp

@@ -0,0 +1,46 @@
+program pcx_view;
+
+uses
+  ctypes, gba;
+
+{$l data/splash.pcx.o}
+
+var
+  PaletteBuffer: array [0..255] of cuint16;
+  frame: cuint;
+
+  splash_pcx_end: array [0..0] of cuint8; cvar; external;
+  splash_pcx: array [0..0] of cuint8; cvar; external;
+  splash_pcx_size: array [0..0] of cuint32; cvar; external;
+
+
+procedure VblankInterrupt();
+begin
+  frame := frame + 1;
+  scanKeys();
+end;
+
+
+
+begin
+  // Set up the interrupt handlers
+  irqInit();
+  irqSet(IRQ_VBLANK, @VblankInterrupt);
+  
+  // Enable Vblank Interrupt to allow VblankIntrWait
+  irqEnable(IRQ_VBLANK);
+  
+  // Allow Interrupts
+  REG_IME^ := 1;
+  
+  SetMode(MODE_4 or BG2_ON);		// screen mode & background to display
+  
+  DecodePCX(@splash_pcx, pcuint16(VRAM), @PaletteBuffer);
+  
+  FadeToPalette(PaletteBuffer, 60);
+  
+  while true do
+    VBlankIntrWait();
+end.
+
+

+ 1644 - 0
packages/libgbafpc/examples/devkitPro/graphics/SimpleBGScroll/Makefile

@@ -0,0 +1,1644 @@
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/04/20]
+#
+default: all
+MAKEFILETARGETS=arm-gba
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) solaris qnx
+LIMIT83fs = go32v2 os2 emx watcom
+OSNeedsComspecToRunBatch = go32v2 watcom
+FORCE:
+.PHONY: FORCE
+override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
+ifneq ($(findstring darwin,$(OSTYPE)),)
+inUnix=1 #darwin
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+endif
+SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifdef inUnix
+SRCBATCHEXT=.sh
+else
+ifdef inOS2
+SRCBATCHEXT=.cmd
+else
+SRCBATCHEXT=.bat
+endif
+endif
+ifdef COMSPEC
+ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
+RUNBATCH=$(COMSPEC) /C
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+override OS_TARGET_DEFAULT=gba
+override CPU_TARGET_DEFAULT=arm
+override DEFAULT_FPCDIR=../../../../..
+ifndef FPC
+ifdef PP
+FPC=$(PP)
+endif
+endif
+ifndef FPC
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+ifneq ($(CPU_TARGET),)
+FPC:=$(shell $(FPCPROG) -P$(CPU_TARGET) -PB)
+else
+FPC:=$(shell $(FPCPROG) -PB)
+endif
+ifneq ($(findstring Error,$(FPC)),)
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+else
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+endif
+override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
+override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
+FOUNDFPC:=$(strip $(wildcard $(FPC)))
+ifeq ($(FOUNDFPC),)
+FOUNDFPC=$(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))
+ifeq ($(FOUNDFPC),)
+$(error Compiler $(FPC) not found)
+endif
+endif
+ifndef FPC_COMPILERINFO
+FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO)
+endif
+ifndef FPC_VERSION
+FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO))
+endif
+export FPC FPC_VERSION FPC_COMPILERINFO
+unexport CHECKDEPEND ALLDEPENDENCIES
+ifndef CPU_TARGET
+ifdef CPU_TARGET_DEFAULT
+CPU_TARGET=$(CPU_TARGET_DEFAULT)
+endif
+endif
+ifndef OS_TARGET
+ifdef OS_TARGET_DEFAULT
+OS_TARGET=$(OS_TARGET_DEFAULT)
+endif
+endif
+ifneq ($(words $(FPC_COMPILERINFO)),5)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSO)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTO)
+endif
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(word 2,$(FPC_COMPILERINFO))
+endif
+ifndef CPU_TARGET
+CPU_TARGET:=$(word 3,$(FPC_COMPILERINFO))
+endif
+ifndef OS_SOURCE
+OS_SOURCE:=$(word 4,$(FPC_COMPILERINFO))
+endif
+ifndef OS_TARGET
+OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
+endif
+FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifeq ($(CPU_TARGET),armeb)
+ARCH=arm
+override FPCOPT+=-Cb
+else
+ifeq ($(CPU_TARGET),armel)
+ARCH=arm
+override FPCOPT+=-CaEABI
+else
+ARCH=$(CPU_TARGET)
+endif
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+SOURCESUFFIX=$(OS_SOURCE)
+else
+TARGETSUFFIX=$(FULL_TARGET)
+SOURCESUFFIX=$(FULL_SOURCE)
+endif
+ifneq ($(FULL_TARGET),$(FULL_SOURCE))
+CROSSCOMPILE=1
+endif
+ifeq ($(findstring makefile,$(MAKECMDGOALS)),)
+ifeq ($(findstring $(FULL_TARGET),$(MAKEFILETARGETS)),)
+$(error The Makefile doesn't support target $(FULL_TARGET), please run fpcmake first)
+endif
+endif
+ifneq ($(findstring $(OS_TARGET),$(BSDs)),)
+BSDhier=1
+endif
+ifeq ($(OS_TARGET),linux)
+linuxHier=1
+endif
+export OS_TARGET OS_SOURCE ARCH CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
+ifdef FPCDIR
+override FPCDIR:=$(subst \,/,$(FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+else
+override FPCDIR=wrong
+endif
+ifdef DEFAULT_FPCDIR
+ifeq ($(FPCDIR),wrong)
+override FPCDIR:=$(subst \,/,$(DEFAULT_FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+endif
+endif
+ifeq ($(FPCDIR),wrong)
+ifdef inUnix
+override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
+endif
+else
+override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))))
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(BASEDIR)
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=c:/pp
+endif
+endif
+endif
+endif
+endif
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(FPCDIR)/bin/$(TARGETSUFFIX))
+endif
+ifndef BINUTILSPREFIX
+ifndef CROSSBINDIR
+ifdef CROSSCOMPILE
+BINUTILSPREFIX=$(CPU_TARGET)-$(OS_TARGET)-
+endif
+endif
+endif
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(TARGETSUFFIX))
+ifeq ($(UNITSDIR),)
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
+endif
+PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_PROGRAMS+=SimpleBGScroll
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_LOADERS+=data/r6502_portfont.bin
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override CLEAN_UNITS+=*
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override CLEAN_FILES+=*.elf data/*.o data/*.s
+endif
+override INSTALL_FPCPACKAGE=y
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=1
+endif
+else
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXHier
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef COMPILER_UNITTARGETDIR
+ifdef PACKAGEDIR_MAIN
+COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
+else
+COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
+endif
+endif
+ifndef COMPILER_TARGETDIR
+COMPILER_TARGETDIR=.
+endif
+ifndef INSTALL_BASEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXHier
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+ifdef CROSSCOMPILE
+ifdef CROSSINSTALL
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXHier
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXHier
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+ifdef linuxHier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+ifdef UNIXHier
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+ifdef linuxHier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+endif
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifndef INSTALL_SHAREDDIR
+INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+SHAREDLIBPREFIX=libfp
+STATICLIBPREFIX=libp
+IMPORTLIBPREFIX=libimp
+RSTEXT=.rst
+ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),go32v1)
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+OEXT=.obj
+ASMEXT=.asm
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=wat
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),emx)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=emx
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),morphos)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=mos
+endif
+ifeq ($(OS_TARGET),atari)
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nw
+endif
+ifeq ($(OS_TARGET),netwlibc)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nwl
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+endif
+ifeq ($(OS_TARGET),darwin)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=dwn
+endif
+ifeq ($(OS_TARGET),gba)
+EXEEXT=.gba
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gba
+endif
+ifeq ($(OS_TARGET),nds)
+EXEEXT=.nds
+SHAREDLIBEXT=.so
+SHORTSUFFIX=nds
+endif
+ifeq ($(OS_TARGET),gamecube)
+EXEEXT=.dol
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gamecube
+endif
+ifeq ($(OS_TARGET),wii)
+EXEEXT=.dol
+SHAREDLIBEXT=.so
+SHORTSUFFIX=wii
+endif
+ifeq ($(OS_TARGET),symbian)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=symbian
+endif
+else
+ifeq ($(OS_TARGET),go32v1)
+PPUEXT=.pp1
+OEXT=.o1
+ASMEXT=.s1
+SMARTEXT=.sl1
+STATICLIBEXT=.a1
+SHAREDLIBEXT=.so1
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+SHORTSUFFIX=wat
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+PPUEXT=.ppw
+OEXT=.ow
+ASMEXT=.sw
+SMARTEXT=.slw
+STATICLIBEXT=.aw
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+PPUEXT=.ppo
+ASMEXT=.so2
+OEXT=.oo2
+AOUTEXT=.out
+SMARTEXT=.sl2
+STATICLIBPREFIX=
+STATICLIBEXT=.ao2
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),atari)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nw
+endif
+ifeq ($(OS_TARGET),netwlibc)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nwl
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+endif
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+FPCMADE=fpcmade.$(SHORTSUFFIX)
+ZIPSUFFIX=$(SHORTSUFFIX)
+ZIPCROSSPREFIX=
+ZIPSOURCESUFFIX=src
+ZIPEXAMPLESUFFIX=exm
+else
+FPCMADE=fpcmade.$(TARGETSUFFIX)
+ZIPSOURCESUFFIX=.source
+ZIPEXAMPLESUFFIX=.examples
+ifdef CROSSCOMPILE
+ZIPSUFFIX=.$(SOURCESUFFIX)
+ZIPCROSSPREFIX=$(TARGETSUFFIX)-
+else
+ZIPSUFFIX=.$(TARGETSUFFIX)
+ZIPCROSSPREFIX=
+endif
+endif
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO= __missing_command_ECHO
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+ifndef DATE
+DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE= __missing_command_DATE
+else
+DATE:=$(firstword $(DATE))
+endif
+else
+DATE:=$(firstword $(DATE))
+endif
+endif
+export DATE
+ifndef GINSTALL
+GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL= __missing_command_GINSTALL
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+endif
+export GINSTALL
+ifndef CPPROG
+CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(CPPROG),)
+CPPROG= __missing_command_CPPROG
+else
+CPPROG:=$(firstword $(CPPROG))
+endif
+endif
+export CPPROG
+ifndef RMPROG
+RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(RMPROG),)
+RMPROG= __missing_command_RMPROG
+else
+RMPROG:=$(firstword $(RMPROG))
+endif
+endif
+export RMPROG
+ifndef MVPROG
+MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MVPROG),)
+MVPROG= __missing_command_MVPROG
+else
+MVPROG:=$(firstword $(MVPROG))
+endif
+endif
+export MVPROG
+ifndef MKDIRPROG
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /gmkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /mkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG= __missing_command_MKDIRPROG
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+endif
+export MKDIRPROG
+ifndef ECHOREDIR
+ifndef inUnix
+ECHOREDIR=echo
+else
+ECHOREDIR=$(ECHO)
+endif
+endif
+ifndef COPY
+COPY:=$(CPPROG) -fp
+endif
+ifndef COPYTREE
+COPYTREE:=$(CPPROG) -Rfp
+endif
+ifndef MKDIRTREE
+MKDIRTREE:=$(MKDIRPROG) -p
+endif
+ifndef MOVE
+MOVE:=$(MVPROG) -f
+endif
+ifndef DEL
+DEL:=$(RMPROG) -f
+endif
+ifndef DELTREE
+DELTREE:=$(RMPROG) -rf
+endif
+ifndef INSTALL
+ifdef inUnix
+INSTALL:=$(GINSTALL) -c -m 644
+else
+INSTALL:=$(COPY)
+endif
+endif
+ifndef INSTALLEXE
+ifdef inUnix
+INSTALLEXE:=$(GINSTALL) -c -m 755
+else
+INSTALLEXE:=$(COPY)
+endif
+endif
+ifndef MKDIR
+MKDIR:=$(GINSTALL) -m 755 -d
+endif
+export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
+ifndef PPUMOVE
+PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(PPUMOVE),)
+PPUMOVE= __missing_command_PPUMOVE
+else
+PPUMOVE:=$(firstword $(PPUMOVE))
+endif
+endif
+export PPUMOVE
+ifndef FPCMAKE
+FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(FPCMAKE),)
+FPCMAKE= __missing_command_FPCMAKE
+else
+FPCMAKE:=$(firstword $(FPCMAKE))
+endif
+endif
+export FPCMAKE
+ifndef ZIPPROG
+ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ZIPPROG),)
+ZIPPROG= __missing_command_ZIPPROG
+else
+ZIPPROG:=$(firstword $(ZIPPROG))
+endif
+endif
+export ZIPPROG
+ifndef TARPROG
+TARPROG:=$(strip $(wildcard $(addsuffix /gtar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG= __missing_command_TARPROG
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+endif
+export TARPROG
+ASNAME=$(BINUTILSPREFIX)as
+LDNAME=$(BINUTILSPREFIX)ld
+ARNAME=$(BINUTILSPREFIX)ar
+RCNAME=$(BINUTILSPREFIX)rc
+ifneq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),win32)
+ifeq ($(CROSSBINDIR),)
+ASNAME=asw
+LDNAME=ldw
+ARNAME=arw
+endif
+endif
+endif
+ifndef ASPROG
+ifdef CROSSBINDIR
+ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
+else
+ASPROG=$(ASNAME)
+endif
+endif
+ifndef LDPROG
+ifdef CROSSBINDIR
+LDPROG=$(CROSSBINDIR)/$(LDNAME)$(SRCEXEEXT)
+else
+LDPROG=$(LDNAME)
+endif
+endif
+ifndef RCPROG
+ifdef CROSSBINDIR
+RCPROG=$(CROSSBINDIR)/$(RCNAME)$(SRCEXEEXT)
+else
+RCPROG=$(RCNAME)
+endif
+endif
+ifndef ARPROG
+ifdef CROSSBINDIR
+ARPROG=$(CROSSBINDIR)/$(ARNAME)$(SRCEXEEXT)
+else
+ARPROG=$(ARNAME)
+endif
+endif
+AS=$(ASPROG)
+LD=$(LDPROG)
+RC=$(RCPROG)
+AR=$(ARPROG)
+PPAS=ppas$(SRCBATCHEXT)
+ifdef inUnix
+LDCONFIG=ldconfig
+else
+LDCONFIG=
+endif
+ifdef DATE
+DATESTR:=$(shell $(DATE) +%Y%m%d)
+else
+DATESTR=
+endif
+ifndef UPXPROG
+ifeq ($(OS_TARGET),go32v2)
+UPXPROG:=1
+endif
+ifeq ($(OS_TARGET),win32)
+UPXPROG:=1
+endif
+ifdef UPXPROG
+UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(UPXPROG),)
+UPXPROG=
+else
+UPXPROG:=$(firstword $(UPXPROG))
+endif
+else
+UPXPROG=
+endif
+endif
+export UPXPROG
+ZIPOPT=-9
+ZIPEXT=.zip
+ifeq ($(USETAR),bz2)
+TAROPT=vj
+TAREXT=.tar.bz2
+else
+TAROPT=vz
+TAREXT=.tar.gz
+endif
+override REQUIRE_PACKAGES=rtl libgbafpc
+ifeq ($(FULL_TARGET),arm-gba)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifdef REQUIRE_PACKAGES_RTL
+PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_RTL),)
+ifneq ($(wildcard $(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)),)
+UNITDIR_RTL=$(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)
+else
+UNITDIR_RTL=$(PACKAGEDIR_RTL)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_RTL)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_RTL) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_RTL)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_RTL=
+UNITDIR_RTL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /rtl/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_RTL),)
+UNITDIR_RTL:=$(firstword $(UNITDIR_RTL))
+else
+UNITDIR_RTL=
+endif
+endif
+ifdef UNITDIR_RTL
+override COMPILER_UNITDIR+=$(UNITDIR_RTL)
+endif
+endif
+ifdef REQUIRE_PACKAGES_LIBGBAFPC
+PACKAGEDIR_LIBGBAFPC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /libgbafpc/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_LIBGBAFPC),)
+ifneq ($(wildcard $(PACKAGEDIR_LIBGBAFPC)/units/$(TARGETSUFFIX)),)
+UNITDIR_LIBGBAFPC=$(PACKAGEDIR_LIBGBAFPC)/units/$(TARGETSUFFIX)
+else
+UNITDIR_LIBGBAFPC=$(PACKAGEDIR_LIBGBAFPC)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_LIBGBAFPC)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_LIBGBAFPC) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_LIBGBAFPC)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_LIBGBAFPC=
+UNITDIR_LIBGBAFPC:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /libgbafpc/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_LIBGBAFPC),)
+UNITDIR_LIBGBAFPC:=$(firstword $(UNITDIR_LIBGBAFPC))
+else
+UNITDIR_LIBGBAFPC=
+endif
+endif
+ifdef UNITDIR_LIBGBAFPC
+override COMPILER_UNITDIR+=$(UNITDIR_LIBGBAFPC)
+endif
+endif
+ifndef NOCPUDEF
+override FPCOPTDEF=$(ARCH)
+endif
+ifneq ($(OS_TARGET),$(OS_SOURCE))
+override FPCOPT+=-T$(OS_TARGET)
+endif
+ifneq ($(CPU_TARGET),$(CPU_SOURCE))
+override FPCOPT+=-P$(ARCH)
+endif
+ifeq ($(OS_SOURCE),openbsd)
+override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
+endif
+ifndef CROSSBOOTSTRAP
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-XP$(BINUTILSPREFIX)
+endif
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-Xr$(RLINKPATH)
+endif
+endif
+ifdef UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
+endif
+ifdef LIBDIR
+override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
+endif
+ifdef OBJDIR
+override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
+endif
+ifdef INCDIR
+override FPCOPT+=$(addprefix -Fi,$(INCDIR))
+endif
+ifdef LINKSMART
+override FPCOPT+=-XX
+endif
+ifdef CREATESMART
+override FPCOPT+=-CX
+endif
+ifdef DEBUG
+override FPCOPT+=-gl
+override FPCOPTDEF+=DEBUG
+endif
+ifdef RELEASE
+ifneq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(CPU_TARGET),i386)
+FPCCPUOPT:=-OG2p3
+endif
+ifeq ($(CPU_TARGET),powerpc)
+FPCCPUOPT:=-O1r
+endif
+else
+FPCCPUOPT:=-O2
+endif
+override FPCOPT+=-Ur -Xs $(FPCCPUOPT) -n
+override FPCOPTDEF+=RELEASE
+endif
+ifdef STRIP
+override FPCOPT+=-Xs
+endif
+ifdef OPTIMIZE
+override FPCOPT+=-O2
+endif
+ifdef VERBOSE
+override FPCOPT+=-vwni
+endif
+ifdef COMPILER_OPTIONS
+override FPCOPT+=$(COMPILER_OPTIONS)
+endif
+ifdef COMPILER_UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(COMPILER_UNITDIR))
+endif
+ifdef COMPILER_LIBRARYDIR
+override FPCOPT+=$(addprefix -Fl,$(COMPILER_LIBRARYDIR))
+endif
+ifdef COMPILER_OBJECTDIR
+override FPCOPT+=$(addprefix -Fo,$(COMPILER_OBJECTDIR))
+endif
+ifdef COMPILER_INCLUDEDIR
+override FPCOPT+=$(addprefix -Fi,$(COMPILER_INCLUDEDIR))
+endif
+ifdef CROSSBINDIR
+override FPCOPT+=-FD$(CROSSBINDIR)
+endif
+ifdef COMPILER_TARGETDIR
+override FPCOPT+=-FE$(COMPILER_TARGETDIR)
+ifeq ($(COMPILER_TARGETDIR),.)
+override TARGETDIRPREFIX=
+else
+override TARGETDIRPREFIX=$(COMPILER_TARGETDIR)/
+endif
+endif
+ifdef COMPILER_UNITTARGETDIR
+override FPCOPT+=-FU$(COMPILER_UNITTARGETDIR)
+ifeq ($(COMPILER_UNITTARGETDIR),.)
+override UNITTARGETDIRPREFIX=
+else
+override UNITTARGETDIRPREFIX=$(COMPILER_UNITTARGETDIR)/
+endif
+else
+ifdef COMPILER_TARGETDIR
+override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR)
+override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
+endif
+endif
+ifdef CREATESHARED
+override FPCOPT+=-Cg
+ifeq ($(CPU_TARGET),i386)
+override FPCOPT+=-Aas
+endif
+endif
+ifeq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),x86_64)
+override FPCOPT+=-Cg
+endif
+endif
+endif
+ifdef LINKSHARED
+endif
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+ifdef FPCOPTDEF
+override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
+endif
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+ifdef USEENV
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+override AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(AFULL_TARGET),$(AFULL_SOURCE))
+override ACROSSCOMPILE=1
+endif
+ifdef ACROSSCOMPILE
+override FPCOPT+=$(CROSSOPT)
+endif
+override COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+ifdef RUNBATCH
+EXECPPAS:=@$(RUNBATCH) $(PPAS)
+else
+EXECPPAS:=@$(PPAS)
+endif
+endif
+endif
+.PHONY: fpc_loaders
+ifneq ($(TARGET_LOADERS),)
+override ALLTARGET+=fpc_loaders
+override CLEANTARGET+=fpc_loaders_clean
+override INSTALLTARGET+=fpc_loaders_install
+override LOADEROFILES:=$(addsuffix $(OEXT),$(TARGET_LOADERS))
+endif
+%$(OEXT): %$(LOADEREXT)
+ifdef COMPILER_UNITTARGETDIR
+	$(AS) -o $(COMPILER_UNITTARGETDIR)/$*$(OEXT) $<
+else
+	$(AS) -o $*$(OEXT) $<
+endif
+fpc_loaders: $(COMPILER_UNITTARGETDIR) $(LOADEROFILES)
+fpc_loaders_clean:
+ifdef COMPILER_UNITTARGETDIR
+	-$(DEL) $(addprefix $(COMPILER_UNITTARGETDIR)/,$(LOADEROFILES))
+else
+	-$(DEL) $(LOADEROFILES)
+endif
+fpc_loaders_install:
+	$(MKDIR) $(INSTALL_UNITDIR)
+ifdef COMPILER_UNITTARGETDIR
+	$(INSTALL) $(addprefix $(COMPILER_UNITTARGETDIR)/,$(LOADEROFILES)) $(INSTALL_UNITDIR)
+else
+	$(INSTALL) $(LOADEROFILES) $(INSTALL_UNITDIR)
+endif
+.PHONY: fpc_exes
+ifndef CROSSINSTALL
+ifneq ($(TARGET_PROGRAMS),)
+override EXEFILES=$(addsuffix $(EXEEXT),$(TARGET_PROGRAMS))
+override EXEOFILES:=$(addsuffix $(OEXT),$(TARGET_PROGRAMS)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS))) $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS)))
+override ALLTARGET+=fpc_exes
+override INSTALLEXEFILES+=$(EXEFILES)
+override CLEANEXEFILES+=$(EXEFILES) $(EXEOFILES)
+ifeq ($(OS_TARGET),os2)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+ifeq ($(OS_TARGET),emx)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+endif
+endif
+fpc_exes: $(COMPILER_TARGETDIR) $(COMPILER_UNITTARGETDIR) $(EXEFILES)
+ifdef TARGET_RSTS
+override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
+override CLEANRSTFILES+=$(RSTFILES)
+endif
+.PHONY: fpc_all fpc_smart fpc_debug fpc_release fpc_shared
+$(FPCMADE): $(ALLDEPENDENCIES) $(ALLTARGET)
+	@$(ECHOREDIR) Compiled > $(FPCMADE)
+fpc_all: $(FPCMADE)
+fpc_smart:
+	$(MAKE) all LINKSMART=1 CREATESMART=1
+fpc_debug:
+	$(MAKE) all DEBUG=1
+fpc_release:
+	$(MAKE) all RELEASE=1
+.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .lpr .dpr .pp .rc .res
+$(COMPILER_UNITTARGETDIR):
+	$(MKDIRTREE) $(COMPILER_UNITTARGETDIR)
+$(COMPILER_TARGETDIR):
+	$(MKDIRTREE) $(COMPILER_TARGETDIR)
+%$(PPUEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(PPUEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.lpr
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.dpr
+	$(COMPILER) $<
+	$(EXECPPAS)
+%.res: %.rc
+	windres -i $< -o $@
+vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.lpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.inc $(COMPILER_INCLUDEDIR)
+vpath %$(OEXT) $(COMPILER_UNITTARGETDIR)
+vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)
+.PHONY: fpc_shared
+override INSTALLTARGET+=fpc_shared_install
+ifndef SHARED_LIBVERSION
+SHARED_LIBVERSION=$(FPC_VERSION)
+endif
+ifndef SHARED_LIBNAME
+SHARED_LIBNAME=$(PACKAGE_NAME)
+endif
+ifndef SHARED_FULLNAME
+SHARED_FULLNAME=$(SHAREDLIBPREFIX)$(SHARED_LIBNAME)-$(SHARED_LIBVERSION)$(SHAREDLIBEXT)
+endif
+ifndef SHARED_LIBUNITS
+SHARED_LIBUNITS:=$(TARGET_UNITS) $(TARGET_IMPLICITUNITS)
+override SHARED_LIBUNITS:=$(filter-out $(INSTALL_BUILDUNIT),$(SHARED_LIBUNITS))
+endif
+fpc_shared:
+ifdef HASSHAREDLIB
+	$(MAKE) all CREATESHARED=1 LINKSHARED=1 CREATESMART=1
+ifneq ($(SHARED_BUILD),n)
+	$(PPUMOVE) -q $(SHARED_LIBUNITS) -i$(COMPILER_UNITTARGETDIR) -o$(SHARED_FULLNAME) -d$(COMPILER_UNITTARGETDIR)
+endif
+else
+	@$(ECHO) Shared Libraries not supported
+endif
+fpc_shared_install:
+ifneq ($(SHARED_BUILD),n)
+ifneq ($(SHARED_LIBUNITS),)
+ifneq ($(wildcard $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME)),)
+	$(INSTALL) $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME) $(INSTALL_SHAREDDIR)
+endif
+endif
+endif
+.PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall
+ifdef INSTALL_UNITS
+override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(INSTALL_UNITS))
+endif
+ifdef INSTALL_BUILDUNIT
+override INSTALLPPUFILES:=$(filter-out $(INSTALL_BUILDUNIT)$(PPUEXT),$(INSTALLPPUFILES))
+endif
+ifdef INSTALLPPUFILES
+override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES)))
+ifneq ($(UNITTARGETDIRPREFIX),)
+override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPUFILES)))
+override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPULINKFILES))))
+endif
+override INSTALL_CREATEPACKAGEFPC=1
+endif
+ifdef INSTALLEXEFILES
+ifneq ($(TARGETDIRPREFIX),)
+override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(notdir $(INSTALLEXEFILES)))
+endif
+endif
+fpc_install: all $(INSTALLTARGET)
+ifdef INSTALLEXEFILES
+	$(MKDIR) $(INSTALL_BINDIR)
+ifdef UPXPROG
+	-$(UPXPROG) $(INSTALLEXEFILES)
+endif
+	$(INSTALLEXE) $(INSTALLEXEFILES) $(INSTALL_BINDIR)
+endif
+ifdef INSTALL_CREATEPACKAGEFPC
+ifdef FPCMAKE
+ifdef PACKAGE_VERSION
+ifneq ($(wildcard Makefile.fpc),)
+	$(FPCMAKE) -p -T$(CPU_TARGET)-$(OS_TARGET) Makefile.fpc
+	$(MKDIR) $(INSTALL_UNITDIR)
+	$(INSTALL) Package.fpc $(INSTALL_UNITDIR)
+endif
+endif
+endif
+endif
+ifdef INSTALLPPUFILES
+	$(MKDIR) $(INSTALL_UNITDIR)
+	$(INSTALL) $(INSTALLPPUFILES) $(INSTALL_UNITDIR)
+ifneq ($(INSTALLPPULINKFILES),)
+	$(INSTALL) $(INSTALLPPULINKFILES) $(INSTALL_UNITDIR)
+endif
+ifneq ($(wildcard $(LIB_FULLNAME)),)
+	$(MKDIR) $(INSTALL_LIBDIR)
+	$(INSTALL) $(LIB_FULLNAME) $(INSTALL_LIBDIR)
+ifdef inUnix
+	ln -sf $(LIB_FULLNAME) $(INSTALL_LIBDIR)/$(LIB_NAME)
+endif
+endif
+endif
+ifdef INSTALL_FILES
+	$(MKDIR) $(INSTALL_DATADIR)
+	$(INSTALL) $(INSTALL_FILES) $(INSTALL_DATADIR)
+endif
+fpc_sourceinstall: distclean
+	$(MKDIR) $(INSTALL_SOURCEDIR)
+	$(COPYTREE) $(BASEDIR)/* $(INSTALL_SOURCEDIR)
+fpc_exampleinstall: $(addsuffix _distclean,$(TARGET_EXAMPLEDIRS))
+ifdef HASEXAMPLES
+	$(MKDIR) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef EXAMPLESOURCEFILES
+	$(COPY) $(EXAMPLESOURCEFILES) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(COPYTREE) $(addsuffix /*,$(TARGET_EXAMPLEDIRS)) $(INSTALL_EXAMPLEDIR)
+endif
+.PHONY: fpc_clean fpc_cleanall fpc_distclean
+ifdef EXEFILES
+override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
+endif
+ifdef CLEAN_UNITS
+override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
+endif
+ifdef CLEANPPUFILES
+override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES)))
+ifdef DEBUGSYMEXT
+override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPPUFILES))
+endif
+override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
+override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES)))
+endif
+fpc_clean: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
+endif
+ifdef LIB_NAME
+	-$(DEL) $(LIB_NAME) $(LIB_FULLNAME)
+endif
+	-$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT)
+fpc_cleanall: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef COMPILER_UNITTARGETDIR
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+endif
+	-$(DELTREE) units
+	-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
+ifneq ($(PPUEXT),.ppu)
+	-$(DEL) *.o *.ppu *.a
+endif
+	-$(DELTREE) *$(SMARTEXT)
+	-$(DEL) fpcmade.* Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *_ppas$(BATCHEXT)
+ifdef AOUTEXT
+	-$(DEL) *$(AOUTEXT)
+endif
+ifdef DEBUGSYMEXT
+	-$(DEL) *$(DEBUGSYMEXT)
+endif
+fpc_distclean: cleanall
+.PHONY: fpc_baseinfo
+override INFORULES+=fpc_baseinfo
+fpc_baseinfo:
+	@$(ECHO)
+	@$(ECHO)  == Package info ==
+	@$(ECHO)  Package Name..... $(PACKAGE_NAME)
+	@$(ECHO)  Package Version.. $(PACKAGE_VERSION)
+	@$(ECHO)
+	@$(ECHO)  == Configuration info ==
+	@$(ECHO)
+	@$(ECHO)  FPC.......... $(FPC)
+	@$(ECHO)  FPC Version.. $(FPC_VERSION)
+	@$(ECHO)  Source CPU... $(CPU_SOURCE)
+	@$(ECHO)  Target CPU... $(CPU_TARGET)
+	@$(ECHO)  Source OS.... $(OS_SOURCE)
+	@$(ECHO)  Target OS.... $(OS_TARGET)
+	@$(ECHO)  Full Source.. $(FULL_SOURCE)
+	@$(ECHO)  Full Target.. $(FULL_TARGET)
+	@$(ECHO)  SourceSuffix. $(SOURCESUFFIX)
+	@$(ECHO)  TargetSuffix. $(TARGETSUFFIX)
+	@$(ECHO)
+	@$(ECHO)  == Directory info ==
+	@$(ECHO)
+	@$(ECHO)  Required pkgs... $(REQUIRE_PACKAGES)
+	@$(ECHO)
+	@$(ECHO)  Basedir......... $(BASEDIR)
+	@$(ECHO)  FPCDir.......... $(FPCDIR)
+	@$(ECHO)  CrossBinDir..... $(CROSSBINDIR)
+	@$(ECHO)  UnitsDir........ $(UNITSDIR)
+	@$(ECHO)  PackagesDir..... $(PACKAGESDIR)
+	@$(ECHO)
+	@$(ECHO)  GCC library..... $(GCCLIBDIR)
+	@$(ECHO)  Other library... $(OTHERLIBDIR)
+	@$(ECHO)
+	@$(ECHO)  == Tools info ==
+	@$(ECHO)
+	@$(ECHO)  As........ $(AS)
+	@$(ECHO)  Ld........ $(LD)
+	@$(ECHO)  Ar........ $(AR)
+	@$(ECHO)  Rc........ $(RC)
+	@$(ECHO)
+	@$(ECHO)  Mv........ $(MVPROG)
+	@$(ECHO)  Cp........ $(CPPROG)
+	@$(ECHO)  Rm........ $(RMPROG)
+	@$(ECHO)  GInstall.. $(GINSTALL)
+	@$(ECHO)  Echo...... $(ECHO)
+	@$(ECHO)  Shell..... $(SHELL)
+	@$(ECHO)  Date...... $(DATE)
+	@$(ECHO)  FPCMake... $(FPCMAKE)
+	@$(ECHO)  PPUMove... $(PPUMOVE)
+	@$(ECHO)  Upx....... $(UPXPROG)
+	@$(ECHO)  Zip....... $(ZIPPROG)
+	@$(ECHO)
+	@$(ECHO)  == Object info ==
+	@$(ECHO)
+	@$(ECHO)  Target Loaders........ $(TARGET_LOADERS)
+	@$(ECHO)  Target Units.......... $(TARGET_UNITS)
+	@$(ECHO)  Target Implicit Units. $(TARGET_IMPLICITUNITS)
+	@$(ECHO)  Target Programs....... $(TARGET_PROGRAMS)
+	@$(ECHO)  Target Dirs........... $(TARGET_DIRS)
+	@$(ECHO)  Target Examples....... $(TARGET_EXAMPLES)
+	@$(ECHO)  Target ExampleDirs.... $(TARGET_EXAMPLEDIRS)
+	@$(ECHO)
+	@$(ECHO)  Clean Units......... $(CLEAN_UNITS)
+	@$(ECHO)  Clean Files......... $(CLEAN_FILES)
+	@$(ECHO)
+	@$(ECHO)  Install Units....... $(INSTALL_UNITS)
+	@$(ECHO)  Install Files....... $(INSTALL_FILES)
+	@$(ECHO)
+	@$(ECHO)  == Install info ==
+	@$(ECHO)
+	@$(ECHO)  DateStr.............. $(DATESTR)
+	@$(ECHO)  ZipName.............. $(ZIPNAME)
+	@$(ECHO)  ZipPrefix............ $(ZIPPREFIX)
+	@$(ECHO)  ZipCrossPrefix....... $(ZIPCROSSPREFIX)
+	@$(ECHO)  ZipSuffix............ $(ZIPSUFFIX)
+	@$(ECHO)  FullZipName.......... $(FULLZIPNAME)
+	@$(ECHO)  Install FPC Package.. $(INSTALL_FPCPACKAGE)
+	@$(ECHO)
+	@$(ECHO)  Install base dir..... $(INSTALL_BASEDIR)
+	@$(ECHO)  Install binary dir... $(INSTALL_BINDIR)
+	@$(ECHO)  Install library dir.. $(INSTALL_LIBDIR)
+	@$(ECHO)  Install units dir.... $(INSTALL_UNITDIR)
+	@$(ECHO)  Install source dir... $(INSTALL_SOURCEDIR)
+	@$(ECHO)  Install doc dir...... $(INSTALL_DOCDIR)
+	@$(ECHO)  Install example dir.. $(INSTALL_EXAMPLEDIR)
+	@$(ECHO)  Install data dir..... $(INSTALL_DATADIR)
+	@$(ECHO)
+	@$(ECHO)  Dist destination dir. $(DIST_DESTDIR)
+	@$(ECHO)  Dist zip name........ $(DIST_ZIPNAME)
+	@$(ECHO)
+.PHONY: fpc_info
+fpc_info: $(INFORULES)
+.PHONY: fpc_makefile fpc_makefiles fpc_makefile_sub1 fpc_makefile_sub2 \
+	fpc_makefile_dirs
+fpc_makefile:
+	$(FPCMAKE) -w -T$(OS_TARGET) Makefile.fpc
+fpc_makefile_sub1:
+ifdef TARGET_DIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_DIRS))
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_EXAMPLEDIRS))
+endif
+fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS))
+fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
+fpc_makefiles: fpc_makefile fpc_makefile_dirs
+ifndef BIN2S
+BIN2S:=$(strip $(wildcard $(addsuffix /bin2s$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(BIN2S),)
+BIN2S= __missing_command_BIN2S
+else
+BIN2S:=$(firstword $(BIN2S))
+endif
+endif
+export BIN2S
+all: fpc_all
+debug: fpc_debug
+smart: fpc_smart
+release: fpc_release
+units: fpc_units
+examples:
+shared: fpc_shared
+install: fpc_install
+sourceinstall: fpc_sourceinstall
+exampleinstall: fpc_exampleinstall
+distinstall:
+zipinstall:
+zipsourceinstall:
+zipexampleinstall:
+zipdistinstall:
+clean: fpc_clean
+distclean: fpc_distclean
+cleanall: fpc_cleanall
+info: fpc_info
+makefiles: fpc_makefiles
+.PHONY: all debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall clean distclean cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+.NOTPARALLEL:
+ifneq ($(BIN2S),)
+data/r6502_portfont.bin.o:
+	$(BIN2S) data/r6502_portfont.bin > data/r6502_portfont.bin.s
+	$(AS) -o data/r6502_portfont.bin.o data/r6502_portfont.bin.s
+endif

+ 33 - 0
packages/libgbafpc/examples/devkitPro/graphics/SimpleBGScroll/Makefile.fpc

@@ -0,0 +1,33 @@
+#
+#   Makefile.fpc for Free Pascal libgbafpc 2.x.y Examples
+#
+
+[target]
+loaders=data/r6502_portfont.bin
+programs=SimpleBGScroll
+
+[require]
+packages=libgbafpc
+tools=bin2s
+
+[install]
+fpcpackage=y
+
+[default]
+cpu=arm
+target=gba
+fpcdir=../../../../..
+
+[clean]
+files=*.elf data/*.o data/*.s
+units=*
+
+[prerules]
+
+[rules]
+.NOTPARALLEL:
+ifneq ($(BIN2S),)
+data/r6502_portfont.bin.o:
+        $(BIN2S) data/r6502_portfont.bin > data/r6502_portfont.bin.s
+        $(AS) -o data/r6502_portfont.bin.o data/r6502_portfont.bin.s
+endif

+ 162 - 0
packages/libgbafpc/examples/devkitPro/graphics/SimpleBGScroll/SimpleBGScroll.pp

@@ -0,0 +1,162 @@
+program SimpleBGScroll;
+
+uses
+  ctypes, gba;
+
+{$l data\r6502_portfont.bin.o}
+
+
+var
+  MAPADDRESS: pointer;
+  r6502_portfont_bin: array [0..0] of cuint8; cvar; external;
+  r6502_portfont_bin_size: array [0..0] of cuint32; cvar; external;
+  r6502_portfont_bin_end: array [0..0] of cuint8; cvar; external;
+
+const
+  DELAY = 2;			                  // slow things down
+  TILEWIDTH = 8;			              // how much to scroll
+  ROW = 10;			                    // what row to place text at
+
+// --------------------------------------------------------------------
+
+var 
+  palette: array [0..6] of u16;
+  
+// --------------------------------------------------------------------
+
+const 
+  message = '                                ' +
+            'Hello, this is an example of an oldschool simple tile scroller ' +
+            'not unlike how it was done in days of yore.  The ''@'' symbol ' +
+            'at the top of your screen is intentional, to dispel the illusion ' +
+            'of this scroller, to demonstrate the simple concept behind it. ' +
+            'Check out the source to learn how it works.  It is very simple! ' +
+            'This exercise brought to you by r6502...          ' +
+            'Text is about to restart... ';
+
+
+
+procedure updatescrolltext(idx: u32);
+var
+  i: integer;
+  temppointer: pu16;
+begin
+  temppointer := pu16(MAPADDRESS + (ROW * 32));
+
+  // write out a whole row of text to the map
+  for i :=0 to 31 do
+  begin
+    // check for end of message so we can wrap around properly
+    if (message[idx] = #0) then 
+      idx := 0;
+
+    // write a character - we subtract 32, because the font graphics
+    // start at tile 0, but our text is in ascii (starting at 32 and up)
+    // in other words, tile 0 is a space in our font, but in ascii a
+    // space is 32 so we must account for that difference between the two.
+    temppointer^ := Ord(message[idx]) - 32;
+    inc(temppointer); 
+    inc(idx);
+  end;
+end;
+
+
+var
+  i, scrollx, scrolldelay, textindex: integer;
+  temppointer: pu16;
+
+begin	
+  MAPADDRESS := MAP_BASE_ADR(31);    // our base map address
+  
+  palette[0] := RGB8($40,$80,$c0);
+  palette[1] := RGB8($FF,$FF,$FF);
+  palette[2] := RGB8($F5,$FF,$FF);
+  palette[3] := RGB8($DF,$FF,$F2);
+  palette[4] := RGB8($CA,$FF,$E2);
+  palette[5] := RGB8($B7,$FD,$D8);
+  palette[6] := RGB8($2C,$4F,$8B);
+
+  // Set up the interrupt handlers
+  irqInit();
+  // Enable Vblank Interrupt to allow VblankIntrWait
+  irqEnable(IRQ_VBLANK);
+
+  // Allow Interrupts
+  REG_IME^ := 1;
+
+  // load the palette for the background, 7 colors
+  temppointer := BG_COLORS;
+  
+  for i := 0 to 6 do
+  begin
+    temppointer^ := palette[i];
+    inc(temppointer);
+  end;
+
+  // load the font into gba video mem (48 characters, 4bit tiles)
+
+  CpuFastSet(@r6502_portfont_bin, pu16(VRAM), (r6502_portfont_bin_size[0] div 4) or COPY32);
+
+  // clear screen map with tile 0 ('space' tile) (256x256 halfwords)
+
+  //MAP_BASE_ADR(31) := nil;
+  CpuFastSet( MAP_BASE_ADR(31), MAP_BASE_ADR(31), FILL or COPY32 or ($800 div 4));
+
+  // set screen H and V scroll positions
+  BG_OFFSET[0].x := 0; 
+  BG_OFFSET[0].y := 0;
+
+  // initialize our variables
+  scrollx := 0;
+  textindex := 0;
+  scrolldelay := 0;
+
+  // put the '@' symbol on the top of the screen to show how
+  // the screen is only scrolling 7 pixels - to reveal the
+  // illusion of how the scroller works
+  pu16((MAPADDRESS + 1))^ := $20;	// 0x20 == '@'
+
+  // draw a row of text from beginning of message
+  updatescrolltext(0);
+
+  // set the screen base to 31 (0x600F800) and char base to 0 (0x6000000)
+  BGCTRL[0] := SCREEN_BASE(31);
+
+  // screen mode & background to display
+  SetMode( MODE_0 or BG0_ON );
+
+  while true do 
+  begin
+    VBlankIntrWait();
+
+    // check if we reached our delay
+    if (scrolldelay = DELAY) then
+    begin
+      // yes, the delay is complete, so let's reset it
+      scrolldelay := 0;
+
+      // check if we reached our scrollcount
+      if (scrollx = (TILEWIDTH-1)) then
+      begin
+        // yes, we've scrolled enough, so let's reset the count
+        scrollx := 0;
+
+        // check if we reached the end of our scrolltext
+        // and if so we need to restart our index
+        if (message[textindex] = #0) then 
+          textindex := 0
+        else 
+          inc(textindex);
+
+        // finally, let's update the scrolltext with the current text index
+        updatescrolltext(textindex);
+      end else 
+        inc(scrollx);
+    end else 
+      inc(scrolldelay);
+
+    // update the hardware horizontal scroll register
+    BG_OFFSET[0].x := scrollx;
+  end;
+end.
+

BIN
packages/libgbafpc/examples/devkitPro/graphics/SimpleBGScroll/data/r6502_portfont.bin


+ 1600 - 0
packages/libgbafpc/examples/devkitPro/graphics/ansi_console/Makefile

@@ -0,0 +1,1600 @@
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/04/20]
+#
+default: all
+MAKEFILETARGETS=arm-gba
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) solaris qnx
+LIMIT83fs = go32v2 os2 emx watcom
+OSNeedsComspecToRunBatch = go32v2 watcom
+FORCE:
+.PHONY: FORCE
+override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
+ifneq ($(findstring darwin,$(OSTYPE)),)
+inUnix=1 #darwin
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+endif
+SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifdef inUnix
+SRCBATCHEXT=.sh
+else
+ifdef inOS2
+SRCBATCHEXT=.cmd
+else
+SRCBATCHEXT=.bat
+endif
+endif
+ifdef COMSPEC
+ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
+RUNBATCH=$(COMSPEC) /C
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+override OS_TARGET_DEFAULT=gba
+override CPU_TARGET_DEFAULT=arm
+override DEFAULT_FPCDIR=../../../../..
+ifndef FPC
+ifdef PP
+FPC=$(PP)
+endif
+endif
+ifndef FPC
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+ifneq ($(CPU_TARGET),)
+FPC:=$(shell $(FPCPROG) -P$(CPU_TARGET) -PB)
+else
+FPC:=$(shell $(FPCPROG) -PB)
+endif
+ifneq ($(findstring Error,$(FPC)),)
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+else
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+endif
+override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
+override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
+FOUNDFPC:=$(strip $(wildcard $(FPC)))
+ifeq ($(FOUNDFPC),)
+FOUNDFPC=$(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))
+ifeq ($(FOUNDFPC),)
+$(error Compiler $(FPC) not found)
+endif
+endif
+ifndef FPC_COMPILERINFO
+FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO)
+endif
+ifndef FPC_VERSION
+FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO))
+endif
+export FPC FPC_VERSION FPC_COMPILERINFO
+unexport CHECKDEPEND ALLDEPENDENCIES
+ifndef CPU_TARGET
+ifdef CPU_TARGET_DEFAULT
+CPU_TARGET=$(CPU_TARGET_DEFAULT)
+endif
+endif
+ifndef OS_TARGET
+ifdef OS_TARGET_DEFAULT
+OS_TARGET=$(OS_TARGET_DEFAULT)
+endif
+endif
+ifneq ($(words $(FPC_COMPILERINFO)),5)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSO)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTO)
+endif
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(word 2,$(FPC_COMPILERINFO))
+endif
+ifndef CPU_TARGET
+CPU_TARGET:=$(word 3,$(FPC_COMPILERINFO))
+endif
+ifndef OS_SOURCE
+OS_SOURCE:=$(word 4,$(FPC_COMPILERINFO))
+endif
+ifndef OS_TARGET
+OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
+endif
+FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifeq ($(CPU_TARGET),armeb)
+ARCH=arm
+override FPCOPT+=-Cb
+else
+ifeq ($(CPU_TARGET),armel)
+ARCH=arm
+override FPCOPT+=-CaEABI
+else
+ARCH=$(CPU_TARGET)
+endif
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+SOURCESUFFIX=$(OS_SOURCE)
+else
+TARGETSUFFIX=$(FULL_TARGET)
+SOURCESUFFIX=$(FULL_SOURCE)
+endif
+ifneq ($(FULL_TARGET),$(FULL_SOURCE))
+CROSSCOMPILE=1
+endif
+ifeq ($(findstring makefile,$(MAKECMDGOALS)),)
+ifeq ($(findstring $(FULL_TARGET),$(MAKEFILETARGETS)),)
+$(error The Makefile doesn't support target $(FULL_TARGET), please run fpcmake first)
+endif
+endif
+ifneq ($(findstring $(OS_TARGET),$(BSDs)),)
+BSDhier=1
+endif
+ifeq ($(OS_TARGET),linux)
+linuxHier=1
+endif
+export OS_TARGET OS_SOURCE ARCH CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
+ifdef FPCDIR
+override FPCDIR:=$(subst \,/,$(FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+else
+override FPCDIR=wrong
+endif
+ifdef DEFAULT_FPCDIR
+ifeq ($(FPCDIR),wrong)
+override FPCDIR:=$(subst \,/,$(DEFAULT_FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+endif
+endif
+ifeq ($(FPCDIR),wrong)
+ifdef inUnix
+override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
+endif
+else
+override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))))
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(BASEDIR)
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=c:/pp
+endif
+endif
+endif
+endif
+endif
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(FPCDIR)/bin/$(TARGETSUFFIX))
+endif
+ifndef BINUTILSPREFIX
+ifndef CROSSBINDIR
+ifdef CROSSCOMPILE
+BINUTILSPREFIX=$(CPU_TARGET)-$(OS_TARGET)-
+endif
+endif
+endif
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(TARGETSUFFIX))
+ifeq ($(UNITSDIR),)
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
+endif
+PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_PROGRAMS+=console
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override CLEAN_UNITS+=*
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override CLEAN_FILES+=*.elf
+endif
+override INSTALL_FPCPACKAGE=y
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=1
+endif
+else
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXHier
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef COMPILER_UNITTARGETDIR
+ifdef PACKAGEDIR_MAIN
+COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
+else
+COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
+endif
+endif
+ifndef COMPILER_TARGETDIR
+COMPILER_TARGETDIR=.
+endif
+ifndef INSTALL_BASEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXHier
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+ifdef CROSSCOMPILE
+ifdef CROSSINSTALL
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXHier
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXHier
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+ifdef linuxHier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+ifdef UNIXHier
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+ifdef linuxHier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+endif
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifndef INSTALL_SHAREDDIR
+INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+SHAREDLIBPREFIX=libfp
+STATICLIBPREFIX=libp
+IMPORTLIBPREFIX=libimp
+RSTEXT=.rst
+ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),go32v1)
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+OEXT=.obj
+ASMEXT=.asm
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=wat
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),emx)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=emx
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),morphos)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=mos
+endif
+ifeq ($(OS_TARGET),atari)
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nw
+endif
+ifeq ($(OS_TARGET),netwlibc)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nwl
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+endif
+ifeq ($(OS_TARGET),darwin)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=dwn
+endif
+ifeq ($(OS_TARGET),gba)
+EXEEXT=.gba
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gba
+endif
+ifeq ($(OS_TARGET),nds)
+EXEEXT=.nds
+SHAREDLIBEXT=.so
+SHORTSUFFIX=nds
+endif
+ifeq ($(OS_TARGET),gamecube)
+EXEEXT=.dol
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gamecube
+endif
+ifeq ($(OS_TARGET),wii)
+EXEEXT=.dol
+SHAREDLIBEXT=.so
+SHORTSUFFIX=wii
+endif
+ifeq ($(OS_TARGET),symbian)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=symbian
+endif
+else
+ifeq ($(OS_TARGET),go32v1)
+PPUEXT=.pp1
+OEXT=.o1
+ASMEXT=.s1
+SMARTEXT=.sl1
+STATICLIBEXT=.a1
+SHAREDLIBEXT=.so1
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+SHORTSUFFIX=wat
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+PPUEXT=.ppw
+OEXT=.ow
+ASMEXT=.sw
+SMARTEXT=.slw
+STATICLIBEXT=.aw
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+PPUEXT=.ppo
+ASMEXT=.so2
+OEXT=.oo2
+AOUTEXT=.out
+SMARTEXT=.sl2
+STATICLIBPREFIX=
+STATICLIBEXT=.ao2
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),atari)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nw
+endif
+ifeq ($(OS_TARGET),netwlibc)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nwl
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+endif
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+FPCMADE=fpcmade.$(SHORTSUFFIX)
+ZIPSUFFIX=$(SHORTSUFFIX)
+ZIPCROSSPREFIX=
+ZIPSOURCESUFFIX=src
+ZIPEXAMPLESUFFIX=exm
+else
+FPCMADE=fpcmade.$(TARGETSUFFIX)
+ZIPSOURCESUFFIX=.source
+ZIPEXAMPLESUFFIX=.examples
+ifdef CROSSCOMPILE
+ZIPSUFFIX=.$(SOURCESUFFIX)
+ZIPCROSSPREFIX=$(TARGETSUFFIX)-
+else
+ZIPSUFFIX=.$(TARGETSUFFIX)
+ZIPCROSSPREFIX=
+endif
+endif
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO= __missing_command_ECHO
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+ifndef DATE
+DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE= __missing_command_DATE
+else
+DATE:=$(firstword $(DATE))
+endif
+else
+DATE:=$(firstword $(DATE))
+endif
+endif
+export DATE
+ifndef GINSTALL
+GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL= __missing_command_GINSTALL
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+endif
+export GINSTALL
+ifndef CPPROG
+CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(CPPROG),)
+CPPROG= __missing_command_CPPROG
+else
+CPPROG:=$(firstword $(CPPROG))
+endif
+endif
+export CPPROG
+ifndef RMPROG
+RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(RMPROG),)
+RMPROG= __missing_command_RMPROG
+else
+RMPROG:=$(firstword $(RMPROG))
+endif
+endif
+export RMPROG
+ifndef MVPROG
+MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MVPROG),)
+MVPROG= __missing_command_MVPROG
+else
+MVPROG:=$(firstword $(MVPROG))
+endif
+endif
+export MVPROG
+ifndef MKDIRPROG
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /gmkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /mkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG= __missing_command_MKDIRPROG
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+endif
+export MKDIRPROG
+ifndef ECHOREDIR
+ifndef inUnix
+ECHOREDIR=echo
+else
+ECHOREDIR=$(ECHO)
+endif
+endif
+ifndef COPY
+COPY:=$(CPPROG) -fp
+endif
+ifndef COPYTREE
+COPYTREE:=$(CPPROG) -Rfp
+endif
+ifndef MKDIRTREE
+MKDIRTREE:=$(MKDIRPROG) -p
+endif
+ifndef MOVE
+MOVE:=$(MVPROG) -f
+endif
+ifndef DEL
+DEL:=$(RMPROG) -f
+endif
+ifndef DELTREE
+DELTREE:=$(RMPROG) -rf
+endif
+ifndef INSTALL
+ifdef inUnix
+INSTALL:=$(GINSTALL) -c -m 644
+else
+INSTALL:=$(COPY)
+endif
+endif
+ifndef INSTALLEXE
+ifdef inUnix
+INSTALLEXE:=$(GINSTALL) -c -m 755
+else
+INSTALLEXE:=$(COPY)
+endif
+endif
+ifndef MKDIR
+MKDIR:=$(GINSTALL) -m 755 -d
+endif
+export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
+ifndef PPUMOVE
+PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(PPUMOVE),)
+PPUMOVE= __missing_command_PPUMOVE
+else
+PPUMOVE:=$(firstword $(PPUMOVE))
+endif
+endif
+export PPUMOVE
+ifndef FPCMAKE
+FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(FPCMAKE),)
+FPCMAKE= __missing_command_FPCMAKE
+else
+FPCMAKE:=$(firstword $(FPCMAKE))
+endif
+endif
+export FPCMAKE
+ifndef ZIPPROG
+ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ZIPPROG),)
+ZIPPROG= __missing_command_ZIPPROG
+else
+ZIPPROG:=$(firstword $(ZIPPROG))
+endif
+endif
+export ZIPPROG
+ifndef TARPROG
+TARPROG:=$(strip $(wildcard $(addsuffix /gtar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG= __missing_command_TARPROG
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+endif
+export TARPROG
+ASNAME=$(BINUTILSPREFIX)as
+LDNAME=$(BINUTILSPREFIX)ld
+ARNAME=$(BINUTILSPREFIX)ar
+RCNAME=$(BINUTILSPREFIX)rc
+ifneq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),win32)
+ifeq ($(CROSSBINDIR),)
+ASNAME=asw
+LDNAME=ldw
+ARNAME=arw
+endif
+endif
+endif
+ifndef ASPROG
+ifdef CROSSBINDIR
+ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
+else
+ASPROG=$(ASNAME)
+endif
+endif
+ifndef LDPROG
+ifdef CROSSBINDIR
+LDPROG=$(CROSSBINDIR)/$(LDNAME)$(SRCEXEEXT)
+else
+LDPROG=$(LDNAME)
+endif
+endif
+ifndef RCPROG
+ifdef CROSSBINDIR
+RCPROG=$(CROSSBINDIR)/$(RCNAME)$(SRCEXEEXT)
+else
+RCPROG=$(RCNAME)
+endif
+endif
+ifndef ARPROG
+ifdef CROSSBINDIR
+ARPROG=$(CROSSBINDIR)/$(ARNAME)$(SRCEXEEXT)
+else
+ARPROG=$(ARNAME)
+endif
+endif
+AS=$(ASPROG)
+LD=$(LDPROG)
+RC=$(RCPROG)
+AR=$(ARPROG)
+PPAS=ppas$(SRCBATCHEXT)
+ifdef inUnix
+LDCONFIG=ldconfig
+else
+LDCONFIG=
+endif
+ifdef DATE
+DATESTR:=$(shell $(DATE) +%Y%m%d)
+else
+DATESTR=
+endif
+ifndef UPXPROG
+ifeq ($(OS_TARGET),go32v2)
+UPXPROG:=1
+endif
+ifeq ($(OS_TARGET),win32)
+UPXPROG:=1
+endif
+ifdef UPXPROG
+UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(UPXPROG),)
+UPXPROG=
+else
+UPXPROG:=$(firstword $(UPXPROG))
+endif
+else
+UPXPROG=
+endif
+endif
+export UPXPROG
+ZIPOPT=-9
+ZIPEXT=.zip
+ifeq ($(USETAR),bz2)
+TAROPT=vj
+TAREXT=.tar.bz2
+else
+TAROPT=vz
+TAREXT=.tar.gz
+endif
+override REQUIRE_PACKAGES=rtl libgbafpc
+ifeq ($(FULL_TARGET),arm-gba)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifdef REQUIRE_PACKAGES_RTL
+PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_RTL),)
+ifneq ($(wildcard $(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)),)
+UNITDIR_RTL=$(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)
+else
+UNITDIR_RTL=$(PACKAGEDIR_RTL)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_RTL)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_RTL) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_RTL)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_RTL=
+UNITDIR_RTL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /rtl/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_RTL),)
+UNITDIR_RTL:=$(firstword $(UNITDIR_RTL))
+else
+UNITDIR_RTL=
+endif
+endif
+ifdef UNITDIR_RTL
+override COMPILER_UNITDIR+=$(UNITDIR_RTL)
+endif
+endif
+ifdef REQUIRE_PACKAGES_LIBGBAFPC
+PACKAGEDIR_LIBGBAFPC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /libgbafpc/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_LIBGBAFPC),)
+ifneq ($(wildcard $(PACKAGEDIR_LIBGBAFPC)/units/$(TARGETSUFFIX)),)
+UNITDIR_LIBGBAFPC=$(PACKAGEDIR_LIBGBAFPC)/units/$(TARGETSUFFIX)
+else
+UNITDIR_LIBGBAFPC=$(PACKAGEDIR_LIBGBAFPC)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_LIBGBAFPC)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_LIBGBAFPC) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_LIBGBAFPC)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_LIBGBAFPC=
+UNITDIR_LIBGBAFPC:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /libgbafpc/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_LIBGBAFPC),)
+UNITDIR_LIBGBAFPC:=$(firstword $(UNITDIR_LIBGBAFPC))
+else
+UNITDIR_LIBGBAFPC=
+endif
+endif
+ifdef UNITDIR_LIBGBAFPC
+override COMPILER_UNITDIR+=$(UNITDIR_LIBGBAFPC)
+endif
+endif
+ifndef NOCPUDEF
+override FPCOPTDEF=$(ARCH)
+endif
+ifneq ($(OS_TARGET),$(OS_SOURCE))
+override FPCOPT+=-T$(OS_TARGET)
+endif
+ifneq ($(CPU_TARGET),$(CPU_SOURCE))
+override FPCOPT+=-P$(ARCH)
+endif
+ifeq ($(OS_SOURCE),openbsd)
+override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
+endif
+ifndef CROSSBOOTSTRAP
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-XP$(BINUTILSPREFIX)
+endif
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-Xr$(RLINKPATH)
+endif
+endif
+ifdef UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
+endif
+ifdef LIBDIR
+override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
+endif
+ifdef OBJDIR
+override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
+endif
+ifdef INCDIR
+override FPCOPT+=$(addprefix -Fi,$(INCDIR))
+endif
+ifdef LINKSMART
+override FPCOPT+=-XX
+endif
+ifdef CREATESMART
+override FPCOPT+=-CX
+endif
+ifdef DEBUG
+override FPCOPT+=-gl
+override FPCOPTDEF+=DEBUG
+endif
+ifdef RELEASE
+ifneq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(CPU_TARGET),i386)
+FPCCPUOPT:=-OG2p3
+endif
+ifeq ($(CPU_TARGET),powerpc)
+FPCCPUOPT:=-O1r
+endif
+else
+FPCCPUOPT:=-O2
+endif
+override FPCOPT+=-Ur -Xs $(FPCCPUOPT) -n
+override FPCOPTDEF+=RELEASE
+endif
+ifdef STRIP
+override FPCOPT+=-Xs
+endif
+ifdef OPTIMIZE
+override FPCOPT+=-O2
+endif
+ifdef VERBOSE
+override FPCOPT+=-vwni
+endif
+ifdef COMPILER_OPTIONS
+override FPCOPT+=$(COMPILER_OPTIONS)
+endif
+ifdef COMPILER_UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(COMPILER_UNITDIR))
+endif
+ifdef COMPILER_LIBRARYDIR
+override FPCOPT+=$(addprefix -Fl,$(COMPILER_LIBRARYDIR))
+endif
+ifdef COMPILER_OBJECTDIR
+override FPCOPT+=$(addprefix -Fo,$(COMPILER_OBJECTDIR))
+endif
+ifdef COMPILER_INCLUDEDIR
+override FPCOPT+=$(addprefix -Fi,$(COMPILER_INCLUDEDIR))
+endif
+ifdef CROSSBINDIR
+override FPCOPT+=-FD$(CROSSBINDIR)
+endif
+ifdef COMPILER_TARGETDIR
+override FPCOPT+=-FE$(COMPILER_TARGETDIR)
+ifeq ($(COMPILER_TARGETDIR),.)
+override TARGETDIRPREFIX=
+else
+override TARGETDIRPREFIX=$(COMPILER_TARGETDIR)/
+endif
+endif
+ifdef COMPILER_UNITTARGETDIR
+override FPCOPT+=-FU$(COMPILER_UNITTARGETDIR)
+ifeq ($(COMPILER_UNITTARGETDIR),.)
+override UNITTARGETDIRPREFIX=
+else
+override UNITTARGETDIRPREFIX=$(COMPILER_UNITTARGETDIR)/
+endif
+else
+ifdef COMPILER_TARGETDIR
+override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR)
+override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
+endif
+endif
+ifdef CREATESHARED
+override FPCOPT+=-Cg
+ifeq ($(CPU_TARGET),i386)
+override FPCOPT+=-Aas
+endif
+endif
+ifeq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),x86_64)
+override FPCOPT+=-Cg
+endif
+endif
+endif
+ifdef LINKSHARED
+endif
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+ifdef FPCOPTDEF
+override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
+endif
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+ifdef USEENV
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+override AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(AFULL_TARGET),$(AFULL_SOURCE))
+override ACROSSCOMPILE=1
+endif
+ifdef ACROSSCOMPILE
+override FPCOPT+=$(CROSSOPT)
+endif
+override COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+ifdef RUNBATCH
+EXECPPAS:=@$(RUNBATCH) $(PPAS)
+else
+EXECPPAS:=@$(PPAS)
+endif
+endif
+endif
+.PHONY: fpc_exes
+ifndef CROSSINSTALL
+ifneq ($(TARGET_PROGRAMS),)
+override EXEFILES=$(addsuffix $(EXEEXT),$(TARGET_PROGRAMS))
+override EXEOFILES:=$(addsuffix $(OEXT),$(TARGET_PROGRAMS)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS))) $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS)))
+override ALLTARGET+=fpc_exes
+override INSTALLEXEFILES+=$(EXEFILES)
+override CLEANEXEFILES+=$(EXEFILES) $(EXEOFILES)
+ifeq ($(OS_TARGET),os2)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+ifeq ($(OS_TARGET),emx)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+endif
+endif
+fpc_exes: $(COMPILER_TARGETDIR) $(COMPILER_UNITTARGETDIR) $(EXEFILES)
+ifdef TARGET_RSTS
+override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
+override CLEANRSTFILES+=$(RSTFILES)
+endif
+.PHONY: fpc_all fpc_smart fpc_debug fpc_release fpc_shared
+$(FPCMADE): $(ALLDEPENDENCIES) $(ALLTARGET)
+	@$(ECHOREDIR) Compiled > $(FPCMADE)
+fpc_all: $(FPCMADE)
+fpc_smart:
+	$(MAKE) all LINKSMART=1 CREATESMART=1
+fpc_debug:
+	$(MAKE) all DEBUG=1
+fpc_release:
+	$(MAKE) all RELEASE=1
+.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .lpr .dpr .pp .rc .res
+$(COMPILER_UNITTARGETDIR):
+	$(MKDIRTREE) $(COMPILER_UNITTARGETDIR)
+$(COMPILER_TARGETDIR):
+	$(MKDIRTREE) $(COMPILER_TARGETDIR)
+%$(PPUEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(PPUEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.lpr
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.dpr
+	$(COMPILER) $<
+	$(EXECPPAS)
+%.res: %.rc
+	windres -i $< -o $@
+vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.lpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.inc $(COMPILER_INCLUDEDIR)
+vpath %$(OEXT) $(COMPILER_UNITTARGETDIR)
+vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)
+.PHONY: fpc_shared
+override INSTALLTARGET+=fpc_shared_install
+ifndef SHARED_LIBVERSION
+SHARED_LIBVERSION=$(FPC_VERSION)
+endif
+ifndef SHARED_LIBNAME
+SHARED_LIBNAME=$(PACKAGE_NAME)
+endif
+ifndef SHARED_FULLNAME
+SHARED_FULLNAME=$(SHAREDLIBPREFIX)$(SHARED_LIBNAME)-$(SHARED_LIBVERSION)$(SHAREDLIBEXT)
+endif
+ifndef SHARED_LIBUNITS
+SHARED_LIBUNITS:=$(TARGET_UNITS) $(TARGET_IMPLICITUNITS)
+override SHARED_LIBUNITS:=$(filter-out $(INSTALL_BUILDUNIT),$(SHARED_LIBUNITS))
+endif
+fpc_shared:
+ifdef HASSHAREDLIB
+	$(MAKE) all CREATESHARED=1 LINKSHARED=1 CREATESMART=1
+ifneq ($(SHARED_BUILD),n)
+	$(PPUMOVE) -q $(SHARED_LIBUNITS) -i$(COMPILER_UNITTARGETDIR) -o$(SHARED_FULLNAME) -d$(COMPILER_UNITTARGETDIR)
+endif
+else
+	@$(ECHO) Shared Libraries not supported
+endif
+fpc_shared_install:
+ifneq ($(SHARED_BUILD),n)
+ifneq ($(SHARED_LIBUNITS),)
+ifneq ($(wildcard $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME)),)
+	$(INSTALL) $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME) $(INSTALL_SHAREDDIR)
+endif
+endif
+endif
+.PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall
+ifdef INSTALL_UNITS
+override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(INSTALL_UNITS))
+endif
+ifdef INSTALL_BUILDUNIT
+override INSTALLPPUFILES:=$(filter-out $(INSTALL_BUILDUNIT)$(PPUEXT),$(INSTALLPPUFILES))
+endif
+ifdef INSTALLPPUFILES
+override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES)))
+ifneq ($(UNITTARGETDIRPREFIX),)
+override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPUFILES)))
+override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPULINKFILES))))
+endif
+override INSTALL_CREATEPACKAGEFPC=1
+endif
+ifdef INSTALLEXEFILES
+ifneq ($(TARGETDIRPREFIX),)
+override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(notdir $(INSTALLEXEFILES)))
+endif
+endif
+fpc_install: all $(INSTALLTARGET)
+ifdef INSTALLEXEFILES
+	$(MKDIR) $(INSTALL_BINDIR)
+ifdef UPXPROG
+	-$(UPXPROG) $(INSTALLEXEFILES)
+endif
+	$(INSTALLEXE) $(INSTALLEXEFILES) $(INSTALL_BINDIR)
+endif
+ifdef INSTALL_CREATEPACKAGEFPC
+ifdef FPCMAKE
+ifdef PACKAGE_VERSION
+ifneq ($(wildcard Makefile.fpc),)
+	$(FPCMAKE) -p -T$(CPU_TARGET)-$(OS_TARGET) Makefile.fpc
+	$(MKDIR) $(INSTALL_UNITDIR)
+	$(INSTALL) Package.fpc $(INSTALL_UNITDIR)
+endif
+endif
+endif
+endif
+ifdef INSTALLPPUFILES
+	$(MKDIR) $(INSTALL_UNITDIR)
+	$(INSTALL) $(INSTALLPPUFILES) $(INSTALL_UNITDIR)
+ifneq ($(INSTALLPPULINKFILES),)
+	$(INSTALL) $(INSTALLPPULINKFILES) $(INSTALL_UNITDIR)
+endif
+ifneq ($(wildcard $(LIB_FULLNAME)),)
+	$(MKDIR) $(INSTALL_LIBDIR)
+	$(INSTALL) $(LIB_FULLNAME) $(INSTALL_LIBDIR)
+ifdef inUnix
+	ln -sf $(LIB_FULLNAME) $(INSTALL_LIBDIR)/$(LIB_NAME)
+endif
+endif
+endif
+ifdef INSTALL_FILES
+	$(MKDIR) $(INSTALL_DATADIR)
+	$(INSTALL) $(INSTALL_FILES) $(INSTALL_DATADIR)
+endif
+fpc_sourceinstall: distclean
+	$(MKDIR) $(INSTALL_SOURCEDIR)
+	$(COPYTREE) $(BASEDIR)/* $(INSTALL_SOURCEDIR)
+fpc_exampleinstall: $(addsuffix _distclean,$(TARGET_EXAMPLEDIRS))
+ifdef HASEXAMPLES
+	$(MKDIR) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef EXAMPLESOURCEFILES
+	$(COPY) $(EXAMPLESOURCEFILES) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(COPYTREE) $(addsuffix /*,$(TARGET_EXAMPLEDIRS)) $(INSTALL_EXAMPLEDIR)
+endif
+.PHONY: fpc_clean fpc_cleanall fpc_distclean
+ifdef EXEFILES
+override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
+endif
+ifdef CLEAN_UNITS
+override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
+endif
+ifdef CLEANPPUFILES
+override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES)))
+ifdef DEBUGSYMEXT
+override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPPUFILES))
+endif
+override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
+override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES)))
+endif
+fpc_clean: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
+endif
+ifdef LIB_NAME
+	-$(DEL) $(LIB_NAME) $(LIB_FULLNAME)
+endif
+	-$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT)
+fpc_cleanall: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef COMPILER_UNITTARGETDIR
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+endif
+	-$(DELTREE) units
+	-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
+ifneq ($(PPUEXT),.ppu)
+	-$(DEL) *.o *.ppu *.a
+endif
+	-$(DELTREE) *$(SMARTEXT)
+	-$(DEL) fpcmade.* Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *_ppas$(BATCHEXT)
+ifdef AOUTEXT
+	-$(DEL) *$(AOUTEXT)
+endif
+ifdef DEBUGSYMEXT
+	-$(DEL) *$(DEBUGSYMEXT)
+endif
+fpc_distclean: cleanall
+.PHONY: fpc_baseinfo
+override INFORULES+=fpc_baseinfo
+fpc_baseinfo:
+	@$(ECHO)
+	@$(ECHO)  == Package info ==
+	@$(ECHO)  Package Name..... $(PACKAGE_NAME)
+	@$(ECHO)  Package Version.. $(PACKAGE_VERSION)
+	@$(ECHO)
+	@$(ECHO)  == Configuration info ==
+	@$(ECHO)
+	@$(ECHO)  FPC.......... $(FPC)
+	@$(ECHO)  FPC Version.. $(FPC_VERSION)
+	@$(ECHO)  Source CPU... $(CPU_SOURCE)
+	@$(ECHO)  Target CPU... $(CPU_TARGET)
+	@$(ECHO)  Source OS.... $(OS_SOURCE)
+	@$(ECHO)  Target OS.... $(OS_TARGET)
+	@$(ECHO)  Full Source.. $(FULL_SOURCE)
+	@$(ECHO)  Full Target.. $(FULL_TARGET)
+	@$(ECHO)  SourceSuffix. $(SOURCESUFFIX)
+	@$(ECHO)  TargetSuffix. $(TARGETSUFFIX)
+	@$(ECHO)
+	@$(ECHO)  == Directory info ==
+	@$(ECHO)
+	@$(ECHO)  Required pkgs... $(REQUIRE_PACKAGES)
+	@$(ECHO)
+	@$(ECHO)  Basedir......... $(BASEDIR)
+	@$(ECHO)  FPCDir.......... $(FPCDIR)
+	@$(ECHO)  CrossBinDir..... $(CROSSBINDIR)
+	@$(ECHO)  UnitsDir........ $(UNITSDIR)
+	@$(ECHO)  PackagesDir..... $(PACKAGESDIR)
+	@$(ECHO)
+	@$(ECHO)  GCC library..... $(GCCLIBDIR)
+	@$(ECHO)  Other library... $(OTHERLIBDIR)
+	@$(ECHO)
+	@$(ECHO)  == Tools info ==
+	@$(ECHO)
+	@$(ECHO)  As........ $(AS)
+	@$(ECHO)  Ld........ $(LD)
+	@$(ECHO)  Ar........ $(AR)
+	@$(ECHO)  Rc........ $(RC)
+	@$(ECHO)
+	@$(ECHO)  Mv........ $(MVPROG)
+	@$(ECHO)  Cp........ $(CPPROG)
+	@$(ECHO)  Rm........ $(RMPROG)
+	@$(ECHO)  GInstall.. $(GINSTALL)
+	@$(ECHO)  Echo...... $(ECHO)
+	@$(ECHO)  Shell..... $(SHELL)
+	@$(ECHO)  Date...... $(DATE)
+	@$(ECHO)  FPCMake... $(FPCMAKE)
+	@$(ECHO)  PPUMove... $(PPUMOVE)
+	@$(ECHO)  Upx....... $(UPXPROG)
+	@$(ECHO)  Zip....... $(ZIPPROG)
+	@$(ECHO)
+	@$(ECHO)  == Object info ==
+	@$(ECHO)
+	@$(ECHO)  Target Loaders........ $(TARGET_LOADERS)
+	@$(ECHO)  Target Units.......... $(TARGET_UNITS)
+	@$(ECHO)  Target Implicit Units. $(TARGET_IMPLICITUNITS)
+	@$(ECHO)  Target Programs....... $(TARGET_PROGRAMS)
+	@$(ECHO)  Target Dirs........... $(TARGET_DIRS)
+	@$(ECHO)  Target Examples....... $(TARGET_EXAMPLES)
+	@$(ECHO)  Target ExampleDirs.... $(TARGET_EXAMPLEDIRS)
+	@$(ECHO)
+	@$(ECHO)  Clean Units......... $(CLEAN_UNITS)
+	@$(ECHO)  Clean Files......... $(CLEAN_FILES)
+	@$(ECHO)
+	@$(ECHO)  Install Units....... $(INSTALL_UNITS)
+	@$(ECHO)  Install Files....... $(INSTALL_FILES)
+	@$(ECHO)
+	@$(ECHO)  == Install info ==
+	@$(ECHO)
+	@$(ECHO)  DateStr.............. $(DATESTR)
+	@$(ECHO)  ZipName.............. $(ZIPNAME)
+	@$(ECHO)  ZipPrefix............ $(ZIPPREFIX)
+	@$(ECHO)  ZipCrossPrefix....... $(ZIPCROSSPREFIX)
+	@$(ECHO)  ZipSuffix............ $(ZIPSUFFIX)
+	@$(ECHO)  FullZipName.......... $(FULLZIPNAME)
+	@$(ECHO)  Install FPC Package.. $(INSTALL_FPCPACKAGE)
+	@$(ECHO)
+	@$(ECHO)  Install base dir..... $(INSTALL_BASEDIR)
+	@$(ECHO)  Install binary dir... $(INSTALL_BINDIR)
+	@$(ECHO)  Install library dir.. $(INSTALL_LIBDIR)
+	@$(ECHO)  Install units dir.... $(INSTALL_UNITDIR)
+	@$(ECHO)  Install source dir... $(INSTALL_SOURCEDIR)
+	@$(ECHO)  Install doc dir...... $(INSTALL_DOCDIR)
+	@$(ECHO)  Install example dir.. $(INSTALL_EXAMPLEDIR)
+	@$(ECHO)  Install data dir..... $(INSTALL_DATADIR)
+	@$(ECHO)
+	@$(ECHO)  Dist destination dir. $(DIST_DESTDIR)
+	@$(ECHO)  Dist zip name........ $(DIST_ZIPNAME)
+	@$(ECHO)
+.PHONY: fpc_info
+fpc_info: $(INFORULES)
+.PHONY: fpc_makefile fpc_makefiles fpc_makefile_sub1 fpc_makefile_sub2 \
+	fpc_makefile_dirs
+fpc_makefile:
+	$(FPCMAKE) -w -T$(OS_TARGET) Makefile.fpc
+fpc_makefile_sub1:
+ifdef TARGET_DIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_DIRS))
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_EXAMPLEDIRS))
+endif
+fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS))
+fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
+fpc_makefiles: fpc_makefile fpc_makefile_dirs
+all: fpc_all
+debug: fpc_debug
+smart: fpc_smart
+release: fpc_release
+units: fpc_units
+examples:
+shared: fpc_shared
+install: fpc_install
+sourceinstall: fpc_sourceinstall
+exampleinstall: fpc_exampleinstall
+distinstall:
+zipinstall:
+zipsourceinstall:
+zipexampleinstall:
+zipdistinstall:
+clean: fpc_clean
+distclean: fpc_distclean
+cleanall: fpc_cleanall
+info: fpc_info
+makefiles: fpc_makefiles
+.PHONY: all debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall clean distclean cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+.NOTPARALLEL:

+ 26 - 0
packages/libgbafpc/examples/devkitPro/graphics/ansi_console/Makefile.fpc

@@ -0,0 +1,26 @@
+#
+#   Makefile.fpc for Free Pascal libgbafpc 2.x.y Examples
+#
+
+[target]
+programs=console
+
+[require]
+packages=libgbafpc
+
+[install]
+fpcpackage=y
+
+[default]
+cpu=arm
+target=gba
+fpcdir=../../../../..
+
+[clean]
+files=*.elf
+units=*
+
+[prerules]
+
+[rules]
+.NOTPARALLEL:

+ 60 - 0
packages/libgbafpc/examples/devkitPro/graphics/ansi_console/console.pp

@@ -0,0 +1,60 @@
+program console;
+
+uses
+  gba;
+
+begin
+  // the vblank interrupt must be enabled for VBlankIntrWait() to work
+  // since the default dispatcher handles the bios flags no vblank handler
+  // is required
+  irqInit();
+  
+  irqEnable(IRQ_VBLANK);
+  
+  // initialise the console
+  // setting NULL & 0 for the font address & size uses the default font
+  // The font should be a complete 1bit 8x8 ASCII font
+  consoleInit(  0,		// charbase
+                4,		// mapbase
+                0,		// background number
+                nil,	// font
+                0, 		// font size
+                15		// 16 color palette
+             );
+
+  // set the screen colors, color 0 is the background color
+  // the foreground color is index 1 of the selected 16 color palette
+  BG_COLORS[0] := RGB8(58,110,165);
+  BG_COLORS[241] := RGB5(31,31,31);
+  
+  SetMode(MODE_0 or BG0_ON);
+  
+  // ansi escape sequence to clear screen and home cursor
+  // /x1b[line;columnH
+  iprintf(#27'[2J');
+  
+  // ansi escape sequence to set print co-ordinates
+  // /x1b[line;columnH
+  iprintf(#27'[10;10H' + 'Hello World!');
+  
+  // ansi escape sequence to move cursor up
+  // /x1b[linesA
+  iprintf(#27'[10A' + 'Line 0');
+  
+  // ansi escape sequence to move cursor left
+  // /x1b[columnsD
+  iprintf(#27'[28D' + 'Column 0');
+  
+  // ansi escape sequence to move cursor down
+  // /x1b[linesB
+  iprintf(#27'[19B' + 'Line 19');
+  
+  // ansi escape sequence to move cursor right
+  // /x1b[columnsC
+  iprintf(#27'[5C' + 'Column 20');
+  
+  while true do
+    VBlankIntrWait();
+  
+end.
+

+ 1600 - 0
packages/libgbafpc/examples/devkitPro/template/Makefile

@@ -0,0 +1,1600 @@
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/04/20]
+#
+default: all
+MAKEFILETARGETS=arm-gba
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) solaris qnx
+LIMIT83fs = go32v2 os2 emx watcom
+OSNeedsComspecToRunBatch = go32v2 watcom
+FORCE:
+.PHONY: FORCE
+override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
+ifneq ($(findstring darwin,$(OSTYPE)),)
+inUnix=1 #darwin
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+endif
+SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifdef inUnix
+SRCBATCHEXT=.sh
+else
+ifdef inOS2
+SRCBATCHEXT=.cmd
+else
+SRCBATCHEXT=.bat
+endif
+endif
+ifdef COMSPEC
+ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
+RUNBATCH=$(COMSPEC) /C
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+override OS_TARGET_DEFAULT=gba
+override CPU_TARGET_DEFAULT=arm
+override DEFAULT_FPCDIR=../../../..
+ifndef FPC
+ifdef PP
+FPC=$(PP)
+endif
+endif
+ifndef FPC
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+ifneq ($(CPU_TARGET),)
+FPC:=$(shell $(FPCPROG) -P$(CPU_TARGET) -PB)
+else
+FPC:=$(shell $(FPCPROG) -PB)
+endif
+ifneq ($(findstring Error,$(FPC)),)
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+else
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+endif
+override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
+override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
+FOUNDFPC:=$(strip $(wildcard $(FPC)))
+ifeq ($(FOUNDFPC),)
+FOUNDFPC=$(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))
+ifeq ($(FOUNDFPC),)
+$(error Compiler $(FPC) not found)
+endif
+endif
+ifndef FPC_COMPILERINFO
+FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO)
+endif
+ifndef FPC_VERSION
+FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO))
+endif
+export FPC FPC_VERSION FPC_COMPILERINFO
+unexport CHECKDEPEND ALLDEPENDENCIES
+ifndef CPU_TARGET
+ifdef CPU_TARGET_DEFAULT
+CPU_TARGET=$(CPU_TARGET_DEFAULT)
+endif
+endif
+ifndef OS_TARGET
+ifdef OS_TARGET_DEFAULT
+OS_TARGET=$(OS_TARGET_DEFAULT)
+endif
+endif
+ifneq ($(words $(FPC_COMPILERINFO)),5)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSO)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTO)
+endif
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(word 2,$(FPC_COMPILERINFO))
+endif
+ifndef CPU_TARGET
+CPU_TARGET:=$(word 3,$(FPC_COMPILERINFO))
+endif
+ifndef OS_SOURCE
+OS_SOURCE:=$(word 4,$(FPC_COMPILERINFO))
+endif
+ifndef OS_TARGET
+OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
+endif
+FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifeq ($(CPU_TARGET),armeb)
+ARCH=arm
+override FPCOPT+=-Cb
+else
+ifeq ($(CPU_TARGET),armel)
+ARCH=arm
+override FPCOPT+=-CaEABI
+else
+ARCH=$(CPU_TARGET)
+endif
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+SOURCESUFFIX=$(OS_SOURCE)
+else
+TARGETSUFFIX=$(FULL_TARGET)
+SOURCESUFFIX=$(FULL_SOURCE)
+endif
+ifneq ($(FULL_TARGET),$(FULL_SOURCE))
+CROSSCOMPILE=1
+endif
+ifeq ($(findstring makefile,$(MAKECMDGOALS)),)
+ifeq ($(findstring $(FULL_TARGET),$(MAKEFILETARGETS)),)
+$(error The Makefile doesn't support target $(FULL_TARGET), please run fpcmake first)
+endif
+endif
+ifneq ($(findstring $(OS_TARGET),$(BSDs)),)
+BSDhier=1
+endif
+ifeq ($(OS_TARGET),linux)
+linuxHier=1
+endif
+export OS_TARGET OS_SOURCE ARCH CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
+ifdef FPCDIR
+override FPCDIR:=$(subst \,/,$(FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+else
+override FPCDIR=wrong
+endif
+ifdef DEFAULT_FPCDIR
+ifeq ($(FPCDIR),wrong)
+override FPCDIR:=$(subst \,/,$(DEFAULT_FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+endif
+endif
+ifeq ($(FPCDIR),wrong)
+ifdef inUnix
+override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
+endif
+else
+override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))))
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(BASEDIR)
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=c:/pp
+endif
+endif
+endif
+endif
+endif
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(FPCDIR)/bin/$(TARGETSUFFIX))
+endif
+ifndef BINUTILSPREFIX
+ifndef CROSSBINDIR
+ifdef CROSSCOMPILE
+BINUTILSPREFIX=$(CPU_TARGET)-$(OS_TARGET)-
+endif
+endif
+endif
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(TARGETSUFFIX))
+ifeq ($(UNITSDIR),)
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
+endif
+PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_PROGRAMS+=template
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override CLEAN_UNITS+=*
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override CLEAN_FILES+=*.elf
+endif
+override INSTALL_FPCPACKAGE=y
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=1
+endif
+else
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXHier
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef COMPILER_UNITTARGETDIR
+ifdef PACKAGEDIR_MAIN
+COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
+else
+COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
+endif
+endif
+ifndef COMPILER_TARGETDIR
+COMPILER_TARGETDIR=.
+endif
+ifndef INSTALL_BASEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXHier
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+ifdef CROSSCOMPILE
+ifdef CROSSINSTALL
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXHier
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXHier
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+ifdef linuxHier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+ifdef UNIXHier
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+ifdef linuxHier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+endif
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifndef INSTALL_SHAREDDIR
+INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+SHAREDLIBPREFIX=libfp
+STATICLIBPREFIX=libp
+IMPORTLIBPREFIX=libimp
+RSTEXT=.rst
+ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),go32v1)
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+OEXT=.obj
+ASMEXT=.asm
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=wat
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),emx)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=emx
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),morphos)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=mos
+endif
+ifeq ($(OS_TARGET),atari)
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nw
+endif
+ifeq ($(OS_TARGET),netwlibc)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nwl
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+endif
+ifeq ($(OS_TARGET),darwin)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=dwn
+endif
+ifeq ($(OS_TARGET),gba)
+EXEEXT=.gba
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gba
+endif
+ifeq ($(OS_TARGET),nds)
+EXEEXT=.nds
+SHAREDLIBEXT=.so
+SHORTSUFFIX=nds
+endif
+ifeq ($(OS_TARGET),gamecube)
+EXEEXT=.dol
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gamecube
+endif
+ifeq ($(OS_TARGET),wii)
+EXEEXT=.dol
+SHAREDLIBEXT=.so
+SHORTSUFFIX=wii
+endif
+ifeq ($(OS_TARGET),symbian)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=symbian
+endif
+else
+ifeq ($(OS_TARGET),go32v1)
+PPUEXT=.pp1
+OEXT=.o1
+ASMEXT=.s1
+SMARTEXT=.sl1
+STATICLIBEXT=.a1
+SHAREDLIBEXT=.so1
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+SHORTSUFFIX=wat
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+PPUEXT=.ppw
+OEXT=.ow
+ASMEXT=.sw
+SMARTEXT=.slw
+STATICLIBEXT=.aw
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+PPUEXT=.ppo
+ASMEXT=.so2
+OEXT=.oo2
+AOUTEXT=.out
+SMARTEXT=.sl2
+STATICLIBPREFIX=
+STATICLIBEXT=.ao2
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),atari)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nw
+endif
+ifeq ($(OS_TARGET),netwlibc)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nwl
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+endif
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+FPCMADE=fpcmade.$(SHORTSUFFIX)
+ZIPSUFFIX=$(SHORTSUFFIX)
+ZIPCROSSPREFIX=
+ZIPSOURCESUFFIX=src
+ZIPEXAMPLESUFFIX=exm
+else
+FPCMADE=fpcmade.$(TARGETSUFFIX)
+ZIPSOURCESUFFIX=.source
+ZIPEXAMPLESUFFIX=.examples
+ifdef CROSSCOMPILE
+ZIPSUFFIX=.$(SOURCESUFFIX)
+ZIPCROSSPREFIX=$(TARGETSUFFIX)-
+else
+ZIPSUFFIX=.$(TARGETSUFFIX)
+ZIPCROSSPREFIX=
+endif
+endif
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO= __missing_command_ECHO
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+ifndef DATE
+DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE= __missing_command_DATE
+else
+DATE:=$(firstword $(DATE))
+endif
+else
+DATE:=$(firstword $(DATE))
+endif
+endif
+export DATE
+ifndef GINSTALL
+GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL= __missing_command_GINSTALL
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+endif
+export GINSTALL
+ifndef CPPROG
+CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(CPPROG),)
+CPPROG= __missing_command_CPPROG
+else
+CPPROG:=$(firstword $(CPPROG))
+endif
+endif
+export CPPROG
+ifndef RMPROG
+RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(RMPROG),)
+RMPROG= __missing_command_RMPROG
+else
+RMPROG:=$(firstword $(RMPROG))
+endif
+endif
+export RMPROG
+ifndef MVPROG
+MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MVPROG),)
+MVPROG= __missing_command_MVPROG
+else
+MVPROG:=$(firstword $(MVPROG))
+endif
+endif
+export MVPROG
+ifndef MKDIRPROG
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /gmkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /mkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG= __missing_command_MKDIRPROG
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+endif
+export MKDIRPROG
+ifndef ECHOREDIR
+ifndef inUnix
+ECHOREDIR=echo
+else
+ECHOREDIR=$(ECHO)
+endif
+endif
+ifndef COPY
+COPY:=$(CPPROG) -fp
+endif
+ifndef COPYTREE
+COPYTREE:=$(CPPROG) -Rfp
+endif
+ifndef MKDIRTREE
+MKDIRTREE:=$(MKDIRPROG) -p
+endif
+ifndef MOVE
+MOVE:=$(MVPROG) -f
+endif
+ifndef DEL
+DEL:=$(RMPROG) -f
+endif
+ifndef DELTREE
+DELTREE:=$(RMPROG) -rf
+endif
+ifndef INSTALL
+ifdef inUnix
+INSTALL:=$(GINSTALL) -c -m 644
+else
+INSTALL:=$(COPY)
+endif
+endif
+ifndef INSTALLEXE
+ifdef inUnix
+INSTALLEXE:=$(GINSTALL) -c -m 755
+else
+INSTALLEXE:=$(COPY)
+endif
+endif
+ifndef MKDIR
+MKDIR:=$(GINSTALL) -m 755 -d
+endif
+export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
+ifndef PPUMOVE
+PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(PPUMOVE),)
+PPUMOVE= __missing_command_PPUMOVE
+else
+PPUMOVE:=$(firstword $(PPUMOVE))
+endif
+endif
+export PPUMOVE
+ifndef FPCMAKE
+FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(FPCMAKE),)
+FPCMAKE= __missing_command_FPCMAKE
+else
+FPCMAKE:=$(firstword $(FPCMAKE))
+endif
+endif
+export FPCMAKE
+ifndef ZIPPROG
+ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ZIPPROG),)
+ZIPPROG= __missing_command_ZIPPROG
+else
+ZIPPROG:=$(firstword $(ZIPPROG))
+endif
+endif
+export ZIPPROG
+ifndef TARPROG
+TARPROG:=$(strip $(wildcard $(addsuffix /gtar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG= __missing_command_TARPROG
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+endif
+export TARPROG
+ASNAME=$(BINUTILSPREFIX)as
+LDNAME=$(BINUTILSPREFIX)ld
+ARNAME=$(BINUTILSPREFIX)ar
+RCNAME=$(BINUTILSPREFIX)rc
+ifneq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),win32)
+ifeq ($(CROSSBINDIR),)
+ASNAME=asw
+LDNAME=ldw
+ARNAME=arw
+endif
+endif
+endif
+ifndef ASPROG
+ifdef CROSSBINDIR
+ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
+else
+ASPROG=$(ASNAME)
+endif
+endif
+ifndef LDPROG
+ifdef CROSSBINDIR
+LDPROG=$(CROSSBINDIR)/$(LDNAME)$(SRCEXEEXT)
+else
+LDPROG=$(LDNAME)
+endif
+endif
+ifndef RCPROG
+ifdef CROSSBINDIR
+RCPROG=$(CROSSBINDIR)/$(RCNAME)$(SRCEXEEXT)
+else
+RCPROG=$(RCNAME)
+endif
+endif
+ifndef ARPROG
+ifdef CROSSBINDIR
+ARPROG=$(CROSSBINDIR)/$(ARNAME)$(SRCEXEEXT)
+else
+ARPROG=$(ARNAME)
+endif
+endif
+AS=$(ASPROG)
+LD=$(LDPROG)
+RC=$(RCPROG)
+AR=$(ARPROG)
+PPAS=ppas$(SRCBATCHEXT)
+ifdef inUnix
+LDCONFIG=ldconfig
+else
+LDCONFIG=
+endif
+ifdef DATE
+DATESTR:=$(shell $(DATE) +%Y%m%d)
+else
+DATESTR=
+endif
+ifndef UPXPROG
+ifeq ($(OS_TARGET),go32v2)
+UPXPROG:=1
+endif
+ifeq ($(OS_TARGET),win32)
+UPXPROG:=1
+endif
+ifdef UPXPROG
+UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(UPXPROG),)
+UPXPROG=
+else
+UPXPROG:=$(firstword $(UPXPROG))
+endif
+else
+UPXPROG=
+endif
+endif
+export UPXPROG
+ZIPOPT=-9
+ZIPEXT=.zip
+ifeq ($(USETAR),bz2)
+TAROPT=vj
+TAREXT=.tar.bz2
+else
+TAROPT=vz
+TAREXT=.tar.gz
+endif
+override REQUIRE_PACKAGES=rtl libgbafpc
+ifeq ($(FULL_TARGET),arm-gba)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_LIBGBAFPC=1
+endif
+ifdef REQUIRE_PACKAGES_RTL
+PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_RTL),)
+ifneq ($(wildcard $(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)),)
+UNITDIR_RTL=$(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)
+else
+UNITDIR_RTL=$(PACKAGEDIR_RTL)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_RTL)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_RTL) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_RTL)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_RTL=
+UNITDIR_RTL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /rtl/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_RTL),)
+UNITDIR_RTL:=$(firstword $(UNITDIR_RTL))
+else
+UNITDIR_RTL=
+endif
+endif
+ifdef UNITDIR_RTL
+override COMPILER_UNITDIR+=$(UNITDIR_RTL)
+endif
+endif
+ifdef REQUIRE_PACKAGES_LIBGBAFPC
+PACKAGEDIR_LIBGBAFPC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /libgbafpc/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_LIBGBAFPC),)
+ifneq ($(wildcard $(PACKAGEDIR_LIBGBAFPC)/units/$(TARGETSUFFIX)),)
+UNITDIR_LIBGBAFPC=$(PACKAGEDIR_LIBGBAFPC)/units/$(TARGETSUFFIX)
+else
+UNITDIR_LIBGBAFPC=$(PACKAGEDIR_LIBGBAFPC)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_LIBGBAFPC)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_LIBGBAFPC) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_LIBGBAFPC)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_LIBGBAFPC=
+UNITDIR_LIBGBAFPC:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /libgbafpc/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_LIBGBAFPC),)
+UNITDIR_LIBGBAFPC:=$(firstword $(UNITDIR_LIBGBAFPC))
+else
+UNITDIR_LIBGBAFPC=
+endif
+endif
+ifdef UNITDIR_LIBGBAFPC
+override COMPILER_UNITDIR+=$(UNITDIR_LIBGBAFPC)
+endif
+endif
+ifndef NOCPUDEF
+override FPCOPTDEF=$(ARCH)
+endif
+ifneq ($(OS_TARGET),$(OS_SOURCE))
+override FPCOPT+=-T$(OS_TARGET)
+endif
+ifneq ($(CPU_TARGET),$(CPU_SOURCE))
+override FPCOPT+=-P$(ARCH)
+endif
+ifeq ($(OS_SOURCE),openbsd)
+override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
+endif
+ifndef CROSSBOOTSTRAP
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-XP$(BINUTILSPREFIX)
+endif
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-Xr$(RLINKPATH)
+endif
+endif
+ifdef UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
+endif
+ifdef LIBDIR
+override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
+endif
+ifdef OBJDIR
+override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
+endif
+ifdef INCDIR
+override FPCOPT+=$(addprefix -Fi,$(INCDIR))
+endif
+ifdef LINKSMART
+override FPCOPT+=-XX
+endif
+ifdef CREATESMART
+override FPCOPT+=-CX
+endif
+ifdef DEBUG
+override FPCOPT+=-gl
+override FPCOPTDEF+=DEBUG
+endif
+ifdef RELEASE
+ifneq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(CPU_TARGET),i386)
+FPCCPUOPT:=-OG2p3
+endif
+ifeq ($(CPU_TARGET),powerpc)
+FPCCPUOPT:=-O1r
+endif
+else
+FPCCPUOPT:=-O2
+endif
+override FPCOPT+=-Ur -Xs $(FPCCPUOPT) -n
+override FPCOPTDEF+=RELEASE
+endif
+ifdef STRIP
+override FPCOPT+=-Xs
+endif
+ifdef OPTIMIZE
+override FPCOPT+=-O2
+endif
+ifdef VERBOSE
+override FPCOPT+=-vwni
+endif
+ifdef COMPILER_OPTIONS
+override FPCOPT+=$(COMPILER_OPTIONS)
+endif
+ifdef COMPILER_UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(COMPILER_UNITDIR))
+endif
+ifdef COMPILER_LIBRARYDIR
+override FPCOPT+=$(addprefix -Fl,$(COMPILER_LIBRARYDIR))
+endif
+ifdef COMPILER_OBJECTDIR
+override FPCOPT+=$(addprefix -Fo,$(COMPILER_OBJECTDIR))
+endif
+ifdef COMPILER_INCLUDEDIR
+override FPCOPT+=$(addprefix -Fi,$(COMPILER_INCLUDEDIR))
+endif
+ifdef CROSSBINDIR
+override FPCOPT+=-FD$(CROSSBINDIR)
+endif
+ifdef COMPILER_TARGETDIR
+override FPCOPT+=-FE$(COMPILER_TARGETDIR)
+ifeq ($(COMPILER_TARGETDIR),.)
+override TARGETDIRPREFIX=
+else
+override TARGETDIRPREFIX=$(COMPILER_TARGETDIR)/
+endif
+endif
+ifdef COMPILER_UNITTARGETDIR
+override FPCOPT+=-FU$(COMPILER_UNITTARGETDIR)
+ifeq ($(COMPILER_UNITTARGETDIR),.)
+override UNITTARGETDIRPREFIX=
+else
+override UNITTARGETDIRPREFIX=$(COMPILER_UNITTARGETDIR)/
+endif
+else
+ifdef COMPILER_TARGETDIR
+override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR)
+override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
+endif
+endif
+ifdef CREATESHARED
+override FPCOPT+=-Cg
+ifeq ($(CPU_TARGET),i386)
+override FPCOPT+=-Aas
+endif
+endif
+ifeq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),x86_64)
+override FPCOPT+=-Cg
+endif
+endif
+endif
+ifdef LINKSHARED
+endif
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+ifdef FPCOPTDEF
+override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
+endif
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+ifdef USEENV
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+override AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(AFULL_TARGET),$(AFULL_SOURCE))
+override ACROSSCOMPILE=1
+endif
+ifdef ACROSSCOMPILE
+override FPCOPT+=$(CROSSOPT)
+endif
+override COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+ifdef RUNBATCH
+EXECPPAS:=@$(RUNBATCH) $(PPAS)
+else
+EXECPPAS:=@$(PPAS)
+endif
+endif
+endif
+.PHONY: fpc_exes
+ifndef CROSSINSTALL
+ifneq ($(TARGET_PROGRAMS),)
+override EXEFILES=$(addsuffix $(EXEEXT),$(TARGET_PROGRAMS))
+override EXEOFILES:=$(addsuffix $(OEXT),$(TARGET_PROGRAMS)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS))) $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS)))
+override ALLTARGET+=fpc_exes
+override INSTALLEXEFILES+=$(EXEFILES)
+override CLEANEXEFILES+=$(EXEFILES) $(EXEOFILES)
+ifeq ($(OS_TARGET),os2)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+ifeq ($(OS_TARGET),emx)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+endif
+endif
+fpc_exes: $(COMPILER_TARGETDIR) $(COMPILER_UNITTARGETDIR) $(EXEFILES)
+ifdef TARGET_RSTS
+override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
+override CLEANRSTFILES+=$(RSTFILES)
+endif
+.PHONY: fpc_all fpc_smart fpc_debug fpc_release fpc_shared
+$(FPCMADE): $(ALLDEPENDENCIES) $(ALLTARGET)
+	@$(ECHOREDIR) Compiled > $(FPCMADE)
+fpc_all: $(FPCMADE)
+fpc_smart:
+	$(MAKE) all LINKSMART=1 CREATESMART=1
+fpc_debug:
+	$(MAKE) all DEBUG=1
+fpc_release:
+	$(MAKE) all RELEASE=1
+.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .lpr .dpr .pp .rc .res
+$(COMPILER_UNITTARGETDIR):
+	$(MKDIRTREE) $(COMPILER_UNITTARGETDIR)
+$(COMPILER_TARGETDIR):
+	$(MKDIRTREE) $(COMPILER_TARGETDIR)
+%$(PPUEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(PPUEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.lpr
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.dpr
+	$(COMPILER) $<
+	$(EXECPPAS)
+%.res: %.rc
+	windres -i $< -o $@
+vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.lpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.inc $(COMPILER_INCLUDEDIR)
+vpath %$(OEXT) $(COMPILER_UNITTARGETDIR)
+vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)
+.PHONY: fpc_shared
+override INSTALLTARGET+=fpc_shared_install
+ifndef SHARED_LIBVERSION
+SHARED_LIBVERSION=$(FPC_VERSION)
+endif
+ifndef SHARED_LIBNAME
+SHARED_LIBNAME=$(PACKAGE_NAME)
+endif
+ifndef SHARED_FULLNAME
+SHARED_FULLNAME=$(SHAREDLIBPREFIX)$(SHARED_LIBNAME)-$(SHARED_LIBVERSION)$(SHAREDLIBEXT)
+endif
+ifndef SHARED_LIBUNITS
+SHARED_LIBUNITS:=$(TARGET_UNITS) $(TARGET_IMPLICITUNITS)
+override SHARED_LIBUNITS:=$(filter-out $(INSTALL_BUILDUNIT),$(SHARED_LIBUNITS))
+endif
+fpc_shared:
+ifdef HASSHAREDLIB
+	$(MAKE) all CREATESHARED=1 LINKSHARED=1 CREATESMART=1
+ifneq ($(SHARED_BUILD),n)
+	$(PPUMOVE) -q $(SHARED_LIBUNITS) -i$(COMPILER_UNITTARGETDIR) -o$(SHARED_FULLNAME) -d$(COMPILER_UNITTARGETDIR)
+endif
+else
+	@$(ECHO) Shared Libraries not supported
+endif
+fpc_shared_install:
+ifneq ($(SHARED_BUILD),n)
+ifneq ($(SHARED_LIBUNITS),)
+ifneq ($(wildcard $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME)),)
+	$(INSTALL) $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME) $(INSTALL_SHAREDDIR)
+endif
+endif
+endif
+.PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall
+ifdef INSTALL_UNITS
+override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(INSTALL_UNITS))
+endif
+ifdef INSTALL_BUILDUNIT
+override INSTALLPPUFILES:=$(filter-out $(INSTALL_BUILDUNIT)$(PPUEXT),$(INSTALLPPUFILES))
+endif
+ifdef INSTALLPPUFILES
+override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES)))
+ifneq ($(UNITTARGETDIRPREFIX),)
+override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPUFILES)))
+override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPULINKFILES))))
+endif
+override INSTALL_CREATEPACKAGEFPC=1
+endif
+ifdef INSTALLEXEFILES
+ifneq ($(TARGETDIRPREFIX),)
+override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(notdir $(INSTALLEXEFILES)))
+endif
+endif
+fpc_install: all $(INSTALLTARGET)
+ifdef INSTALLEXEFILES
+	$(MKDIR) $(INSTALL_BINDIR)
+ifdef UPXPROG
+	-$(UPXPROG) $(INSTALLEXEFILES)
+endif
+	$(INSTALLEXE) $(INSTALLEXEFILES) $(INSTALL_BINDIR)
+endif
+ifdef INSTALL_CREATEPACKAGEFPC
+ifdef FPCMAKE
+ifdef PACKAGE_VERSION
+ifneq ($(wildcard Makefile.fpc),)
+	$(FPCMAKE) -p -T$(CPU_TARGET)-$(OS_TARGET) Makefile.fpc
+	$(MKDIR) $(INSTALL_UNITDIR)
+	$(INSTALL) Package.fpc $(INSTALL_UNITDIR)
+endif
+endif
+endif
+endif
+ifdef INSTALLPPUFILES
+	$(MKDIR) $(INSTALL_UNITDIR)
+	$(INSTALL) $(INSTALLPPUFILES) $(INSTALL_UNITDIR)
+ifneq ($(INSTALLPPULINKFILES),)
+	$(INSTALL) $(INSTALLPPULINKFILES) $(INSTALL_UNITDIR)
+endif
+ifneq ($(wildcard $(LIB_FULLNAME)),)
+	$(MKDIR) $(INSTALL_LIBDIR)
+	$(INSTALL) $(LIB_FULLNAME) $(INSTALL_LIBDIR)
+ifdef inUnix
+	ln -sf $(LIB_FULLNAME) $(INSTALL_LIBDIR)/$(LIB_NAME)
+endif
+endif
+endif
+ifdef INSTALL_FILES
+	$(MKDIR) $(INSTALL_DATADIR)
+	$(INSTALL) $(INSTALL_FILES) $(INSTALL_DATADIR)
+endif
+fpc_sourceinstall: distclean
+	$(MKDIR) $(INSTALL_SOURCEDIR)
+	$(COPYTREE) $(BASEDIR)/* $(INSTALL_SOURCEDIR)
+fpc_exampleinstall: $(addsuffix _distclean,$(TARGET_EXAMPLEDIRS))
+ifdef HASEXAMPLES
+	$(MKDIR) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef EXAMPLESOURCEFILES
+	$(COPY) $(EXAMPLESOURCEFILES) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(COPYTREE) $(addsuffix /*,$(TARGET_EXAMPLEDIRS)) $(INSTALL_EXAMPLEDIR)
+endif
+.PHONY: fpc_clean fpc_cleanall fpc_distclean
+ifdef EXEFILES
+override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
+endif
+ifdef CLEAN_UNITS
+override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
+endif
+ifdef CLEANPPUFILES
+override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES)))
+ifdef DEBUGSYMEXT
+override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPPUFILES))
+endif
+override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
+override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES)))
+endif
+fpc_clean: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
+endif
+ifdef LIB_NAME
+	-$(DEL) $(LIB_NAME) $(LIB_FULLNAME)
+endif
+	-$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT)
+fpc_cleanall: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef COMPILER_UNITTARGETDIR
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+endif
+	-$(DELTREE) units
+	-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
+ifneq ($(PPUEXT),.ppu)
+	-$(DEL) *.o *.ppu *.a
+endif
+	-$(DELTREE) *$(SMARTEXT)
+	-$(DEL) fpcmade.* Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *_ppas$(BATCHEXT)
+ifdef AOUTEXT
+	-$(DEL) *$(AOUTEXT)
+endif
+ifdef DEBUGSYMEXT
+	-$(DEL) *$(DEBUGSYMEXT)
+endif
+fpc_distclean: cleanall
+.PHONY: fpc_baseinfo
+override INFORULES+=fpc_baseinfo
+fpc_baseinfo:
+	@$(ECHO)
+	@$(ECHO)  == Package info ==
+	@$(ECHO)  Package Name..... $(PACKAGE_NAME)
+	@$(ECHO)  Package Version.. $(PACKAGE_VERSION)
+	@$(ECHO)
+	@$(ECHO)  == Configuration info ==
+	@$(ECHO)
+	@$(ECHO)  FPC.......... $(FPC)
+	@$(ECHO)  FPC Version.. $(FPC_VERSION)
+	@$(ECHO)  Source CPU... $(CPU_SOURCE)
+	@$(ECHO)  Target CPU... $(CPU_TARGET)
+	@$(ECHO)  Source OS.... $(OS_SOURCE)
+	@$(ECHO)  Target OS.... $(OS_TARGET)
+	@$(ECHO)  Full Source.. $(FULL_SOURCE)
+	@$(ECHO)  Full Target.. $(FULL_TARGET)
+	@$(ECHO)  SourceSuffix. $(SOURCESUFFIX)
+	@$(ECHO)  TargetSuffix. $(TARGETSUFFIX)
+	@$(ECHO)
+	@$(ECHO)  == Directory info ==
+	@$(ECHO)
+	@$(ECHO)  Required pkgs... $(REQUIRE_PACKAGES)
+	@$(ECHO)
+	@$(ECHO)  Basedir......... $(BASEDIR)
+	@$(ECHO)  FPCDir.......... $(FPCDIR)
+	@$(ECHO)  CrossBinDir..... $(CROSSBINDIR)
+	@$(ECHO)  UnitsDir........ $(UNITSDIR)
+	@$(ECHO)  PackagesDir..... $(PACKAGESDIR)
+	@$(ECHO)
+	@$(ECHO)  GCC library..... $(GCCLIBDIR)
+	@$(ECHO)  Other library... $(OTHERLIBDIR)
+	@$(ECHO)
+	@$(ECHO)  == Tools info ==
+	@$(ECHO)
+	@$(ECHO)  As........ $(AS)
+	@$(ECHO)  Ld........ $(LD)
+	@$(ECHO)  Ar........ $(AR)
+	@$(ECHO)  Rc........ $(RC)
+	@$(ECHO)
+	@$(ECHO)  Mv........ $(MVPROG)
+	@$(ECHO)  Cp........ $(CPPROG)
+	@$(ECHO)  Rm........ $(RMPROG)
+	@$(ECHO)  GInstall.. $(GINSTALL)
+	@$(ECHO)  Echo...... $(ECHO)
+	@$(ECHO)  Shell..... $(SHELL)
+	@$(ECHO)  Date...... $(DATE)
+	@$(ECHO)  FPCMake... $(FPCMAKE)
+	@$(ECHO)  PPUMove... $(PPUMOVE)
+	@$(ECHO)  Upx....... $(UPXPROG)
+	@$(ECHO)  Zip....... $(ZIPPROG)
+	@$(ECHO)
+	@$(ECHO)  == Object info ==
+	@$(ECHO)
+	@$(ECHO)  Target Loaders........ $(TARGET_LOADERS)
+	@$(ECHO)  Target Units.......... $(TARGET_UNITS)
+	@$(ECHO)  Target Implicit Units. $(TARGET_IMPLICITUNITS)
+	@$(ECHO)  Target Programs....... $(TARGET_PROGRAMS)
+	@$(ECHO)  Target Dirs........... $(TARGET_DIRS)
+	@$(ECHO)  Target Examples....... $(TARGET_EXAMPLES)
+	@$(ECHO)  Target ExampleDirs.... $(TARGET_EXAMPLEDIRS)
+	@$(ECHO)
+	@$(ECHO)  Clean Units......... $(CLEAN_UNITS)
+	@$(ECHO)  Clean Files......... $(CLEAN_FILES)
+	@$(ECHO)
+	@$(ECHO)  Install Units....... $(INSTALL_UNITS)
+	@$(ECHO)  Install Files....... $(INSTALL_FILES)
+	@$(ECHO)
+	@$(ECHO)  == Install info ==
+	@$(ECHO)
+	@$(ECHO)  DateStr.............. $(DATESTR)
+	@$(ECHO)  ZipName.............. $(ZIPNAME)
+	@$(ECHO)  ZipPrefix............ $(ZIPPREFIX)
+	@$(ECHO)  ZipCrossPrefix....... $(ZIPCROSSPREFIX)
+	@$(ECHO)  ZipSuffix............ $(ZIPSUFFIX)
+	@$(ECHO)  FullZipName.......... $(FULLZIPNAME)
+	@$(ECHO)  Install FPC Package.. $(INSTALL_FPCPACKAGE)
+	@$(ECHO)
+	@$(ECHO)  Install base dir..... $(INSTALL_BASEDIR)
+	@$(ECHO)  Install binary dir... $(INSTALL_BINDIR)
+	@$(ECHO)  Install library dir.. $(INSTALL_LIBDIR)
+	@$(ECHO)  Install units dir.... $(INSTALL_UNITDIR)
+	@$(ECHO)  Install source dir... $(INSTALL_SOURCEDIR)
+	@$(ECHO)  Install doc dir...... $(INSTALL_DOCDIR)
+	@$(ECHO)  Install example dir.. $(INSTALL_EXAMPLEDIR)
+	@$(ECHO)  Install data dir..... $(INSTALL_DATADIR)
+	@$(ECHO)
+	@$(ECHO)  Dist destination dir. $(DIST_DESTDIR)
+	@$(ECHO)  Dist zip name........ $(DIST_ZIPNAME)
+	@$(ECHO)
+.PHONY: fpc_info
+fpc_info: $(INFORULES)
+.PHONY: fpc_makefile fpc_makefiles fpc_makefile_sub1 fpc_makefile_sub2 \
+	fpc_makefile_dirs
+fpc_makefile:
+	$(FPCMAKE) -w -T$(OS_TARGET) Makefile.fpc
+fpc_makefile_sub1:
+ifdef TARGET_DIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_DIRS))
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_EXAMPLEDIRS))
+endif
+fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS))
+fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
+fpc_makefiles: fpc_makefile fpc_makefile_dirs
+all: fpc_all
+debug: fpc_debug
+smart: fpc_smart
+release: fpc_release
+units: fpc_units
+examples:
+shared: fpc_shared
+install: fpc_install
+sourceinstall: fpc_sourceinstall
+exampleinstall: fpc_exampleinstall
+distinstall:
+zipinstall:
+zipsourceinstall:
+zipexampleinstall:
+zipdistinstall:
+clean: fpc_clean
+distclean: fpc_distclean
+cleanall: fpc_cleanall
+info: fpc_info
+makefiles: fpc_makefiles
+.PHONY: all debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall clean distclean cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+.NOTPARALLEL:

+ 26 - 0
packages/libgbafpc/examples/devkitPro/template/Makefile.fpc

@@ -0,0 +1,26 @@
+#
+#   Makefile.fpc for Free Pascal libgbafpc 2.x.y Examples
+#
+
+[target]
+programs=template
+
+[require]
+packages=libgbafpc
+
+[install]
+fpcpackage=y
+
+[default]
+cpu=arm
+target=gba
+fpcdir=../../../..
+
+[clean]
+files=*.elf
+units=*
+
+[prerules]
+
+[rules]
+.NOTPARALLEL:

+ 45 - 0
packages/libgbafpc/examples/devkitPro/template/template.pp

@@ -0,0 +1,45 @@
+program template;
+
+uses
+  ctypes, gba;
+  
+
+
+var
+  frame: integer = 0;
+  zbuffer: array [0..239, 0..159] of u8; cvar; external;  //EWRAM_BSS;
+
+
+procedure Vblank();
+begin
+	frame := frame + 1;
+end;
+
+begin
+
+	// the vblank interrupt must be enabled for VBlankIntrWait() to work
+	// since the default dispatcher handles the bios flags no vblank handler
+	// is required
+	irqInit();
+	irqSet(IRQ_VBLANK, @Vblank);
+	irqEnable(IRQ_VBLANK);
+
+	consoleInit(0, 4, 0, nil, 0, 15);
+
+	BG_COLORS[0] := RGB8(58,110,165);
+	BG_COLORS[241] := RGB5(31,31,31);
+
+	SetMode(MODE_0 or BG0_ON);
+
+	// ansi escape sequence to set print co-ordinates
+	// /x1b[line;columnH
+	iprintf(#27'[10;10H' + 'Hello World!'#10);
+	iprintf('%x', getmem(200));
+	while true do
+	begin
+		VBlankIntrWait();
+		scanKeys();
+  end;
+end.
+
+

+ 3 - 3
packages/gbaunits/fpmake.pp → packages/libgbafpc/fpmake.pp

@@ -12,15 +12,15 @@ begin
     begin
     begin
 {$endif ALLPACKAGES}
 {$endif ALLPACKAGES}
 
 
-    P:=AddPackage('gbaunits');
+    P:=AddPackage('libgbafpc');
 {$ifdef ALLPACKAGES}
 {$ifdef ALLPACKAGES}
-    P.Directory:='gbaunits';
+    P.Directory:='libgbafpc';
 {$endif ALLPACKAGES}
 {$endif ALLPACKAGES}
     P.Version:='2.0.0';
     P.Version:='2.0.0';
     P.SourcePath.Add('src');
     P.SourcePath.Add('src');
 //    P.Dependencies.Add('x11');
 //    P.Dependencies.Add('x11');
 
 
-    /// can't compile -> no deps.
+    // not linux compilable, skip
 
 
 {$ifndef ALLPACKAGES}
 {$ifndef ALLPACKAGES}
     Run;
     Run;

+ 31 - 0
packages/libgbafpc/src/gba.pp

@@ -0,0 +1,31 @@
+unit gba;
+{$mode objfpc} 
+
+{$J+}
+{$INLINE ON}
+{$MACRO ON}
+{$PACKRECORDS C}
+
+interface
+
+uses
+  ctypes;
+
+{$linklib gba}
+
+{$linklib c}
+{$linklib g}
+{$linklib gcc}
+{$linklib sysbase}
+
+{$define GBA_INTERFACE}
+{$include gba/gba.inc}
+{$undef GBA_INTERFACE}
+
+implementation
+
+{$define GBA_IMPLEMENTATION}
+{$include gba/gba.inc}
+{$undef GBA_IMPLEMENTATION}
+
+end.

+ 149 - 0
packages/libgbafpc/src/gba/BoyScout.inc

@@ -0,0 +1,149 @@
+(* 
+  $Id$
+  ------------------------------------------------------------------------------
+  	Copyright (C) 2005
+      Christer Andersson (c) 2001
+      Willem Kokke         
+  	
+  	This software is provided 'as-is', without any express or implied
+  	warranty.  In no event will the authors be held liable for any
+  	damages arising from the use of this software.
+  	
+  	Permission is granted to anyone to use this software for any
+  	purpose, including commercial applications, and to alter it and
+  	redistribute it freely, subject to the following restrictions:
+  	
+  	1.	The origin of this software must not be misrepresented; you
+  		must not claim that you wrote the original software. If you use
+  		this software in a product, an acknowledgment in the product
+  		documentation would be appreciated but is not required.
+  	
+  	2.	Altered source versions must be plainly marked as such, and
+  		must not be misrepresented as being the original software.
+  	
+  	3.	This notice may not be removed or altered from any source
+  		distribution.
+  ------------------------------------------------------------------------------
+    
+    
+  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
+  (http://www.freepascal.org)
+   
+  Copyright (C) 2006  Francesco Lombardi
+  Check http://sourceforge.net/projects/libndsfpc for updates
+   
+  ------------------------------------------------------------------------------
+
+  $Log$
+
+*)
+
+
+{$ifdef GBA_INTERFACE}
+// DEFINES ////////
+const
+  PATTERN_PARAMETER_EMPTY	= 10000;
+
+  SOUND_CHANNEL_COUNT	    = 4;
+
+  SOUND1_PARAMETER_COUNT	= 7;
+  SOUND2_PARAMETER_COUNT	= 5;
+  SOUND3_PARAMETER_COUNT	= 4;
+  SOUND4_PARAMETER_COUNT	= 7;
+
+
+// Play states
+  PLAYSTATE_STOP	= 1;
+  PLAYSTATE_PLAY	= 2;
+  PLAYSTATE_LOOP	= 4;
+
+
+// STRUCTS ////////
+type
+// Iterator for traversing compressed data
+  SRLEIterator = record
+    pData: pcuchar;
+    iValue: cuchar;
+    mask: cuchar;
+    cValue: cuchar;
+    nValue: cshort;
+    iValuePos: cuchar;
+  end;
+  TSRLEIterator = SRLEIterator;
+  PSRLEIterator = ^TSRLEIterator;
+
+// Sound 1 pattern
+  SSound1Pattern = record
+    nLength: cushort;
+    apParams: array [0..SOUND1_PARAMETER_COUNT - 1] of pcuchar;
+  end;
+  TSSound1Pattern = SSound1Pattern;
+  PSSound1Pattern = ^SSound1Pattern;
+
+// Sound 2 pattern
+  SSound2Pattern = record
+    nLength: cushort;
+    apParams: array [0..SOUND2_PARAMETER_COUNT-1] of pcuchar;
+  end;
+  TSSound2Pattern = SSound2Pattern;
+  PSSound2Pattern = ^SSound2Pattern;
+
+// Sound 3 pattern
+  SSound3Pattern = record
+    nLength: cushort;
+    apParams: array [0..SOUND3_PARAMETER_COUNT-1] of pcuchar;
+  end;
+  TSSound3Pattern = SSound3Pattern;
+  PSSound3Pattern = ^SSound3Pattern;
+
+// Sound 4 pattern
+  SSound4Pattern = record
+    nLength: cushort;
+    apParams: array [0..SOUND4_PARAMETER_COUNT-1] of pcuchar;
+  end;
+  TSSound4Pattern = SSound4Pattern;
+  PSSound4Pattern = ^SSound4Pattern;
+
+// PROTOTYPES /////
+
+procedure RLEISet(pData: pcuchar; pRLEIterator: PSRLEIterator); cdecl; external;
+procedure RLEINext(pRLEIterator: PSRLEIterator); cdecl; external;
+
+procedure BoyScoutInitialize(); cdecl; external;
+procedure BoyScoutOpenSong(const pSongData: pcuchar); cdecl; external;
+procedure BoyScoutPlaySong(nLoop: cint); cdecl; external;
+procedure BoyScoutStopSong(); cdecl; external;
+function BoyScoutGetNeededSongMemory(const pSongData: pcuchar): cushort; cdecl; external;
+procedure BoyScoutSetMemoryArea(nMemoryAddress: cuint); cdecl; external;
+function BoyScoutGetMemoryArea(): cuint; cdecl; external;
+function BoyScoutUpdateSong(): cint; cdecl; external;
+
+procedure DMA3Copy32(Src: cuint; Dst: cuint; Count: cuint); cdecl; external;
+
+// WK Set to 1 to use dma, or to 0 to use software copy
+// Software copy is the preffered option, it's faster and more stable
+const
+  USE_DMA = 0;
+
+// WK  some functions to manipulate the speed of the original song
+// You directly manipulate the time a beat takes
+// a beat takes x/60, where x is the value you give
+// increasing this value slows the song down, decreasing speeds it up
+
+// TODO?  move the timing to a timer to get a better control through increades granularity
+
+function BoyScoutGetNormalSpeed(): cuchar; cdecl; external;
+function BoyScoutGetSpeed(): cuchar; cdecl; external;
+
+procedure BoyScoutIncSpeed(speed: cuchar); cdecl; external;
+procedure BoyScoutDecSpeed(speed: cuchar); cdecl; external;
+procedure BoyScoutSetSpeed(speed: cuchar); cdecl; external;
+
+
+// WK  some functions to mute individual channels
+procedure BoyScoutMuteChannel1(mute: cint); cdecl; external;
+procedure BoyScoutMuteChannel2(mute: cint); cdecl; external;
+procedure BoyScoutMuteChannel3(mute: cint); cdecl; external;
+procedure BoyScoutMuteChannel4(mute: cint); cdecl; external;
+{$endif GBA_INTERFACE}
+

+ 1 - 1
packages/gbaunits/src/core_asm.as → packages/libgbafpc/src/gba/core_asm.as

@@ -20,7 +20,7 @@
 @		memcpy16: ~8
 @		memcpy16: ~8
 @		memset16: ~8
 @		memset16: ~8
 
 
-	.file "core_asm.s"
+	.file "core_asm.as"
 
 
 @ === procedure memcpy32(dest: pointer; const src: pointer; wcount: u32); ======
 @ === procedure memcpy32(dest: pointer; const src: pointer; wcount: u32); ======
 @     Fast-copy by words.
 @     Fast-copy by words.

+ 57 - 0
packages/libgbafpc/src/gba/fade.inc

@@ -0,0 +1,57 @@
+(* 
+  $Id$
+  ------------------------------------------------------------------------------
+	Header file for libgba palette fade routines
+
+	Copyright 2003-2004 by Dave Murphy.
+
+	This library is free software; you can redistribute it and/or
+	modify it under the terms of the GNU Library General Public
+	License as published by the Free Software Foundation; either
+	version 2 of the License, or (at your option) any later version.
+
+	This library is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+	Library General Public License for more details.
+
+	You should have received a copy of the GNU Library General Public
+	License along with this library; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+	USA.
+
+	Please report all bugs and problems through the bug tracker at
+	"http://sourceforge.net/tracker/?group_id=114505&atid=668551".
+
+  ------------------------------------------------------------------------------
+    
+    
+  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
+  (http://www.freepascal.org)
+   
+  Copyright (C) 2006  Francesco Lombardi
+  Check http://sourceforge.net/projects/libndsfpc for updates
+   
+  ------------------------------------------------------------------------------
+
+  $Log$
+
+*)
+
+{$ifdef GBA_INTERFACE}
+procedure FadeToPalette(const NewPalette: pcuint16; FrameCount: cint); cdecl; external;
+
+procedure FadeToGrayScale(gray, FrameCount: cint); cdecl; external;
+
+procedure SetPalette(Palette: pcuint16); cdecl; external;
+
+procedure FadeToBlack(frames: cint); inline;
+{$endif GBA_INTERFACE}
+
+
+{$ifdef GBA_IMPLEMENTATION}
+procedure FadeToBlack(frames: cint); inline;
+begin
+  FadeToGrayScale(0, frames);
+end;
+{$endif GBA_IMPLEMENTATION}

+ 24 - 0
packages/libgbafpc/src/gba/gba.inc

@@ -0,0 +1,24 @@
+{$include gba_types.inc}
+{$include gba_base.inc}
+{$include helper.inc}
+
+
+{$include boyscout.inc}
+{$include fade.inc}
+{$include gba_affine.inc}
+{$include gba_compression.inc}
+{$include gba_console.inc}
+{$include gba_dma.inc}
+{$include gba_input.inc}
+{$include gba_interrupt.inc}
+{$include gba_multiboot.inc}
+{$include gba_sio.inc}
+{$include gba_sound.inc}
+{$include gba_sprites.inc}
+{$include gba_systemcalls.inc}
+{$include gba_timers.inc}
+{$include gba_video.inc}
+{ $include mappy.inc}
+{ $include mbv2.inc}
+{$include pcx.inc}
+

+ 90 - 0
packages/libgbafpc/src/gba/gba_affine.inc

@@ -0,0 +1,90 @@
+(*
+  $Id$
+  ------------------------------------------------------------------------------
+	Header file for libgba bios affine functions
+
+	Copyright 2003-2004 by Dave Murphy.
+
+	This library is free software; you can redistribute it and/or
+	modify it under the terms of the GNU Library General Public
+	License as published by the Free Software Foundation; either
+	version 2 of the License, or (at your option) any later version.
+
+	This library is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+	Library General Public License for more details.
+
+	You should have received a copy of the GNU Library General Public
+	License along with this library; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+	USA.
+
+	Please report all bugs and problems through the bug tracker at
+	"http://sourceforge.net/tracker/?group_id=114505&atid=668551".
+
+  ------------------------------------------------------------------------------
+    
+  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
+  (http://www.freepascal.org)
+   
+  Copyright (C) 2006  Francesco Lombardi
+  Check http://sourceforge.net/projects/libndsfpc for updates
+   
+  ------------------------------------------------------------------------------
+
+  $Log$
+
+*)
+
+
+{$ifdef GBA_INTERFACE}
+//---------------------------------------------------------------------------------
+type
+  t_BGAffineSource = record 
+    x: s32;				
+    y: s32;
+    tX: s16;
+    tY: s16;
+    sX: s16;
+    sY: s16;
+    theta: u16;
+  end; 
+  BGAffineSource = t_BGAffineSource;
+  PBGAffineSource = ^BGAffineSource;
+
+  t_BGAffineDest = record
+    pa: s16;
+    pb: s16;
+    pc: s16;
+    pd: s16;
+    x: s32;	
+    y: s32;	
+  end;
+  BGAffineDest = t_BGAffineDest;
+  PBGAffineDest = ^BGAffineDest;
+
+
+  t_ObjAffineSource = record
+    sX: s16;
+    sY: s16;
+    theta: u16;
+  end;
+  ObjAffineSource = t_ObjAffineSource;
+  PObjAffineSource = ^ObjAffineSource;
+
+  t_ObjAffineDest = record
+    pa: s16;
+    pb: s16;
+    pc: s16;
+    pd: s16;
+  end;
+  ObjAffineDest = t_ObjAffineDest;
+  PObjAffineDest = ^ObjAffineDest;
+
+
+procedure ObjAffineSet(source: PObjAffineSource; dest: pointer; num, offset: s32); cdecl; external;
+procedure BgAffineSet(source: PBGAffineSource; dest: PBGAffineDest; num: s32); cdecl; external;
+
+{$endif GBA_INTERFACE}
+

+ 112 - 0
packages/libgbafpc/src/gba/gba_base.inc

@@ -0,0 +1,112 @@
+(*
+  $Id$
+  ------------------------------------------------------------------------------
+	Header file for libgba base macros, included by all libgba files
+
+	Copyright 2003-2004 by Dave Murphy.
+
+	This library is free software; you can redistribute it and/or
+	modify it under the terms of the GNU Library General Public
+	License as published by the Free Software Foundation; either
+	version 2 of the License, or (at your option) any later version.
+
+	This library is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+	Library General Public License for more details.
+
+	You should have received a copy of the GNU Library General Public
+	License along with this library; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+	USA.
+
+	Please report all bugs and problems through the bug tracker at
+	"http://sourceforge.net/tracker/?group_id=114505&atid=668551".
+
+  ------------------------------------------------------------------------------
+    
+    
+  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
+  (http://www.freepascal.org)
+   
+  Copyright (C) 2006  Francesco Lombardi
+  Check http://sourceforge.net/projects/libndsfpc for updates
+   
+  ------------------------------------------------------------------------------
+
+  $Log$
+
+*)
+
+
+{$ifdef GBA_INTERFACE}
+const
+  VRAM      = $06000000;
+  IWRAM     = $03000000;
+  EWRAM     = $02000000;
+  EWRAM_END = $02040000;
+  SRAM      = $0E000000;
+  REG_BASE  = $04000000;
+
+
+
+
+(* No thumb mode in fpc and it can't handle such preprocessor code *)
+{
+#if	defined	( __thumb__ )
+#define	SystemCall(Number)	 __asm ("SWI	  "#Number"\n" :::  "r0", "r1", "r2", "r3")
+#else
+#define	SystemCall(Number)	 __asm ("SWI	  "#Number"	<< 16\n" :::"r0", "r1", "r2", "r3")
+#endif
+}
+// SysCall conversion
+const
+  SC_ARM_2 = (2 shl 16);
+  SC_ARM_3 = (3 shl 16);
+  SC_ARM_5 = (5 shl 16);
+  SC_ARM_28 = (28 shl 16);
+  SC_ARM_29 = (29 shl 16);
+  SC_ARM_30 = (30 shl 16);
+  SC_ARM_40 = (40 shl 16);
+  SC_ARM_41 = (41 shl 16);
+
+{$endif GBA_INTERFACE}
+
+
+{$ifdef GBA_IMPLEMENTATION}
+function BIT(number: integer): integer; inline;
+begin
+  BIT := (1 shl (number));
+end;
+{$endif GBA_IMPLEMENTATION}
+
+
+(* No attribute handling in fpc *)
+{
+#define IWRAM_CODE	__attribute__((section(".iwram"), long_call))
+#define EWRAM_CODE	__attribute__((section(".ewram"), long_call))
+
+#define IWRAM_DATA	__attribute__((section(".iwram")))
+#define EWRAM_DATA	__attribute__((section(".ewram")))
+#define EWRAM_BSS	__attribute__((section(".sbss")))
+#define ALIGN(m)	__attribute__((aligned (m)))
+}
+
+
+{$ifdef GBA_INTERFACE}
+//---------------------------------------------------------------------------------
+// modes for DMA and CPU(Fast)Set
+//---------------------------------------------------------------------------------
+type
+  DMA_MODES = integer;
+const
+	FILL   : DMA_MODES = (1 shl 24);
+	COPY16 : DMA_MODES = (0 shl 26);
+	COPY32 : DMA_MODES = (1 shl 26);
+{$endif GBA_INTERFACE}
+
+
+{$ifdef GBA_INTERFACE}
+function BIT(number: integer): integer; inline;
+{$endif GBA_INTERFACE}
+

+ 69 - 0
packages/libgbafpc/src/gba/gba_compression.inc

@@ -0,0 +1,69 @@
+(*
+  $Id$
+  ------------------------------------------------------------------------------
+	Header file for libgba bios compression functions
+
+	Copyright 2003-2004 by Dave Murphy.
+
+	This library is free software; you can redistribute it and/or
+	modify it under the terms of the GNU Library General Public
+	License as published by the Free Software Foundation; either
+	version 2 of the License, or (at your option) any later version.
+
+	This library is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+	Library General Public License for more details.
+
+	You should have received a copy of the GNU Library General Public
+	License along with this library; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+	USA.
+
+	Please report all bugs and problems through the bug tracker at
+	"http://sourceforge.net/tracker/?group_id=114505&atid=668551".
+
+
+  ------------------------------------------------------------------------------
+    
+    
+  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
+  (http://www.freepascal.org)
+   
+  Copyright (C) 2006  Francesco Lombardi
+  Check http://sourceforge.net/projects/libndsfpc for updates
+   
+  ------------------------------------------------------------------------------
+
+  $Log$
+
+*)
+
+
+
+{$ifdef GBA_INTERFACE}
+
+type
+  BUP = record
+    SrcNum: u16;				// Source Data Byte Size
+    SrcBitNum: u8;			// 1 Source Data Bit Number
+    DestBitNum: u8;			// 1 Destination Data Bit Number
+    {u32 }DestOffset: 0..31;		// Number added to Source Data
+    {u32 }DestOffset0_On: 0..1;	// Flag to add/not add Offset to 0 Data
+  end;
+  PBUP = ^BUP;
+
+//---------------------------------------------------------------------------------
+// Decompression functions
+//---------------------------------------------------------------------------------
+procedure BitUnPack(source: pointer; dest: pointer; _bup: PBUP); cdecl; external;
+procedure LZ77UnCompWram(source, dest: pointer); cdecl; external;
+procedure LZ77UnCompVram(source, dest: pointer); cdecl; external;
+procedure HuffUnComp(source, dest: pointer); cdecl; external;
+procedure RLUnCompWram(source, dest: pointer); cdecl; external;
+procedure RLUnCompVram(source, dest: pointer); cdecl; external;
+procedure Diff8bitUnFilterWram(source, dest: pointer); cdecl; external;
+procedure Diff8bitUnFilterVram(source, dest: pointer); cdecl; external;
+procedure Diff16bitUnFilter(source, dest: pointer); cdecl; external;
+
+{$endif GBA_INTERFACE}

+ 101 - 0
packages/libgbafpc/src/gba/gba_console.inc

@@ -0,0 +1,101 @@
+(*
+  $Id$
+  ------------------------------------------------------------------------------
+	Copyright 2003-2004 by Dave Murphy.
+
+	This library is free software; you can redistribute it and/or
+	modify it under the terms of the GNU Library General Public
+	License as published by the Free Software Foundation; either
+	version 2 of the License, or (at your option) any later version.
+
+	This library is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+	Library General Public License for more details.
+
+	You should have received a copy of the GNU Library General Public
+	License along with this library; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+	USA.
+
+	Please report all bugs and problems through the bug tracker at
+	"http://sourceforge.net/tracker/?group_id=114505&atid=668551".
+
+  ------------------------------------------------------------------------------
+    
+    
+  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
+  (http://www.freepascal.org)
+   
+  Copyright (C) 2006  Francesco Lombardi
+  Check http://sourceforge.net/projects/libndsfpc for updates
+   
+  ------------------------------------------------------------------------------
+
+  $Log$
+
+*)
+
+{$ifdef GBA_INTERFACE}
+(*
+function CON_CLS(): string; inline;
+function CON_POS(_x, _y: integer): string; inline;
+function CON_UP(_dy: integer): string; inline;
+function CON_DOWN(_dy: integer): string; inline;
+function CON_RIGHT(_dx: integer): string; inline;
+function CON_LEFT(_dx: integer): string; inline;
+function CON_ERASE(): string; inline;
+procedure CON_CLL(_y: integer); inline;
+*)
+
+procedure consoleInit(charBase, mapBase, background: integer; 
+					const font: pu8; fontsize, palette: integer); cdecl; external;
+
+
+{$endif GBA_INTERFACE}
+
+
+{$ifdef GBA_IMPLEMENTATION}
+(*
+function CON_CLS(): string; inline;
+begin
+  CON_CLS := #51'[2J';
+end;
+  
+function CON_POS(_x, _y: integer): string; inline;
+begin
+  CON_POS := format(#51'[%i;%iH', [_y, _x]);
+end;
+  
+function CON_UP(_dy: integer): string; inline;
+begin
+  CON_UP := format(#51'[%iA', [_dy]);	 
+end;
+
+function CON_DOWN(_dy: integer): string; inline;
+begin
+  CON_DOWN := format(#51'[%iB', [_dy]);	 
+end;
+
+function CON_RIGHT(_dx: integer): string; inline;
+begin
+  CON_RIGHT := format(#51'[%iC', [_dx]);	 
+end;
+
+function CON_LEFT(_dx: integer): string; inline;
+begin
+  CON_LEFT := format(#51'[%iD', [_dx]);
+end;	 
+
+function CON_ERASE(): string; inline;
+begin
+  CON_ERASE := #51'[K';	 
+end;
+
+procedure CON_CLL(_y: integer); inline;
+begin
+  CON_POS(1,_y); 
+  CON_ERASE();
+end;
+*)
+{$endif GBA_IMPLEMENTATION}

+ 145 - 0
packages/libgbafpc/src/gba/gba_dma.inc

@@ -0,0 +1,145 @@
+(*
+  $Id$
+  ------------------------------------------------------------------------------
+	Header file for libgba DMA definitions
+
+	Copyright 2003-2004 by Dave Murphy.
+
+	This library is free software; you can redistribute it and/or
+	modify it under the terms of the GNU Library General Public
+	License as published by the Free Software Foundation; either
+	version 2 of the License, or (at your option) any later version.
+
+	This library is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+	Library General Public License for more details.
+
+	You should have received a copy of the GNU Library General Public
+	License along with this library; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+	USA.
+
+	Please report all bugs and problems through the bug tracker at
+	"http://sourceforge.net/tracker/?group_id=114505&atid=668551".
+
+
+  ------------------------------------------------------------------------------
+    
+    
+  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
+  (http://www.freepascal.org)
+   
+  Copyright (C) 2006  Francesco Lombardi
+  Check http://sourceforge.net/projects/libndsfpc for updates
+   
+  ------------------------------------------------------------------------------
+
+  $Log$
+
+
+
+
+*)
+
+{$ifdef GBA_INTERFACE}
+const
+  REG_DMA0SAD	: pu32 = pointer(REG_BASE + $0b0);
+  REG_DMA0DAD	: pu32 = pointer(REG_BASE + $0b4);
+  REG_DMA0CNT	: pu32 = pointer(REG_BASE + $0b8);
+
+  REG_DMA1SAD	: pu32 = pointer(REG_BASE + $0bc);
+  REG_DMA1DAD	: pu32 = pointer(REG_BASE + $0c0);
+  REG_DMA1CNT	: pu32 = pointer(REG_BASE + $0c4);
+
+  REG_DMA2SAD	: pu32 = pointer(REG_BASE + $0c8);
+  REG_DMA2DAD	: pu32 = pointer(REG_BASE + $0cc);
+  REG_DMA2CNT	: pu32 = pointer(REG_BASE + $0d0);
+
+  REG_DMA3SAD	: pu32 = pointer(REG_BASE + $0d4);
+  REG_DMA3DAD	: pu32 = pointer(REG_BASE + $0d8);
+  REG_DMA3CNT	: pu32 = pointer(REG_BASE + $0dc);
+
+
+  DMA_DST_INC     = (0 shl 21);
+  DMA_DST_DEC     = (1 shl 21);
+  DMA_DST_FIXED	  = (2 shl 21);
+  DMA_DST_RELOAD  = (3 shl 21);
+
+  DMA_SRC_INC     = (0 shl 23);
+  DMA_SRC_DEC     = (1 shl 23);
+  DMA_SRC_FIXED   = (2 shl 23);
+
+  DMA_REPEAT      = (1 shl 25);
+
+  DMA16           = (0 shl 26);
+  DMA32           = (1 shl 26);
+
+  GAMEPAK_DRQ     = (1 shl 27);
+
+  DMA_IMMEDIATE   = (0 shl 28);
+  DMA_VBLANK      = (1 shl 28);
+  DMA_HBLANK      = (2 shl 28);
+  DMA_SPECIAL     = (3 shl 28);
+
+  DMA_IRQ         = (1 shl 30);
+  DMA_ENABLE      = (1 shl 31);
+  
+procedure DMA0COPY(source: pu16; dest: pu16; mode: u32); inline;
+procedure DMA1COPY(source: pu16; dest: pu16; mode: u32); inline;
+procedure DMA2COPY(source: pu16; dest: pu16; mode: u32); inline;
+procedure DMA3COPY(source: pu16; dest: pu16; mode: u32); inline;
+procedure DMA_Copy(channel: byte; source, dest: pu16; mode: u32); inline;
+procedure dmaCopy(const source: pointer; dest: pointer; size: u32); inline;
+{$endif GBA_INTERFACE}
+
+
+
+{$ifdef GBA_IMPLEMENTATION}
+procedure DMA0COPY(source: pu16; dest: pu16; mode: u32); inline;
+begin
+  REG_DMA0SAD^ := u32(source);
+  REG_DMA0DAD^ := u32(dest);
+  REG_DMA0CNT^ := DMA_ENABLE or mode;
+end; 
+
+procedure DMA1COPY(source: pu16; dest: pu16; mode: u32); inline;
+begin
+  REG_DMA1SAD^ := u32(source);
+  REG_DMA1DAD^ := u32(dest);
+  REG_DMA1CNT^ := DMA_ENABLE or mode;
+end; 
+
+procedure DMA2COPY(source: pu16; dest: pu16; mode: u32); inline;
+begin
+  REG_DMA2SAD^ := u32(source);
+  REG_DMA2DAD^ := u32(dest);
+  REG_DMA2CNT^ := DMA_ENABLE or mode;
+end; 
+
+procedure DMA3COPY(source: pu16; dest: pu16; mode: u32); inline;
+begin
+  REG_DMA3SAD^ := u32(source);
+  REG_DMA3DAD^ := u32(dest);
+  REG_DMA3CNT^ := DMA_ENABLE or mode;
+end; 
+
+
+
+procedure DMA_Copy(channel: byte; source, dest: pu16; mode: u32); inline;
+begin
+  case channel of
+    0: DMA0COPY(source, dest, mode); 
+    1: DMA1COPY(source, dest, mode); 
+    2: DMA2COPY(source, dest, mode); 
+    3: DMA3COPY(source, dest, mode); 
+  end;
+end;
+
+procedure dmaCopy(const source: pointer; dest: pointer; size: u32); inline;
+begin
+  DMA_Copy(3, source, dest, DMA16 or (size shr 1));
+end;
+{$endif GBA_IMPLEMENTATION}
+
+

+ 79 - 0
packages/libgbafpc/src/gba/gba_input.inc

@@ -0,0 +1,79 @@
+(*
+  $Id$
+  ------------------------------------------------------------------------------
+	Header file for libgba input functions
+
+	Copyright 2003-2004 by Dave Murphy.
+
+	This library is free software; you can redistribute it and/or
+	modify it under the terms of the GNU Library General Public
+	License as published by the Free Software Foundation; either
+	version 2 of the License, or (at your option) any later version.
+
+	This library is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+	Library General Public License for more details.
+
+	You should have received a copy of the GNU Library General Public
+	License along with this library; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+	USA.
+
+	Please report all bugs and problems through the bug tracker at
+	"http://sourceforge.net/tracker/?group_id=114505&atid=668551".
+
+
+  ------------------------------------------------------------------------------
+    
+    
+  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
+  (http://www.freepascal.org)
+   
+  Copyright (C) 2006  Francesco Lombardi
+  Check http://sourceforge.net/projects/libndsfpc for updates
+   
+  ------------------------------------------------------------------------------
+
+  $Log$
+
+
+
+
+*)
+
+{$ifdef GBA_INTERFACE}
+const
+  REG_KEYINPUT  : pu16 = pointer(REG_BASE + $130);  // Key Input
+  REG_KEYCNT		: pu16 = pointer(REG_BASE + $132);  // Key Control
+
+type
+  KEYPAD_BITS = integer;
+const
+  KEY_A: KEYPAD_BITS       = (1 shl 0);
+  KEY_B: KEYPAD_BITS       = (1 shl 1);
+  KEY_SELECT: KEYPAD_BITS  = (1 shl 2);
+  KEY_START: KEYPAD_BITS   = (1 shl 3);	
+  KEY_RIGHT: KEYPAD_BITS   = (1 shl 4);
+  KEY_LEFT: KEYPAD_BITS    = (1 shl 5);
+  KEY_UP: KEYPAD_BITS      = (1 shl 6);
+  KEY_DOWN: KEYPAD_BITS    = (1 shl 7);
+  KEY_R: KEYPAD_BITS       = (1 shl 8);
+  KEY_L: KEYPAD_BITS       = (1 shl 9);
+
+  KEYIRQ_ENABLE: KEYPAD_BITS = (1 shl 14);
+  KEYIRQ_OR: KEYPAD_BITS     = (0 shl 15);
+  KEYIRQ_AND: KEYPAD_BITS    = (1 shl 15);
+  DPAD: KEYPAD_BITS          = (1 shl 6) or (1 shl 7) or (1 shl 5) or (1 shl 4);
+
+
+procedure scanKeys(); cdecl; external;
+
+function keysDown(): u16; cdecl; external;
+function keysDownRepeat(): u16; cdecl; external;
+function keysUp(): u16; cdecl; external;
+function keysHeld(): u16; cdecl; external;
+
+procedure setRepeat(SetDelay, SetRepeat: integer); cdecl; external;
+{$endif GBA_INTERFACE}
+

+ 99 - 0
packages/libgbafpc/src/gba/gba_interrupt.inc

@@ -0,0 +1,99 @@
+(*
+  $Id$
+  ------------------------------------------------------------------------------
+	Header file for libgba interrupt handling
+
+	Copyright 2003-2006 by Dave Murphy.
+
+	This library is free software; you can redistribute it and/or
+	modify it under the terms of the GNU Library General Public
+	License as published by the Free Software Foundation; either
+	version 2 of the License, or (at your option) any later version.
+
+	This library is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+	Library General Public License for more details.
+
+	You should have received a copy of the GNU Library General Public
+	License along with this library; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+	USA.
+
+	Please report all bugs and problems through the bug tracker at
+	"http://sourceforge.net/tracker/?group_id=114505&atid=668551".
+
+
+  ------------------------------------------------------------------------------
+    
+    
+  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
+  (http://www.freepascal.org)
+   
+  Copyright (C) 2006  Francesco Lombardi
+  Check http://sourceforge.net/projects/libndsfpc for updates
+   
+  ------------------------------------------------------------------------------
+
+  $Log$
+
+
+*)
+
+
+{$ifdef GBA_INTERFACE}
+type
+  IntFn = procedure;
+  TVoidFunctionPointer = procedure of object;
+  
+  IntTable = record
+    handler: IntFn; 
+    mask: u32;
+  end;
+  PIntTable = ^IntTable; 
+
+
+const 
+  MAX_INTS = 15;
+//  INT_VECTOR  : IntFn =	pointer($03007ffc);		// BIOS Interrupt vector
+var
+  INT_VECTOR  : IntFn absolute $03007ffc;		// BIOS Interrupt vector
+
+  REG_IME     : pu16 = pointer(REG_BASE + $208);	// Interrupt Master Enable
+  REG_IE      : pu16 = pointer(REG_BASE + $200);	// Interrupt Enable
+  REG_IF      : pu16 = pointer(REG_BASE + $202);	// Interrupt Request
+
+
+type
+  irqMASKS = integer;
+  irqMASK = irqMASKS;
+const
+	IRQ_VBLANK:	irqMASK = (1 shl 0);		
+	IRQ_HBLANK:	irqMASK = (1 shl 1);
+	IRQ_VCOUNT:	irqMASK = (1 shl 2);
+	IRQ_TIMER0:	irqMASK = (1 shl 3);
+	IRQ_TIMER1:	irqMASK = (1 shl 4);
+	IRQ_TIMER2:	irqMASK = (1 shl 5);
+	IRQ_TIMER3:	irqMASK = (1 shl 6);
+	IRQ_SERIAL:	irqMASK = (1 shl 7);
+	IRQ_DMA0:	irqMASK = (1 shl 8);
+	IRQ_DMA1:	irqMASK = (1 shl 9);
+	IRQ_DMA2:	irqMASK = (1 shl 10);
+	IRQ_DMA3:	irqMASK = (1 shl 11);
+	IRQ_KEYPAD:	irqMASK = (1 shl 12);
+	IRQ_GAMEPAK:	irqMASK = (1 shl 13);
+
+
+var
+  IntrTable: array [0..MAX_INTS-1] of IntTable; cvar; // cvar used in order to gain access from assembly unit
+
+procedure irqInit(); cdecl; external;
+
+procedure irqSet(mask: irqMASK; func: TVoidFunctionPointer); cdecl; external;
+procedure irqSet(mask: irqMASK; func: pointer); cdecl; external;
+procedure irqEnable(mask: cint); cdecl; external;
+procedure irqDisable(mask: cint); cdecl; external;
+
+procedure IntrMain(); cdecl; external;
+{$endif GBA_INTERFACE}
+

+ 72 - 0
packages/libgbafpc/src/gba/gba_multiboot.inc

@@ -0,0 +1,72 @@
+(*
+  $Id$
+  ------------------------------------------------------------------------------
+	Header file for libgba multiboot definitions
+
+	Copyright 2003-2004 by Dave Murphy.
+
+	This library is free software; you can redistribute it and/or
+	modify it under the terms of the GNU Library General Public
+	License as published by the Free Software Foundation; either
+	version 2 of the License, or (at your option) any later version.
+
+	This library is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+	Library General Public License for more details.
+
+	You should have received a copy of the GNU Library General Public
+	License along with this library; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+	USA.
+
+	Please report all bugs and problems through the bug tracker at
+	"http://sourceforge.net/tracker/?group_id=114505&atid=668551".
+
+  ------------------------------------------------------------------------------
+    
+    
+  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
+  (http://www.freepascal.org)
+   
+  Copyright (C) 2006  Francesco Lombardi
+  Check http://sourceforge.net/projects/libndsfpc for updates
+   
+  ------------------------------------------------------------------------------
+
+  $Log$
+
+
+
+*)
+
+
+{$ifdef GBA_INTERFACE}
+type
+  MultiBootParam = record
+    reserved1: array [0..4] of u32;
+    handshake_data: u8;
+    padding: u8;
+    handshake_timeout: u16;
+    probe_count: u8;
+    client_data: array [0..2] of u8;
+    palette_data: u8;
+    response_bit: u8;
+    client_bit: u8;
+    reserved2: u8;
+    boot_srcp: pu8;
+    boot_endp: pu8;
+    masterp: pu8;
+    reserved3: array [0..2] of pu8;
+    system_work2: array [0..3] of u32;
+    sendflag: u8;
+    probe_target_bit: u8;
+    check_wait: u8;
+    server_type: u8;
+  end;
+  PMultiBootParam = ^MultiBootParam;
+
+  MULTIBOOT_MODES = (MODE32_NORMAL, MODE16_MULTI, MODE32_2MHZ);
+
+function MultiBoot(mp: PMultiBootParam; mode: u32): u32; cdecl; external;
+{$endif GBA_INTERFACE}

+ 126 - 0
packages/libgbafpc/src/gba/gba_sio.inc

@@ -0,0 +1,126 @@
+(*
+  $Id$
+  ------------------------------------------------------------------------------
+	Header file for libgba serial communication functions
+
+	Copyright 2003-2004 by Dave Murphy.
+
+	This library is free software; you can redistribute it and/or
+	modify it under the terms of the GNU Library General Public
+	License as published by the Free Software Foundation; either
+	version 2 of the License, or (at your option) any later version.
+
+	This library is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+	Library General Public License for more details.
+
+	You should have received a copy of the GNU Library General Public
+	License along with this library; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+	USA.
+
+	Please report all bugs and problems through the bug tracker at
+	"http://sourceforge.net/tracker/?group_id=114505&atid=668551".
+
+  ------------------------------------------------------------------------------
+    
+    
+  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
+  (http://www.freepascal.org)
+   
+  Copyright (C) 2006  Francesco Lombardi
+  Check http://sourceforge.net/projects/libndsfpc for updates
+   
+  ------------------------------------------------------------------------------
+
+  $Log$
+
+
+	
+
+*)
+
+
+{$ifdef GBA_INTERFACE}
+//---------------------------------------------------------------------------------
+// SIO mode control bits used with REG_SIOCNT
+//---------------------------------------------------------------------------------
+const
+  SIO_8BIT  = $0000;	// Normal 8-bit communication mode
+  SIO_32BIT = $1000;	// Normal 32-bit communication mode
+  SIO_MULTI = $2000;	// Multi-play communication mode
+  SIO_UART  = $3000;	// UART communication mode
+  SIO_IRQ   = $4000;	// Enable serial irq
+
+
+//---------------------------------------------------------------------------------
+// baud rate settings
+//---------------------------------------------------------------------------------
+  SIO_9600   = $0000;
+  SIO_38400  = $0001;
+  SIO_57600  = $0002;
+  SIO_115200 = $0003;
+
+  SIO_CLK_INT  = (1 shl 0);	// Select internal clock
+  SIO_2MHZ_CLK = (1 shl 1);	// Select 2MHz clock
+  SIO_RDY      = (1 shl 2);	// Opponent SO state
+  SIO_SO_HIGH  = (1 shl 3);	// Our SO state
+  SIO_START    = (1 shl 7);
+
+
+//---------------------------------------------------------------------------------
+// SIO modes set with REG_RCNT
+//---------------------------------------------------------------------------------
+  R_NORMAL  = $0000;
+  R_MULTI   = $0000;
+  R_UART    = $0000;
+  R_GPIO    = $8000;
+  R_JOYBUS  = $C000;
+
+//---------------------------------------------------------------------------------
+// General purpose mode control bits used with REG_RCNT
+//---------------------------------------------------------------------------------
+  GPIO_SC  = $0001;	// Data
+  GPIO_SD	 = $0002;
+  GPIO_SI	 = $0004;
+  GPIO_SO	 = $0008;
+  GPIO_SC_IO  = $0010;	// Select I/O
+  GPIO_SD_IO  = $0020;
+  GPIO_SI_IO  = $0040;
+  GPIO_SO_IO  = $0080;
+  GPIO_SC_INPUT  = $0000;	// Input setting
+  GPIO_SD_INPUT  = $0000;
+  GPIO_SI_INPUT  = $0000;
+  GPIO_SO_INPUT  = $0000;
+  GPIO_SC_OUTPUT = $0010;	// Output setting
+  GPIO_SD_OUTPUT = $0020;
+  GPIO_SI_OUTPUT = $0040;
+  GPIO_SO_OUTPUT = $0080;
+
+
+  REG_SIOCNT      : pu16 = pointer(REG_BASE + $128);	// Serial Communication Control
+  REG_SIODATA8    : pu16 = pointer(REG_BASE + $12a);	// 8bit Serial Communication Data
+  REG_SIODATA32   : pu32 = pointer(REG_BASE + $120);	// 32bit Serial Communication Data
+  REG_SIOMLT_SEND : pu16 = pointer(REG_BASE + $12a);	// Multi-play SIO Send Data
+  REG_SIOMLT_RECV : pu16 = pointer(REG_BASE + $120);	// Multi-play SIO Receive Data
+  REG_SIOMULTI0   : pu16 = pointer(REG_BASE + $120);	// Master data
+  REG_SIOMULTI1   : pu16 = pointer(REG_BASE + $122);	// Slave 1 data
+  REG_SIOMULTI2   : pu16 = pointer(REG_BASE + $124);	// Slave 2 data
+  REG_SIOMULTI3   : pu16 = pointer(REG_BASE + $126);	// Slave 3 data
+
+  REG_RCNT        : pu16 = pointer(REG_BASE + $134);	// SIO Mode Select/General Purpose Data
+
+  REG_HS_CTRL     : pu16 = pointer(REG_BASE + $140);	// SIO JOY Bus Control
+
+  REG_JOYRE       : pu32 = pointer(REG_BASE + $150);	// SIO JOY Bus Receive Data
+  REG_JOYRE_L     : pu16 = pointer(REG_BASE + $150);
+  REG_JOYRE_H     : pu16 = pointer(REG_BASE + $152);
+
+  REG_JOYTR       : pu32 = pointer(REG_BASE + $154);	// SIO JOY Bus Transmit Data
+  REG_JOYTR_L     : pu16 = pointer(REG_BASE + $154);
+  REG_JOYTR_H     : pu16 = pointer(REG_BASE + $156);
+
+  REG_JSTAT       : pu16 = pointer(REG_BASE + $158);	// SIO JOY Bus Receive Status
+
+{$endif GBA_INTERFACE}

+ 470 - 0
packages/libgbafpc/src/gba/gba_sound.inc

@@ -0,0 +1,470 @@
+(*
+  $Id$
+  ------------------------------------------------------------------------------
+	Header file for libgba bios sound functions
+
+	Copyright (C) 2003-2005 by Dave Murphy.
+
+	This library is free software; you can redistribute it and/or
+	modify it under the terms of the GNU Library General Public
+	License as published by the Free Software Foundation; either
+	version 2 of the License, or (at your option) any later version.
+
+	This library is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+	Library General Public License for more details.
+
+	You should have received a copy of the GNU Library General Public
+	License along with this library; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+	USA.
+
+	Please report all bugs and problems through the bug tracker at
+	"http://sourceforge.net/tracker/?group_id=114505&atid=668551".
+
+  ------------------------------------------------------------------------------
+    
+    
+  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
+  (http://www.freepascal.org)
+   
+  Copyright (C) 2006  Francesco Lombardi
+  Check http://sourceforge.net/projects/libndsfpc for updates
+   
+  ------------------------------------------------------------------------------
+
+  $Log$
+
+
+
+*)
+
+
+{$ifdef GBA_INTERFACE}
+type
+  WaveData = record
+    typ: u16;
+    stat: u16;
+    freq: u32;
+    loop: u32;
+    size: u32;
+    data: array [0..0] of s8;
+  end;
+  PWaveData = ^WaveData;
+
+  SoundChannel = record
+    Status: u8;
+    reserved1: u8;
+    RightVol: u8;
+    LeftVol: u8;
+    Attack: u8;
+    Decay: u8;
+    Sustain: u8;
+    Release: u8;
+    reserved2: array [0..23] of u8;
+    fr: u32;
+    wp: PWaveData;
+    reserved3: array [0..5] of u32;
+  end; 
+  PSoundChannel = ^SoundChannel;
+
+const
+  PCM_DMA_BUF = 1584;
+  MAX_DIRECTSOUND_CHANNELS  = 12;
+
+type
+  SoundArea = record
+    ident: u32;
+    DmaCount: u8;
+    reverb: u8;
+    maxchn: u8;
+    masvol: u8;
+    freq: u8;
+    mode: u8;
+    r2: array [0..5] of u8;
+    r3: array [0..15] of u32;
+    vchn: array [0..MAX_DIRECTSOUND_CHANNELS-1] of SoundChannel;
+    pcmbuf: array [0..PCM_DMA_BUF*2 - 1] of s8;
+  end;
+  PSoundArea = ^SoundArea;
+
+(*---------------------------------------------------------------------------------
+	Control Registers
+---------------------------------------------------------------------------------*)
+const
+  SND1_R_ENABLE	= (1 shl 8);		// Enable left & right speakers for each sound channel
+  SND1_L_ENABLE = (1 shl 12);
+  SND2_R_ENABLE = (1 shl 9);
+  SND2_L_ENABLE = (1 shl 13);
+  SND3_R_ENABLE = (1 shl 10);
+  SND3_L_ENABLE = (1 shl 14);
+  SND4_R_ENABLE = (1 shl 11);
+  SND4_L_ENABLE = (1 shl 15);
+
+  SNDA_VOL_50      = (0 shl 2);
+  SNDA_VOL_100     = (1 shl 2);
+  SNDB_VOL_50      = (0 shl 3);
+  SNDB_VOL_100     = (1 shl 3);
+  SNDA_R_ENABLE    = (1 shl 8);
+  SNDA_L_ENABLE    = (1 shl 9);
+  SNDA_RESET_FIFO  = (1 shl 11);
+  SNDB_R_ENABLE    = (1 shl 12);
+  SNDB_L_ENABLE    = (1 shl 13);
+  SNDB_RESET_FIFO  = (1 shl 15);
+
+
+  REG_SOUNDCNT_L	: pu16 = pointer(REG_BASE + $080);
+  REG_SOUNDCNT_H	: pu16 = pointer(REG_BASE + $082);
+  REG_SOUNDCNT_X	: pu16 = pointer(REG_BASE + $084);
+
+
+  REG_SOUND1CNT_L	: pu16 = pointer(REG_BASE + $060);
+  REG_SOUND1CNT_H	: pu16 = pointer(REG_BASE + $062);
+  REG_SOUND1CNT_X	: pu16 = pointer(REG_BASE + $064);
+
+  REG_SOUND2CNT_L	: pu16 = pointer(REG_BASE + $068);
+  REG_SOUND2CNT_H	: pu16 = pointer(REG_BASE + $06C);
+
+  REG_SOUND3CNT_L	: pu16 = pointer(REG_BASE + $070);
+  REG_SOUND3CNT_H	: pu16 = pointer(REG_BASE + $072);
+  REG_SOUND3CNT_X	: pu16 = pointer(REG_BASE + $074);
+
+  REG_SOUND4CNT_L	: pu16 = pointer(REG_BASE + $078);
+  REG_SOUND4CNT_H	: pu16 = pointer(REG_BASE + $07C);
+
+  REG_SOUNDBIAS	: pu16 = pointer(REG_BASE + $088);
+
+  REG_FIFO_A		: pu32 = pointer(REG_BASE + $0A0);
+  REG_FIFO_B		: pu32 = pointer(REG_BASE + $0A4);
+
+  WAVE_RAM      : pu16 = pointer(REG_BASE + $090);
+
+  SOUND3_STEP32		= (0 shl 5);	// Use two banks of 32 steps each
+  SOUND3_STEP64		= (1 shl 5);	// Use one bank of 64 steps
+
+  
+function SOUND3_SETBANK(n: integer): integer; inline;
+
+const
+  SOUND3_PLAY			= (1 shl 7);	// Output sound
+  SOUND3_STOP			= (0 shl 7);	// Stop sound output
+
+//---------------------------------------------------------------------------------
+// pin8 compatible sound macros 
+//---------------------------------------------------------------------------------
+
+(*---------------------------------------------------------------------------------
+	DMG Sound Control (0x04000080)
+fedcba9876543210
+|||||||| ||| |||
+|||||||| ||| +++- DMG left volume
+|||||||| +++----- DMG right volume
+|||||||+--------- Enable sqr1 on left
+||||||+---------- Enable sqr2 on left
+|||||+----------- Enable triangle on left
+||||+------------ Enable noise on left
+|||+------------- Enable sqr1 on right
+||+-------------- Enable sqr2 on right
+|+--------------- Enable triangle on right
++---------------- 
+---------------------------------------------------------------------------------*)
+const
+  DMGSNDCTRL         : pu16 = pointer($04000080);
+  
+function DMGSNDCTRL_LVOL(x: integer): integer; inline;
+
+function DMGSNDCTRL_RVOL(x: integer): integer; inline;
+
+const
+  DMGSNDCTRL_LSQR1   = $0100;
+  DMGSNDCTRL_LSQR2   = $0200;
+  DMGSNDCTRL_LTRI    = $0400;
+  DMGSNTCTRL_LNOISE  = $0800;
+  DMGSNDCTRL_RSQR1   = $1000;
+  DMGSNDCTRL_RSQR2   = $2000;
+  DMGSNDCTRL_RTRI    = $4000;
+  DMGSNDCTRL_RNOISE  = $8000;
+
+(*---------------------------------------------------------------------------------
+	Direct Sound Control (0x04000082)
+-----------------------------------------------------------------------------------
+fedcba9876543210
+||||||||    ||||
+||||||||    ||++- DMG sound output volume
+||||||||    ||    (00: 25%; 01: 50%; 10: 100%)
+||||||||    |+--- DSound A output volume (0: 50%; 1: 100%)
+||||||||    +---- DSound B output volume (0: 50%; 1: 100%)
+|||||||+--------- Enable DSound A on right
+||||||+---------- Enable DSound A on left
+|||||+----------- DSound A sample timer (0 or 1)
+||||+------------ DSound A FIFO reset
+|||+------------- Enable DSound B on right
+||+-------------- Enable DSound B on left
+|+--------------- DSound B sample timer (0 or 1)
++---------------- DSound B FIFO reset
+---------------------------------------------------------------------------------*)
+const
+  DSOUNDCTRL           : pu16 = pointer($04000082);
+  DSOUNDCTRL_DMG25     = $0000;
+  DSOUNDCTRL_DMG50     = $0001;
+  DSOUNDCTRL_DMG100    = $0002;
+  DSOUNDCTRL_A50       = $0000;
+  DSOUNDCTRL_A100      = $0004;
+  DSOUNDCTRL_B50       = $0000;
+  DSOUNDCTRL_B100      = $0008;
+  DSOUNDCTRL_AR        = $0100;
+  DSOUNDCTRL_AL        = $0200;
+  
+function DSOUNDCTRL_ATIMER(x: integer): integer; inline; 
+  
+const
+  DSOUNDCTRL_ARESET    = $0400;
+  DSOUNDCTRL_BR        = $1000;
+  DSOUNDCTRL_BL        = $2000;
+  
+function  DSOUNDCTRL_BTIMER(x: integer): integer; inline;  
+
+const
+  DSOUNDCTRL_BRESET    = $8000;
+
+(*---------------------------------------------------------------------------------
+ Sound Status (0x04000084)
+-----------------------------------------------------------------------------------
+Note that unlike NES's $4014, bits 0 to 3 of this register are
+read-only.  They do not enable sound.
+
+fedcba9876543210
+        |   ||||
+        |   |||+- Square 1 playing
+        |   ||+-- Square 2 playing
+        |   |+--- Triangle playing
+        |   +---- Noise playing
+        +-------- 0: save 10% battery power by turning off ALL sound;
+                  1: play sound
+---------------------------------------------------------------------------------*)
+const
+  SNDSTAT        : pu16 = pointer($04000084);
+  SNDSTAT_SQR1   = $0001;
+  SNDSTAT_SQR2   = $0002;
+  SNDSTAT_TRI    = $0004;
+  SNDSTAT_NOISE  = $0008;
+  SNDSTAT_ENABLE = $0080;
+
+(*---------------------------------------------------------------------------------
+	Sound Bias: will not be documented.
+-----------------------------------------------------------------------------------
+fedcba9876543210
+||    ||||||||||
+||    ++++++++++- PWM bias
+++--------------- Amplitude resolution
+                  00: 9-bit at 32768 Hz
+                  01: 8-bit at 65536 Hz (most common)
+                  10: 7-bit at 131072 Hz
+                  11: 6-bit at 262144 Hz
+
+Do NOT use SNDBIAS directly.  To set the resolution, use
+  SETSNDRES(1);
+---------------------------------------------------------------------------------*)
+const
+  SNDBIAS      : pu16 = pointer($04000088);
+  
+procedure SETSNDRES(x: integer); inline;
+
+const
+  DSOUND_FIFOA : pu32 = pointer($040000a0);
+  DSOUND_FIFOB : pu32 = pointer($040000a4);
+
+
+(*---------------------------------------------------------------------------------
+ Square 1 Sweep Register
+---------------------------------------------------------------------------------
+
+fedcba9876543210
+         |||||||
+         ||||+++- Sweep shifts (1 fastest; 7 slowest)
+         |||+---- 0: Sweep up; 1: Sweep down
+
+Write 0x0040 into this register to disable sweep.
+---------------------------------------------------------------------------------*)
+const
+  SQR1SWEEP   : pu16 = pointer($04000060);
+  SQR1SWEEP_OFF = $0008;
+
+
+(*---------------------------------------------------------------------------------
+   Square 1 Control Register
+   Square 2 Control Register
+-----------------------------------------------------------------------------------
+fedcba9876543210
+||||||||||||||||
+||||||||||++++++- Sound length (1 longest; 63: shortest)
+||||||||++------- Duty cycle (00: 1/8; 01: 1/4; 10: 1/2; 11: 3/4)
+|||||+++--------- Envelope step time (0: off; 1 fastest; 7 slowest)
+||||+------------ Envelope direction (0: decrease; 1: increase)
+++++------------- Volume
+---------------------------------------------------------------------------------*)
+const
+  SQR1CTRL    : pu16 = pointer($04000062);
+  SQR2CTRL    : pu16 = pointer($04000068);
+
+function SQR_DUTY(n: integer): integer; inline;
+
+function  SQR_VOL(n: integer): integer; inline;
+
+(*---------------------------------------------------------------------------------
+   Square 1 Frequency
+   Square 2 Frequency
+   Triangle Channel Frequency (0x04000074)
+-----------------------------------------------------------------------------------
+fedcba9876543210
+||   |||||||||||
+||   +++++++++++- frequency (131072 Hz/(2048-x)) (halved for tri channel)
+|+--------------- 0: hold note; 1: use length
++---------------- 1: Reset channel
+---------------------------------------------------------------------------------*)
+const
+  SQR1FREQ      : pu16 = pointer($04000064);
+  SQR2FREQ      : pu16 = pointer($0400006c);
+  TRIFREQ       : pu16 = pointer($04000074);
+  TRIFREQ_HOLD  = $0000;
+  TRIFREQ_TIMED = $4000;
+  TRIFREQ_RESET = $8000;
+
+
+(*---------------------------------------------------------------------------------
+	Triangle Channel Control Register
+-----------------------------------------------------------------------------------
+fedcba9876543210
+        |||
+        ||+------ Bank mode (0: 2 banks of 32; 1: 1 bank of 64)
+        |+------- Play this bank (and write other bank)
+        +-------- Enable triangle channel
+---------------------------------------------------------------------------------*)
+const
+  TRICTRL         : pu16 = pointer($04000070);
+  TRICTRL_2X32    = $0000;
+  TRICTRL_1X64    = $0020;
+  
+function TRICTRL_BANK(x: integer): integer; inline;
+
+const
+  TRICTRL_ENABLE  = $0080;
+
+(*---------------------------------------------------------------------------------
+	Triangle Channel Length/Volume (0x04000072)
+-----------------------------------------------------------------------------------
+
+fedcba9876543210
+|||     ||||||||
+|||     ++++++++- Length ((256-x)/256 seconds)
++++-------------- Volume (000: mute; 001: 100%; 010: 50%;
+                          011: 25%; 100: 75%)
+---------------------------------------------------------------------------------*)
+const
+  TRILENVOL        :pu16 = pointer($04000072);
+
+function TRILENVOL_LEN(x: integer): integer; inline;
+
+const
+  TRILENVOL_MUTE   = $0000;
+  TRILENVOL_25     = $6000;
+  TRILENVOL_50     = $4000;
+  TRILENVOL_75     = $8000;
+  TRILENVOL_100    = $2000;
+
+  TRIWAVERAM : pu32 = pointer($04000090);
+
+//---------------------------------------------------------------------------------
+//	Bios sound functions
+//---------------------------------------------------------------------------------
+
+procedure SoundDriverMain(); assembler; inline;
+procedure SoundDriverVsync(); assembler; inline;
+procedure SoundChannelClear(); assembler; inline;
+procedure SoundDriverVsyncOff(); assembler; inline;
+procedure SoundDriverVsyncOn(); assembler; inline;
+
+procedure SoundDriverInit(sa: PSoundArea); cdecl; external;
+procedure SoundDriverMode(mode: u32); cdecl; external;
+
+function MidiKey2Freq(wa: PWaveData; mk, fp: u8): u32; cdecl; external;
+{$endif GBA_INTERFACE}
+
+
+{$ifdef GBA_IMPLEMENTATION}
+function SOUND3_SETBANK(n: integer): integer; inline;
+begin
+	SOUND3_SETBANK := (n shl 6);	// Bank to play 0 or 1 (non set bank is written to)
+end;
+  
+function DMGSNDCTRL_LVOL(x: integer): integer; inline;
+begin 
+  DMGSNDCTRL_LVOL := (x);
+end;
+
+function DMGSNDCTRL_RVOL(x: integer): integer; inline;
+begin
+  DMGSNDCTRL_RVOL := ((x) shl 4);
+end;
+  
+function DSOUNDCTRL_ATIMER(x: integer): integer; inline; 
+begin
+  DSOUNDCTRL_ATIMER := ((x) shl 10);
+end;
+  
+function  DSOUNDCTRL_BTIMER(x: integer): integer; inline;  
+begin
+  DSOUNDCTRL_BTIMER := ((x) shl 14);
+end;
+
+procedure SETSNDRES(x: integer); inline;
+begin 
+  SNDBIAS^ := (SNDBIAS^ and $3fff) or (x shl 14);
+end;
+
+function SQR_DUTY(n: integer): integer; inline;
+begin 
+  SQR_DUTY := ((n) shl 6);
+end;
+
+function  SQR_VOL(n: integer): integer; inline;
+begin   
+  SQR_VOL := ((n) shl 12);
+end;
+
+function TRICTRL_BANK(x: integer): integer; inline;
+begin
+  TRICTRL_BANK := ((x) shl 6);
+end;
+
+function TRILENVOL_LEN(x: integer): integer; inline;
+begin 
+  TRILENVOL_LEN := (256 - (x));
+end;
+
+procedure SoundDriverMain(); assembler; inline;
+asm 
+  SWI SC_ARM_28 
+end;
+
+procedure SoundDriverVsync(); assembler; inline;
+asm 
+  SWI SC_ARM_29
+end;
+
+procedure SoundChannelClear(); assembler; inline;
+asm 
+  SWI SC_ARM_30
+end;
+
+procedure SoundDriverVsyncOff(); assembler; inline;
+asm 
+  SWI SC_ARM_40
+end;
+
+procedure SoundDriverVsyncOn(); assembler; inline;
+asm 
+  SWI SC_ARM_41
+end;
+{$endif GBA_IMPLEMENTATION}

+ 240 - 0
packages/libgbafpc/src/gba/gba_sprites.inc

@@ -0,0 +1,240 @@
+(*
+  $Id$
+  ------------------------------------------------------------------------------
+	Header file for libgba sprite definitions
+
+	Copyright 2003-2006 by Dave Murphy.
+
+	This library is free software; you can redistribute it and/or
+	modify it under the terms of the GNU Library General Public
+	License as published by the Free Software Foundation; either
+	version 2 of the License, or (at your option) any later version.
+
+	This library is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+	Library General Public License for more details.
+
+	You should have received a copy of the GNU Library General Public
+	License along with this library; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+	USA.
+
+	Please report all bugs and problems through the bug tracker at
+	"http://sourceforge.net/tracker/?group_id=114505&atid=668551".
+
+
+  ------------------------------------------------------------------------------
+    
+    
+  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
+  (http://www.freepascal.org)
+   
+  Copyright (C) 2006  Francesco Lombardi
+  Check http://sourceforge.net/projects/libndsfpc for updates
+   
+  ------------------------------------------------------------------------------
+
+  $Log$
+
+
+
+
+*)
+
+{$ifdef GBA_INTERFACE}
+type
+  OBJATTR = record
+    attr0: u16;
+    attr1: u16;
+    attr2: u16;
+    dummy: u16;
+  end; 
+  POBJATTR = ^OBJATTR;
+
+  SpriteEntry = record
+    attribute: array [0..2] of u16;
+    dummy: u16;
+  end;
+  PSpriteEntry = ^SpriteEntry;
+
+  OBJAFFINE = record
+    dummy0: array [0..2] of u16;
+    pa: s16;
+    dummy1: array [0..2] of u16;
+    pb: s16;
+    dummy2: array [0..2] of u16;
+    pc: s16;
+    dummy3: array [0..2] of u16;
+    pd: s16;
+  end;
+  POBJAFFINE = ^OBJAFFINE;
+
+
+const
+  OAM           : POBJATTR  =	pointer($07000000);
+  OBJ_BASE_ADR		          = pointer(VRAM + $10000);
+  SPRITE_GFX    : pu16      = pointer(VRAM + $10000);
+  BITMAP_OBJ_BASE_ADR	      = pointer(VRAM + $14000);
+
+type
+  SPRITE_SHAPES = integer;
+
+const  
+  SQUARE: SPRITE_SHAPES = 0;
+  WIDE: SPRITE_SHAPES = 1; 
+  TALL: SPRITE_SHAPES = 2;
+  
+  
+function OBJ_SHAPE(m: integer): integer; inline;
+
+// Sprite Attribute 0
+function OBJ_Y(m: integer): integer; inline;
+
+const
+  OBJ_ROT_SCALE_ON  = (1 shl 8);
+  OBJ_DISABLE = (1 shl 9);
+  OBJ_DOUBLE  = (1 shl 9);
+
+function OBJ_MODE(m: integer): integer; inline;
+
+const
+  OBJ_MOSAIC    = (1 shl 12);
+  OBJ_256_COLOR = (1 shl 13);
+  OBJ_16_COLOR  = (0 shl 13);
+
+  ATTR0_MOSAIC			    = (1 shl 12);
+  ATTR0_COLOR_256			  = (1 shl 13);
+  ATTR0_COLOR_16			  = (0 shl 13);
+  ATTR0_NORMAL			    = (0 shl 8);
+  ATTR0_ROTSCALE			  = (1 shl 8);
+  ATTR0_DISABLED			  = (2 shl 8);
+  ATTR0_ROTSCALE_DOUBLE = (3 shl 8);
+
+{$define  ATTR0_SQUARE	:= OBJ_SHAPE(SQUARE)}
+{$define  ATTR0_WIDE		:= OBJ_SHAPE(WIDE)}
+{$define  ATTR0_TALL		:= OBJ_SHAPE(TALL)}
+
+
+
+// Sprite Attribute 1
+function OBJ_X(m: integer): integer; inline;
+
+function OBJ_ROT_SCALE(m: integer): integer; inline;
+
+const
+  OBJ_HFLIP			= (1 shl 12);
+  OBJ_VFLIP			= (1 shl 13);
+
+
+function ATTR1_ROTDATA(n: integer): integer; inline;
+
+const
+  ATTR1_FLIP_X          = (1 shl 12);
+  ATTR1_FLIP_Y          = (1 shl 13);
+  ATTR1_SIZE_8          = (0 shl 14);
+  ATTR1_SIZE_16         = (1 shl 14);
+  ATTR1_SIZE_32         = (2 shl 14);
+  ATTR1_SIZE_64         = (3 shl 14);
+
+
+
+function OBJ_SIZE(m: integer): integer; inline;
+// Sprite Attribute 2
+function OBJ_CHAR(m: integer): integer; inline;
+function OBJ_PRIORITY(m: integer): integer; inline;
+function OBJ_PALETTE(m: integer): integer; inline;
+
+function ATTR2_PRIORITY(n: integer): integer; inline;
+function ATTR2_PALETTE(n: integer): integer; inline;
+
+{$define OBJ_TRANSLUCENT  := OBJ_MODE(1)}
+{$define OBJ_OBJWINDOW    := OBJ_MODE(2)}
+{$define OBJ_SQUARE       := OBJ_SHAPE(0)}
+{$define OBJ_WIDE         := OBJ_SHAPE(1)}
+{$define OBJ_TALL         := OBJ_SHAPE(2)}
+
+//---------------------------------------------------------------------------------
+type
+  SPRITE_SIZECODE = integer;
+const		
+  Sprite_8x8  : SPRITE_SIZECODE = 0;
+  Sprite_16x16: SPRITE_SIZECODE = 1;
+  Sprite_32x32: SPRITE_SIZECODE = 2;
+  Sprite_64x64: SPRITE_SIZECODE = 3;
+  Sprite_16x8 : SPRITE_SIZECODE = 4;
+  Sprite_32x8 : SPRITE_SIZECODE = 5;
+  Sprite_32x16: SPRITE_SIZECODE = 6;
+  Sprite_64x32: SPRITE_SIZECODE = 7;
+  Sprite_8x16 : SPRITE_SIZECODE = 8;
+  Sprite_8x32 : SPRITE_SIZECODE = 9;
+  Sprite_16x32: SPRITE_SIZECODE = 10;
+  Sprite_32x64: SPRITE_SIZECODE = 11;
+
+{$endif GBA_INTERFACE}
+
+{$ifdef GBA_IMPLEMENTATION}
+function OBJ_SHAPE(m: integer): integer; inline;
+begin		
+  OBJ_SHAPE := ((m) shl 14);
+end;
+
+// Sprite Attribute 0
+function OBJ_Y(m: integer): integer; inline;
+begin
+  OBJ_Y := ((m) and $00ff);
+end;
+
+function OBJ_MODE(m: integer): integer; inline;
+begin
+  OBJ_MODE := ((m) shl 10);
+end;
+
+// Sprite Attribute 1
+function OBJ_X(m: integer): integer; inline;
+begin
+  OBJ_X := ((m) and $01ff);
+end;
+
+function OBJ_ROT_SCALE(m: integer): integer; inline;
+begin
+  OBJ_ROT_SCALE := ((m) shl 9);
+end;
+
+function ATTR1_ROTDATA(n: integer): integer; inline;
+begin
+  ATTR1_ROTDATA := ((n) shl 9);  // note: overlaps with flip flags
+end;
+
+function OBJ_SIZE(m: integer): integer; inline;
+begin
+  OBJ_SIZE := ((m) shl 14);
+end;
+
+// Sprite Attribute 2
+function OBJ_CHAR(m: integer): integer; inline;
+begin
+  OBJ_CHAR := ((m) and $03ff);
+end;
+
+function OBJ_PRIORITY(m: integer): integer; inline;
+begin
+  OBJ_PRIORITY := ((m) shl 10);
+end;
+
+function OBJ_PALETTE(m: integer): integer; inline;
+begin
+  OBJ_PALETTE := ((m) shl 12);
+end;
+
+function ATTR2_PRIORITY(n: integer): integer; inline;
+begin     
+  ATTR2_PRIORITY := ((n) shl 10);
+end;
+
+function ATTR2_PALETTE(n: integer): integer; inline;
+begin      
+  ATTR2_PALETTE := ((n) shl 12);
+end;
+
+{$endif GBA_IMPLEMENTATION}

+ 134 - 0
packages/libgbafpc/src/gba/gba_systemcalls.inc

@@ -0,0 +1,134 @@
+(*
+  $Id$
+  ------------------------------------------------------------------------------
+	Header file for libgba bios calls
+
+	Copyright 2003-2005 by Dave Murphy.
+
+	This library is free software; you can redistribute it and/or
+	modify it under the terms of the GNU Library General Public
+	License as published by the Free Software Foundation; either
+	version 2 of the License, or (at your option) any later version.
+
+	This library is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+	Library General Public License for more details.
+
+	You should have received a copy of the GNU Library General Public
+	License along with this library; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+	USA.
+
+	Please report all bugs and problems through the bug tracker at
+	"http://sourceforge.net/tracker/?group_id=114505&atid=668551".
+
+
+  ------------------------------------------------------------------------------
+    
+    
+  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
+  (http://www.freepascal.org)
+   
+  Copyright (C) 2006  Francesco Lombardi
+  Check http://sourceforge.net/projects/libndsfpc for updates
+   
+  ------------------------------------------------------------------------------
+
+  $Log$
+
+*)
+
+
+{$ifdef GBA_INTERFACE}
+//---------------------------------------------------------------------------------
+// Reset Functions
+//---------------------------------------------------------------------------------
+type
+  RESTART_FLAG = integer;
+const
+  ROM_RESTART: RESTART_FLAG = 0; 	(* Restart from RAM entry point. *)
+	RAM_RESTART: RESTART_FLAG	= 1;	(* restart from ROM entry point *)
+
+
+
+procedure SoftReset(RestartFlag: RESTART_FLAG);cdecl; external;
+
+type
+  RESET_FLAG = integer;
+  RESET_FLAGS = RESET_FLAG;
+const
+	RESET_EWRAM    : RESET_FLAGS  = (1 shl 0);	(* Clear 256K on-board WRAM			*)
+	RESET_IWRAM    : RESET_FLAGS  = (1 shl 1);	(* Clear 32K in-chip WRAM				*)
+	RESET_PALETTE  : RESET_FLAGS  = (1 shl 2);	(* Clear Palette						*)
+	RESET_VRAM     : RESET_FLAGS  = (1 shl 3);	(* Clear VRAM							*)
+	RESET_OAM      : RESET_FLAGS  = (1 shl 4);	(* Clear OAM							*)
+	RESET_SIO      : RESET_FLAGS  = (1 shl 5);	(* Switches to general purpose mode	*)
+	RESET_SOUND    : RESET_FLAGS  = (1 shl 6);	(* Reset Sound registers				*)
+	RESET_OTHER    : RESET_FLAGS  = (1 shl 7);	(* all other registers				*)
+
+
+procedure RegisterRamReset(ResetFlags: integer); cdecl; external;
+
+//---------------------------------------------------------------------------------
+// Interrupt functions
+//---------------------------------------------------------------------------------
+
+procedure Halt(); assembler; inline;
+
+procedure Stop(); assembler; inline;
+
+//---------------------------------------------------------------------------------
+function BiosCheckSum(): u32; assembler; inline;
+
+//---------------------------------------------------------------------------------
+// Math functions
+//---------------------------------------------------------------------------------
+function Divi(Number, Divisor: s32): s32; cdecl; external;
+function DivMod(Number, Divisor: s32): s32; cdecl; external;
+function DivAbs(Number, Divisor: s32): u32; cdecl; external;
+function DivArm(Divisor, Number: s32): s32; cdecl; external;
+function DivArmMod(Divisor, Number: s32): s32; cdecl; external;
+function DivArmAbs(Divisor, Number: s32): u32; cdecl; external;
+function Sqrt(X: u32): u16; cdecl; external;
+
+function ArcTan(Tn: s16): s16; cdecl; external;
+function ArcTan2(X, Y: s16): u16; cdecl; external;
+
+procedure CpuSet(const source: pointer; dest: pointer; mode: u32); cdecl; external;
+procedure CpuFastSet(const source: pointer; dest: pointer; mode: u32); cdecl; external;
+
+procedure IntrWait(ReturnFlag, IntFlag: u32); cdecl; external;
+
+procedure VBlankIntrWait(); assembler; inline; 
+{$endif GBA_INTERFACE}
+
+
+{$ifdef GBA_IMPLEMENTATION}
+//---------------------------------------------------------------------------------
+// Interrupt functions
+//---------------------------------------------------------------------------------
+
+procedure Halt(); assembler; inline;
+asm 
+  SWI SC_ARM_2
+end;
+
+procedure Stop(); assembler; inline;
+asm 
+  SWI SC_ARM_3
+end;
+
+//---------------------------------------------------------------------------------
+function BiosCheckSum(): u32; assembler; inline;
+asm
+	SWI	#0xd0000
+  mov r0,#0
+end;
+
+procedure VBlankIntrWait(); assembler; inline; 
+asm 
+  SWI SC_ARM_5
+end;	
+{$endif GBA_IMPLEMENTATION}
+

+ 65 - 0
packages/libgbafpc/src/gba/gba_timers.inc

@@ -0,0 +1,65 @@
+(*
+  $Id$
+  ------------------------------------------------------------------------------
+	Header file for libgba timer definitions
+
+	Copyright 2003-2005 by Dave Murphy.
+
+	This library is free software; you can redistribute it and/or
+	modify it under the terms of the GNU Library General Public
+	License as published by the Free Software Foundation; either
+	version 2 of the License, or (at your option) any later version.
+
+	This library is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+	Library General Public License for more details.
+
+	You should have received a copy of the GNU Library General Public
+	License along with this library; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+	USA.
+
+	Please report all bugs and problems through the bug tracker at
+	"http://sourceforge.net/tracker/?group_id=114505&atid=668551".
+
+  ------------------------------------------------------------------------------
+    
+    
+  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
+  (http://www.freepascal.org)
+   
+  Copyright (C) 2006  Francesco Lombardi
+  Check http://sourceforge.net/projects/libndsfpc for updates
+   
+  ------------------------------------------------------------------------------
+
+  $Log$
+
+*)
+
+
+{$ifdef GBA_INTERFACE}
+const
+  REG_TM0CNT		: pu32 = pointer(REG_BASE + $100);
+  REG_TM0CNT_L	: pu16 = pointer(REG_BASE + $100);
+  REG_TM0CNT_H	: pu16 = pointer(REG_BASE + $102);
+
+  REG_TM1CNT		: pu32 = pointer(REG_BASE + $104);
+  REG_TM1CNT_L	: pu16 = pointer(REG_BASE + $104);
+  REG_TM1CNT_H	: pu16 = pointer(REG_BASE + $106);
+
+  REG_TM2CNT		: pu32 = pointer(REG_BASE + $108);
+  REG_TM2CNT_L	: pu16 = pointer(REG_BASE + $108);
+  REG_TM2CNT_H	: pu16 = pointer(REG_BASE + $10a);
+
+  REG_TM3CNT		: pu32 = pointer(REG_BASE + $10c);
+  REG_TM3CNT_L	: pu16 = pointer(REG_BASE + $10c);
+  REG_TM3CNT_H	: pu16 = pointer(REG_BASE + $10e);
+
+
+{$define TIMER_COUNT  := BIT(2)}
+{$define TIMER_IRQ    := BIT(6)}
+{$define TIMER_START  := BIT(7)}
+
+{$endif GBA_INTERFACE}

+ 65 - 0
packages/libgbafpc/src/gba/gba_types.inc

@@ -0,0 +1,65 @@
+(*
+  $Id$
+  ------------------------------------------------------------------------------
+  Header file for libgba type definitions
+
+	Copyright 2003-2005 by Dave Murphy.
+
+	This library is free software; you can redistribute it and/or
+	modify it under the terms of the GNU Library General Public
+	License as published by the Free Software Foundation; either
+	version 2 of the License, or (at your option) any later version.
+
+	This library is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+	Library General Public License for more details.
+
+	You should have received a copy of the GNU Library General Public
+	License along with this library; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+	USA.
+
+	Please report all bugs and problems through the bug tracker at
+	"http://sourceforge.net/tracker/?group_id=114505&atid=668551".
+
+
+  ------------------------------------------------------------------------------
+    
+    
+  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
+  (http://www.freepascal.org)
+   
+  Copyright (C) 2006  Francesco Lombardi
+  Check http://sourceforge.net/projects/libndsfpc for updates
+   
+  ------------------------------------------------------------------------------
+
+  $Log$
+
+*)
+
+{$ifdef GBA_INTERFACE}
+
+//---------------------------------------------------------------------------------
+// Data	types
+//---------------------------------------------------------------------------------
+type
+  (* Unsigned types *)
+  u8  = byte;
+  u16 = word;
+  u32 = dword;
+  pu8 = ^u8;
+  pu16 = ^u16;
+  pu32 = ^u32;
+  
+  (* Signed types *)
+  s8  = shortint;
+  s16 = smallint;
+  s32 = longint;
+  ps8 = ^s8;
+  ps16 = ^s16;
+  ps32 = ^s32;
+
+{$endif GBA_INTERFACE}
+

+ 385 - 0
packages/libgbafpc/src/gba/gba_video.inc

@@ -0,0 +1,385 @@
+(*
+  $Id$
+  ------------------------------------------------------------------------------
+	Header file for libgba video definitions
+
+	Copyright 2003-2006 by Dave Murphy.
+
+	This library is free software; you can redistribute it and/or
+	modify it under the terms of the GNU Library General Public
+	License as published by the Free Software Foundation; either
+	version 2 of the License, or (at your option) any later version.
+
+	This library is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+	Library General Public License for more details.
+
+	You should have received a copy of the GNU Library General Public
+	License along with this library; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+	USA.
+
+	Please report all bugs and problems through the bug tracker at
+	"http://sourceforge.net/tracker/?group_id=114505&atid=668551".
+
+
+  ------------------------------------------------------------------------------
+    
+    
+  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
+  (http://www.freepascal.org)
+   
+  Copyright (C) 2006  Francesco Lombardi
+  Check http://sourceforge.net/projects/libndsfpc for updates
+   
+  ------------------------------------------------------------------------------
+
+  $Log$
+
+*)
+
+
+{$ifdef GBA_INTERFACE}
+
+const
+  BG_COLORS       : pu16 = pointer($05000000);	// Background color table
+  BG_PALETTE      : pu16 = pointer($05000000);	// Background color table
+
+  OBJ_COLORS      : pu16 = pointer($05000200);	// Sprite color table
+  SPRITE_PALETTE  : pu16 = pointer($05000200);	// Sprite color table
+
+  REG_DISPCNT     : pu16 = pointer(REG_BASE + $00);
+
+type
+  LCDC_BITS = integer;
+const
+	MODE_0 : LCDC_BITS =	0;	(* BG Mode 0 *)
+	MODE_1 : LCDC_BITS =	1;	(* BG Mode 1 *)
+	MODE_2 : LCDC_BITS =	2;	(* BG Mode 2 *)
+	MODE_3 : LCDC_BITS =	3;	(* BG Mode 3 *)
+	MODE_4 : LCDC_BITS =	4;	(* BG Mode 4 *)
+	MODE_5 : LCDC_BITS =	5;	(* BG Mode 5 *)
+
+	BACKBUFFER : LCDC_BITS =	(1 shl 4);		(* buffer display select			*)
+	OBJ_1D_MAP : LCDC_BITS =	(1 shl 6);		(* sprite 1 dimensional mapping	*)
+	LCDC_OFF : LCDC_BITS =	(1 shl 7);		(* LCDC OFF						*)
+	BG0_ON : LCDC_BITS =	(1 shl 8);		(* enable background 0			*)
+	BG1_ON : LCDC_BITS =	(1 shl 9);		(* enable background 1			*)
+	BG2_ON : LCDC_BITS =	(1 shl 10);	(* enable background 2			*)
+	BG3_ON : LCDC_BITS =	(1 shl 11);	(* enable background 3			*)
+	OBJ_ON : LCDC_BITS =	(1 shl 12);	(* enable sprites					*)
+	WIN0_ON : LCDC_BITS =	(1 shl 13);	(* enable window 0				*)
+	WIN1_ON : LCDC_BITS =	(1 shl 14);	(* enable window 1				*)
+	OBJ_WIN_ON : LCDC_BITS =	(1 shl 15);	(* enable obj window				*)
+
+	BG0_ENABLE : LCDC_BITS =	(1 shl 8);		(* enable background 0	*)
+	BG1_ENABLE : LCDC_BITS =	(1 shl 9); 	(* enable background 1	*)
+	BG2_ENABLE : LCDC_BITS =	(1 shl 10); 	(* enable background 2	*)
+	BG3_ENABLE : LCDC_BITS =	(1 shl 11);		(* enable background 3	*)
+	OBJ_ENABLE : LCDC_BITS =	(1 shl 12); 	(* enable sprites			*)
+	WIN0_ENABLE : LCDC_BITS =	(1 shl 13);	(* enable window 0		*)
+	WIN1_ENABLE : LCDC_BITS =	(1 shl 14);	(* enable window 1		*)
+	OBJ_WIN_ENABLE : LCDC_BITS =	(1 shl 15); 	(* enable obj window		*)
+
+	BG_ALL_ON : LCDC_BITS =	(1 shl 8) or (1 shl 9) or (1 shl 10) or (1 shl 11); 	    (* All Backgrounds on.		*)
+	BG_ALL_ENABLE : LCDC_BITS =	(1 shl 8) or (1 shl 9) or (1 shl 10) or (1 shl 11);	    (* All Backgrounds enabled.	*)
+
+const
+  REG_DISPSTAT	: pu16 = pointer(REG_BASE + $04);
+
+//---------------------------------------------------------------------------------
+// LCDC Interrupt bits
+//---------------------------------------------------------------------------------
+
+type
+  LCDC_IRQ = integer;
+const
+	LCDC_VBL_FLAG  : LCDC_IRQ = (1 shl 0);
+	LCDC_HBL_FLAG  : LCDC_IRQ = (1 shl 1);
+	LCDC_VCNT_FLAG  : LCDC_IRQ = (1 shl 2);
+	LCDC_VBL  : LCDC_IRQ = (1 shl 3);
+	LCDC_HBL  : LCDC_IRQ = (1 shl 4);
+	LCDC_VCNT  : LCDC_IRQ = (1 shl 5);
+
+
+function VCOUNT(m: integer): u32; inline; 
+
+
+const
+  REG_VCOUNT	: pu16 = pointer(REG_BASE + $06);
+  BGCTRL		  : pu16 = pointer(REG_BASE + $08);
+  REG_BG0CNT  : pu16 = pointer(REG_BASE + $08);
+  REG_BG1CNT  : pu16 = pointer(REG_BASE + $0a);
+  REG_BG2CNT  : pu16 = pointer(REG_BASE + $0c);
+  REG_BG3CNT  : pu16 = pointer(REG_BASE + $0e);
+
+type
+  bg_scroll = record
+    x: u16;
+    y: u16;
+  end;
+  Pbg_scroll = ^bg_scroll;
+
+const
+  BG_OFFSET : pbg_scroll = pointer(REG_BASE + $10);
+
+  REG_BG0HOFS		: pu16 = pointer(REG_BASE + $10);	// BG 0 H Offset
+  REG_BG0VOFS		: pu16 = pointer(REG_BASE + $12);	// BG 0 V Offset
+  REG_BG1HOFS		: pu16 = pointer(REG_BASE + $14);	// BG 1 H Offset
+  REG_BG1VOFS		: pu16 = pointer(REG_BASE + $16);	// BG 1 V Offset
+  REG_BG2HOFS		: pu16 = pointer(REG_BASE + $18);	// BG 2 H Offset
+  REG_BG2VOFS		: pu16 = pointer(REG_BASE + $1a);	// BG 2 V Offset
+  REG_BG3HOFS		: pu16 = pointer(REG_BASE + $1c);	// BG 3 H Offset
+  REG_BG3VOFS		: pu16 = pointer(REG_BASE + $1e);	// BG 3 V Offset
+
+  REG_BG2PA	: ps16 = pointer(REG_BASE + $20);
+  REG_BG2PB	: ps16 = pointer(REG_BASE + $22);
+  REG_BG2PC	: ps16 = pointer(REG_BASE + $24);
+  REG_BG2PD	: ps16 = pointer(REG_BASE + $26);
+  REG_BG2X	: ps32 = pointer(REG_BASE + $28);
+  REG_BG2Y	: ps32 = pointer(REG_BASE + $2c);
+  REG_BG3PA	: ps16 = pointer(REG_BASE + $30);
+  REG_BG3PB	: ps16 = pointer(REG_BASE + $32);
+  REG_BG3PC	: ps16 = pointer(REG_BASE + $34);
+  REG_BG3PD	: ps16 = pointer(REG_BASE + $36);
+  REG_BG3X	: ps32 = pointer(REG_BASE + $38);
+  REG_BG3Y	: ps32 = pointer(REG_BASE + $3c);
+
+function BG_SIZE(m: integer): integer; inline;
+
+type
+  BG_CTRL_BITS = integer;
+const
+	BG_MOSAIC      : BG_CTRL_BITS =	(1 shl 6);		  (* enable background mosaic			*)
+	BG_16_COLOR    : BG_CTRL_BITS =	(0 shl 7);		(* background uses 16 color tiles		*)
+	BG_256_COLOR   : BG_CTRL_BITS =	(1 shl 7);		(* background uses 256 color tiles	*)
+	BG_WRAP			: BG_CTRL_BITS =	  (1 shl 13);	  (* background wraps when scrolling	*)
+	
+  BG_SIZE_0		: BG_CTRL_BITS = (0 shl 14);	(* Map Size 256x256	*)
+  BG_SIZE_1		: BG_CTRL_BITS = (1 shl 14);	(* Map Size 512x256	*)
+  BG_SIZE_2		: BG_CTRL_BITS = (2 shl 14);	(* Map Size 256x512	*)
+  BG_SIZE_3		: BG_CTRL_BITS = (3 shl 14);	(* Map Size 512x512	*)
+
+
+function CHAR_BASE(m: integer): integer; inline;
+function BG_TILE_BASE(m: integer): integer; inline;
+function CHAR_BASE_ADR(m: integer): pointer; inline;
+function CHAR_BASE_BLOCK(m: integer): pointer; inline;
+function MAP_BASE_ADR(m: integer): pointer; inline;
+function SCREEN_BASE_BLOCK(m: integer): pointer; inline;
+function SCREEN_BASE(m: integer): integer; inline;
+function BG_MAP_BASE(m: integer): integer; inline;
+
+//alternate names for char and screen base
+function TILE_BASE(m: integer): integer; inline;
+function TILE_BASE_ADR(m: integer): pointer; inline;
+function MAP_BASE(m: integer): integer; inline;
+function BG_PRIORITY(m: integer): integer; inline;
+function CHAR_PALETTE(m: integer): integer; inline;
+
+(*---------------------------------------------------------------------------------
+	CHAR_BASE_ADR() is the direct equivalent to old PATRAM(),
+	giving the base address of a chr bank.
+	These macros pinpoint the base address of a single tile.
+---------------------------------------------------------------------------------*)
+function PATRAM4(x, tn: integer): pu32; inline;
+function PATRAM8(x, tn: integer): pu32; inline;
+function SPR_VRAM(tn: integer): pu32; inline;
+
+(*---------------------------------------------------------------------------------
+	MAP_BASE_ADR() only gives the beginning of a map.
+	Each cell of a text map can be accessed using 3D array notation:
+
+	MAP[page][y][x]
+---------------------------------------------------------------------------------*)
+type
+  NAMETABLE = array [0..31, 0..31] of u16;
+  PNAMETABLE = ^NAMETABLE;
+const
+  MAP : PNAMETABLE = pointer($06000000);
+
+(*---------------------------------------------------------------------------------
+	width and height of a GBA text map can (and probably should)
+	be controlled separately.
+---------------------------------------------------------------------------------*)
+const
+  BG_WID_32 = 0 shl 14;
+  BG_WID_64 = 1 shl 14;
+  BG_HT_32  = 0 shl 14;
+  BG_HT_64  = 2 shl 14;
+//---------------------------------------------------------------------------------
+// Symbolic names for the rot/scale map sizes
+//---------------------------------------------------------------------------------
+  
+  ROTBG_SIZE_16  = 0 shl 14;
+  ROTBG_SIZE_32  = 1 shl 14;
+  ROTBG_SIZE_64  = 2 shl 14;
+  ROTBG_SIZE_128 = 3 shl 14;
+
+  TEXTBG_SIZE_256x256    = 0 shl 14;
+  TEXTBG_SIZE_512x256    = 1 shl 14;
+  TEXTBG_SIZE_256x512    = 2 shl 14;
+  TEXTBG_SIZE_512x512    = 3 shl 14;
+
+  ROTBG_SIZE_128x128    = 0 shl 14;
+  ROTBG_SIZE_256x256    = 1 shl 14;
+  ROTBG_SIZE_512x512    = 2 shl 14;
+  ROTBG_SIZE_1024x1024  = 3 shl 14;
+
+//---------------------------------------------------------------------------------
+// Framebuffers for mode 3 and 5
+//---------------------------------------------------------------------------------
+type
+  MODE3_LINE = array [0..239] of u16;
+  PMODE3_LINE = ^MODE3_LINE;
+  MODE5_LINE = array [0..159] of u16;
+  PMODE5_LINE = ^MODE5_LINE;
+  
+const
+  MODE3_FB : PMODE3_LINE = pointer($06000000);
+  MODE5_FB : PMODE5_LINE = pointer($06000000);
+  MODE5_BB : PMODE5_LINE = pointer($0600A000);
+
+  REG_WIN0H	  : pu16 = pointer(REG_BASE + $40);
+  REG_WIN1H	  : pu16 = pointer(REG_BASE + $42);
+  REG_WIN0V	  : pu16 = pointer(REG_BASE + $44);
+  REG_WIN1V	  : pu16 = pointer(REG_BASE + $46);
+  REG_WININ	  : pu16 = pointer(REG_BASE + $48);
+  REG_WINOUT	: pu16 = pointer(REG_BASE + $4A);
+
+  REG_MOSAIC	: pu16 = pointer(REG_BASE + $4c);
+
+  REG_BLDCNT		: pu16 = pointer(REG_BASE + $50);
+  REG_BLDALPHA	: pu16 = pointer(REG_BASE + $52);
+  REG_BLDY		  : pu16 = pointer(REG_BASE + $54);
+
+//---------------------------------------------------------------------------------
+// Helper macros
+//---------------------------------------------------------------------------------
+procedure SetMode(mode: integer); inline;
+function RGB5(const r, g, b: word): word;inline;
+function RGB8(const r, g, b: word): word;inline;
+
+const
+  SCREEN_WIDTH = 240;
+  SCREEN_HEIGHT = 160;
+
+{$endif GBA_INTERFACE}
+
+
+
+{$ifdef GBA_IMPLEMENTATION}
+function VCOUNT(m: integer): u32; inline; 
+begin
+  VCOUNT := m shl 8; 
+end;
+
+function BG_SIZE(m: integer): integer; inline;
+begin
+  BG_SIZE := ((m shl 14));
+end;
+
+function CHAR_BASE(m: integer): integer; inline;
+begin
+  CHAR_BASE := ((m) shl 2);
+end;
+
+function BG_TILE_BASE(m: integer): integer; inline;
+begin		
+  BG_TILE_BASE := ((m) shl 2);
+end;
+
+function CHAR_BASE_ADR(m: integer): pointer; inline;
+begin
+  CHAR_BASE_ADR := pointer(VRAM + ((m) shl 14));
+end;
+
+function CHAR_BASE_BLOCK(m: integer): pointer; inline;
+begin
+  CHAR_BASE_BLOCK := pointer(VRAM + ((m) shl 14));
+end;
+
+function MAP_BASE_ADR(m: integer): pointer; inline;
+begin		
+  MAP_BASE_ADR := pointer(VRAM + ((m) shl 11));
+end;
+
+function SCREEN_BASE_BLOCK(m: integer): pointer; inline;
+begin		
+  SCREEN_BASE_BLOCK := pointer(VRAM + ((m) shl 11));
+end;
+
+function SCREEN_BASE(m: integer): integer; inline;
+begin
+  SCREEN_BASE := ((m) shl 8);
+end;
+
+function BG_MAP_BASE(m: integer): integer; inline;
+begin
+  BG_MAP_BASE := ((m) shl 8);
+end;
+
+//alternate names for char and screen base
+function TILE_BASE(m: integer): integer; inline;
+begin
+  TILE_BASE := ((m) shl 2);
+end;
+
+function TILE_BASE_ADR(m: integer): pointer; inline;
+begin
+  TILE_BASE_ADR := pointer(VRAM + ((m) shl 14));
+end;
+
+function MAP_BASE(m: integer): integer; inline;
+begin
+  MAP_BASE := ((m) shl 8);
+end;
+
+function BG_PRIORITY(m: integer): integer; inline;
+begin
+  BG_PRIORITY := (m);
+end;
+
+function CHAR_PALETTE(m: integer): integer; inline;
+begin
+  CHAR_PALETTE := ((m) shl 12);
+end;
+
+(*---------------------------------------------------------------------------------
+	CHAR_BASE_ADR() is the direct equivalent to old PATRAM(),
+	giving the base address of a chr bank.
+	These macros pinpoint the base address of a single tile.
+---------------------------------------------------------------------------------*)
+function PATRAM4(x, tn: integer): pu32; inline;
+begin
+  PATRAM4 := (pu32($6000000 or (((x) shl 14) + ((tn) shl 5)) ));
+end;
+
+function PATRAM8(x, tn: integer): pu32; inline;
+begin
+  PATRAM8 := (pu32($6000000 or (((x) shl 14) + ((tn) shl 6)) ));
+end;
+
+function SPR_VRAM(tn: integer): pu32; inline;
+begin
+  SPR_VRAM := (pu32(VRAM or $10000 or ((tn) shl 5)));
+end;
+
+procedure SetMode(mode: integer); inline;
+begin	
+  REG_DISPCNT^ := mode
+end;
+
+function RGB5(const r, g, b: word): word;inline;
+begin
+  RGB5 := ((r) or ((g) shl 5) or ((b) shl 10));
+end;
+
+function RGB8(const r, g, b: word): word;inline;
+begin
+  RGB8 := ( (((b) shr 3) shl 10) or (((g) shr 3) shl 5) or ((r) shr 3) );
+end;
+
+{$endif GBA_IMPLEMENTATION}
+

+ 181 - 0
packages/libgbafpc/src/gba/helper.inc

@@ -0,0 +1,181 @@
+(*
+  $Id$
+  ------------------------------------------------------------------------------
+  This lib is a raw porting of tonclib library for gba (you can find it at
+  http://user.chem.tue.nl/jakvijn/index.htm).
+  
+  As this is a direct port from c, I'm pretty sure that something could not work
+  as you expect. I am even more sure that this code could be written better, so 
+  if you think that I have made some mistakes or you have some better 
+  implemented functions, let me know [francky74 (at) gmail (dot) com]
+  Enjoy!
+
+  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
+  (http://www.freepascal.org)
+  
+  Copyright (C) 2006  Francesco Lombardi
+  
+  This library is free software; you can redistribute it and/or
+  modify it under the terms of the GNU Lesser General Public
+  License as published by the Free Software Foundation; either
+  version 2.1 of the License, or (at your option) any later version.
+  
+  This library is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  Lesser General Public License for more details.
+  
+  You should have received a copy of the GNU Lesser General Public
+  License along with this library; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+
+  ------------------------------------------------------------------------------
+    
+    
+  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
+  (http://www.freepascal.org)
+   
+  Copyright (C) 2006  Francesco Lombardi
+  Check http://sourceforge.net/projects/libndsfpc for updates
+   
+  ------------------------------------------------------------------------------
+
+  $Log$
+
+  
+*)
+
+
+{$ifdef GBA_INTERFACE}
+
+
+procedure memset16(dest: pointer; hw: word; hwcount: dword); cdecl; external;
+procedure memcpy16(dest: pointer; const src: pointer; hwcount: dword); cdecl; external;
+
+procedure memset32(dest: pointer; wd: dword; wcount: dword); cdecl; external;
+procedure memcpy32(dest: pointer; const src: pointer; wcount: dword); cdecl; external;
+
+function printf(format: Pchar; args: array of const): longint; cdecl; external;
+function printf(format: Pchar): longint; cdecl; varargs; external;
+function sprintf(s: Pchar; format: Pchar; args: array of const): longint; cdecl; external;
+function sprintf(s: Pchar; format: Pchar): longint; varargs; cdecl; external;
+function iprintf(format: Pchar; args: array of const): longint; cdecl; external;
+function iprintf(format: Pchar): longint; varargs; cdecl; external;
+function scanf(format: Pchar; args: array of const): longint; cdecl; external;
+function scanf(format: Pchar): longint; cdecl; varargs; external;
+function sscanf(s: Pchar; format: Pchar; args: array of const): longint; cdecl; external;
+function sscanf(s: Pchar; format: Pchar): longint; cdecl; varargs; external;
+
+function malloc(size: integer): pointer; cdecl; external;
+function realloc(ptr: pointer; size: integer): pointer; cdecl; external;
+procedure free(ptr: pointer); cdecl; external;
+function memcpy(dest: pointer; src: pointer; n: integer): pointer; cdecl; external;
+
+(* libc file handling types and routines *)
+type
+  _FILE = record
+    firstCluster: cuint;
+    length: cuint;
+    curPos: cuint;
+    curClus: cuint;			// Current cluster to read from
+    curSect: integer;			// Current sector within cluster
+    curByte: integer;			// Current byte within sector
+    readBuffer: array [0..511] of byte;	// Buffer used for unaligned reads
+    appClus: cuint;			// Cluster to append to
+    appSect: integer;			// Sector within cluster for appending
+    appByte: integer;			// Byte within sector for appending
+    read: boolean;	// Can read from file
+    write: boolean;	// Can write to file
+    append: boolean;// Can append to file
+    inUse: boolean;	// This file is open
+    dirEntSector: cuint;	// The sector where the directory entry is stored
+    dirEntOffset: integer;	// The offset within the directory sector
+  end;
+  P_FILE = ^_FILE;
+
+const
+   SEEK_SET = 0;
+   SEEK_CUR = 1;
+   SEEK_END = 2;
+
+function fopen(filename: Pchar; modes: Pchar): P_FILE; cdecl; external;
+function fread(ptr: pointer; size: longint; n: longint; stream: P_FILE): longint; cdecl; external;
+function fwrite(ptr: pointer; size: longint; n: longint; s: P_FILE): longint; cdecl; external;
+function ftell(stream: P_FILE): longint; cdecl; external;
+function fseek(stream: P_FILE; off: longint; whence: longint): longint; cdecl; external;
+function fclose(stream: P_FILE): longint; cdecl; external;
+
+(* Directory iterator for mantaining state between dir* calls *)
+type
+  DIR_ITER = record
+    device: cint;
+    dirStruct: pointer;
+  end;
+  PDIR_ITER = ^DIR_ITER;
+
+  stat = packed record
+    st_dev: qword;
+    __pad1: word;
+    __align_pad1: word;
+    st_ino: dword;
+    st_mode : dword;
+    st_nlink : dword;
+    st_uid : dword;
+    st_gid : dword;
+    st_rdev : qword;
+    __pad2 : word;
+    __align_pad2 : word;
+    st_size : longint;
+    st_blksize : longint;
+    st_blocks : longint;
+    st_atime : longint;
+    __unused1 : dword;
+    st_mtime : longint;
+    __unused2 : dword;
+    st_ctime : longint;
+    __unused3 : dword;
+    __unused4 : dword;
+    __unused5 : dword;
+  end;
+  Pstat = ^stat;
+
+const
+  S_IFMT        = $F000;
+  S_IFDIR       = $4000;
+  S_IFCHR       = $2000;
+  S_IFBLK       = $6000;
+  S_IFREG       = $8000;
+  S_IFIFO       = $1000;
+  S_IFLNK       = $A000;
+  S_IFSOCK      = $C000;
+
+  S_ISUID       = $800;
+  S_ISGID       = $400;
+  S_ISVTX       = $200;
+  S_IREAD       = $100;
+  S_IWRITE      = $80;
+  S_IEXEC       = $40;
+
+function diropen(const path: pchar): PDIR_ITER; cdecl; external;
+function dirreset(dirState: PDIR_ITER): cint; cdecl; external;
+function dirnext(dirState: PDIR_ITER; filename: pchar; filestat: Pstat): cint; cdecl; external;
+function dirclose(dirState: PDIR_ITER): cint; cdecl; external;
+
+procedure DebugPrint(s: string); assembler; inline;
+
+{$endif GBA_INTERFACE}
+
+
+{$ifdef GBA_IMPLEMENTATION}
+
+// memory handling routines
+// these are in ASM and optimized; use when possible
+{$l core_asm.o}
+
+procedure DebugPrint(s: string); assembler; inline;
+asm
+  mov r0,s
+  swi #0xff0000
+end['r0'];
+
+{$endif GBA_IMPLEMENTATION}

+ 88 - 0
packages/libgbafpc/src/gba/mappy.inc

@@ -0,0 +1,88 @@
+(*
+  $Id$
+  ------------------------------------------------------------------------------
+	Header file for libgba mappy debug functions
+
+	Copyright 2003-2004 by Dave Murphy.
+
+	This library is free software; you can redistribute it and/or
+	modify it under the terms of the GNU Library General Public
+	License as published by the Free Software Foundation; either
+	version 2 of the License, or (at your option) any later version.
+
+	This library is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+	Library General Public License for more details.
+
+	You should have received a copy of the GNU Library General Public
+	License along with this library; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+	USA.
+
+	Please report all bugs and problems through the bug tracker at
+	"http://sourceforge.net/tracker/?group_id=114505&atid=668551".
+
+
+  ------------------------------------------------------------------------------
+    
+    
+  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
+  (http://www.freepascal.org)
+   
+  Copyright (C) 2006  Francesco Lombardi
+  Check http://sourceforge.net/projects/libndsfpc for updates
+   
+  ------------------------------------------------------------------------------
+
+  $Log$
+
+
+*)
+
+
+
+{$ifdef GBA_INTERFACE}
+//---------------------------------------------------------------------------------
+// Don't Use these function names
+//---------------------------------------------------------------------------------
+procedure mappy_dprintf(str: pchar; args: array of const); cdecl; external;
+procedure mappy_dputchar(c: integer); cdecl; external;
+
+//---------------------------------------------------------------------------------
+// Use these function names instead
+// these will be repeated for Xcomms & MBV2
+//---------------------------------------------------------------------------------
+procedure dprintf(str: pchar; args: array of const); inline;
+procedure dputchar(c: integer); inline;
+
+//---------------------------------------------------------------------------------
+// Sorry no file stuff
+//---------------------------------------------------------------------------------
+{
+#define dfprintf
+#define dfopen
+#define dfseek
+#define dfread
+#define dfwrite
+#define dftell
+#define dfclose
+#define dfgetc
+#define dfputc
+#define drewind
+}
+{$endif GBA_INTERFACE}
+
+{$ifdef GBA_IMPLEMENTATION}
+procedure dprintf(str: pchar; args: array of const); inline;
+begin
+  mappy_dprintf(str, args);
+end;
+
+procedure dputchar(c: integer); inline;
+begin
+  mappy_dputchar(c);
+end;
+{$endif GBA_IMPLEMENTATION}
+
+

+ 150 - 0
packages/libgbafpc/src/gba/mbv2.inc

@@ -0,0 +1,150 @@
+(*
+  $Id$
+  ------------------------------------------------------------------------------
+	Header file for libgba mbv2 functions
+
+	Copyright 2003-2004 by Dave Murphy.
+
+	This library is free software; you can redistribute it and/or
+	modify it under the terms of the GNU Library General Public
+	License as published by the Free Software Foundation; either
+	version 2 of the License, or (at your option) any later version.
+
+	This library is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+	Library General Public License for more details.
+
+	You should have received a copy of the GNU Library General Public
+	License along with this library; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+	USA.
+
+	Please report all bugs and problems through the bug tracker at
+	"http://sourceforge.net/tracker/?group_id=114505&atid=668551".
+
+  ------------------------------------------------------------------------------
+    
+    
+  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
+  (http://www.freepascal.org)
+   
+  Copyright (C) 2006  Francesco Lombardi
+  Check http://sourceforge.net/projects/libndsfpc for updates
+   
+  ------------------------------------------------------------------------------
+
+  $Log$
+
+
+
+*)
+
+{$ifdef GBA_INTERFACE}
+//---------------------------------------------------------------------------------
+// Don't Use these function names
+//---------------------------------------------------------------------------------
+procedure mbv2_dprintf(str: pchar; args: array of const); cdecl; external;
+procedure mbv2_dfprintf(fp: integer; str: pchar; args: array of const); cdecl; external;
+function mbv2_dputchar(c: integer): integer; cdecl; external;
+function mbv2_dgetch(): integer; cdecl; external;
+function mbv2_dkbhit(): integer; cdecl; external;
+
+function mbv2_dfopen(const _file: pchar; const _type: pchar): integer; cdecl; external;
+function mbv2_dfclose	(fp: integer): integer; cdecl; external;
+function mbv2_dfgetc(fp: integer): integer; cdecl; external;
+function mbv2_dfputc(ch, fp: integer): integer; cdecl; external;
+procedure mbv2_drewind(fp: integer); cdecl; external;
+
+//---------------------------------------------------------------------------------
+// Use these function names instead
+// these will be repeated for VBA & Xcomms
+//---------------------------------------------------------------------------------
+procedure dprintf(str: pchar; args: array of const); inline;
+procedure dfprintf(fp: integer; str: pchar; args: array of const); inline;
+function dputchar(c: integer): integer; inline;
+function dgetch(): integer; inline;
+function dkbhit(): integer; inline;
+function dfopen(const _file: pchar; const _type: pchar): integer; inline;
+function dfclose	(fp: integer): integer; inline;
+function dfgetc(fp: integer): integer; inline;
+function dfputc(ch, fp: integer): integer; inline;
+procedure drewind(fp: integer); inline;
+
+
+const
+  __DOUTBUFSIZE	= 256;
+  __FINBUFSIZE	= 256;  //Must be a multiple of 2! (ex: 32,64,128,256,512..)
+  __KINBUFSIZE	= 64;   //Must be a multiple of 2! (ex: 32,64,128,256,512..)
+  __ESCCHR		= 27;
+
+  __ESC_NADA				= 0;
+  __ESC_ESCCHR			= 1;
+  __ESC_FOPEN				= 2;
+  __ESC_FCLOSE			= 3;
+  __ESC_FGETC				= 4;
+  __ESC_FPUTC				= 5;
+  __ESC_REWIND			= 6;
+  __ESC_FPUTC_PROCESSED	= 7;	// PC side add CR before LF if DOS machine
+  __ESC_KBDCHR 			= 8;
+
+function __dputchar (c: integer): integer; cdecl; external;
+{$endif GBA_INTERFACE}
+
+
+{$ifdef GBA_IMPLEMENTATION}
+//---------------------------------------------------------------------------------
+// Use these function names instead
+// these will be repeated for VBA & Xcomms
+//---------------------------------------------------------------------------------
+procedure dprintf(str: pchar; args: array of const); inline;
+begin
+  mbv2_dprintf(str, args); 
+end;
+
+procedure dfprintf(fp: integer; str: pchar; args: array of const); inline;
+begin
+  mbv2_dfprintf(fp, str, args); 
+end;
+
+function dputchar(c: integer): integer; inline;
+begin
+  dputchar := mbv2_dputchar(c);
+end;
+
+function dgetch(): integer; inline;
+begin
+  dgetch := mbv2_dgetch();
+end;
+
+function dkbhit(): integer; inline;
+begin
+  dkbhit := mbv2_dkbhit();
+end;
+
+
+function dfopen(const _file: pchar; const _type: pchar): integer; inline;
+begin
+  dfopen := mbv2_dfopen(_file, _type);
+end;
+
+function dfclose	(fp: integer): integer; inline;
+begin
+  dfclose := mbv2_dfclose(fp);
+end;
+
+function dfgetc(fp: integer): integer; inline;
+begin
+  dfgetc := mbv2_dfgetc(fp);
+end;
+
+function dfputc(ch, fp: integer): integer; inline;
+begin
+  dfputc := mbv2_dfputc(ch, fp); 
+end;
+
+procedure drewind(fp: integer); inline;
+begin
+  mbv2_drewind(fp);
+end;
+{$endif GBA_IMPLEMENTATION}

+ 64 - 0
packages/libgbafpc/src/gba/pcx.inc

@@ -0,0 +1,64 @@
+(*
+  $Id$
+  ------------------------------------------------------------------------------
+	Header file for libgba PCX decoder
+
+	Copyright 2003-2004 by Dave Murphy.
+
+	This library is free software; you can redistribute it and/or
+	modify it under the terms of the GNU Library General Public
+	License as published by the Free Software Foundation; either
+	version 2 of the License, or (at your option) any later version.
+
+	This library is distributed in the hope that it will be useful,
+	but WITHOUT ANY WARRANTY; without even the implied warranty of
+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+	Library General Public License for more details.
+
+	You should have received a copy of the GNU Library General Public
+	License along with this library; if not, write to the Free Software
+	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+	USA.
+
+	Please report all bugs and problems through the bug tracker at
+	"http://sourceforge.net/tracker/?group_id=114505&atid=668551".
+
+  ------------------------------------------------------------------------------
+    
+    
+  Conversion by Legolas (http://itaprogaming.free.fr) for freepascal compiler
+  (http://www.freepascal.org)
+   
+  Copyright (C) 2006  Francesco Lombardi
+  Check http://sourceforge.net/projects/libndsfpc for updates
+   
+  ------------------------------------------------------------------------------
+
+  $Log$
+
+
+
+*)
+
+{$ifdef GBA_INTERFACE}
+type
+  pcx_header = packed record
+    manufacturer: byte;
+    version: byte;
+    encoding: byte;
+    bpp: byte;
+    x1,y1: u16;
+    x2,y2: u16;
+    hres: u16;
+    vres: u16;
+    palette: array [0..47] of byte;
+    reserved: byte;
+    color_planes: byte;
+    BytesPerLine: u16;
+    PaletteType: u16;
+    dummy: array [0..57] of byte;
+  end;
+
+procedure DecodePCX(const PCXBuffer: pu8; ScreenAddr, Palette: pu16); cdecl; external;
+
+{$endif GBA_INTERFACE}

+ 61 - 117
rtl/gba/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/04/30]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/05/07]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx
 UNIXs = linux $(BSDs) solaris qnx
 LIMIT83fs = go32v2 os2 emx watcom
 LIMIT83fs = go32v2 os2 emx watcom
@@ -169,17 +169,6 @@ OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
 endif
 endif
 FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
 FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
 FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
 FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
-ifeq ($(CPU_TARGET),armeb)
-ARCH=arm
-override FPCOPT+=-Cb
-else
-ifeq ($(CPU_TARGET),armel)
-ARCH=arm
-override FPCOPT+=-CaEABI
-else
-ARCH=$(CPU_TARGET)
-endif
-endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 TARGETSUFFIX=$(OS_TARGET)
 TARGETSUFFIX=$(OS_TARGET)
 SOURCESUFFIX=$(OS_SOURCE)
 SOURCESUFFIX=$(OS_SOURCE)
@@ -201,7 +190,7 @@ endif
 ifeq ($(OS_TARGET),linux)
 ifeq ($(OS_TARGET),linux)
 linuxHier=1
 linuxHier=1
 endif
 endif
-export OS_TARGET OS_SOURCE ARCH CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
+export OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
 ifdef FPCDIR
 ifdef FPCDIR
 override FPCDIR:=$(subst \,/,$(FPCDIR))
 override FPCDIR:=$(subst \,/,$(FPCDIR))
 ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
 ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
@@ -261,181 +250,170 @@ COMMON=$(RTL)/common
 PROCINC=$(RTL)/$(CPU_TARGET)
 PROCINC=$(RTL)/$(CPU_TARGET)
 UNITPREFIX=rtl
 UNITPREFIX=rtl
 SYSTEMUNIT=system
 SYSTEMUNIT=system
+BINUTILSPREFIX=arm-eabi-
 ifdef RELEASE
 ifdef RELEASE
 override FPCOPT+=-Ur
 override FPCOPT+=-Ur
 endif
 endif
 OBJPASDIR=$(RTL)/objpas
 OBJPASDIR=$(RTL)/objpas
 GRAPHDIR=$(INC)/graph
 GRAPHDIR=$(INC)/graph
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-win32)
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-beos)
 ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
 ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netware)
 ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
 ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
 ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wince)
 ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
 ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
 ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
 ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
 ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
 ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
 ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
 ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
 ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
 ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),arm-linux)
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
 ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
-endif
-ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),arm-wince)
 ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),arm-gba)
 ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),arm-nds)
 ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
 ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
 ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
-endif
-ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
 override TARGET_LOADERS+=prt0 cprt0
 override TARGET_LOADERS+=prt0 cprt0
@@ -572,9 +550,6 @@ endif
 ifeq ($(FULL_TARGET),arm-palmos)
 ifeq ($(FULL_TARGET),arm-palmos)
 override TARGET_LOADERS+=prt0 cprt0
 override TARGET_LOADERS+=prt0 cprt0
 endif
 endif
-ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_LOADERS+=prt0 cprt0
-endif
 ifeq ($(FULL_TARGET),arm-wince)
 ifeq ($(FULL_TARGET),arm-wince)
 override TARGET_LOADERS+=prt0 cprt0
 override TARGET_LOADERS+=prt0 cprt0
 endif
 endif
@@ -599,15 +574,6 @@ endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 override TARGET_LOADERS+=prt0 cprt0
 override TARGET_LOADERS+=prt0 cprt0
 endif
 endif
-ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_LOADERS+=prt0 cprt0
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_LOADERS+=prt0 cprt0
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_LOADERS+=prt0 cprt0
-endif
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCPACKAGE=y
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
 override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
 override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
@@ -744,9 +710,6 @@ endif
 ifeq ($(FULL_TARGET),arm-palmos)
 ifeq ($(FULL_TARGET),arm-palmos)
 override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
 override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
 endif
 endif
-ifeq ($(FULL_TARGET),arm-darwin)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
-endif
 ifeq ($(FULL_TARGET),arm-wince)
 ifeq ($(FULL_TARGET),arm-wince)
 override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
 override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
 endif
 endif
@@ -771,15 +734,6 @@ endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
 override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
 endif
 endif
-ifeq ($(FULL_TARGET),avr-embedded)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
-endif
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
 override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
 override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
 endif
 endif
@@ -915,9 +869,6 @@ endif
 ifeq ($(FULL_TARGET),arm-palmos)
 ifeq ($(FULL_TARGET),arm-palmos)
 override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
 override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
 endif
 endif
-ifeq ($(FULL_TARGET),arm-darwin)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
-endif
 ifeq ($(FULL_TARGET),arm-wince)
 ifeq ($(FULL_TARGET),arm-wince)
 override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
 override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
 endif
 endif
@@ -942,15 +893,6 @@ endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
 override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
 endif
 endif
-ifeq ($(FULL_TARGET),avr-embedded)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
-endif
 ifdef REQUIRE_UNITSDIR
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
 endif
 endif
@@ -1699,13 +1641,13 @@ TAROPT=vz
 TAREXT=.tar.gz
 TAREXT=.tar.gz
 endif
 endif
 ifndef NOCPUDEF
 ifndef NOCPUDEF
-override FPCOPTDEF=$(ARCH)
+override FPCOPTDEF=$(CPU_TARGET)
 endif
 endif
 ifneq ($(OS_TARGET),$(OS_SOURCE))
 ifneq ($(OS_TARGET),$(OS_SOURCE))
 override FPCOPT+=-T$(OS_TARGET)
 override FPCOPT+=-T$(OS_TARGET)
 endif
 endif
 ifneq ($(CPU_TARGET),$(CPU_SOURCE))
 ifneq ($(CPU_TARGET),$(CPU_SOURCE))
-override FPCOPT+=-P$(ARCH)
+override FPCOPT+=-P$(CPU_TARGET)
 endif
 endif
 ifeq ($(OS_SOURCE),openbsd)
 ifeq ($(OS_SOURCE),openbsd)
 override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
 override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
@@ -2284,6 +2226,7 @@ ucomplex$(PPUEXT): $(INC)/ucomplex.pp math$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
 getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMUNIT)$(PPUEXT)
 getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMUNIT)$(PPUEXT)
 heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMUNIT)$(PPUEXT)
 heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMUNIT)$(PPUEXT)
 	$(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR)
 	$(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR)
+lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMUNIT)$(PPUEXT)
 charset$(PPUEXT) : $(INC)/charset.pp $(SYSTEMUNIT)$(PPUEXT)
 charset$(PPUEXT) : $(INC)/charset.pp $(SYSTEMUNIT)$(PPUEXT)
 exec$(PPUEXT)    : exec.pp execf.inc execd.inc
 exec$(PPUEXT)    : exec.pp execf.inc execd.inc
 timer$(PPUEXT)   : timer.pp timerd.inc timerf.inc
 timer$(PPUEXT)   : timer.pp timerd.inc timerf.inc
@@ -2305,3 +2248,4 @@ mui$(PPUEXT): mui.pas exec$(PPUEXT) utility$(PPUEXT) intuition$(PPUEXT) graphics
 tinygl$(PPUEXT): tinygl.pp exec$(PPUEXT)
 tinygl$(PPUEXT): tinygl.pp exec$(PPUEXT)
 get9$(PPUEXT): get9.pas exec$(PPUEXT)
 get9$(PPUEXT): get9.pas exec$(PPUEXT)
 muihelper$(PPUEXT): muihelper.pas intuition$(PPUEXT) mui$(PPUEXT) doslib$(PPUEXT) utility$(PPUEXT)
 muihelper$(PPUEXT): muihelper.pas intuition$(PPUEXT) mui$(PPUEXT) doslib$(PPUEXT) utility$(PPUEXT)
+ctypes$(PPUEXT) :  $(INC)/ctypes.pp $(SYSTEMUNIT)$(PPUEXT)

+ 5 - 2
rtl/gba/Makefile.fpc

@@ -10,12 +10,12 @@ loaders=prt0 cprt0
 units=$(SYSTEMUNIT) objpas macpas strings \
 units=$(SYSTEMUNIT) objpas macpas strings \
 #      dos \
 #      dos \
       sysutils \
       sysutils \
-      classes math typinfo varutils fmtbcd \
+      classes math typinfo varutils fmtbcd ctypes \
       charset ucomplex getopts matrix \
       charset ucomplex getopts matrix \
       variants types rtlconsts sysconst dateutil fgl \
       variants types rtlconsts sysconst dateutil fgl \
 #      exec timer doslib utility hardware inputevent graphics layers \
 #      exec timer doslib utility hardware inputevent graphics layers \
 # these can be moved to packages later
 # these can be moved to packages later
-#      clipboard datatypes asl ahi tinygl get9 muihelper \
+#      clipboard datatypes asl ahi tinygl get9 muihelper lineinfo \
 #rsts=math rtlconsts varutils typinfo variants classes sysconst dateutil
 #rsts=math rtlconsts varutils typinfo variants classes sysconst dateutil
 # implicitunits=exeinfo
 # implicitunits=exeinfo
 
 
@@ -42,6 +42,7 @@ COMMON=$(RTL)/common
 PROCINC=$(RTL)/$(CPU_TARGET)
 PROCINC=$(RTL)/$(CPU_TARGET)
 UNITPREFIX=rtl
 UNITPREFIX=rtl
 SYSTEMUNIT=system
 SYSTEMUNIT=system
+BINUTILSPREFIX=arm-eabi-
 
 
 # Use new feature from 1.0.5 version
 # Use new feature from 1.0.5 version
 # that generates release PPU files
 # that generates release PPU files
@@ -224,3 +225,5 @@ tinygl$(PPUEXT): tinygl.pp exec$(PPUEXT)
 get9$(PPUEXT): get9.pas exec$(PPUEXT)
 get9$(PPUEXT): get9.pas exec$(PPUEXT)
 
 
 muihelper$(PPUEXT): muihelper.pas intuition$(PPUEXT) mui$(PPUEXT) doslib$(PPUEXT) utility$(PPUEXT)
 muihelper$(PPUEXT): muihelper.pas intuition$(PPUEXT) mui$(PPUEXT) doslib$(PPUEXT) utility$(PPUEXT)
+
+ctypes$(PPUEXT) :  $(INC)/ctypes.pp $(SYSTEMUNIT)$(PPUEXT)

+ 0 - 310
rtl/gba/lnkscript

@@ -1,310 +0,0 @@
-/* Linker Script Original v1.3 by Jeff Frohwein     */
-/*  v1.0 - Original release                         */
-/*  v1.1 - Added proper .data section support       */
-/*  v1.2 - Added support for c++ & iwram overlays   */
-/*       - Major contributions by Jason Wilkins.    */
-/*  v1.3 - .ewram section now can be used when      */
-/*         compiling for MULTIBOOT mode. This fixes */
-/*         malloc() in DevKitAdvance which depends  */
-/*         on __eheap_start instead of end to define*/
-/*         the starting location of heap space.     */
-/*         External global variable __gba_iwram_heap*/
-/*         support added to allow labels end, _end, */
-/*         & __end__ to point to end of iwram or    */
-/*         the end of ewram.                        */
-/*	Additions by WinterMute				*/
-/* v1.4 -	.sbss section added for unitialised	*/
-/*		    data in ewram 			*/
-/* v1.5 -	padding section added to stop EZF 	*/
-/*		    stripping important data		*/
-
-/* This file is released into the public domain		*/
-/* for commercial or non-commercial use with no		*/
-/* restrictions placed upon it.				*/
-
-/* NOTE!!!: This linker script defines the RAM &  */
-/*   ROM start addresses. In order for it to work */
-/*   properly, remove -Ttext and -Tbss linker     */
-/*   options from your makefile if they are       */
-/*   present.                                     */
-
-/* You can use the following to view section      */
-/* addresses in your .elf file:                   */
-/*   objdump -h file.elf                          */
-/* Please note that empty sections may incorrectly*/
-/* list the lma address as the vma address for    */
-/* some versions of objdump.                      */
-
-OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
-OUTPUT_ARCH(arm)
-ENTRY(_start)
-/* SEARCH_DIR(/bin/arm); */
-
-/* The linker script function "var1 += var2;" sometimes    */
-/* reports incorrect values in the *.map file but the      */
-/* actual value it calculates is usually, if not always,   */
-/* correct. If you leave out the ". = ALIGN(4);" at the    */
-/* end of each section then the return value of SIZEOF()   */
-/* is sometimes incorrect and "var1 += var2;" appears to   */
-/* not work as well. "var1 += var2" style functions are    */
-/* avoided below as a result.                              */
-
-MEMORY {
-
-	rom		: ORIGIN = 0x08000000, LENGTH = 32M
-	iwram	: ORIGIN = 0x03000000, LENGTH = 32K
-	ewram	: ORIGIN = 0x02000000, LENGTH = 256K
-}
-
-/*
-__text_start 		=	0x8000000;
-__eheap_end			=	0x2040000;
-__iwram_start		=	0x3000000;
-__iwram_end			=	0x3008000;
-
-__sp_irq			=	__iwram_end - 0x100;
-__sp_usr			=	__sp_irq - 0x100;
-*/
-__text_start  = ORIGIN(rom);
-/* __eheap_end   = ORIGIN(ewram) + 0x40000; */
-__eheap_end   = ORIGIN(ewram) + LENGTH(ewram);
-__iwram_start	= ORIGIN(iwram);
-/* __iwram_end   = ORIGIN(iwram) + 0x8000; */
-__iwram_end   = ORIGIN(iwram) + LENGTH(iwram); 
-__sp_irq      = __iwram_end - 0x100;
-__sp_usr      = __sp_irq - 0x100;
-
-
-SECTIONS
-{
-	. = __text_start;
-	.init :
-	{
-		KEEP (*(.init))
-		. = ALIGN(4);
-	} >rom =0xff
-
-	.plt :
-	{
-		*(.plt)
-		. = ALIGN(4);   /* REQUIRED. LD is flaky without it. */
-	} >rom
-
-	.text  :   /* ALIGN (4): */
-	{
-		*(EXCLUDE_FILE (*.iwram*) .text)
-		*(.text.*)
-		*(.stub)
-		/* .gnu.warning sections are handled specially by elf32.em.  */
-		*(.gnu.warning)
-		*(.gnu.linkonce.t*)
-		*(.glue_7)
-		*(.glue_7t)
-		. = ALIGN(4);  /* REQUIRED. LD is flaky without it. */
-	} >rom = 0xff
-
-	__text_end = .;
-	.fini           :
-	{
-		KEEP (*(.fini))
-		. = ALIGN(4);  /* REQUIRED. LD is flaky without it. */
-	} >rom =0
-
-	.rodata :
-	{
-		*(.rodata)
-		*all.rodata*(*)
-		*(.roda)
-		*(.rodata.*)
-		*(.gnu.linkonce.r*)
-		SORT(CONSTRUCTORS)
-		. = ALIGN(4);   /* REQUIRED. LD is flaky without it. */
-	} >rom = 0xff
-
-	.ctors :
-	{
-		/*	gcc uses crtbegin.o to find the start of the constructors, so
-			we make sure it is first.  Because this is a wildcard, it
-			doesn't matter if the user does not actually link against
-			crtbegin.o; the linker won't look for a file to match a
-			wildcard.  The wildcard also means that it doesn't matter which
-			directory crtbegin.o is in.  */
-		KEEP (*crtbegin.o(.ctors))
-		KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
-		KEEP (*(SORT(.ctors.*)))
-		KEEP (*(.ctors))
-		. = ALIGN(4);   /* REQUIRED. LD is flaky without it. */
-  } >rom = 0
-
-	.dtors :
-	{
-		KEEP (*crtbegin.o(.dtors))
-		KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
-		KEEP (*(SORT(.dtors.*)))
-		KEEP (*(.dtors))
-		. = ALIGN(4);   /* REQUIRED. LD is flaky without it. */
-	} >rom = 0
-
-	.jcr            : { KEEP (*(.jcr)) } >rom 
-
-	.eh_frame :
-	{
-		KEEP (*(.eh_frame))
-		. = ALIGN(4);   /* REQUIRED. LD is flaky without it. */
-	} >rom = 0
-
-	.gcc_except_table :
-	{
-		*(.gcc_except_table)
-		. = ALIGN(4);   /* REQUIRED. LD is flaky without it. */
-	} >rom = 0
-
-	__iwram_lma = .;
-
-	.iwram __iwram_start : AT (__iwram_lma)
-	{
-		__iwram_start = ABSOLUTE(.) ;
-		*(.iwram)
-		*iwram.*(.text)
-		. = ALIGN(4);   /* REQUIRED. LD is flaky without it. */
-	} >iwram = 0xff
-
-	__data_lma = __iwram_lma + SIZEOF(.iwram) ;
-	__iwram_end = . ;
-
-	.bss ALIGN(4) :
-	{
-		__bss_start = ABSOLUTE(.);
-		__bss_start__ = ABSOLUTE(.);
-		*(.dynbss)
-		*(.gnu.linkonce.b*)
-		*(.bss*)
-		*(COMMON)
-		. = ALIGN(4);    /* REQUIRED. LD is flaky without it. */
-	} >iwram
-
-	__bss_end = . ;
-	__bss_end__ = . ;
-
-	.data ALIGN(4) : AT (__data_lma)
-	{
-		__data_start = ABSOLUTE(.);
-		*(.data)
-		*(.data.*)
-		*(.gnu.linkonce.d*)
-		CONSTRUCTORS
-		. = ALIGN(4);
-	} >iwram = 0xff
-
-	__iwram_overlay_lma = __data_lma + SIZEOF(.data);
-
-	__data_end  =  .;
-	__iwram_overlay_start = . ;
-
-	OVERLAY ALIGN(4) : NOCROSSREFS AT (__iwram_overlay_lma)
-	{
-		.iwram0 { *(.iwram0) . = ALIGN(4);}
-		.iwram1 { *(.iwram1) . = ALIGN(4);}
-		.iwram2 { *(.iwram2) . = ALIGN(4);}
-		.iwram3 { *(.iwram3) . = ALIGN(4);}
-		.iwram4 { *(.iwram4) . = ALIGN(4);}
-		.iwram5 { *(.iwram5) . = ALIGN(4);}
-		.iwram6 { *(.iwram6) . = ALIGN(4);}
-		.iwram7 { *(.iwram7) . = ALIGN(4);}
-		.iwram8 { *(.iwram8) . = ALIGN(4);}
-		.iwram9 { *(.iwram9) . = ALIGN(4);}
-	}>iwram = 0xff
-
-	__ewram_lma = LOADADDR(.iwram0) + SIZEOF(.iwram0)+SIZEOF(.iwram1)+SIZEOF(.iwram2)+SIZEOF(.iwram3)+SIZEOF(.iwram4)+SIZEOF(.iwram5)+SIZEOF(.iwram6)+SIZEOF(.iwram7)+SIZEOF(.iwram8)+SIZEOF(.iwram9);
-
-	__iwram_overlay_end = . ;
-	__iheap_start = . ;
-
-	__ewram_start = 0x2000000;
-	.ewram __ewram_start : AT (__ewram_lma)
-	{
-		*(.ewram)
-		. = ALIGN(4);  /* REQUIRED. LD is flaky without it. */
-	}>ewram = 0xff
-
-	__ewram_overlay_lma = __ewram_lma + SIZEOF(.ewram);
-
-	.sbss ALIGN(4):
- 	{
-		__sbss_start = ABSOLUTE(.);
- 		*(.sbss)
- 		. = ALIGN(4);
- 	} >ewram
-	
-	__sbss_end  = .;
-
-	__ewram_end = . ;
-	__ewram_overlay_start = . ;
-
-	OVERLAY ALIGN(4): NOCROSSREFS AT (__ewram_overlay_lma)
-	{
-		.ewram0 { *(.ewram0) . = ALIGN(4);}
-		.ewram1 { *(.ewram1) . = ALIGN(4);}
-		.ewram2 { *(.ewram2) . = ALIGN(4);}
-		.ewram3 { *(.ewram3) . = ALIGN(4);}
-		.ewram4 { *(.ewram4) . = ALIGN(4);}
-		.ewram5 { *(.ewram5) . = ALIGN(4);}
-		.ewram6 { *(.ewram6) . = ALIGN(4);}
-		.ewram7 { *(.ewram7) . = ALIGN(4);}
-		.ewram8 { *(.ewram8) . = ALIGN(4);}
-		.ewram9 { *(.ewram9) . = ALIGN(4);}
-	}>ewram = 0xff
-
-	__pad_lma = LOADADDR(.ewram0) + SIZEOF(.ewram0)+SIZEOF(.ewram1)+SIZEOF(.ewram2)+SIZEOF(.ewram3)+SIZEOF(.ewram4)+SIZEOF(.ewram5)+SIZEOF(.ewram6)+SIZEOF(.ewram7)+SIZEOF(.ewram8)+SIZEOF(.ewram9);
-
-	/* EZF Advance strips trailing 0xff bytes, add a pad section so nothing important is removed */
-	.pad ALIGN(4) : AT (__pad_lma)
-	{
-		LONG(0x52416b64)
-		LONG(0x4d)
-		. = ALIGN(4);  /* REQUIRED. LD is flaky without it. */
-	} = 0xff
-
-	__ewram_overlay_end = . ;
-	__eheap_start = . ;
-
-	_end = .;
-	__end__ = _end ; /* v1.3 */
-	PROVIDE (end = _end); /* v1.3 */
-
-	/* Stabs debugging sections.  */
-	.stab 0 : { *(.stab) }
-	.stabstr 0 : { *(.stabstr) }
-	.stab.excl 0 : { *(.stab.excl) }
-	.stab.exclstr 0 : { *(.stab.exclstr) }
-	.stab.index 0 : { *(.stab.index) }
-	.stab.indexstr 0 : { *(.stab.indexstr) }
-	.comment 0 : { *(.comment) }
-	/*	DWARF debug sections.
-		Symbols in the DWARF debugging sections are relative to the beginning
-		of the section so we begin them at 0.  */
-	/* DWARF 1 */
-	.debug          0 : { *(.debug) }
-	.line           0 : { *(.line) }
-	/* GNU DWARF 1 extensions */
-	.debug_srcinfo  0 : { *(.debug_srcinfo) }
-	.debug_sfnames  0 : { *(.debug_sfnames) }
-	/* DWARF 1.1 and DWARF 2 */
-	.debug_aranges  0 : { *(.debug_aranges) }
-	.debug_pubnames 0 : { *(.debug_pubnames) }
-	/* DWARF 2 */
-	.debug_info     0 : { *(.debug_info) }
-	.debug_abbrev   0 : { *(.debug_abbrev) }
-	.debug_line     0 : { *(.debug_line) }
-	.debug_frame    0 : { *(.debug_frame) }
-	.debug_str      0 : { *(.debug_str) }
-	.debug_loc      0 : { *(.debug_loc) }
-	.debug_macinfo  0 : { *(.debug_macinfo) }
-	/* SGI/MIPS DWARF 2 extensions */
-	.debug_weaknames 0 : { *(.debug_weaknames) }
-	.debug_funcnames 0 : { *(.debug_funcnames) }
-	.debug_typenames 0 : { *(.debug_typenames) }
-	.debug_varnames  0 : { *(.debug_varnames) }
-	.stack 0x80000 : { _stack = .; *(.stack) }
-	/* These must appear regardless of  .  */
-}

+ 4 - 1
rtl/gba/sysheap.inc

@@ -18,9 +18,12 @@
  ****************************************************************************}
  ****************************************************************************}
 
 
 
 
+var
+  heap_start: longint; external name '__eheap_start';
+
 function SysOSAlloc(size: ptruint): pointer;
 function SysOSAlloc(size: ptruint): pointer;
 begin
 begin
-  result := pointer($02000000);
+  result := @heap_start;
 end;
 end;
 
 
 { $define HAS_SYSOSFREE}
 { $define HAS_SYSOSFREE}

+ 57 - 16
rtl/gba/system.pp

@@ -16,16 +16,20 @@
 unit System;
 unit System;
 
 
 interface
 interface
+{$define __ARM__}
 
 
-{$define __ARM__} (* For future usage! *)
 {$define FPC_IS_SYSTEM}
 {$define FPC_IS_SYSTEM}
-
-{$i gbabiosh.inc}
+{$define FPC_HAS_FEATURE_THREADING}
+{$define FPC_HAS_FEATURE_CONSOLEIO}
+{$define FPC_HAS_FEATURE_COMMANDARGS}
+{$define FPC_HAS_FEATURE_TEXTIO}
+{$define FPC_HAS_FEATURE_FILEIO}
 
 
 {$i systemh.inc}
 {$i systemh.inc}
+{$i gbabiosh.inc}
 
 
 {$define fpc_softfpu_interface}
 {$define fpc_softfpu_interface}
-{$i softfpu.pp}
+  {$i softfpu.pp}
 {$undef fpc_softfpu_interface}
 {$undef fpc_softfpu_interface}
 
 
 
 
@@ -60,12 +64,14 @@ var
   argv: PPChar;
   argv: PPChar;
   envp: PPChar;
   envp: PPChar;
   errno: integer;
   errno: integer;
+  fake_heap_end: ^byte; cvar; external;
 
 
+procedure randomize(value: integer);
 
 
 implementation
 implementation
 
 
 {$define fpc_softfpu_implementation}
 {$define fpc_softfpu_implementation}
-{$i softfpu.pp}
+  {$i softfpu.pp}
 {$undef fpc_softfpu_implementation}
 {$undef fpc_softfpu_implementation}
 
 
 { we get these functions and types from the softfpu code }
 { we get these functions and types from the softfpu code }
@@ -76,12 +82,11 @@ implementation
 {$define FPC_SYSTEM_HAS_extractFloat64Frac1}
 {$define FPC_SYSTEM_HAS_extractFloat64Frac1}
 {$define FPC_SYSTEM_HAS_extractFloat64Exp}
 {$define FPC_SYSTEM_HAS_extractFloat64Exp}
 {$define FPC_SYSTEM_HAS_extractFloat64Sign}
 {$define FPC_SYSTEM_HAS_extractFloat64Sign}
-{$define FPC_SYSTEM_HAS_ExtractFloat32Frac}
+{$define FPC_SYSTEM_HAS_extractFloat32Frac}
 {$define FPC_SYSTEM_HAS_extractFloat32Exp}
 {$define FPC_SYSTEM_HAS_extractFloat32Exp}
 {$define FPC_SYSTEM_HAS_extractFloat32Sign}
 {$define FPC_SYSTEM_HAS_extractFloat32Sign}
 
 
 {$i system.inc}
 {$i system.inc}
-
 {$i gbabios.inc}
 {$i gbabios.inc}
 
 
 {$ifdef FPC_HAS_FEATURE_PROCESSES}
 {$ifdef FPC_HAS_FEATURE_PROCESSES}
@@ -103,7 +108,41 @@ end;
 {*****************************************************************************
 {*****************************************************************************
                              ParamStr/Randomize
                              ParamStr/Randomize
 *****************************************************************************}
 *****************************************************************************}
+const
+  QRAN_SHIFT  = 15;
+  QRAN_MASK   = ((1 shl QRAN_SHIFT) - 1);
+  QRAN_MAX    = QRAN_MASK;
+  QRAN_A      = 1664525;
+  QRAN_C      = 1013904223;
+
+{ set randseed to a new pseudo random value }
+procedure randomize();
+begin
+  RandSeed := 63458; 
+end;
+
+procedure randomize(value: integer);
+begin
+  RandSeed := value; 
+end;
 
 
+function random(): integer; 
+begin	
+	RandSeed := QRAN_A * RandSeed + QRAN_C;
+	random := (RandSeed shr 16) and QRAN_MAX;
+end;
+
+function random(value: integer): integer; 
+var
+  a: integer;
+begin	
+	RandSeed := QRAN_A * RandSeed + QRAN_C;
+	a := (RandSeed shr 16) and QRAN_MAX;
+  random := (a * value) shr 15;
+end;
+
+
+{$ifdef FPC_HAS_FEATURE_COMMANDARGS}  
 { number of args }
 { number of args }
 function paramcount : longint;
 function paramcount : longint;
 begin
 begin
@@ -115,13 +154,9 @@ function paramstr(l : longint) : string;
 begin
 begin
   paramstr:='';
   paramstr:='';
 end;
 end;
+{$endif}
 
 
-{ set randseed to a new pseudo random value }
-procedure randomize;
-begin
-end;
-
-{$ifdef FPC_HAS_FEATURE_TEXTIO}
+{$ifdef FPC_HAS_FEATURE_CONSOLEIO}
 procedure SysInitStdIO;
 procedure SysInitStdIO;
 begin
 begin
   OpenStdIO(Input,fmInput,StdInputHandle);
   OpenStdIO(Input,fmInput,StdInputHandle);
@@ -145,11 +180,17 @@ begin
 { Setup heap }
 { Setup heap }
   InitHeap;
   InitHeap;
   SysInitExceptions;
   SysInitExceptions;
-{ Setup stdin, stdout and stderr }
+{$ifdef FPC_HAS_FEATURE_CONSOLEIO}
+  { Setup stdin, stdout and stderr }
   SysInitStdIO;
   SysInitStdIO;
-{ Reset IO Error }
+{$endif FPC_HAS_FEATURE_CONSOLEIO}
+{$ifdef FPC_HAS_FEATURE_CONSOLEIO}
+  { Reset IO Error }
   InOutRes:=0;
   InOutRes:=0;
-{ Arguments }
+{$endif FPC_HAS_FEATURE_CONSOLEIO}
+{$ifdef FPC_HAS_FEATURE_THREADING}
+  { threading }
   InitSystemThreads;
   InitSystemThreads;
+{$endif FPC_HAS_FEATURE_THREADING}
   initvariantmanager;
   initvariantmanager;
 end.
 end.

+ 59 - 117
rtl/nds/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/04/30]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/05/07]
 #
 #
 default: all
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx
 UNIXs = linux $(BSDs) solaris qnx
 LIMIT83fs = go32v2 os2 emx watcom
 LIMIT83fs = go32v2 os2 emx watcom
@@ -169,17 +169,6 @@ OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
 endif
 endif
 FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
 FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
 FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
 FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
-ifeq ($(CPU_TARGET),armeb)
-ARCH=arm
-override FPCOPT+=-Cb
-else
-ifeq ($(CPU_TARGET),armel)
-ARCH=arm
-override FPCOPT+=-CaEABI
-else
-ARCH=$(CPU_TARGET)
-endif
-endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 TARGETSUFFIX=$(OS_TARGET)
 TARGETSUFFIX=$(OS_TARGET)
 SOURCESUFFIX=$(OS_SOURCE)
 SOURCESUFFIX=$(OS_SOURCE)
@@ -201,7 +190,7 @@ endif
 ifeq ($(OS_TARGET),linux)
 ifeq ($(OS_TARGET),linux)
 linuxHier=1
 linuxHier=1
 endif
 endif
-export OS_TARGET OS_SOURCE ARCH CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
+export OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
 ifdef FPCDIR
 ifdef FPCDIR
 override FPCDIR:=$(subst \,/,$(FPCDIR))
 override FPCDIR:=$(subst \,/,$(FPCDIR))
 ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
 ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
@@ -267,175 +256,163 @@ endif
 OBJPASDIR=$(RTL)/objpas
 OBJPASDIR=$(RTL)/objpas
 GRAPHDIR=$(INC)/graph
 GRAPHDIR=$(INC)/graph
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-win32)
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-beos)
 ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
 ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netware)
 ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
 ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
 ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wince)
 ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
 ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
 ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
 ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
 ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
 ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
 ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
 ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
 ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
 ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),arm-linux)
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
 ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
-endif
-ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),arm-wince)
 ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),arm-gba)
 ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),arm-nds)
 ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
 ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
 ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
-endif
-ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl
+override TARGET_UNITS+=$(SYSTEMUNIT) objpas macpas strings sysutils classes math typinfo varutils fmtbcd ctypes charset ucomplex getopts matrix variants types rtlconsts sysconst dateutil fgl lineinfo
 endif
 endif
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
 override TARGET_LOADERS+=prt07 prt09 cprt07 cprt09
 override TARGET_LOADERS+=prt07 prt09 cprt07 cprt09
@@ -572,9 +549,6 @@ endif
 ifeq ($(FULL_TARGET),arm-palmos)
 ifeq ($(FULL_TARGET),arm-palmos)
 override TARGET_LOADERS+=prt07 prt09 cprt07 cprt09
 override TARGET_LOADERS+=prt07 prt09 cprt07 cprt09
 endif
 endif
-ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_LOADERS+=prt07 prt09 cprt07 cprt09
-endif
 ifeq ($(FULL_TARGET),arm-wince)
 ifeq ($(FULL_TARGET),arm-wince)
 override TARGET_LOADERS+=prt07 prt09 cprt07 cprt09
 override TARGET_LOADERS+=prt07 prt09 cprt07 cprt09
 endif
 endif
@@ -599,15 +573,6 @@ endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 override TARGET_LOADERS+=prt07 prt09 cprt07 cprt09
 override TARGET_LOADERS+=prt07 prt09 cprt07 cprt09
 endif
 endif
-ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_LOADERS+=prt07 prt09 cprt07 cprt09
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_LOADERS+=prt07 prt09 cprt07 cprt09
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_LOADERS+=prt07 prt09 cprt07 cprt09
-endif
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCPACKAGE=y
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
 override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
 override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
@@ -744,9 +709,6 @@ endif
 ifeq ($(FULL_TARGET),arm-palmos)
 ifeq ($(FULL_TARGET),arm-palmos)
 override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
 override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
 endif
 endif
-ifeq ($(FULL_TARGET),arm-darwin)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
-endif
 ifeq ($(FULL_TARGET),arm-wince)
 ifeq ($(FULL_TARGET),arm-wince)
 override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
 override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
 endif
 endif
@@ -771,15 +733,6 @@ endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
 override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
 endif
 endif
-ifeq ($(FULL_TARGET),avr-embedded)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
-endif
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
 override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
 override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
 endif
 endif
@@ -915,9 +868,6 @@ endif
 ifeq ($(FULL_TARGET),arm-palmos)
 ifeq ($(FULL_TARGET),arm-palmos)
 override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
 override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
 endif
 endif
-ifeq ($(FULL_TARGET),arm-darwin)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
-endif
 ifeq ($(FULL_TARGET),arm-wince)
 ifeq ($(FULL_TARGET),arm-wince)
 override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
 override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
 endif
 endif
@@ -942,15 +892,6 @@ endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
 override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
 endif
 endif
-ifeq ($(FULL_TARGET),avr-embedded)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
-endif
 ifdef REQUIRE_UNITSDIR
 ifdef REQUIRE_UNITSDIR
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
 override UNITSDIR+=$(REQUIRE_UNITSDIR)
 endif
 endif
@@ -1699,13 +1640,13 @@ TAROPT=vz
 TAREXT=.tar.gz
 TAREXT=.tar.gz
 endif
 endif
 ifndef NOCPUDEF
 ifndef NOCPUDEF
-override FPCOPTDEF=$(ARCH)
+override FPCOPTDEF=$(CPU_TARGET)
 endif
 endif
 ifneq ($(OS_TARGET),$(OS_SOURCE))
 ifneq ($(OS_TARGET),$(OS_SOURCE))
 override FPCOPT+=-T$(OS_TARGET)
 override FPCOPT+=-T$(OS_TARGET)
 endif
 endif
 ifneq ($(CPU_TARGET),$(CPU_SOURCE))
 ifneq ($(CPU_TARGET),$(CPU_SOURCE))
-override FPCOPT+=-P$(ARCH)
+override FPCOPT+=-P$(CPU_TARGET)
 endif
 endif
 ifeq ($(OS_SOURCE),openbsd)
 ifeq ($(OS_SOURCE),openbsd)
 override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
 override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
@@ -2288,6 +2229,7 @@ ucomplex$(PPUEXT): $(INC)/ucomplex.pp math$(PPUEXT) $(SYSTEMUNIT)$(PPUEXT)
 getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMUNIT)$(PPUEXT)
 getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMUNIT)$(PPUEXT)
 heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMUNIT)$(PPUEXT)
 heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMUNIT)$(PPUEXT)
 	$(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR)
 	$(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR)
+lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMUNIT)$(PPUEXT)
 charset$(PPUEXT) : $(INC)/charset.pp $(SYSTEMUNIT)$(PPUEXT)
 charset$(PPUEXT) : $(INC)/charset.pp $(SYSTEMUNIT)$(PPUEXT)
 exec$(PPUEXT)    : exec.pp execf.inc execd.inc
 exec$(PPUEXT)    : exec.pp execf.inc execd.inc
 timer$(PPUEXT)   : timer.pp timerd.inc timerf.inc
 timer$(PPUEXT)   : timer.pp timerd.inc timerf.inc

+ 2 - 2
rtl/nds/Makefile.fpc

@@ -12,7 +12,7 @@ units=$(SYSTEMUNIT) objpas macpas strings \
       sysutils \
       sysutils \
       classes math typinfo varutils fmtbcd ctypes \
       classes math typinfo varutils fmtbcd ctypes \
       charset ucomplex getopts matrix \
       charset ucomplex getopts matrix \
-      variants types rtlconsts sysconst dateutil fgl \
+      variants types rtlconsts sysconst dateutil fgl lineinfo \
 #      exec timer doslib utility hardware inputevent graphics layers \
 #      exec timer doslib utility hardware inputevent graphics layers \
 # these can be moved to packages later
 # these can be moved to packages later
 #      clipboard datatypes asl ahi tinygl get9 muihelper \
 #      clipboard datatypes asl ahi tinygl get9 muihelper \
@@ -184,7 +184,7 @@ getopts$(PPUEXT) : $(INC)/getopts.pp $(SYSTEMUNIT)$(PPUEXT)
 heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMUNIT)$(PPUEXT)
 heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMUNIT)$(PPUEXT)
         $(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR)
         $(COMPILER) -Sg $(INC)/heaptrc.pp $(REDIR)
 
 
-#lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMUNIT)$(PPUEXT)
+lineinfo$(PPUEXT) : $(INC)/lineinfo.pp $(SYSTEMUNIT)$(PPUEXT)
 #lnfodwrf$(PPUEXT) : $(INC)/lnfodwrf.pp $(SYSTEMUNIT)$(PPUEXT)
 #lnfodwrf$(PPUEXT) : $(INC)/lnfodwrf.pp $(SYSTEMUNIT)$(PPUEXT)
 
 
 charset$(PPUEXT) : $(INC)/charset.pp $(SYSTEMUNIT)$(PPUEXT)
 charset$(PPUEXT) : $(INC)/charset.pp $(SYSTEMUNIT)$(PPUEXT)

+ 15 - 3
rtl/nds/system.pp

@@ -18,6 +18,12 @@ unit System;
 interface
 interface
 
 
 {$define FPC_IS_SYSTEM}
 {$define FPC_IS_SYSTEM}
+{$define FPC_HAS_FEATURE_THREADING}
+{$define FPC_HAS_FEATURE_CONSOLEIO}
+{$define FPC_HAS_FEATURE_COMMANDARGS}
+{$define FPC_HAS_FEATURE_TEXTIO}
+{$define FPC_HAS_FEATURE_FILEIO}
+
 
 
 {$i ndsbiosh.inc}
 {$i ndsbiosh.inc}
 {$i systemh.inc}
 {$i systemh.inc}
@@ -152,6 +158,7 @@ begin
   random := (a * value) shr 15;
   random := (a * value) shr 15;
 end;
 end;
 
 
+{$ifdef FPC_HAS_FEATURE_COMMANDARGS}
 { number of args }
 { number of args }
 function paramcount : longint;
 function paramcount : longint;
 begin
 begin
@@ -163,7 +170,7 @@ function paramstr(l : longint) : string;
 begin
 begin
   paramstr := '';
   paramstr := '';
 end;
 end;
-
+{$endif FPC_HAS_FEATURE_COMMANDARGS}
 
 
 {$ifdef FPC_HAS_FEATURE_TEXTIO}
 {$ifdef FPC_HAS_FEATURE_TEXTIO}
 procedure SysInitStdIO;
 procedure SysInitStdIO;
@@ -193,11 +200,16 @@ begin
 { Setup heap }
 { Setup heap }
   InitHeap;
   InitHeap;
   SysInitExceptions;
   SysInitExceptions;
-{ Setup stdin, stdout and stderr }
+{$ifdef FPC_HAS_FEATURE_CONSOLEIO}
+  { Setup stdin, stdout and stderr }
   SysInitStdIO;
   SysInitStdIO;
-{ Reset IO Error }
+  { Reset IO Error }
   InOutRes:=0;
   InOutRes:=0;
+{$endif FPC_HAS_FEATURE_CONSOLEIO}
 { Arguments }
 { Arguments }
+{$ifdef FPC_HAS_FEATURE_THREADING}
+  { threading }
   InitSystemThreads;
   InitSystemThreads;
+{$endif FPC_HAS_FEATURE_THREADING}
   initvariantmanager;
   initvariantmanager;
 end.
 end.