Welcome, Guest. Please login or register.

Author Topic: 68k AGA AROS + UAE => winner!  (Read 26337 times)

Description:

0 Members and 1 Guest are viewing this topic.

Offline whoosh777Topic starter

  • Full Member
  • ***
  • Join Date: Jun 2003
  • Posts: 114
    • Show all replies
    • http://www.whoosh777.pwp.blueyonder.co.uk
Re: 68k AGA AROS + UAE => winner!
« Reply #29 from previous page: April 17, 2004, 11:25:29 PM »
@NightShade737

/*
You really need to be a LOT more specific.
You can't just say Radeon 9800, or even worse just GeForce.
The name GeForce has been given to a line of cards spanning ~5 years,
so giving me a price and saying GeForce doesn't mean anything.
*/

I have absolutely no idea, I just bought the PC, so I know zilch about this, its all jibberish to me!

the machine currently has a shared memory Intel extreme graphics card, a cousin of the machine has 9800 SE,

can you name specifics that I should look for?

/*
The price on the 9800 is also useless unless it has an extension (SE, Pro, XT).
 From that price I guess it is an SE, which is a BAD price
*/
/*
(roughly £115 new anywhere else).
*/

which site has it at this price, how does the SE compare with the others,
eg whats missing or is it slower??

will the Chimp + butterfly demo run on all 3?


/*
It could be a plain one with no extension,
but you need to specify. The PC-World sit
 gives me 2 hits, neight for that price.
*/

the PC World one is £199,


/*
 VGA switches can range from £10 to £200,
the price depends on the output quality and the features.
Pay more if you want better quality.
*/

I want cheapest simplest possible, where should I look for a £10 one?

all I want is to connect my PC and A1200 to the same VGA TFT,


so I dont need one which can deal with 8 monitors or does keyboards as well,
merely 2 computer VGA cables in and one monitor VGA cable out,


at the moment I reconnect the VGA cable while all 3 machines are switched off,


/*
 I have no idea on A1 or Peg compatability as I don't care about either.
*/

fine,

I forgot to ask: AROS compatibility also matters, or will they all function
on AROS?


 

Offline whoosh777Topic starter

  • Full Member
  • ***
  • Join Date: Jun 2003
  • Posts: 114
    • Show all replies
    • http://www.whoosh777.pwp.blueyonder.co.uk
Re: 68k AGA AROS + UAE => winner!
« Reply #30 on: April 18, 2004, 02:58:24 AM »
 @bloodline,

YAH:-D:-D:-D:-D!!!!!!!!!!

I've done it!

the earlier link to WinRAR did the trick,
so thanks to the guy who pointed that out,
though it was some effort due to the impenetrable
Wind:pissed:ws XP interface, you have to go through a maze whenever you want to switch activity,

First attempt didnt b:griping:t as it was the .tar archive!

So one further decompression via WinRAR and then
burnt :madashell: yet another CD-R (luckily I bought 10),

This time it b:lol::lol:ted!

I had to witness some ancient MSD:crazy:S screens and
then:

a Workbench with
2 icons: Ram: looking like a microchip and the CD's icon,

15.5 Meg graphics ram in the title and 236.7Meg other! :-D

:first time on this new PC that I've seen how much
ram I have!

Up till this point I had only been thinking of AROS as
source code, but here it was entirely a real interface,

It is an Amiga, it has its own flavour but it is
recognisably an Amiga,

and its a truecolour workbench because there is a
colour circle demo program showing a continuum of
colours,

its certainly a reimplementation,

it even has Prefs programmes,
I forget if it was in Prefs but I saw Zune#?
but didnt think of trying it out,
I set my keyboard repeat + delay without probs
via one of the Prefs programs,

I also changed it to a US keyboard as the
positioning of the non-alpha-numeric characters
is better thought out,

I eventually found the shell, via c:Newshell,
I changed the long shell prompt to > via c:prompt,

A lot has been done and a lot of libraries are present,
:kitty: kitty looks real in truecolour)
 
enough is certainly up and running to make it
worth writing programs for,

the fact that I saw a Ram: icon says that
intuition + graphics + dos + exec are done!

which for me is almost everything,
other than the #?.device's, I didnt check
which of these are done,

its going to take some time to get used to
the fact that I can now actually look at the
source code, its like a huge gate has been opened
and we can all walk in and press the buttons on
the control panels of the OS!

:I am so entrenched in the 3rd-party-developer mindset,
vs the OS-contributor mindset,

until now the OS was entirely in the hands of an elite,
who decided on our behalf,

I can already see one program I can create
 by recycling existing code,
the required library being present there,

I couldnt find gcc, so I presume its on
www.aros.org, (or is it www.aros.com?),

I think the things which are missing are
what makes the project interesting from a
programmer POV,

so its almost like you can reinvent the wheel :roflmao:
your own way,

double clicking a text file makes it automatically view,

so I double clicked s:startup-sequence,

its very cheeky because it is a real startup-sequence,
serving the real purpose but its not the official one,

Before you can write programs for AROS you will have to
check whether the required libraries are present,

anyway a lot of existing programs should port very
rapidly as the central stuff is present,

its lucky that I follow the minimalist principle when
coding, ie use the absolute minimum of external dependencies eg I strictly program within OS3.0
and cybergraphics.library,

I presume you have reimplemented cyber??
(I will find out soon enough!),

I noticed arosc.library (I think), so I presume that is
standard c things as a shared library??

this is also my first visit to amiga.org in truecolour
via internet explorer, its a totally different website
via this browser + XP,

Ibrowse is ahead in that there is an editor button
so I can edit in Memacs, also on IBrowse I can
reply to a post via "view in new browser" : where
the reply happens in an Ibrowse folder!,

so eg on Ibrowse you can open all the pages of a
thread as lots of folders, which is really useful!

:not as lots of windows but folders like in YAM,

You can tell that this is a developer driven system
in stark contrast to the kid-gloves approach of
Wind:pissed:ws XP by the fact that
it has a program PCI Tool which shows you in great
detail all sorts of PCI stuff that I dont understand,

they'd never let you see things like
that on Wind:admonish:ws XP,

I got the feeling somehow of an engineering workshop,
that people are actively making the system take shape,
I could almost smell the engine oil,

So I've just seen the little-endian Intel-AROS,
until this point that phrase was just a concept for me,

and in a way it is an OS4 on Intel and you arent
afraid to let people try it out,

will it be possible to see my PC's hard disk on screen?

It will be very revealing to look in it via Amiga:roll:S,

Anyway trying something out is so different from talking about it,

I finished the session by trying out the Amiga's
3 key reset and yes the machine reset, though
XP didnt reboot,

The close down procedure of :ak47: XP :destroy: has a reset button so
it must be possible,

 

Offline whoosh777Topic starter

  • Full Member
  • ***
  • Join Date: Jun 2003
  • Posts: 114
    • Show all replies
    • http://www.whoosh777.pwp.blueyonder.co.uk
Re: 68k AGA AROS + UAE => winner!
« Reply #31 on: April 18, 2004, 08:35:23 PM »
@bloodline,

it occurred to me that for tricky and undocumented PC h/w,
it may be an idea to borrow freely from the Bochs ("think in the box!")
project,

I cannot find the archive for the URL, but use google, I downloaded and
decompressed it ages ago, though did nothing further with it as I was
too busy with other projects,

below is a recursive list of all subdirectories of Bochs,

right now I am trying to fix the damage caused by DiskSalv and FryingPan :admonish:,
the backup I made via Geeks gg:bin/cp is correct except the dates were lost,
I probably should have used the -p flag, otherwise the backup is correct
including Geek's softlinks,

so I just need to copy over the dates, problem is c:list cannot cope with
Geeks softlinks, so I am quickly cobbling together a simplified recursive
c:list program that copes with softlinks (eg skips or lists them etc),
I used this to list out the Bochs subdiretories:

"bochs-20031115"
"bochs-20031115/build"
"bochs-20031115/build/beos"
"bochs-20031115/build/debian"
"bochs-20031115/build/linux"
"bochs-20031115/build/macos"
"bochs-20031115/build/macosx"
"bochs-20031115/build/redhat"
"bochs-20031115/build/win32"
"bochs-20031115/build/win32/nsis"
"bochs-20031115/debug"
"bochs-20031115/disasm"
"bochs-20031115/doc"
"bochs-20031115/doc/docbook"
"bochs-20031115/doc/docbook/development"
"bochs-20031115/doc/docbook/documentation"
"bochs-20031115/doc/docbook/images"
"bochs-20031115/doc/docbook/include"
"bochs-20031115/doc/docbook/user"
"bochs-20031115/doc/man"
"bochs-20031115/docs-html"
"bochs-20031115/dynamic"
"bochs-20031115/font"
"bochs-20031115/fpu"
"bochs-20031115/fpu/stubs"
"bochs-20031115/fpu/stubs/linux"
"bochs-20031115/gui"
"bochs-20031115/gui/bitmaps"
"bochs-20031115/gui/keymaps"
"bochs-20031115/instrument"
"bochs-20031115/instrument/example0"
"bochs-20031115/instrument/example1"
"bochs-20031115/instrument/stubs"
"bochs-20031115/iodev" :juggler:
"bochs-20031115/memory"
"bochs-20031115/misc"
"bochs-20031115/misc/sb16"
"bochs-20031115/patches"
"bochs-20031115/plex86"
"bochs-20031115/plex86/kernel"
"bochs-20031115/plex86/kernel/freebsd"
"bochs-20031115/plex86/kernel/include"
"bochs-20031115/plex86/misc"
"bochs-20031115/bios" :roll:
"bochs-20031115/cpu"

