comp.lang.ada
 help / color / mirror / Atom feed
From: gabriele.galeotti.xyz@gmail.com
Subject: Re: SweetAda 0.1e released
Date: Mon, 27 Jul 2020 06:18:44 -0700 (PDT)	[thread overview]
Message-ID: <c213212b-25d0-46d7-a6d0-20965af177e5o@googlegroups.com> (raw)
In-Reply-To: <fe7fa923-7058-4cd4-bec2-0ed578e0e51cn@googlegroups.com>

On Monday, July 27, 2020 at 1:34:28 PM UTC+2, Roger Mc wrote:
> On Monday, July 27, 2020 at 8:51:55 PM UTC+10, gabriele.g...@gmail.com wrote:
> > On Sunday, July 26, 2020 at 3:51:41 AM UTC+2, Roger Mc wrote: 
> > > I reinstalled 0.1e and now it works, at least to the extent that 0.1d works. 
> > > Quite strange as I had the same problem on both my computers. 
> > > The only thing that I can think of is that on the previous 01e install I just used 
> > > ./menu.sh ( without target selection) 
> > > which was the method I used for 0.1d. Perhaps this messed something up? 
> > > When that didn't work, I inspected 0.1e menu.sh and discovered the need to use target selection; 
> > > however, on using target selection, in the order stated in your advice (perhaps eventually), I had the reported problem. 
> > > It seems, somehow I messed something up; somehow on both computers! 
> > > Thanks for your much appreciated advice. 
> > > 
> > > I still haven't tracked down the Catalina problem. Inspiration comes slowly. 
> > > Certainly, the Ada code is working correctly but, somehow the assembly coded outb instructions in x86_64-io don't seem to be having any effect. 
> > > Possibly being blocked by Catalina security features? 
> > > I currently don't know how to track outb functionality. 
> > > I'll keep trying (slooowly)
> > Hi Roger. 
> > 
> > Fine, the most important thing is that we have verified that tools run correctly. Maybe it could be useful to delete everything (after a backup) and repeat a fresh installation, so you could check that you have a perfectly aligned layout, without previous mistakes. 
> >
> I just received your message recommending awaiting the next release. 
> 
> > Correct me if I'm wrong, I understood that IOEMU window is working and shows I/O widgets cycling, but not in Catalina, is that correct? 
> Thats correct. I had the  IOEMU window working and showing I/O widgets cycling under High Sierra but still not under Catalina.
> > 
> > In this case maybe there is either a problem in the GUI code or in Catalina handling of windows. 
> > 
> > But you can assume safely that Ada code is working since you should see some output in serial terminal. 
> Yes I'm very confident that the  Ada code is working and certainly see output in the serial terminal and the QEMU window.
> > 
> > About the outb instruction, please explain me (even writing down your code) what you are trying to do. outb instructions should behave fine, otherwise you should see a totally dead system. 
> The outb instructions that I was referring to are those in X86_64-io.adb which are invoked by pc.PIC procedures which I have been trying to understand.
> My current understanding is that it is PIC procedures in pc.adb that should drive the  I/O widgets cycling in the IOEMU window via the  in X86_64-io outb instructions?
> > 
> > By the way, apologies if I repeat myself, but try to isolate your code in an application file like the standard one, I'm changing some with/use and simplify units, so expect some minor changes in future release. This way you can change very little in your code. For example, unit x86_64.IO is likely to change in CPU.IO. Ask me if you have difficulties recompiling your code. 
> 
> Understood. But, at the moment I'm nowhere near producing my own code and am essentially trying to "reverse engineer" your code in order to understand how things work.
> 
> I have spent today coming to grips with MPLAB via various MPLAB tutorials, which also included tutorials on PIC hardware and interfacing.  This, eventually has been quite rewarding but I still have some way to go to reach adequate knowledge.
> 
> I've not tried sending files via Google Groups before so I don't know if this works!
> If it does this shows my current understanding of the system
> /System/Volumes/Data/QEMU/sweetada_run.pdf.zip

OK. Maybe the Catalina problem is an issue we could solve in the near future. If you have an environment that does work, that is very fine, so we have a common base.

Now for the outb instructions.
No, pc.pic instructions do not drive IOEMU graphics widgets. Let me explain. I say again, I do not known your level of knowledge so I will go deep in order to not be misunderstood. Sorry for trivial things.

You are inside an emulated virtual machine, thanks to QEMU. This machine is a more or less standard x86-64 cpu PC machine. In the current PC-x86-64 platform development there are no calls to PC.PIC unit. This is done in the 32-bit platform, which isn't your choice. Maybe you mean PC.PPI, which is the parallel port.

I hope you are not confusing the PIC (programmable interrupt controller) in the PC chipset) with a PIC microcontroller, which are two entirely different context.

And this is done because I had to reprogram the Programmable Interrupt Controller (PIC) that's inside the chipset of every PC. It is needed for proper handling of interrupts (that I have yet to write down for x86-64, unlike the 32-bit platform, which is more "mature").

I/O widgets are excited by instructions in applications.adb. Now, there are two sets of "visible" I/O. One set is 3 I/O ports of the parallel port interface. 

By calling PC.PPI... you read or write something in this ports. So:

applications.adb: calls PPI_DataOut (Value)
pc.adb: PPI_DataOut() implements a calls to CPU.IO.PortOut (Value)

Note that pc.adb with's CPU.ads

Inside cpu.ads, CPU.IO.PortOut is a renaming of x86_64.IO package.
Inside package x86_64.IO, finally, PortOut is implemented as on outb/outw/outl, whatever instructions is picked up by the compiler thanks to overloading on the proper size of the data to be handled. If you want to output an Unsigned_8 value (the right choice because it's an 8-bit port), then

procedure PortOut (Port : in Unsigned_16; Value : in Unsigned_8)

is picked up.

The same also for "control" and "status". Every port is then tied to a widget by IOEMU, which visualize it in real-time.

The there is another set of I/O ports available to be shown in IOEMU, you can read their addresses when QEMU start. You can create an I/O section in qemu.cfg and assign to these ports a widget and then make a PortOut also on them.

If you want to send me a piece of code, you can try gabriele.galeotti@sweetada.org

  reply	other threads:[~2020-07-27 13:18 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-22 18:03 SweetAda 0.1e released gabriele.galeotti.xyz
2020-07-25 13:44 ` Roger
2020-07-25 16:07   ` gabriele.galeotti.xyz
2020-07-25 16:17   ` gabriele.galeotti.xyz
2020-07-26  1:51     ` Roger Mc
2020-07-26 13:17       ` Roger Mc
2020-07-27 10:59         ` gabriele.galeotti.xyz
2020-07-27 10:51       ` gabriele.galeotti.xyz
2020-07-27 11:34         ` Roger Mc
2020-07-27 13:18           ` gabriele.galeotti.xyz [this message]
2020-07-27 14:02             ` Roger Mc
2020-07-27 16:04               ` gabriele.galeotti.xyz
2020-07-28  0:06                 ` Roger Mc
2020-07-28  9:16                   ` gabriele.galeotti.xyz
2020-07-28 13:32                     ` Roger Mc
2020-07-27 16:53               ` Dennis Lee Bieber
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox