[fpc-devel] Re: Porting FPC to IBM zArch

Paul Robinson paul at paul-robinson.us
Mon Aug 19 06:00:46 CEST 2013

My previous message to this group was sent erroneously.

I absolutely hate when it does that; I wanted to paste something into a message and it took that as a "send" request instead of pasting the text into the message. To prevent that, I'm not putting anything in the TO address until I'm ready to send it, locking the system and preventing it from misinterpreting me as transmitting a message I wasn't ready to send.

Anyway, I wrote to Bernd Oppolzer first, because I want to see full FPC made available on the 370, possibly the zSystem and find out if he's interested in getting involved in this.   So I need to ask: how can I get this? I originally wrote this group more than a year ago on the subject, then realized that I couldn't figure out what was going on without a reasonable cross-reference program, only to find there's nothing that's been done that can handle the UNIT statement or {$IF} and {$DEFINE}/{$IFDEF} statements.

So I came to realize I need to ask two things. How to get the flags and hooks added to the current sources and how do I enable any of the big-endian ports of FPC to cross-compile on Windows? (I do not want to have to put up a Linux box when I already have a copy of FPC running. The compiler is going to be text mode, of course, so I either don't need Lazarus or can't compile it and wouldn't anyway.)

I've been busy, I have other things I had to attend to, then I realized I couldn't figure out what was going on without a decent cross reference program, but nothing that's out there supports the UNIT construct, nor do they know how to skip over {$DEFINE} {$IF} {$ELSE}, and so I stopped to write one and I was busy with the work on that. I'm having trouble there, so I set it aside. Anyway, I came back and realized if I can get one of the Big Endian ports working I can just figure out what files it uses and then edit those to change the generated assembly language and/or the object files if it makes object files the way the Pascal 8000 compiler for the 370 from the Australian Atomic Energy Commission did back in the late 1970s and early 1980s did.

There are two things I'd like to find out to determine how it might be possible to get Free Pascal ported to the s370 series.

First, I want to add some of the compiler flags I mention in the description of my attempts on the WIKI to add the s370 and/or zSystem architecture, how do I get those flags - they do not break the build - added as hooks to the compiler sources so that eventually a {$DEFINE S370} statement can be added to get the compiler to build itself for the 370 (and possibly other defines depending on the machine and OS target}? There will eventually need a new directory for the files that the 370 and whatever OSs it uses supports, but, again, that's months away. I have to start over, and I have to start somewhere.

I know FPC makes better "write once, run anywhere" code capability 
than Java will ever touch. I wrote an application for 64-bit Windows 7 
that a customer needed. I took that same code over to a 32 bit PPC 
Macintosh running OS X 4.11 and the same program ran without change to 
the source code other than that the fonts are larger on the Mac so I had
 to shrink them a little to make the window fit. But the same unmodified
 code worked exactly the same on two different machines, two different 
operating systems, two different architectures. I have no doubt it would
 do the same thing re-compiled for Linux, without change.

I did another program 
where I used compile-time switches to set the values in a checkbox, and 
when I ran that program on Windows 7, it confirmed it's running Windows 
on an Intel little-endian 64-bit machine. The exact same unmodified 
program when compiled and run on my Mac and set the checkboxes in a 
window that told me it's a 32-bit big-endian BSD Darwin machine.

So, quoting from the commercials from US-based Wachovia Bank after it ate First Union Bank before it itself became digested by Wells Fargo Bank, "Let's get started."

So how would I get the constants and values added to include the s370 as a target for FPC? Would I submit them as a bug fix request as a patch through bugs.freepascal.org on Mantis or something else? I want to reserve a definition number for that processor, at least for now so it has a fixed identifier so eventually it can have its own PPU files and everything else in the toolchain.

Second, how do I create a cross-compiler that runs on Windows, for any of the big-endian processors, so that I can see what it has to generate code for the target machine? Given that, I can change the code to either change the generated object file - if it does direct object files - or the assembly language so it generates S370 assembly.

I can then run the compiler through itself to create a cross-compiler assembly for the 370. Then I can recompile the required modules, then take the assemblies, assemble them with a 370 assembler, producing an actual object module, then run the program against itself and the compiler will at least compile itself. Having done that, I can then create any necessary changes to implement anything needed to provide the equivalent functionality and rebuild the toolchain so it is native to the s370 and units to provide localized services can be created as needed.

I want to see something other than C and Cobol being available as current tools for implementing applications on the z/System mainframe. Maybe even being able to implement CICS transactions in Pascal the way it can be used to create full-blown Windows applications.

Any assistance anyone here can provide will be appreciated. Thank you.

The Lessons of history teach us - if they teach us anything - that no one learns the lessons that history teaches us.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20130818/65fca6cd/attachment.html>

More information about the fpc-devel mailing list