On Wed, September 18, 2013 18:48, Philippe wrote:
Hello Philippe, . . > I > have a quite big program (now with more than 200.000 lines), first build > with TP7. For example it accesses CGA memory through absolute address > ... > > Years ago I moved to FPC. And it compiled ok under Windows 98 > then under XP. > > Now with with a new PC running Windows 8 ... the > compiler bugs. It works fine with small program .... but not with one > which executable about 1.5 Mb large (which is my case, I did not checked > till which size it works!). > > My program should run in prompt command > window of any MS Windows version (compiling on XP machine, the > executable runs fine on MS Windows 8 machine) You are lucky that your DOS application still runs OK under MS Windows 8, but the issue you face with our compiler suggests, that you should not expect that this will stay that way. > The bug may not be fixed > soon ... version of the compiler for DOS/GO32v2 is not maintained any > more. The problem is not maintenance of the DOS/GO32v2 compiler (if I understand you correctly, it compiles your program correctly except when running under MS Windows 8), but simply the fact that MS Windows 8 is very far from DOS for which is that version created - see a FAQ about support of the DOS compiler under MS Windows (the difficulties increase with each MS Windows version). > through bug tracker I have been told to build the compiler this > way (using i386-win32 source and compiler): > > cd c:fpc2.6.2-src . . > but this does not build the > fpc.exe Yes, you don't need a new fpc.exe binary - you should use the one included in your FPC installation for MS Windows. > it does build go32v2 units in the FPC2.6.2\UNITS\GO32V2 That is good, you obviously need those units (preferably, you need them in the same directory tree where you MS Windows compiler and units for the MS Windows platform reside). As a possibly easier option (assuming that you use the officially released version), you can also use the compiled units distributed with the FPC release and install them into the same directory. If the (DOS) installer does not work for you (e.g. it crashes similarly to the DOS compiler), you can still unpack the respective ZIP files (included in the big ZIP file) manually. > I > tried to compile the software for win32 (not GO32v2) ... but I got an > error on the absolute address syntaxe ... then I tried to use {$mode TP} > in the unit where is the absolute address ( TelaCGA : Telas absolute > $B800:0000;) ... but it looks like that {$mode ...} does not work as > expected. It should be for the current unit ... but ... but next units > does not compile any more ... may be because of related units > ... If you use text mode, you can change the direct video adapter memory access to access of a video buffer provided in unit Video (available for most supported platforms). If you use graphics mode, porting becomes somewhat more difficult and you need to decide whether to use the standard RTL unit Graph (TP-compatible, rather limited, but probably sufficient for something originally targetting a CGA adapter), platform-specific API (e.g. Win32 API in your case), or one of multi-platform GUI frameworks. > through bug tracker I got these informations which let me think > that the job is not simple as I expected: > > I BELIEVE THAT THE > CROSS-COMPILER SHOULD NOT BE NECESSARY AND USING THE WIN32 COMPILER > DIRECTLY SHOULD BE A BETTER OPTION (even if running under 64-bit Windows > as long as I understand it correctly). Obviously, the RTL and packages > compiled for GO32v2 are necessary, but these may be installed from our > standard FPC release for GO32v2 (as long as using the same release of > the Windows compiler, of course), and SOME ADDITIONAL TRICKS MAY BE > NECESSARY (e.g. copying the DJGPP assembler and linker to the Win32 > directory with the prefix expected by FPC), but otherwise it isn't that > difficult. > > It´s quite easy to understand that it is not enough to find > out my way! Yes, it is. ;-) These are the things I didn't feel like discussing in the bug tracker notes: 1) You don't need a cross-compiler if you don't run/use a (native) Win64 compiler under MS Windows. I assume that this is not the case, but I couldn't know for sure - hence the "...should not be necessary...". 2) You still need at least a linker for the GO32v2 target (FPC internal linker does not support this target) and that is the somewhat tricky part. There are two basic options. The simpler one would be using the (DOS) ld.exe included with our DOS release (placed in bin\go32v2). However, since it is still a DOS application, it might crash the same way as our compiler does. Moreover, the Win32 compiler searches this linker in the Win32 binary directory (bin\i386-win32) and expects it to be named go32v2-ld.exe by default. The default directory may be overridden using compiler option -FD and the expected prefix (go32v2-) using option -XP, but the easiest option is probably simply copying the original bin\go32v2\ld.exe to bin\i386-win32\go32v2-ld.exe. If that does not work for you, you need a special cross-compiled version of GNU binutils for the GO32v2 target - that is not something officially provided by the FPC team, but you can download such a version from the directory with contributed files as e.g. ftp://ftp.freepascal.org/pub/fpc/contrib/cross/mingw/binutils-2.15-win32-i386-go32.zip and unpack them into bin\i386-win32 as before. However, there are still glitches with that version since the files still need to be renamed (from i386-go32-ld.exe to go32v2-ld.exe) and they expect a different syntax/command line options than the standard DJGPP version used for the GO32v2 target (as a workaround, you could then compile using FPC option -s and edit the generated file ppas.bat by replacing "@link.res" with linker options included in the generated file "link.res" (concatened to a single line). I hope that the length of the previous text (which still gives space to additional questions) clarifies my hesitation for discussing this topic in bugtracker notes. > where can I find documentation about the compiler and how > to build it? As mentioned previously, you shouldn't need to build it in the first place. If you still want to do so, there is a file named "buildfaq.pdf" (e.g. search our Wiki for it), but don't expect easy reading. Hope this helps; feel free to ask if you come across additional questions. Tomas _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal