Jump to content
IGNORED

fortran99 - any users here


dhe

Recommended Posts

Any users out there?

 

I downloaded the disks from atariage.

 

I tried setting them up both as a fiad and as a disk with classic99.

 

That didn't make a difference.

 

I have a simple program that writes (or should 'hello world' and waits for a return to be entered).

 

Compiles with zero error.

 

Link - no errors - create a program sample_x and sample_y.

 

When I try to run sample_x - it loads, but then runs the linker from fortran99 - so I believe somewhere the linker isn't working as it should.

 

Looking at the object file I see some of the strings from my source code.

 

dano

  • Like 2
Link to comment
Share on other sites

I nearly failed Fortran in high school, and have since developed an aversion to it. That said, I should probably give it another chance. I do have the TI Fortran package, so if you post your source code I can try it out and see if I can duplicate your issue.

Alternatively, try downloading the linker disk again. Sometimes the process corrupts the disks....

  • Like 1
Link to comment
Share on other sites

Decades ago I wrote some programs in FORTRAN 9640 to create graphs that actually went into my Math diploma thesis (back in 1994).

 

However, I never did anything with Fortran on the TI-99/4A, so I'm afraid I cannot really help you here.

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

I never tried Fortran, but im sure it's another great one that needs investigating, can't wait to follow you here, on another note though, just fyi

I love forth, and there is super great help here for that, and hats off to those supporters. I just can't say enough about them. They helped me get started and will always love forth.

Edited by GDMike
  • Like 1
Link to comment
Share on other sites

Just to give you an idea what FORTRAN (9640) can be used for, this is one of the programs that I wrote back in 1994. It used hires graphics to display the graph, and it makes heavy use of complex number calculations.

 

This was part of my diploma thesis. What you see is a triangle function, a special solution of the hypergeometric differential equation. The upper half complex plane (all numbers (a,b) with b>=0) is shown here in its original form, and when mapped by the triangle function. The result is some interesting distortion of the half-plane in the shape of a triangle. Here, it is a parabolic triangle with angle sum 180° (like plane triangles), but it has two vertices with 90° angle and one with 0°. The vertex in the upper left quadrant is the map of the origin point 0=(0,0), the vertex in the lower left quadrant is the map of 1=(1,0), and the vertex on the right is the map of infinity (which is, of course, only approximated). The mapped x (real) axis is purple, the mapped y (imaginary) axis is cyan.

 

(This is as much as I can still say about that part of science that I dug into back in those days. I actually don't quite understand my own thesis in many parts when I read it nowadays...)

 

The attached disk image contains the source code shown below, and the binary file to be run on a Geneve.

 


C     Darstellung komplexer Funktionen

      DOUBLE PRECISION XM,YM,DELTA,I,J,K,HOLE,HOLE1
      COMPLEX*16 X,Y,F,G,CDLOG1
      INTEGER FARBE,XV,YV,XP,YP
      INTEGER XKOORD,YKOORD,II,JI,TASTE,STATS,JJ
C
C     Zu untersuchende Funktion
C
      F(X)=CDLOG1(CDSQRT(X)+CDSQRT(X-1))
      G(X)=   (8D0*X-DCMPLX(15.70796327D0,6.283185312D0))
     &        /(X-DCMPLX(-1.832595715D0,0.785398163D0))
C
      XM=10D0
      YM=7.5D0
      DELTA=1

      CALL SETMOD(8)
      CALL SETPAL(4,0,0,0)
      CALL SETPAL(12,0,0,3)

      WRITE(6,*) '   Darstellung eines parabolischen Dreiecks'

      J=0D0
      FARBE=6
      I=XM

*     Zeichnen der x-Achse und der Waagrechten

1     IF (J.GT.YM) GOTO 3
         X=DCMPLX(I,J)
         YP=YKOORD(X,YM)
         CALL SETVEC(0,YP,511,YP,FARBE)
         J=J+DELTA
         FARBE=12
         GOTO 1

*     Zeichnen der y-Achse und der Senkrechten

3     FARBE=8
      I=0D0
      J=YM
4     IF (I.GT.XM) GOTO 6
         DO 5 K=-1D0,1D0,2D0
            X=DCMPLX(I*K,J)
            XP=XKOORD(X,XM)
5           CALL SETVEC(XP,0,XP,105,FARBE)
         I=I+DELTA
         FARBE=12
         GOTO 4

*     Bilder der Waagrechten

6     FARBE=13
      J=0D0
      DO 7 JJ=0,10
            XV=-1
            I=-(2D0**128)
            DO 8 II=0,511
               CALL KEY(0,TASTE,STATS)
               IF (TASTE.EQ.32) GOTO 14
               CALL HOLE(I)
               X=DCMPLX(I,J)
               Y=G(F(X))
               YP=YKOORD(Y,YM)
               XP=XKOORD(Y,XM)
               IF ((XP.NE.-1).AND.(YP.NE.-1).AND.(XV.NE.-1).AND.(YV.NE.-1))
     A            CALL SETVEC(XV,YV,XP,YP,FARBE)
               XV=XP
               YV=YP
8           CONTINUE
         FARBE=11
         CALL HOLE1(J)
7        CONTINUE

*     Bilder der Senkrechten

10    FARBE=7
      I=0D0
      DO 11 II=0,10
         DO 13 K=-1D0,1D0,2D0
            YV=-1
            IF ((K.EQ.1D0).AND.(I.EQ.0D0)) GOTO 13
            J=-0.01D0
            DO 12 JJ=0,256
               CALL KEY(0,TASTE,STATS)
               IF (TASTE.EQ.32) GOTO 14
               CALL HOLE(J)
               X=DCMPLX(I*K,J)
               Y=G(F(X))
               YP=YKOORD(Y,YM)
               XP=XKOORD(Y,XM)
               IF ((XP.NE.-1).AND.(YP.NE.-1).AND.(XV.NE.-1).AND.(YV.NE.-1))
     &            CALL SETVEC(XV,YV,XP,YP,FARBE)
               XV=XP
               YV=YP
12          CONTINUE
13       CONTINUE
         FARBE=10
         CALL HOLE1(I)
11    CONTINUE

14    CALL WAIT
      CALL SETPAL(4,1,7,1)
      CALL SET80
      END
C
C     Unterprogramme
C
      INTEGER FUNCTION XKOORD(X,XM)
      COMPLEX*16 X
      DOUBLE PRECISION XM,XK,DREAL

      XK=(DREAL(X)/XM+1D0)*256D0
      IF ((XK.GE.0D0).AND.(XK.LT.512D0)) THEN
         XKOORD=INT(XK)
      ELSE
         XKOORD=-1
      END IF
      END
C
      INTEGER FUNCTION YKOORD(X,YM)
      COMPLEX*16 X
      DOUBLE PRECISION YM,YK,DIMAG

      YK=(1D0-DIMAG(X)/YM)*106D0
      IF ((YK.GE.0D0).AND.(YK.LT.212D0)) THEN
         YKOORD=INT(YK)
      ELSE
         YKOORD=-1
      END IF
      END
C
      COMPLEX*16 FUNCTION CDLOG1(X)
      COMPLEX*16 X,Y

      Y=CDLOG(X)
      IF ((DIMAG(X).EQ.0D0).AND.(DREAL(X).LT.0D0)) Y=Y+(0D0,6.28318530718D0)
      CDLOG1=Y
      END
C
      DOUBLE PRECISION FUNCTION HOLE(B)
      DOUBLE PRECISION B

      IF (B.LT.-0.5D0) B=B/2
      IF (B.GE.1.5D0) B=B*2
      IF (B.GT.-0.5D0.AND.B.LT.1.5D0) B=B+0.01
      END
C
      DOUBLE PRECISION FUNCTION HOLE1(B)
      DOUBLE PRECISION B

      IF (B.GT.0) B=B*2.718281828D0
      IF (B.EQ.0) B=0.02D0
      END

 

0030.png

fortran.dsk

  • Like 7
  • Thanks 3
Link to comment
Share on other sites

Both my nephews are PhD candidates in aerospace engineering specializing in fluid dynamics at the University of Minnesota, and all their computational work for modeling is done in Fortran. It apparently is still the preferred language in this field! Who knew...

  • Like 1
Link to comment
Share on other sites

I dug up my Fortran 9640 package and gave it a quick cursory look. Yeah, it will take a little time to go through it. What Fortran version is this based on? This may not be a bad environment for my mathematical explorations on the TI after all...

I also found a manual errata document which I scanned. Unfortunately, my printer's tray feed only scans single sided, so there are 2 PDF scans attached: one for the front pages and the second for the back pages, the latter starting at the last page. They will need to be printed out and assembled manually unless someone knows how to merge them digitally. Perhaps they might have an answer as to dhe's issues.

 

Fortran 9640 Errata front pages.pdf

Fortran 9640 Errata back pages.pdf

 

Edit: the errata pdf is actually already included in the zip file in the Development Resources pinned thread, so you can ignore this post.

  • Like 5
Link to comment
Share on other sites

Another well-known graph, the bifurcation. I added a script for GeneveOS for building and linking.

 


******* BIFURC_F

C
C    Bifurcation (Period doubling)
C
C    Dec 8 1990
C
      DOUBLE PRECISION X,R,DR
      INTEGER COL,ROW
C
      ROW(X)=IDINT(212D0*(1D0-X/2D0))
C
      CALL CLEAR
      WRITE (*,*) '    Period doubling'
      CALL SETPOS(12,3)
      WRITE (*,*) 'Along the x axis, the value for r ranges from 1.9 to 3.0 '
      WRITE (*,*) '   and is set in the logistic map'
      WRITE (*,*) '   The behavior of the iteration can be seen in each column.'
      CALL WAIT
C
      CALL SETMOD(7)
      CALL SCREEN(1)
      CALL SETBRD(1)
C
      R=1.9D0
      DR=1D0/511D0*1.1D0
      DO 3 I=0,511
         X=0.1D0
         DO 2 J=1,200
2           X=(1D0+R-R*X)*X
         DO 1 J=1,100
            X=(1D0+R-R*X)*X
            K=ROW(X)
            CALL SETPIX(I,K,2)
1           LROW=K
3        R=R+DR
      CALL WAIT
      CALL SET80
      END

      
*********  Makefile

ECHO OFF
CD \FORTRAN
F9640 /OPROG\%1_O SOURCE\%1_F
ECHO
ECHO Ready for linking?
ECHO
PAUSE
FLINK /OPROG\%1_O /IGL,CL,ML,FL PROG\%1
DEL PROG\%1_O

0031.png

  • Like 5
Link to comment
Share on other sites

Vorticon,

  One of the items I noted reading through the errata, was the support for predit. That by far was my fav editor.

  I tried multiple times to contact Thomas Bentley to see if I could get the source code. (no luck on even the contact).

  Do you know where I could find the program and manual?

  It's a real let down, that FORTRAN has such stringent column requirements, yet the editor doesn't show what column your end! ?

  If anyone has contact information for Al Beard, I'd be happy to reach out to him, and see if he still has source and would be willing to share.

Dano

Link to comment
Share on other sites

47 minutes ago, dhe said:

Vorticon,

  One of the items I noted reading through the errata, was the support for predit. That by far was my fav editor.

  I tried multiple times to contact Thomas Bentley to see if I could get the source code. (no luck on even the contact).

  Do you know where I could find the program and manual?

  It's a real let down, that FORTRAN has such stringent column requirements, yet the editor doesn't show what column your end! ?

  If anyone has contact information for Al Beard, I'd be happy to reach out to him, and see if he still has source and would be willing to share.

Dano

Preditor is pretty much the only programming text editor I use on the TI. As I am reading through the Fortran 9640 manual, it's quite evident that the 99/4A version of the included editor is very primitive. And quite frankly, Fortran as a whole seemed pretty archaic in syntax, like the need to use a Format command in addition to a Write command to get anything on screen. And don't get me started with the DO loop structure: what a nightmare...

Attached is a cartridge image for the 80-column version which works with Classic99 as well as a scan of the manual.

 

PREDIT80-8.bin

preditor.pdf

 

  • Like 2
Link to comment
Share on other sites

2 hours ago, mizapf said:

Another well-known graph, the bifurcation. I added a script for GeneveOS for building and linking.

 

 


******* BIFURC_F

C
C    Bifurcation (Period doubling)
C
C    Dec 8 1990
C
      DOUBLE PRECISION X,R,DR
      INTEGER COL,ROW
C
      ROW(X)=IDINT(212D0*(1D0-X/2D0))
C
      CALL CLEAR
      WRITE (*,*) '    Period doubling'
      CALL SETPOS(12,3)
      WRITE (*,*) 'Along the x axis, the value for r ranges from 1.9 to 3.0 '
      WRITE (*,*) '   and is set in the logistic map'
      WRITE (*,*) '   The behavior of the iteration can be seen in each column.'
      CALL WAIT
C
      CALL SETMOD(7)
      CALL SCREEN(1)
      CALL SETBRD(1)
C
      R=1.9D0
      DR=1D0/511D0*1.1D0
      DO 3 I=0,511
         X=0.1D0
         DO 2 J=1,200
2           X=(1D0+R-R*X)*X
         DO 1 J=1,100
            X=(1D0+R-R*X)*X
            K=ROW(X)
            CALL SETPIX(I,K,2)
1           LROW=K
3        R=R+DR
      CALL WAIT
      CALL SET80
      END

      
*********  Makefile

ECHO OFF
CD \FORTRAN
F9640 /OPROG\%1_O SOURCE\%1_F
ECHO
ECHO Ready for linking?
ECHO
PAUSE
FLINK /OPROG\%1_O /IGL,CL,ML,FL PROG\%1
DEL PROG\%1_O

 

0031.png

I wrote a chaos exploration program in assembly in 2010, which includes the logistic equation above :) (from the tigameshelf.net in Edutainment).

 

 

Chaos Musings

By Walid Maalouli

Chaos Musings opening screenChaos Musings running shot


In my constant strive to stress my TI 99/4A computer to the limit, I decided to explore the realms of Chaos. And no, this is not Warhammer, but a mathematical exploration of chaos visualization. This is a collection of 3 separate programs that create graphical representations of various chaotic equations, which also happen to be fractal. Be forewarned that it can take hours or even days of computations to come up with an image depending on the zoom level requested. The first program looks at the logistic equation, the second investigates the Henon equation, and the last explores Lyapunov space. Not for the faint of heart, but interesting nonetheless if you are into that sort of thing.
Requirements: Editor/Assembler cartridge, 32K RAM, Disk Drive
Executable to run: LOGISTIC, HENON or LYAPUNOV (E/A Option 3 - Program name is START)

 

 

Chaos.dsk

Chaos.pdf

  • Like 4
Link to comment
Share on other sites

1 hour ago, Vorticon said:

And quite frankly, Fortran as a whole seemed pretty archaic in syntax, like the need to use a Format command in addition to a Write command to get anything on screen.

 

Consider it from my perspective. The free format of later computer languages took a little getting used to for me. My need for structure ate it up! The picture format in PL/1 (lifted from Cobol) made sense, but by then, I was thoroughly into Fortran.

 

1 hour ago, Vorticon said:

And don't get me started with the DO loop structure: what a nightmare...

 

Again, to me it was straightforward and logical—probably because it was my first computer language. |:)  It is obvious where the loop ends. With later languages, using the same instruction for the end of a loop did not tell you immediately (visually, certainly) which loop-end was attached to which loop-start, which got me into trouble every now and then.

 

...lee

  • Like 1
Link to comment
Share on other sites

Considering that it was one of the first (the first?) compiler, made in 1957, it should look archaic today or we are not making progress.

Some would argue that after this much time we should be programming in something other than text but attempts to do that seem to have never had success.

 

It would be interesting to see TI-99 FORTRAN compiler's emitted code and GCC compiler's emitted code for some simple test programs. 

  • Like 1
Link to comment
Share on other sites

2 hours ago, Lee Stewart said:

 

Consider it from my perspective. The free format of later computer languages took a little getting used to for me. My need for structure ate it up! The picture format in PL/1 (lifted from Cobol) made sense, but by then, I was thoroughly into Fortran.

 

 

Again, to me it was straightforward and logical—probably because it was my first computer language. |:)  It is obvious where the loop ends. With later languages, using the same instruction for the end of a loop did not tell you immediately (visually, certainly) which loop-end was attached to which loop-start, which got me into trouble every now and then.

 

...lee

It must have been quite a ride to experience computing from the early pioneering days all the way to the present age! 

When I took the Fortran course in high school circa 1982, I already was programming my TI in Basic which was my first exposure to computer programming. Compared to the looseness of Basic, Fortran seemed like being in jail! To make matters worse, the manual we were using, which I still have, was from 1978 and expected us to use punched cards for program entry... Kill me now... I passed that course by the skin of my teeth... 

Incidentally, it looks like Fortran 9640 seems to be based mostly on the 1977 standard, with some earlier elements retained as well.

I am determined to get familiar again with Fortran however as I am intrigued by its mathematical capabilities :)

 

Link to comment
Share on other sites

I managed to exchange a couple of emails with Alan Beard, author of the Fortran package.  I edited out some personal comments between he and I, but the bulk of his comments are below.

 

From: alan beard 
Date: March 25, 2020 at 7:30:58 PM EDT
To: Beery Miller 
Subject: Re: LGMA and the Geneve

Hi Berry --

Good to hear from you.   I live in Massachusetts these days with a second home in Myrtle Beach.   I am hunkered down in Myrtle Beach at the moment waiting for the virus to abate.

I do still have the source code for the TIC compiler and the FORTRAN compiler.   I have lost the source code for the assembler (TASM) and loader unfortunately.   Bad CDROMs in early days of CDs.   The TIC compiler had versions for Windows, Amiga, Geneve.   The TIC compiler is written in C so it compiles itself.    The Geneve version was interesting because it used only two pages of memory, the first base page and then it would map in the 2nd page dynamically as new routines were called in the compiler, to try and maximize the amount of memory available to build internal data as the programs were compiled.   It had a heavy optimizer and was based on some publics domain C compiler at the time.   Interesting that Paul Charlton I think was working with the same source baseline as he sent me his peephole optimizer.  I didn't use it.    I did the original programming on my Amiga, which I liked that machine a  lot.   It was very buggy, but the design and implementation was "done right".   Shame when they went out of business.

The FORTRAN compiler is a beast.   It was based upon a very old Xerox computer system FORTRAN.   The basic compiler was coded in a pseudo machine that had some very interesting instructions and a 64 word stack.    So for the 1st pass parsing it loads the virtual code into GRAM, and there is a parser that reads each pseudo instruction and executes it.   This type of programming is becoming more common today with Java and Microsoft's managed code (CLI).  I did do some enhancements to the original implementation.   It also had a peephole optimizer. The fact that the TI-99 was a 16 bit machine helped a lot in getting it to run.

Elmer Clausen from New York (Buffalo I think from memory) wrote all of the math functions in FORTRAN and gave them to me.   They were great, he was a real mathematician.   I have all the source codes for those as well (like SIN, COS, TAN, SQRT, etc.).

The source code is back in Massachusetts and I will have to wait until I go back to share it.   If others that are starting in programming find it useful, then would encourage that.  

I haven't thought about the TI-99 for quite a while.    With all the operating systems and horsepower today of computers, phones, and pads, the TI-99 looks quite clunky by comparison.

I think you called my ex-wife a few weeks ago, I had a text from her but I hadn't had time to get back to you with all the virus things going on.   I am divorced as well, but I am raising two children which take a lot of my time.   These days with the virus I am spending a lot of time on lesson plans and home schooling

All the best.

Al

On Wednesday, March 25, 2020, 06:00:26 PM EDT, Beery Miller  wrote:

I am doing well.  Been playing more and more with the Geneve.  Unlikely you have heard, but someone developed a card that interfaces the TI-99/4A and Geneve 9640 to a Raspberry PI.  With access to the PI, it allows a 4A and a Geneve under GPL/Rompage mode to use the PI as file storage.  It also adds the ability to use the PI as a TCP socket to interface to the internet.

Your name came up a few days ago on AtariAge.  Some folks were asking about FORTRAN source code, and myself, I was wondering if you still had any FORTRAN manuals.  If not, perhaps the original document?  If you did, I wanted to know if you would be receptive to sharing the source for historical purposes.  We had a couple of people post a couple of programs this past week that run on the Geneve that they used for their thesis back in the 90’s.

Anyways, there is a bit of revised interest and I have not been able to find my original software anywhere.  I’ve been through two moves and a divorce, and not sure where it ended up after all these years.

Anyways, would be interested to hear from you and your thoughts.  No problems either way as I know you put a lot of time into the project.

Beery Miller

  • Like 11
Link to comment
Share on other sites

On 3/24/2020 at 1:59 PM, TheBF said:

Considering that it was one of the first (the first?) compiler, made in 1957, it should look archaic today or we are not making progress.

Some would argue that after this much time we should be programming in something other than text but attempts to do that seem to have never had success.

Several graphical programming environments I know about are:

 

* LabVIEW - very resource intensive

* Lego Mindstorms (robotics)

* Scratch

 

Scratch https://scratch.mit.edu/about runs in your browser.  It resembles Mindstorms since both came out of MIT.

 

I would not want to use Scratch much for real programming.  It does have potential to teach kids and beginners about programming.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...