I forget which version of Windows Bochs is trying to reimplement,

@person-regarding-bz2:

the source for bz2 is:

ftp://sources.redhat.com/pub/bzip2/v102/bzip2-1.0.2.tar.gz

which seems to indicate its Redhat Linux,

the contents of "bochs-20031115/iodev" are:

".cvsignore"
"Makefile.in"
"aspi-win32.h"
"biosdev.cc"
"biosdev.h"
"cdrom.cc"
"cdrom.h"
"cdrom_amigaos.cc" :roll:
"cdrom_beos.cc"
"cdrom_beos.h"
"cmos.cc"
"cmos.h"
"crc32.cc"
"crc32.h"
"devices.cc"
"dma.cc"
"dma.h"
"eth.cc"
"eth.h"
"eth_arpback.cc"
"eth_fbsd.cc"
"eth_linux.cc"
"eth_null.cc"
"eth_packetmaker.cc"
"eth_packetmaker.h"
"eth_tap.cc"
"eth_tuntap.cc"
"eth_win32.cc"
"extfpuirq.cc"
"extfpuirq.h"
"floppy.cc" :-D
"floppy.h"
"gameport.cc"
"gameport.h"
"guest2host.cc"
"guest2host.h"
"harddrv.cc"
"harddrv.h"
"ioapic.cc"
"ioapic.h"
"iodebug.cc"
"iodebug.h"
"iodev.h"
"keyboard.cc"
"keyboard.h"
"ne2k.cc"
"ne2k.h"
"parallel.cc"
"parallel.h"
"pci.cc"
"pci.h"
"pci2isa.cc"
"pci2isa.h"
"pciusb.cc"
"pciusb.h"
"pcivga.cc"
"pcivga.h"
"pic.cc"
"pic.h"
"pit.cc"
"pit.h"
"pit82c54.cc"
"pit82c54.h"
"pit_wrap.cc"
"pit_wrap.h"
"sb16.cc"
"sb16.h"
"scancodes.cc"
"scancodes.h"
"scsi_commands.h"
"scsidefs.h"
"scsipt.h"
"serial.cc"
"serial.h"
"serial_raw.cc"
"serial_raw.h"
"slowdown_timer.cc"
"slowdown_timer.h"
"soundlnx.cc"
"soundlnx.h"
"soundwin.cc"
"soundwin.h"
"unmapped.cc"
"unmapped.h"
"vga.cc"
"vga.h"
"virt_timer.cc"
"virt_timer.h"
"vmware3.cc"
"vmware3.h"

:-D :lol: :roflmao:
 

Offline whoosh777Topic starter

  • Full Member
  • ***
  • Join Date: Jun 2003
  • Posts: 114
    • Show all replies
    • http://www.whoosh777.pwp.blueyonder.co.uk
Re: 68k AGA AROS + UAE => winner!
« Reply #32 on: April 19, 2004, 01:06:41 AM »


Quote

bloodline wrote:
@whoosh777

I'm glad you finally had a chance to play with AROS :-)

Cybergraphics is present and correct. You would have noticed that the AROS graphics are either 65536 or 16.8 million colours (ie true colour) by default. That is why the icons can be very colourful.


is the default WB screen 16.8 million or 65536?
new to such things I dont know the difference,

I had another session today, my A1200 is taking a
trillion years to copy the dates over from the
fried partition so I disconnected it from the VGA
and left it chugging away and had another try with AROS,

hence this reply is via Internet Explorer,
ASAP I want to start browsing via IBrowse,


I found many new things this time, eg the text editor
which has exactly the features I want and does
them better than Memacs: search, search + replace,
tabs remaining as tabs and most importantly bracket alignment:

ie if I type:

tab tab { return
the cursor is aligned with the {, this feature
is vital for the way I write c,

with Memacs I can configure it to do this via
numeric return, but with yours I can use either  
return which is much more convenient,

I found so much further stuff this time that
I now think it is very nearly mature,

so I think it can take off without backwards 68k
compatibility,

last night when I tried it out, somehow I didnt
find all the directories,

I still havent found gcc on it, though I found
the includes and gcc libraries, you have a lot
of gcc stuff including libjpeg,

I noticed you have libbz2.a and bzip2, otherwise
I would have ported those, on this machine
it could port instantly. Though something that
ports painlessly on one system may be a major
issue on another,

jpeg is very very portable so it should port to
everywhere very straightforwardly,

Quote

If you get a Nvidia (ie GeForce) graphics card you will notice a massive speed up if you select "NVIDIA" at the boot options.


PCWorld had this for £99, is that a good price?

what is the full product name?

Is it A1 and Pegasos2 compatible?

Nvidia vs Radeon? will you eventually have Radeon support?
is it worth me waiting?


Quote

If you press Left-Win + Right-Win and Ctrl keys together AROS will reset (this avoids using the BIOS, so allows for a quicker reset).


ok, it was a usage-problem and not a bug,
I take it thats the left control key?

Is there any way I can boot to Windows XP with the
AROS CD still in the drive?

Quote

AROS can only read Amiga hard drives at the moment, so it can't see your Windows Hard drive. We need a FAT32/NTFS file system driver in order to read the drive.


can I reconnect my existing SCSI FFS drives to
my new PC SCSI interface and use them AS-IS?

Is there a risk factor as with WinUAE or is it
totally safe?

Quote

If you take out the Windows Hard Drive and put a blank drive in there, AROS can format the drive to the Amiga format and you can install AROS onto it.


You are saying that I shouldnt install AROS to this
current internal drive?

I want to try and only use external drives, so I can
selectively switch the power off as a virus precaution,

can I install AROS to some such external drive?
what is the best type of external drive to get?
(low cost + high speed),

Quote

Once you get a chance to play with the AROS applications and demos in the "Extras" dir of your AROS CD you will see why we are against a slower "big endien" x86 AROS :-) Once you get a taste of Raw CPU speed... you just want more :-D


It would give you parity with Windows XP,
probably you will even overtake Windows XP for speed,

Its certainly now the fastest Amiga in existence for
the home user, and just as fast as Windows XP,

furthermore its faster than all Macs,
hey everyone I overtook the Macs for under £300,
gloat, gloat, gloat, he he he, :-D

all those debates about Mac vanish,

2 questions on little-endian x86 AROS:

1. Have you a version that runs above Windows?
2. Have you a version of UAE that runs above
either even if its not integrated?

because I may then use that instead of WinUAE
for my 68k environment,

I have some really useful things which can only be
run in 68k,

I tried out some of the Extras programs which looked
very impressive, some of the Windowing is just as good
as Windows XP,

would it be possible to reintroduce an OS1.2 click to back
gadget? maybe via some Prefs program for standard gadgets,
I never liked having to click twice to move an  
in between window out of view on OS3,

I noticed your shell has tab completion via requester
 exactly the way I want it, is the shell King-con or
have you reimplemented it from scratch??

I didnt check whether you've fixed the square bracket
problem on King-Con, on King con if there are square
brackets in the shell output, if you scroll back to
them they vanish! Thats why I use () in the usage info
in my programs such as the above trackdisk.c,

I used the Prefs programs and managed to change the
background colour of the WB, I forget how I did it
but there were 2 colours with a gradient between these 2,
also you can rotate the direction of the gradient,
I removed the gradient by making the 2 colours the same,
as I dont like prettiness in my interfaces,

I like my interfaces to be rough, ready and functional,
thats why I like Memacs and the AROS editor,

The transparent window with a circle on it looked
really interesting, I want to see what the mechanism
for doing this, non rectangular windows should be now
possible,

Maybe I will write a graphics demo, just a bit of fun,
nothing major,

I want to learn what GPL is as well, is it
"graphics programming language" or what?

(not referring to the Gnu Public License also GPL)

 

Offline whoosh777Topic starter

  • Full Member
  • ***
  • Join Date: Jun 2003
  • Posts: 114
    • Show all replies
    • http://www.whoosh777.pwp.blueyonder.co.uk
Re: 68k AGA AROS + UAE => winner!
« Reply #33 on: April 19, 2004, 03:11:32 AM »
@Piru,

the above trackdisk.c program for
moving between disk-binary-files and disks
is an example of what I call disposable-programming,

I encounter a problem that needs fixing real fast,
here it was I had to create a disk from a binary
to boot AROS,

so I didnt want to spend too long on this,

I write different grades of program eg ultra-safe,
safe, ok, unsafe, very unsafe,

this one was ok,

My A1200 system is 14Meg, a sector is a few kb at
most, so those 2 allocations will succeed,

if you are going to do something low level like
bypassing the file system to disk then you shouldnt
push a low memory system,

I think anyway that the OS produces a Ram disk full
requester before it returns failure,

Quote

Piru wrote:
Quote
Code: [Select]
#include <pragmas/exec_pragmas.h>
#ifdef LATTICE
#include <clib/exec_protos.h>
#endif
#include <clib/alib_protos.h>
#include <clib/exec_protos.h>
#include <clib/dos_protos.h>

Use:
Code: [Select]
#include
#include
#include

instead. More portable.


More portable than what?

my code runs on Lattice and gcc,
current machines are all gcc, so I think its as
portable as gcc is,

lots of cross platform c progs dont run on Lattice,
so a lot of programmers out there regard
gcc-compatibility as portability,

my code is as portable as theirs,

Quote

Quote
Code: [Select]
int ret = 20;

Quote

Use:
int ret = RETURN_FAIL;
later, ret = RETURN_OK; and ret = RETURN_FAIL;
[\quote]

0 and 20 are easier to remember than your symbolic
constants, I can never remember those symbolic constants
and what include contains them,

so to save 5 minutes of searching I use 0 and 20
which are totally correct and easier to remember,


[\quote]
Quote

Code: [Select]
TrackMP = CreatePort( 0 , 0 ) ;
if( TrackMP==0 ){ printf("CreatePort error\n"); goto cleanup ; }

TrackIO = (struct IOExtTD *)CreateExtIO( TrackMP , sizeof( struct IOExtTD ) ) ;


Use CreateMsgPort/DeleteMsgPort and CreateIORequest/DeleteIORequest. Why use amiga.lib when these routines are in exec.library ?
Quote


because the RKMs say so,

time is a resource, I dont have the 10 minutes
to search through the docs for some synonym which
may have subtly different usage,

CreateMsgPort isnt in the OS1 RKMs so its not
backwardly compatible,

Quote

Quote
Code: [Select]
WriteBuffer = AllocVec( SECTOR_SIZE , MEMF_CLEAR | MEMF_PUBLIC ) ;

geom = AllocVec( sizeof( struct DriveGeometry ) , MEMF_PUBLIC | MEMF_CLEAR ) ;

Allocation can fail. You MUST check for NULL result from AllocVec and act accordingly.


its a small one off allocation,

dont use low level disk progs in a low memory situation,

this program will only fail if you have a few kb in
your WB title bar, the memory overhead really is tiny,
try not to run progs when the title bar says 100000
bytes free memory,


this code was for someone trying to install AROS,
they are in a hurry to get on the PC, they wont be
 running major stuff on their A1200 if they are using
this,

its that bible story of the soldiers who drank
directly from the water, vs those who drank from
their hands,

Quote

Quote

mixing printf and PutStr / Flush

Don't mix stdio and dos.library calls. This won't work properly (output problems due to buffering). Either use only stdio functions or only dos.library functions.


but it runs ok in my compile,
the buffering issue may be irrelevant because of
the newline, if there's a newline the text
gets flushed out before the function returns (I think),

anyway if the sequencing was wrong, its not a big deal,
main thing is that the correct disk is created,

I expect the users to be intelligent enough to
know what

...1..00..byte..s...

means,

anyway POSIX says that i/o API calls should be
indivisible or something,

not my fault if someone flouts sensible indivisibility
and sequentiality to save a few nanoseconds,

printf anyway must be implemented via PutStr,
so if the output of printf and PutStr gets interleaved
as I have seen then someone has blundered and its not
me, so blame the people who made the OS or the compiler,
but dont blame me,

Quote

In fact, there is no need to use stdio in the program, just use dos.library and get rid of all stdio stuff. The code will never be portable anyway, so why use stdio?


I use stdio because its easier to remember,
AmigaOS can print integers but I can never remember the
API call, too much effort,

the program runs correctly,
live with the fact,

havent you got anything better to do with your time?

lots of major programs are written much worse than this,

IBrowse often crashes when I launch it if I use Genesis,
it doesnt crash if I use Miami, my Geek environment
 often crashes if I simultaneously access from another
shell the directory its looking at,

not always, but quite often,

Windows XP couldnt cope with the fact that I might not
have speakers connected,

When I booted up XP after AROS, Windows queried me about
the AROS CD: "what do you want Windows to do?"
"view a slide show of the images?"

next time I'll click yes!

If I write data from Memacs to another file
it read protects it, which causes all sorts of
problems eg if the partition becomes invalidated
then I cannot read that file to salvage it via
c:copy,

total pain,

the validation problem of AmigaOS disks,
thats not just a bug, thats a design flaw,

the validation problem is a bit like the
towers of Hanoi puzzle, when a new file is
entered into the system it has to be done
in such a way that its only truly integrated
via the last disk write, and if the write fails,
(eg crash or power off) then the file system
should be complete and correct but just missing
that file,

:you would achieve this by having duplicates of
certain datastructures, if the newer datastructure
is inconsistent you would use the older one,

a brute force way to achieve this is by
dividing the disk into 2 identical halves both
with FFS,

then you will always write a file firstly to the
first half and then again to the second half,

if either half is invalidated you would then use
the other half and correct the wrong half,

much more elegant mechanisms should be possible,
and Morphos say their system has fixed the problem,
and has other sensible features such as recursively
updating info up the file system tree,

its a typical architecture design problem,
some architects can design an airport or a city
whereas others dont know how to design a garden shed

Quote

Quote
Code: [Select]
DoIO( (struct IORequest *)TrackIO ) ;

IO can fail. You should implement retry (maybe 5 times), and if retry fail, report the error.



again I have done it exactly as in the RKM's,
I have never known DoIO to fail,

and please note that some of the OS calls
have bugged returns, if you pay attention to the
return, your prog will crash,

I have had major program malfunction by paying too
much attention to silly returns,

some AmigaOS API calls tell you how much data
the call processed and its wrong, the call itself
is fine just the return is wrong,

load an autodoc into your editor and do a search
for "bug", there are many,

so it actually pays to ignore the returns
of some of the unlikely failures, I even
have a feeling that DoIO()'s return may be
unreliable, but as I am connected to my PC
I cannot check the autodocs,


its silly to disconnect h/w while its busy,
dont remove the disk if you've just initiated
a binary write, its asking for trouble,

often when I code I patch the memory allocation via:

void *my_alloc( int size )
{
void *mem ;

while(1)
    {
    char c ;
    mem = AllocVec( size , MEMF_CLEAR );
    if( mem )break ;
    printf("couldnt allocate %d bytes,"
         " free some memory and type any key", size ) ;
    scanf("%c\n",&c ) ;
    }
return( mem ) ;
}

advantage is I dont have to do any error checking,
the error checking being implicit in the call,

that call can only return successfully, only way out
is to type control-C which has an inbuilt exit()
which frees all  C resources,

I wish it would also free all OS resources but it doesnt,
it could though,

the OS (or compiler) actually does this to some extent
via a Ram full message,

IMO error returns are a feature of bad design,

error returns should be an option not the default,

you only rarely want an error return eg to
check for existence of a file or memory space,

here the API should really provide an exists( filename) ;
call and a  largest_contiguous_memory(); call,

every resource API should provide existence() calls,

doing it via error messages could be inefficient,

I try to keep my mind focussed on higher issues
rather than this sort of nit-picking,

 

Offline whoosh777Topic starter

  • Full Member
  • ***
  • Join Date: Jun 2003
  • Posts: 114
    • Show all replies
    • http://www.whoosh777.pwp.blueyonder.co.uk
Re: 68k AGA AROS + UAE => winner!
« Reply #34 on: April 19, 2004, 09:05:36 PM »
@Piru

I have implemented some but not all of your suggestions,

so if you revisit the earlier posting of trackdisk.c

you will see its been changed,


I have also improved it to read + write any binaries not just
PC disks, but you can feed in any unit of any
device eg trackdisk.device for
AmigaOS df0: df1: etc binaries, and the default is mfm.device for
MSDOS binaries,

some comments:

shell output is now entirely via dos.library,
I wish I hadnt bothered!:
this is a bit of a pain
because I have to use FPrintf to print integers and its nonstandard:
%ld instead of just %d for integers,

I decided to implement that for the hell of it to see how it went,
probably never again,

c's stdio is much easier to remember, it remains for reading + writing
to the binary file, fopen(), fread(), fwrite(), fclose() so easy
 and logical to remember and use,

but shell messages via dos.library,

c's stdio and memory routines are very well designed and thought through,
so whenever I can use them I prefer them, however dos.library has some
very useful things,

Now c's printf can check for control-C and then it quits,
however this would leave various AmigaOS resources unclosed,
I could fix this "properly" but its some effort,

so instead I have put in a simple control-E to exit via occasional poll
mechanism,
I didnt use control-C as that may be intercepted by a C compiler,
and I wasnt sure of a portable way of disconnecting control-C,

I do rapid control-E polling by checking the tasks SigRecvd flags, if present
I then do a Wait() which immediately clears the flag and returns,
the program then exits in a controlled way freeing all resources,

you are right about DoIO() error returns: if the disk is AmigaOS
and you read it as a PC disk this causes read + write errors
so I have used your suggestion of try 5 times and then give up,
control-E will also quit it before all 5 attempts have happened,

what was unusual was that the DoIO to read the geometry didnt fail,
maybe that only looks at the drive and not the medium,

it looks like the disk has to be formatted as AmigaOS before you can
read/write an AmigaOS binary, ditto PC, ditto etc,


I left the amiga.lib things in as they function fine,


This code could now be used on an arbitrary unit of an arbitrary
device provided it conforms to trackdisk.device structure,

so I think you can use the device name mentioned in the Devs:
entry for a mounted disk,

BEWARE though that this may produce a ginormous file and
writing may totally zap your drive, so use at your own risk,

:eg if you had a 4Gig disk, it would probably try creating a 4Gig
binary, ie its not just the partition but the entirety,


I used your idea mainly because it simplifies the
code,


I left 0 and 20 unchanged as its much easier to remember,
I find it tiresome continuously searching through endless docs
for unmemorable names and usages, this is why I like stdio,
"r" "w" "a" for read write and append is so easy to remember
rather than ACCESS_READ MODE_READWRITE, MODE_READ, etc,
its easy to use the wrong one if you rely on memory,

moral: strings are more portable and easier to remember than symbolic
constants,

I think the code is now watertight, in that it checks for failure
everywhere (except for eg Output() which is unlikely to fail),

:I did this partly because the code now deals with arbitrary disk
devices eg probably even eg unit 3 of 1230scsi.device,

and partly to stop you growling







 

Offline whoosh777Topic starter

  • Full Member
  • ***
  • Join Date: Jun 2003
  • Posts: 114
    • Show all replies
    • http://www.whoosh777.pwp.blueyonder.co.uk
Re: 68k AGA AROS + UAE => winner!
« Reply #35 on: April 19, 2004, 09:25:15 PM »

@Karlos,

question for you:

How do you explain the huge speed of 68k FPUs?

68881 and 68882 are much faster than 68k
(I think, otherwise whats the point?)

but these FPUs are much more than CISC they are VCISC IYSWIM ie
very complicated instruction set chips

Sin, Cos, Tan, Log, etc, there is literally an entire app inside
those FPUs, they even do inverse-cos etc,

(calculators also do all that of course)

(sin x == x - x^3/3! + x^5/5! - x^7/7!... but dealing
with ieee specified errors and large x's eg sin(1000) must be some effort to do in h/w)

perhaps s/w done in h/w is the way to get huge speed,

One other note: 68030 and 68060 are both 50MHz but 68060 must
be 10 x as fast,

:I think this is entirely because of caches as both have almost
identical instruction sets and clock speeds,

thus registers + instruction structure is not the only factor for speed,
cache size + speed I think may be a much bigger factor,
Motorola were always a bit tight fisted with their caches,
eg 68020 has microscopic hardly-worth-it caches,

The point of huge caches is eg that a loop containing a huge switch
statement (as would occur in an emulator) would fit entirely in a cache
causing implausibly fast speeds. Your inner RISC thing is
in someways a cache-ROM IYSWIM, and if its done with special
faster than usual RAM it will probably be unbelievably fast,





 

Offline whoosh777Topic starter

  • Full Member
  • ***
  • Join Date: Jun 2003
  • Posts: 114
    • Show all replies
    • http://www.whoosh777.pwp.blueyonder.co.uk
Re: 68k AGA AROS + UAE => winner!
« Reply #36 on: April 20, 2004, 04:55:12 AM »
Quote

Piru wrote:
Quote
Now c's printf can check for control-C and then it quits, however this would leave various AmigaOS resources unclosed, I could fix this "properly" but its some effort,

so instead I have put in a simple control-E to exit via occasional poll mechanism, I didnt use control-C as that may be intercepted by a C compiler, and I wasnt sure of a portable way of disconnecting control-C,

This indeed is a problem if you use stdio (output) routines. The only way to avoid this is to use compiler specific ways to disable CTRL-C check, or to drop stdio completely and only use AmigaOS libraries.


I think it may be possible to hack around it in a
portable way: control C will cause a signal
(possibly SIGBREAK, I'm on the PC so I cant look it up)
 so you have to set up a signal handler which
eg sets a flag and then returns in the way
(which I cant remember offhand) which makes
the signal effectively ignored.

If you dont set up a signal handler then you get
the default handler which exits,

I got around the problem via ctrl-E,

note also that ixemul control-C is different from
noixemul control-C, ixemul's responds to control-C
immediately which is the correct way whereas noixemul
 and Lattice only notice it
when there's a call such as printf(),
I wish lattice hadnt bothered, Lattice does the
signal handler correctly but the signal waits for
eg a printf before it happens,

:the reason ixemul's approach is better is because
if a program is doing some damage you want it to
halt instantly and not wait till it echoes some text, eg the runaway printer problem,

I prefer c's stdio, AmigaOS is too complicated to
remember and nonstandard, eg %d is 16 bit,

I wondered why FPrintf("%d" ,.. was always printing 0,

one other thing I once thought I would speed up a
program which did huge numbers of small memory
allocations by replacing c's memory allocation
(calloc and free) by exec's (AllocMem with MEMF_CLEAR
and FreeMem), I found to my amazement that
the program was now slower,

so c's standard library can be very efficient,
eg if you want to copy an arbitrary size of memory
you need a very good reason to not use memcpy(),
and it deals correctly with overlapping memory,

one of the reasons I use c's stdio and memory
allocation is that *all* c resources are
automatically freed on program exit regardless of
where or how you exit:

main()
{
char *x = calloc( 100000 , 1 ) ;
FILE *fp = fopen( "xyz" , "w" ) ;
}

the memory allocation x and the file fp will automatically
be freed. If I use AmigaOS:

main()
{
char *x = AllocVec( 100000 , MEMF_CLEAR  ) ;
BPTR fh = Open( "xyz" , MODE_NEWFILE ) ;
}

the memory x would be lost from the system,
 and the file "xyz" would be unusable till I next boot,

One other thing dos.library has copied a lot of
 stuff from c eg FPrintf is clearly copied from c's
fprintf(),


Quote

Quote
do rapid control-E polling by checking the tasks SigRecvd flags, if present I then do a Wait() which immediately clears the flag and returns

Code: [Select]
if (SetSignal(0, SIGBREAKF_CTRL_E) & SIGBREAKF_CTRL_E)
{
}



ok, there's an obscure way to do it,
not sure I will remember it,


 

Offline whoosh777Topic starter

  • Full Member
  • ***
  • Join Date: Jun 2003
  • Posts: 114
    • Show all replies
    • http://www.whoosh777.pwp.blueyonder.co.uk
Re: 68k AGA AROS + UAE => winner!
« Reply #37 on: April 20, 2004, 08:16:32 AM »
Quote

bloodline wrote:
Quote

is the default WB screen 16.8 million or 65536?
new to such things I dont know the difference,


The actual colour depth is chosen by you at the boot screen. The 16bit displays have 65536 colours, the 32bit (and 24bit) displays have 16.8 million colours.

There is also a VGA option that is just in case you don't have a modern graphics card, that only has 16 colours.

The Nvidia option defaults to 16bit, and the resolution can be adjusted using the screen mode prefs in the prefs dir.



I dont want 16 bit as its less colours than HAM8,
32 bit via byte per component with one extra byte
possibly unused is the best way to do graphics:

you can read/write an entire pixel in one read/write cycle,
ditto each component,

24 bit via byte per component is next best where
each component is via 1 read/write,

16 bit is no good because its 5 + 6 + 5 bits per
component ie its irregular, 15 bits is regular
however 15 and 16 bits are no good because
its slow to access components: shift + mask,

15 and 16 bit are good for reading an entire pixel,
but bad from the component POV,


Quote


Quote

I found so much further stuff this time that
I now think it is very nearly mature,

so I think it can take off without backwards 68k
compatibility,


We think so too.



you will need to sort out the browser though,
as you operate through the internet,

how difficult is it to implement the TCP/IP stack,
its one area I know nothing about,

Quote

Quote

I still havent found gcc on it, though I found
the includes and gcc libraries, you have a lot
of gcc stuff including libjpeg,

jpeg is very very portable so it should port to
everywhere very straightforwardly,


gcc is not included in the nightly build, at this time, as there are still issues with it.
All graphics manipulation should be done via the datatypes, so that all programs support all types of file. I belive we already have a jpeg.datatype.



darn! I have to read up about datatypes then,

will you have datatypes for sound then?
its a similar concept,


Quote


Quote

If you get a Nvidia (ie GeForce) graphics card you will notice a massive speed up if you select "NVIDIA" at the boot options.


--------------------------------------------------------------------------------


PCWorld had this for £99, is that a good price?

what is the full product name?

Is it A1 and Pegasos2 compatible?

Nvidia vs Radeon? will you eventually have Radeon support?
is it worth me waiting?



Any Nvidia based card will do for AROS. Just get the best you can afford. I would probably not spend more than £150 on one.
The A1 and Pegasos, are compatible with current AGP specs as far as I know.

We have a couple of people working on Radeon drivers.


I may wait a bit then, I have lots of figuring out
to do on this new machine,

Quote

Quote

Is there any way I can boot to Windows XP with the
AROS CD still in the drive?


if you type e during the GRUB boot stages, and go to the boot console, typing "windows" (IIRC) will boot windows.


this is useful info,
I will try this out,

Quote

Quote

can I reconnect my existing SCSI FFS drives to
my new PC SCSI interface and use them AS-IS?

Is there a risk factor as with WinUAE or is it
totally safe?



AROS has no SCSI.device so it can't read SCSI drives. I would be surprised if you PC even had a SCSI connector. you are welcome to write a SCSI.device if you wish though.



its probably too early for me to attempt a h/w device,
I've just landed on Mars, so I need to do simple minded
things first,

BTW I think scsi.device is quite simple from exec's POV,
all the work is in the 3rd party h/w: interface +
devices making life very easy for the
programmer and OS people,

its just essentially 2 arrays from exec's POV, command and data,  command will be eg 6, 10 or 12 bytes for SCSI-3

(I think, several years since I last looked at this)

exec only needs to know size of command and data (I think),

first the interface transmits command to the h/w,

which eg says "write 1000 bytes starting at position 100",

then the interface transmits "data" which will be the
1000 bytes, everything is transmitted independent of
endianess, most significant byte first ISTR,

thats it, "command" itself may be very complicated eg
for CD-R's, but that is the remote h/w's problem
not exec's,

the great thing about SCSI is it abstracts the
driver problem, its also backwardly and forwardly
compatible,

:you can run a SCSI-3 device from a SCSI-2 interface,
and vice versa, (I think!)

on my A1200 I can connect I think 12 SCSI devices
as I have 2 SCSI interfaces, Blizzard SCSI and
Squirrel SCSI,

you never run out of slots,

try connecting 12 IDE drives to an A1200!

and IDE is just Hard disks isnt it??

SCSI is Hard disks, printers, scanners, D-R, CD-RW, DVD-R, DVD-RW, etc,

:I think at least 10 device classes,

The engineering behind it is very complex,
eg you can have X--Y--Z--computer and switch off Y
while in use and the messages continue no probs
between X and the computer,


Quote

Quote

You are saying that I shouldnt install AROS to this
current internal drive?

I want to try and only use external drives, so I can
selectively switch the power off as a virus precaution,

can I install AROS to some such external drive?
what is the best type of external drive to get?
(low cost + high speed),


Don't install AROS to your Windows hard drive. AROS will reformat it and turn it into an Amiga Formatted Hard drive.

When AROS gets USB support you will be able to install it onto a USB Memory stick (or USB hard drive) and boot from that. But AROS is still waiting USB drivers.

AROS should be able to read an FFS IDE drive fine.


install it onto a Memory stick!

can you get external IDE's?

booting AROS from CD suggests AROS understands the CD,
how does it manage that?

Quote

Quote

2 questions on little-endian x86 AROS:

1. Have you a version that runs above Windows?
2. Have you a version of UAE that runs above
either even if its not integrated?

because I may then use that instead of WinUAE
for my 68k environment,

I have some really useful things which can only be
run in 68k,


There is not AROS Hosted for windows, yet. But it will come, people are looking into it.
UAE is included with the nightly build, but the GUI doesn't work yet as Adam hasn't linked it. You will also need to provide an Amiga ROM image as the "Real Amiga" build of AROS needs to be matured.


ok, I have to look into this UAE,
can it be used without the GUI?

I have a real Amiga for the ROM image,

Quote

Quote

I tried out some of the Extras programs which looked
very impressive, some of the Windowing is just as good
as Windows XP,

would it be possible to reintroduce an OS1.2 click to back
gadget? maybe via some Prefs program for standard gadgets,
I never liked having to click twice to move an
in between window out of view on OS3,


if you select "Execute Command"  and type "opaque" , you will get solid windows :-) You can find the opaque commodity in the Tools dir.

The Click to back gadget was removed because it is redundant. But If you want on, you are welcome to add the code for one, that can be used in different window themes. I will make an OS1.x theme, but I had not planned to include a click to back gadget,

to get better window management, select "Execute Command"  and type "clicktofront double" , you will then be able to double click any where on the window to bring it to the front of the dispaly, then hitting the Depth gadget will drop the window in one click :-) You can find the clicktofront commodity in the Tools dir.


sounds like I will be doing both of these,

on XP there is a problem: I bring a small window
to the foreground to see whats on it to copy into a big window,

problem is the moment I click on the big window to
activate it, it is brought to the front obscuring the
small window which I am trying to read,
takes quite a bit of effort to have the small window
in the foreground with the big window active so it
can be typed into,

I regard this as a design flaw, single clicking should
not depth arrange a window except if the click is on a
gadget,

I need to be able to activate a window without altering
its depth, so I need double-click-to-front,

Quote

Quote

I noticed your shell has tab completion via requester
exactly the way I want it, is the shell King-con or
have you reimplemented it from scratch??

I didnt check whether you've fixed the square bracket
problem on King-Con, on King con if there are square
brackets in the shell output, if you scroll back to
them they vanish! Thats why I use () in the usage info
in my programs such as the above trackdisk.c,


KingCon is not used, all features are coded directly into Zune (AROS's version of MUI), and not as third party add on.


MUI is 3rd party,

I found Zune very confusing, very difficult to find
what I want on it,

I prefer the other Prefs programs,
direct + uncluttered + self-explanatory + useful,

unpretentious with no bloat,

usually the Prefs settings I want are:

screen colour(s),
keyboard delay + repeat,
keyboard,
mouse speed,
screen fonts:
    (I like big fonts: topaz-8 on a 640 x 256 size,)
screen resolution (I find all fonts wrong on
     the very high resolutions so I may use a lower
     res eg 640 x 256 screen just to get the fonts
     right.)

This is a subjective point but I think
a Prefs programs name should be a self-descriptor,

so Prefs/Mouse and Prefs/Palette etc are exactly
what the name says,

eg Prefs/Serial is for setting the serial port,

but Prefs/Zune, who or what is Zune and why
should I want to change it?

why not

Prefs/ScrimbleZooplig
?

Zune sounds a bit pretentious,

In fact on my first trial of AROS, I tried all
sorts of Prefs progs but not Zune because
the name is a nondescriptor,

I think it would be much better to divide Zune into lots
of small Prefs programs eg Prefs/String_gadget,

somehow (probably from clicking the wrong buttons
on Zune) I got my icons text with white text in a
black outline, I wanted to change this to
usual black text with no outline,

I could not do it, I also was unable to refind
how to change the screen colour. I found it once
but never again and I went around in circles
through Zunes incomprehensible options,
eventually I got fed up and started looking at other
directories instead,

whats wrong with just having Prefs/Palette
or Prefs/Screencolour?

I'm sure Zune can do the above 2 things,
but I gave up trying to find how,

Zune is the only part of AROS which is more
confusing than Windows XP,

Is there an API or full documentation for the prefs?

maybe I will write a shell command:

set_screen_colour r g b

please dont tell me the screen colour is in a file
zune.prefs, oh no, it is isnt it?

In that case I give up!


Quote

Quote

The transparent window with a circle on it looked
really interesting, I want to see what the mechanism
for doing this, non rectangular windows should be now
possible,


We have non regular window support, I think there is a demo called "roundwindow" somewhere.
The mechanism for this is built around the standard AmigaOS layers system. But AROS has enhanced the basicly layers abilities.


I'll look out for this and try it out,

I can see that nonrectangular windows are going to be
a bit too much of an effort to code,

I think the transparency is a more practical feature
than nonrectangular windows,

I have to try out click to front on the
transparent region, see if I have to click on
the visible part,

 

Offline whoosh777Topic starter

  • Full Member
  • ***
  • Join Date: Jun 2003
  • Posts: 114
    • Show all replies
    • http://www.whoosh777.pwp.blueyonder.co.uk
Re: 68k AGA AROS + UAE => winner!
« Reply #38 on: April 20, 2004, 09:06:24 PM »

@Hammer

>Well, you(and other person) opened some issues in relation to PPC and X86.
 
I think I touched a raw nerve by saying IBM dont know how to design CPUs,

Karlos pointed out that PowerPC is an IBM thing and not a Motorola thing,

in which case why has the Amiga taken on an IBM CPU???

@Piru

>No. It will just crash due to your program writing to zeropage.

this problem is easily fixed by:

1. moving the vbr away from the start of memory, as in fact appears to happen
if you run "cpu fastrom", Sysinfo shows where the VBR is,

2. the OS should then write protect the first page of memory after the
   pointer to ExecBase has been set up in position 4,

Now when my prog tries to read from disk or file to position 0 the MMU will
intercept this and a "first page write violation" requester should come up,
"click to remove task",

as all its reads begin at the start of the array zero problems would result,

its not my fault if the OS designers put the most critical
OS vectors right above 0,


BTW my program with device set to trackdisk.device creates uncompressed .adf
files, I found this by comparing its output to that of something from
www.aminet, in trying to set up WinUAE,


I have set up WinUAE now with AIAB, its absolutely fantastic and its
the identical ROM of my A1200 so its the real AmigaOS,

so the XP machine is like a huge graphics card accelerator for my ROM,

It has the exact same quality as the Windows XP environment,
as its basically an XP app, with emulated Picasso screen,
the speed tests were absolutely staggering: it filled an entire screen
with characters instantly, it was like rain in a thunderstorm,
it said equivalent to 1662 MHz 020 and 5234 MHz FPU,
100 x speedup of FPU!, 30 x speed up of CPU (I think)
361 MIPS, 673 MFlops, I havent run Sysinfo yet,


There are some font render bugs, I ran Memacs with a large font and it doesnt
quite erase a character if you type del, so you end up with a lot of
detritus in the bitmap,

There seem to be long delays from double clicking an icon till it runs,
but once it runs it moves like greased lightning,

The way WinUAE deals with hard-drives and floppies is they are
files on the Windows drive, so the hard drives on the WB seem to be
the subdirectories of a particular directory on XP,

thus to transfer Amiga files over you just copy them over on Windows into
those subdirectories,


the AIAB backdrop is visually more stunning than any of XP's also the
AIAB icons + icon text are actually better than XP's if you like that
type of icon,

the amount of graphics ram seems a bit limited though, its either 8 or 16 MB,
(I forget which),

AROS should be much faster still, they say power is an aphrodisiac,
I think once any developer starts coding on AROS they are going to become
totally hooked,


>Sure. AmigaOS is not POSIX.

I'm not advocating POSIX, gcc is largely
POSIX compliant, so AmigaOS is very nearly compliant,

what I meant was that indivisibility and sequentiality are crucial
design features, its very pedestrian if 2 i/o API calls of the same
Task violate this, ie Putstr(...) ; printf(...) ;

its no use blaming the programmer, both those calls dont reference any
resources so it should be safe to call them both,


>>printf anyway must be implemented via PutStr,

>No. And it's not. Thus the possible problem when mixing stdio and dos.library IO.

printf is dos.library IO:

I wrote a small simplified version of SnoopDOS, I give it any jump vector
and when I type control-E it tells me how often its been used,

this tells me:

SAS C 650 and 68k gcc *both* implement printf() via dos.library Write(),

probably printf(...) is implemented via fprintf( stdout , ...) which
in turn calls Write()

buffering should be inbuilt at a low level,
dos.library buffering sucks with titchy static buffers per drive,
(c:AddBuffers) buffers should be dynamically allocated at use time and
they should be big it makes a big difference to performance,

most drives most of the time are asleep so if you have 10 partitions
that is say 8 asleep buffers, its so wasteful,

it annoys me when people vent their anger at me for what is really an
architectural flaw, I will redirect that anger to where it rightfully
belongs though,

this is how I would implement PutStr() :

int PutStr( UBYTE *str )
{
int len ;

len = strlen( str ) ;
if( len==Write( Output() , str , len ) )return( 0 ) ;
else return( -1 ) ;
}

ooh that was difficult,

my prog tells me they havent used any of Write(), FPuts(), VFPrintf(),

>Which reminds me, your code fails to Inhibit() the filesystem.
>Anyone accessing the disk simultanously can get corrupt results,
>even corrupt the written data.


I suppose you take out an insurance policy every time you cross the road??

I used it quite painlessly to turn my WB3.0 floppy into an ADF file
and it boots quite fine to WinUAE, smooth as clockwork,

you should take a stroll down www.aminet sometime,

its "storm in a teacup" time,

some people get their kicks by being unconstructive,
but the constructive people always win in the long run,

 

Offline whoosh777Topic starter

  • Full Member
  • ***
  • Join Date: Jun 2003
  • Posts: 114
    • Show all replies
    • http://www.whoosh777.pwp.blueyonder.co.uk
Re: 68k AGA AROS + UAE => winner!
« Reply #39 on: April 20, 2004, 10:44:15 PM »

WinUAE vs A1200 Sysinfo speed comparison,

Windows XP, CPU = 2.600 GHz Intel Celeron,
256 MB RAM, 64MB shared memory Intel graphics card

WinUAE via AIAB Picasso emulation,
AGA A1200: 50MHz 68030 + MMU, 50MHz 68882 FPU,

CPU: 972 MIPS vs 9.01 MIPS : 108 x faster
FPU: 331 MFlops vs 1.33 MFlops : 249 x faster
Dhrystones: 931824 vs 8632 : 108 x ratio,

so CPU is some 100 x as fast, and FPU is 250 x as fast,

there you have it, certified FUD free,

AIAB comes with a different speed program Sysspeed,
that said: 361 MIPS, 673 MFlops, but its not fair
to compare Sysspeed on WinUAE with Sysinfo on A1200,
so I will try a Sysspeed comparison also,


You can tell WinUAE to treat a particular XP directory as
a hard disk, floppies are via .adf files which you can
create via my trackdisk program earlier, set
device to be trackdisk.device

Once I've got myself more organised I'll do my own
speed comparison of AROS vs WinUAE, but not via
Sysinfo etc but via a "real" program of some sort,

test programs are a bit artificial,
I will try and compare progs that run entirely in RAM
to remove disk speed from the comparison,



 

Offline whoosh777Topic starter

  • Full Member
  • ***
  • Join Date: Jun 2003
  • Posts: 114
    • Show all replies
    • http://www.whoosh777.pwp.blueyonder.co.uk
Re: 68k AGA AROS + UAE => winner!
« Reply #40 on: April 21, 2004, 03:04:13 PM »
@bloodline

if I have understood you right AROS understands IDE
and AmigaOS so I think I will set up an IDE AmigaOS
drive for AROS, I have to think a bit how to go about
this.

I installed my first hardware yesterday: I opened up
the box and installed the Fast SCSI-2 PCI interface,

this was totally painless, the box internally is
very well engineered, lots of space, slots wherever
you look: 3 PCI slots with one used by the modem,
PCI modem sounds a bit extravagant, so I have 1 PCI
slot free now,

I suppose an unused slot is a wasted slot in some sense,

I noticed a similar but different slot which must be
the AGP slot for Gfx card??

Also 2 Simm slots with one in use, which must be the
DDR RAM, 256 Mb currently,

There is a free IDE-drive place which I may use for
AROS or I will reuse the current drive: but I would
have to transfer its contents first: where to???

there are also 1 unused floppy + 1 unused optical drive slots.

I figured out most of it just by looking eg the existing
PCI slot puzzled me, is that a drive? until I noticed that the phone socket was part of it, aha! its a modem!

its great how the SCSI socket is on the back of the case,
so conveniently thought out,

I have already downloaded my first Spyware/adware,
it seems I should have read the EULA, Norton located
the 3 problem files,

The security risk on this machine worries me a bit,
this is why I want to use external drives:
not just to prevent viruses but to prevent MS spying on
my system. This system is so complicated that they
could do anything they want and you wouldnt be any
the wiser. The spyware info says that spyware already
can raid your system for passwords, address books etc

So I want multiple unconnected environments:
drives X,Y,Z,... where 2 of these are never simultaneously
on and communication is done via ascii only floppy disks
or something like that. I can vett the floppies via my
A1200,

I want my own programming work never to be on an online
machine,

I have to say that buying this PC is the best decision
I have made in the last 10 years, I feel so excited about
it, I have no regrets and am glad I made the break with
Hyperion + Eyetech. The word for me which sums up
those 2 companies is "contempt".

The PC market is so dynamic that its frightening, there is something very liberating about
this machine. Also I want to remain with the Amiga,
when I switch over to my A1200 I can move so much
faster and painlessly. There is something very
direct about the Amiga paradigm, you have immediate
access to everything, on the PC you have to go through
a maze to access anything.

Anyway I cannot wait to find out directly how fast
AROS is, ie how much faster than WinUAE,
if its just 2 x as fast that would make it 216 x as
fast as my A1200,

each 1% speed up would be another A1200! :lol:

at that point I will then be able to quantify the
decision of little endian gcc, big endian gcc
I can also evaluate via Amithlon's big endian gcc,
but thats further down the line,

Once I am set up with gcc I will start on this,
I think I have to sort out the AROS drive first,
because at the moment when I boot up AROS I just
get the CD's icon + RAM icon, so all my work
will evaporate after the session!

:so I can only try out progs that I write in the session,

whats the best way to get files to and from AROS?
because it looks tricky currently,


the original idea of this thread I think is fully  
valid, because WinUAE is no use for non Amiga people:
they would have to buy Cloanto to use it:

an AROS kickstart ROM would enable everyone to use
WinUAE for free as well as publicise your project,
furthermore they would be able to use the full
Windows XP through UAE. So people could use
scsi + internet until you have the native
versions up and running (I think),

you mentioned about UAE's GUI, WinUAE's GUI is a
total pain, it has 3 rows of buttons and everytime
you click a button all the other buttons rearrange,
so its very difficult to be certain you've gone
through all the options, its like one of those
sliding square puzzles,



 

Offline whoosh777Topic starter

  • Full Member
  • ***
  • Join Date: Jun 2003
  • Posts: 114
    • Show all replies
    • http://www.whoosh777.pwp.blueyonder.co.uk
Re: 68k AGA AROS + UAE => winner!
« Reply #41 on: April 22, 2004, 01:40:03 AM »
@Piru,

I dont want to get too bogged down in the discussion of trackdisk.c,

its just a small utility,

you insert disk, type shell command, wait a little while,
binary ready,

its not a big issue, I am worried that you make such heavy weather
over such a non issue,

but on this occasion I'll look at some of the points you raise,

>this problem is easily fixed by:

>1. moving the vbr away from the start of memory, as in fact appears to happen if you run "cpu fastrom", Sysinfo shows where the VBR is,

>2. the OS should then write protect the first page of memory after the pointer to ExecBase has been set up in position 4,



>>...except that device read access can use DMA to write to memory
>>(KS 1.x trackdisk.device always uses blitter to decode,
>>KS 2.x+ trackdisk.device doesn't since !(TypeOfMem(0) & MEMF_CHIP),
>>dunno about mfm.device). If DMA access is used, it is not captured m
>>y MMU.

ok that bypasses 2. of my idea but only for OS1,
1. I think is sound except for 68000 which doesnt have a VBR,

so the idea is sound on a 68030 MMU machine, 1. is sound on 68020 upwards,
and 2. is sound on MMU machines OS2 upwards,

I think we see here several design flaws: putting the vectors right at start
of memory: the whole situation is ridiculous from a logical POV:

AllocMem() returns 0 on failure,
but 0 *is* a valid memory address,

then putting the highest system data here,

we have here a recipe for disaster: memory allocation failure
returning a valid memory pointer to the most important system data,

guess what the cat-in-the-hat will do here??

really memory allocation failure should return a pointer to non memory which
would cause an exception on *all* CPUs,

preferably a pointer to the middle of a large non memory
region,

-1 may also be a clever way to do it because firstly it is probably beyond
many address spaces, even if it is in the address space it would often cause a
memory alignment exception, non byte accesses would cause exceptions,

I havent used the blitter for a long time but what happens if you give
the blitter an odd address, do you get an exception or just a horrible crash??

lastly not sure about this but it may cause an
exception for wrapping around memory ie after 11111....111111 comes 000...000000
(only if you write from the start,


>>Reading to address 0 could happily overwrite whatever data is at
>>address 0 and forward, regardless of MMU. However, if the zeropage is
>>mapped to fastmem, the fastmem copy will not be trashed
>>(so ExecBase ptr would remain valid). Anything in low chipm
>>em would be trashed however (readlen > chipmem start address),
>>including the chipmem MemHeader, leading to swift crash
>>(next memory allocation/deallocation).

they should have put the memory headers at the end of the blocks,

:memory writes tend to move upwards through memory which makes the
start of memory regions vulnerable to trashing,

as I said I can turn all the criticisms of my code around into
criticisms of the system design, both h/w and OS,

I think we also see here one of the flaws of in-place memory datastructures,

(ie where the memory regions are self describing data structures),

it may be better to put memory datastructures away from the memory itself
and in write protection,

if its in place put it at the top of the regions,

with exec's struct Library's the jump vectors precede the Library which
is a clever idea,


IMO a well designed system is idiot proof,

dont blame the user blame the designer,


In the Modula3 language you can write code that never checks for errors,
errors always cause lightweight language level exceptions  so it produces very
clean code eg instead of

[code]
if( y==0 ){ printf("error in y"); exit(20); }
if( z & ~(MEMF_CLEAR | MEMF_FAST | .... ) )
 {
 printf("error: undefined memory flag" ) ; exit(20);
 }

t = AllocMem( x/y , z ) ;

if( t==0 ){ printf("memory allocation failed" ) ; exit(20); }
[\code]

you would just write:

[code]

t = AllocMem( x/y , z ) ;

[\code]

failure at any of the 3 places would cause the appropriate exception,
so you get much more transparent programs,

its a long time since I used m3 but I think if you dont put any
exception handlers the program will probably just quit with untrapped exception,

>Even if the app crashes, there is no way to "remove task" safely,
>since there is no resource tracking or separated address spaces.

if you had just memory tracking then you could remove the tasks
allocated memory + code + stack,

>When task/process crashes under AmigaOS the safest thing you can do is make it
> Wait(0) (suspend).

thats what I meant, or remove permanently the struct Task from the task queues,

>But it also lacks all local buffering. It doesn't handle BUF_NONE and
>BUF_LINE properly.

you are clouding the issue with implementation specifics,

>With such methods all buffering would be left at the
>lower level (filesystem and device driver), thru several APIs.

no no no, I am standing at the opposite side:

you------prog------API-----API--------h/w-----me

from my POV through 0 API's, from your POV lots of them,

I am looking at it from the h/w POV, you from the programmer or user POV,

speed is determined by the h/w,

>The "closer" the buffering is to caller, the fasterl
>it is.

correction: closer buffering is to the h/w the faster it is,

see CPU caches for example,

caller caching of memory is going to be very slow and complicated,
h/w caching (ie lowest level possible) is much faster than uncached
which is why its done!

thats why people dont like emulating MMUs, s/w emulation of MMU,
= very very very slow,

VM is a caching mechanism: RAM space becomes an L1-cache (IYSWIM)
for the virtual space, Hard disk = L2-cache,
virtual space itself doesnt exist hence its "virtual",

VM has to be done by s/w however it is MMU-exception driven,
so its as near to the h/w as you can get namely exceptions,

imagine if the programmer had to do this deliberately in s/w,


>Also when the buffering is local it has much better knowlege of
>the actual buffer usage, so further optimizations are possible
>that would not be at lower level.

I totally disagree, buffers should be dynamically allocated at the
lowest level, preferably not by the programmer, in fact maybe even not
by the filesystem but by a lower level still, though integrating the
filesystem with the lowest level maybe is the best approach,

just as memory caching is done transparently by a very low level of
the CPU, exactly the same applies to everything,

imagine if programmers had to do RAM caching themselves,

Also choice of caching algorithm can make a huge difference this is part of
why I dont want it done by the programmer,

if its not done by the programmer then it can be retargetted ie reimplemented,

caches arent everything, filesystem design is equally important at
determining speed,

a well designed system would be really fast even if the programmer
doesnt do any buffering,

the subroutine call overhead of fputc( fgetc(infp) , outfp) should be
quite tiny because this is such a tiny loop it should entirely be in the
memory cache,

(with fgetc() copying a byte from a low level buffer and fputc() to a low
level buffer)

note that not only will the instructions of this be entirely in the
instruction caches but the file buffer arrays will also be entirely in
data caches, so all round very fast,


I think AmigaOS filesystem is much more efficient than that of Windows XP,

its a good filesystem, but it could be a lot better,

>Your snoop program probably only tells you if something calls dos.library
>thru vectors. It doesn't detect dos.library calling itself directly
>via bsr or jsr.

very bad design if it bypasses the jump vectors, what happens if someone
retargets the jump vectors?

inconsistent behaviour thats what,

someone tried to save a few clock cycles instead of

bsr x
....
x:  jmp y

they've done

bsr y

ie ruined the retargettable design to save 1 asm instruction,

you should never trash clean design just to save 1 asm instruction,

the above stops someone fixing some bug in x:


>Also it misses direct DosPacket I/O to filehandler (for example ixemul uses it).

as you point out if it bypasses the jump vector my prog wont see it,
however if the snoop prog sees something though its for real,

If you run my program trackdisk.c you will see that the OS in fact
does sensible buffering: you get a sequence of dots rapidly drawn
followed by a wait, followed by the next sequence,

so the OS is sensibly not writing to the hardware till the cylinder or track
is full,

I think one difference between my perspective and yours is I am an empiricist,
I look at what happens when a system is used or run,

whereas you are following the deductive path where you look at how its
implemented and work from there,


both paths have their own value and both have limitations,

I do use deduction but not on specifics but based on
past observations and experience,

so eg I know that mfm.device i/o is using sensible buffering
just by watching my program output,

also if copying a partition takes much much longer than formatting it
then I know that the filesystem is to blame, I dont even need to
know what filesystem it is,

Here is an example of bad design:

with Memacs if I look at a 5 meg file, it takes 10 years to load,
the silly program appears to be loading the entire file into ram,
with sensible design it should just load the visible part of the
file almost instantly,

another example:

if someone binmails me a 1 meg file attachment,
YAM takes a zillion years to load it,
this means either the email datastructure is badly designed
or YAM is badly designed,

a well designed email structure with 2 large attached files would have say bytes:

#define SENDER -1
#define MESSAGE -2
#define ATTACHMENT -3

SENDER int_sizeof(next_string) "xyz@uvw.com"
MESSAGE  int_sizeof( next_string)"hello,\nbye\nxyz"
ATTACHMENT NAME int_sizeof( name ) "story" int_sizeof(file)
"A long story: once upon a time, last week, "
......
[approx 1 meg here]
......
"and lived happily ever after"
ATTACHMENT NAME int_sizeof( next_string ) "another_story" int_sizeof(file)
"Another long story: once upon a time, last week, "
......
[approx 1 meg here]
......
"and they also lived happily ever after"


then YAM only needs to load SENDER + MESSAGE, but ATTACHMENT it reads in
the name then skips the contents to the next attachment reads name
etc printing out:

sender: xyz@uvw
message:
hello,
bye
xyz
attachment: story 1meg
attachment: another_story 1 meg

this should happen quite fast, if it doesnt then there
must be something wrong with the filesystem, a well designed filesystem
should allow you to random access any part quite quickly,
so eg the file must *not* be solely a linked list of blocks

but be say an initial block giving the positions of
the data blocks, if the first block isnt large enough
then the tree needs more levels, so always the first block
should span the entire file,

this way it will take log_blocksize( filesize ) to random
access the file. So if blocksize is 512 ints then
its log_512( filesize ) reads, ie
2 reads to locate from 262144 byte file,
3 reads from        134000000 byte file,
ie approx 3 reads to get to any position of a 130 meg file,

anyway YAM should load a big binmail real fast,

it doesnt, it can take several minutes on my A1200,

something somewhere is wrongly designed:

either YAM or email-datastructures or the filesystem,

I dont know which,
 

Offline whoosh777Topic starter

  • Full Member
  • ***
  • Join Date: Jun 2003
  • Posts: 114
    • Show all replies
    • http://www.whoosh777.pwp.blueyonder.co.uk
Re: 68k AGA AROS + UAE => winner!
« Reply #42 on: April 22, 2004, 04:36:22 AM »

@bloodline

/*
TCP/IP stacks are hard, but Wez is working on one.

Did you not use Datatypes on your Amiga?
*/

no, I've not gone too deeply into graphics as I find it too
open ended and arbitrary, though its very satisfying to look at,

same reason I didnt become an artist,

so when I have needed graphics I've coded it directly eg
iffparse.library for iff files,

or used 3rd party code for a specific picture file,

/*
You seem hung up on SCSI. SCSI is a very old idea. Hard drives and
CD/DVD drives all go on the IDE bus, all other devices go on the
USB or the Firewire bus.
AROS can use CD/DVD drives, because AROS has an ide.device.
SCSI is dead, no normal computer equipment use it
*/

I bought a USB external drive today so I see what you mean:

£40 for 120 Gig, £60 for the case though, probably 10 x the capacity of
an external SCSI for that price,

I think USB outdoes SCSI, but SCSI has advantages (not price) over IDE:

with IDE my machine only has 2 slots,

for me personally I have complete docs for coding cross platform SCSI,
but maybe I can learn to code USB,

/*
The thing I hate most about all GUI's is "auto rise",
that is when you single click on a window and it is brought to the
front of the display. I hate it. AROS does not do this, and I like it that way
*/

I agree entirely,

single click should activate and double click "rise",

and I think its not just subjective but "auto rise" is a deficient concept
in that its impossible to "activate" without "rise"


Question: can you outline what is involved in communicating with a
hardware device on the PC?

(thinking about AROS drivers)

explain it in general terms understandable to someone only familiar with
the classic 68k Amiga,

how do you communicate with a generic PC h/w unit?

alternatively select a specific h/w unit and explain how this
is controlled directly in assembler,

eg are there specific absolute memory addresses for say PCI socket 1,
and is there some kind of structuring to the reads + writes,

eg for a write might it be:
write data length to $12340
write pointer to data to $12344
set bit 1 of $12348 to begin the write,
interrupt 123 happens on write completion,

and eg the data itself will be structured in a way
private to that specific device,


I can see that all PCs have the same structure:

some PCI sockets, AGP socket(s), SIMM sockets, maybe IDE socket(s),
maybe USB sockets,

and then a lot of h/w is via these sockets,
you mentioned IDE bus and USB bus, presumably the bus amounts to
an initial socket??

so I presume each socket has an assembler level API,

 

Offline whoosh777Topic starter

  • Full Member
  • ***
  • Join Date: Jun 2003
  • Posts: 114
    • Show all replies
    • http://www.whoosh777.pwp.blueyonder.co.uk
Re: 68k AGA AROS + UAE => winner!
« Reply #43 on: April 23, 2004, 12:29:08 AM »
Quote

Karlos wrote:
@whoosh777

So anyway, how's the big-endian memory emulation idea progressing? Somewhere in the chip / trackdisk / aros install posts I lost where you were up to.

Are you still planning to attempt it?


I never said I would attempt it, though its a
possibility, I'm ruling nothing in ruling nothing out
IYSWIM,

at the moment my time is being taken up sorting out
the h/w of my system,

I bought a KVM switch: 2 PCs to share monitor+keybd +mouse,
took maybe 2 hours to figure out the cabling as I have
lots of cables but not all the right ones,

today I bought the right cables + converters but
some were not in stock, then I found that my
PC cannot use the mouse if there are too many
extensions: the A1200 has no problem whatsoever,
the PC cannot cope,

I may have to buy a USB mouse, I want the PC to join
the A1200 in another room with lengths of cables
connecting them to the room I program in, I do this
to have total silence.

I also bought an external USB drive: £40 for 120Gig
and £60 for the case (I think), (see earlier posting
for the correct price),

I want to see if I can externalise the IDE drive,
then I will boot up in different environments,

once the h/w is reasonably set up then I will
look further into AROS. I havent figured out how
I will transfer data to and from AROS,
I wonder if its possible to impose AmigaDOS onto
the PC floppies, ie treat them as small hard disks,
then I could transfer data to and
from the A1200,

if UAE is integrated successfully into little endian
AROS then I may not bother with a big endian AROS,
its completely a practical matter,


anyway the very first program I will write is
"hello world",

#include

int main( int argc, char **argv )
{
printf("hello world\n");
return( 0 ) ;
}

I'm dreading what flaw Piru will find, I cant see any
but he will find something, maybe it should be
char *argv[]?? or should I check for an error from
printf eg a shell may not be open,

the difficulty with "hello world" being setting up the compiler,
after that I will try some small but useful programs
little utilities I've written out of necessity,

dabbling with AROS itself is much further down
the line,

I like to move gradually, if you recall at the
start of the thread I hadnt got a PC and
wasnt ready to look at the AROS sites, but now
I've got the PC + visited the sites and installed
+ tried out AROS,

BTW I hope AROS dont reimplement OS4 as that would be
in bad taste I think. The open nature of AROS makes
it eternal in some sense, so I think like Linux and
GNU it will gradually succeed, if you visit www.gnu.org

(or is it ftp.gnu.org) its worth reading the interview
there with Richard Stallman on how
GNU begun, I think he started it with GNU emacs,

so it begun with just GNU emacs, I dont know if  
thats a reimplemenation of a Unix emacs,
or if it was a brand new program,


the selling point of AmigaOS is its so direct,
both for users and developers, its so straightforward
to write programs, also it generally doesnt
pretend to be bigger than it is,
no gratuitous bloat to make it look like several Gig,

my A1200 has a 1/2 meg ROM, I know this by watching
a memory meter and running CPU fastrom,

you can run an A1200 in 2 Meg so the diskloaded libraries
must be under 2 meg, thus it fits in 2.5 Meg, probably
quite a bit less,

IMO the extra functionality that Windows XP has
cannot be more than a few Meg, so I can easily
believe XP to be say less than 5 Meg,

a really interesting project will be to "measure" XP,

1 Meg of OS is a huge amount of stuff, so I think
MS bloated up their OS with 100's of megs of non
OS material masquerading as OS,

IMO also Windows XP looks like the work of a few
dozen developers at most, it has that feel,

maybe 10 developers writing the programs and
15 wrting the OS,

so if AROS has 11 developers I think they're doing well,
wasnt Linux done mainly by 1 developer initially??
of course they will hype it up
as man centuries of work, but note that
25 developers working for 4 years == 1 man century,

anyway for me getting involved with AROS itself
is quite a bit later on, first I want to try out
some programs that use the current API rather than
work on the API itself. What is really interesting
is that if you locate OS bugs you can actually fix
them yourself!

no more workarounds of OS bugs,

 

Offline whoosh777Topic starter

  • Full Member
  • ***
  • Join Date: Jun 2003
  • Posts: 114
    • Show all replies
    • http://www.whoosh777.pwp.blueyonder.co.uk
Re: 68k AGA AROS + UAE => winner!
« Reply #44 on: April 23, 2004, 01:01:15 AM »
Quote

bloodline wrote:
Quote

/*
TCP/IP stacks are hard, but Wez is working on one.

Did you not use Datatypes on your Amiga?
*/

no, I've not gone too deeply into graphics as I find it too
open ended and arbitrary, though its very satisfying to look at,

same reason I didnt become an artist,

so when I have needed graphics I've coded it directly eg
iffparse.library for iff files,

or used 3rd party code for a specific picture file,


From now on, you will use Datatypes if you need to support any file type. :-D


maybe I will attempt a test Datatypes program
once I have gcc set up, I'm spending so much
money right now on h/w getting this machine set up,

BTW HP say I can only make 1 set of system recovery CDs
which I did today, and they seem to be saying its only
usable on this system,

the blurb said I got "MS Windows XP Home Edition",
but I got no CD, so its not really Windows XP if I
cannot use it on another system: what happens if I
replace the motherboard + CPU to a clone??

Quote


Quote

/*
You seem hung up on SCSI. SCSI is a very old idea. Hard drives and
CD/DVD drives all go on the IDE bus, all other devices go on the
USB or the Firewire bus.
AROS can use CD/DVD drives, because AROS has an ide.device.
SCSI is dead, no normal computer equipment use it
*/

I bought a USB external drive today so I see what you mean:

£40 for 120 Gig, £60 for the case though, probably 10 x the capacity of
an external SCSI for that price,

I think USB outdoes SCSI, but SCSI has advantages (not price) over IDE:

with IDE my machine only has 2 slots,

for me personally I have complete docs for coding cross platform SCSI,
but maybe I can learn to code USB,


If you have 2 IDE slots then you can use 4 devices.
That's right each IDE slot can support 2 devices, it you buy an IDE cable it has three plugs on it, one for the Motherboard and one for each of the devices the slot can support. If you do put more than one device on a single IDE slow, one device must be set to Master, the other must be set to Slave. This is doen using some jumpers at the back of the device.


4 is probably more than enough,

is it possible to externalize the drive??


Quote

Learn to use the USB, it is much better than SCSI.


I hope I can get hold of well written USB API docs,

Quote

Quote

Question: can you outline what is involved in communicating with a
hardware device on the PC?

(thinking about AROS drivers)

explain it in general terms understandable to someone only familiar with
the classic 68k Amiga,

how do you communicate with a generic PC h/w unit?

alternatively select a specific h/w unit and explain how this
is controlled directly in assembler,

eg are there specific absolute memory addresses for say PCI socket 1,
and is there some kind of structuring to the reads + writes,

eg for a write might it be:
write data length to $12340
write pointer to data to $12344
set bit 1 of $12348 to begin the write,
interrupt 123 happens on write completion,

and eg the data itself will be structured in a way
private to that specific device,


I can see that all PCs have the same structure:

some PCI sockets, AGP socket(s), SIMM sockets, maybe IDE socket(s),
maybe USB sockets,

and then a lot of h/w is via these sockets,
you mentioned IDE bus and USB bus, presumably the bus amounts to
an initial socket??

so I presume each socket has an assembler level API,


Ok... firstly we don't use any ASM in the drivers, since you will find the same network card/graphics card/sound card whatever, in an x86 machine, a PPC machine or whatever etc... so that driver should be portable across the CPU types.


I wondered whether h/w interfaces being at such a low level whether one is forced to use ASM,

Quote

You do not program the PCI slots yourself. As a driver you request infomation about the attached hardware from the PCI drivers (which I think is the pci.library in AROS).


ok, so the drivers are above pci.library,

should be very interesting autodocs,

that should make writing a driver much more doable,

can you show a code fragment from a real driver?

Quote

You use the PCI drivers for all access to devices on the PCI bus, and since almost everything in the computer is attached via that bus, this is the thing you need to learn about.


can you explain what you mean by a bus?

is it comparable to the data and address buses
connecting a CPU and RAM??

also is the USB bus comparable to the PCI bus?

does IDE have a bus?

Quote

 Everything hangs off the PCI, this is the bridge between the CPU and the hardware. The PCI drivers will provide you with any information you need about the attached hardware.
I'm not sure how good the AROS PCI driver docs are, but it's a pretty standard implementation.


maybe if you make a case study of a specific driver
available it will get people interested in
writing drivers, I would certainly study such,