Philips P800


Het gaar vooruit met het dissekeren van Jos' bestand, zie bijlage.
Ik zit nog te worstelen met twee problemen : ik kan nog niet zien hoe lang ieder bestand is. Je kunt het wel raden, namelijk dat je kunt zien waar het volgend bestand begint volgens het overzicht, maar dan moet je er op kunnen vertrouwen dat de bestanden altijd in de goede volgorde liggen, en daar ben ik nog niet zeker van.
Ik heb ook een probleem met vreemde adressen. Een bestand kan beginnen in bv. sektor /01A8, maar de volgende (of die er voor) begint in /21A0. Als ik nu stel dat het hoogste adres /01FF is, dan heb ik 4096 sectors à 512 bytes, dwz ca. 2 MB, en dat kan niet kloppen.
Ik zag ook dat er een User-id begon op /2008, maar die vond ik op /0008. Heeft iemand daar een verklaring voor? Zou die 2 een attribute kunnen zijn à la Protected o.i.d. ?
In de bijlage kun je de bestandenlijst zien van de eerste User. Het kopieren van bestanden naar een disk zou een fluitje van een cent moeten zijn, afgezien van waar het bestand stopt :-)
Interessant! Is het bestandssysteem nu zo dat de benamingen
6.2 karakters zijn ten opzichte van MS-Dos 8.3 karakters?
ik kan nog niet zien hoe lang ieder bestand is. Je kunt het wel raden, namelijk dat je kunt zien waar het volgend bestand begint volgens het overzicht, maar dan moet je er op kunnen vertrouwen dat de bestanden altijd in de goede volgorde liggen, en daar ben ik nog niet zeker van.

Verstandig om dat inderdaad niet zomaar aan te nemen. Is het bestandssysteem
ook zo ingericht dat bestanden gefragmenteerd op de schijf opgeslagen kunnen zijn?
Hier is het fileformat beschreven, zij het voor de oudere Philips diskunits :

http://www.theoengel.nl/P800/P800%20Disk%20Organization.pdf

Filename zijn idd 6.2. Verder worden bij het image hoogstens 402 bytes van iedere 512 bytes sector gebruikt. Wat me ook verbaasd is dat er geen user "SYSTEM" is. Volgens de doku moet die er altijd zijn.

Nico, zie jij kans om de inhoud van 8748 chip van je FRCP module uit te lezen ?

Zo ja kunnen we nieuwe FRCP's maken, zodat we direkt op machineniveau kunnen kommuniceren.
( FRCP is die module met EL 7segment-display en keyboard. Dit communiceert direkt met de CPU via een aparte 4800 baud RS232 line. Werd gebruikt in de P854 en P859 )

Jos
driessens_nl

Golden Member

@jdreesen: kan in het weekend wel kijken of ik met mijn HILO-07 die 8748 kan uitlezen. Heb alleen de HILO al jaren niet meer gebruikt dus moet even kijken waar ik dat ding nog aan de praat krijg. FRCP's (2 of 3) heb ik nog liggen . Deze wil ik wel graag zelf houden uit nostalgie en vanwege het plan om hier klokjes van te maken.
1) ik heb een FRCP van een P859 (ex Camiel), maar heb niets om uit te lezen.
2). Het bestand is eigenlijk een beetje vreemd. Sector 0 (VTOC) en 1 (IPL) zijn ongeveer normaal, maar er is geen granule overzicht enz. Het verbaast me ook, da alle startadressen die ik tot nu toe gezien heb, achter elkaar liggen. Ik had ook verwacht dat er aan het begin van de bestanden een overzicht zou liggen van welke granules er voor dat bestand gebruikt werden, evt als "ketting".
Ik vraag me dus af, of de oorspronkelijke disk een backup disk geweest is, dus een diskversie van het SUM programma, dat naar een tape schreef. Ik hoop dat ik vandaag de komplete struktuur kan uitschrijven, zodat ik alleen nog de bestanden naar een disk kan schrijven. Aangenomen dat alles netjes achter elkaar ligt, zou er geen probleem zijn met de lengte van de bestanden, omdat er in iedere sector een lengteveld is, normaal /0190 voor een gevulde sector. Een bestand krijgt altijd 8 sectors, dus een lengtewaarde die afwijkt van /0190 betekent EOF. Ontbrekende logica : bestanden die een lengte hebben van X maal /0190, en fregmentatie :-)
/Nico
Hier is het resultaat. Het lijkt mij het beste om een tabelletje te maken met de startadressen, en dan de bestanden een voor een te kopieren (naar een directory met dezelfde naam als de user.id), totdat er óf EOF komt (sectorlengte <> /0190) óf het adres van de volgende sektor die gekopieert moet worden, te vinden is in het tabelletje.
Ik heb niets kunnen vinden mbt fragmentatie of chain logica.
/Nico
hier komt een screendump. alles ligt helaas niet netjes achter elkaar, maar ik kan nu in ieder geval zien waar ik moet stoppen. Heb nog steeds niets gevonden ivm fragmentatie.
/Nico
Nu geloof ik dat ik het fragmentatieprobleem opgelost heb.
Een korte herhaling, die zo ver ik weet ook voor andere Philips P800 systemen geldt : In segment 2 (zero-based) ligt en overzicht over Users, met voor elke User een verwijzing (= sectoradres) naar een tabel met de bestanden die bij deze User horen.
Elk bestand heeft één verwijzing naar de sector waar het bestand begint.
Een bestand kan op meerdere manier beginnen :
(1) vanaf byte 4 spaces : zegt dat het volgende segment fragmentatieinfo bevat (zie later).
(2) Vanaf byte 4 iets anders als spaces : dit is een kort bestand (<= 400 bytes), is dus niet gefragmenteerd, en kan direkt geschreven/gelezen worden.

Bij grotere bestanden is zoals gezegd het eerste segment blank, en het volgende bevat een aantal verwijzingen. Deze segmentverwijzingen geven dan een aantal segmenten die samenhoren en tezamen het bestand uitmaken.

/Nico
Hallo Nico,

dat is een vooruitgang ! Wat een bizar filesysteem is dit...
Als later de omgekeerde weg mogelijk is kan misschien Fortran, BASIC ed aan het diskimage toegevoegd worden, en dan aan de P854 zelf getest worden.


aan alle :
dankzij de inzet van driessens_nl heb ik nu schema en 8748 eprom-contents van de FRCP module. Met deze module is een direkte besturing van de P854 mogelijk : lezen / schrijven van CPU registers en memory, start/stop, single step enz. Zie blz. 6-1 en volgende van dit dokument :
https://www.vaxbarn.com/p800/p858_p859_ref_5122_991_30621_fe...ch1_14.pdf

Ik ga deze module namaken (met een kleine vereenvoudiging, LED ipv VFD display), wie wil er ook een ?


Jos
Ik zat er een beetje naast in m'n vorige mail. Had de dokumentatie niet goed gelezen. Wat ik fout had, was het begin van de bestanden. De eerste sector (512 lang, waarvan er 2 + 400 gebruikt worden), is gereserveerd voor het OS. Deze sector wordt in mijn programma overgeslagen. De volgende sector bevat de chain informatie. De eerste link verwijst naar zichzelf. De eerste twee sectors moet je dus overslaan als je gaan kopieren, omdat je anders de OS sector en de chain in je ouput zou krijgen. Verward ? De volgende link(s) verwijzen naar een granule, die je dan in z'n heelheid moet kopieren.
Ik heb nu alles door m'n programma gedraaid, en steekproeven genomen. De LM bestanden zijn tamelijk oninteressant, omdat dat machinecode is. De UF bestanden zijn meer interessant. Ik heb meerdere doubletten gevonden, maar dat schijnen back-ups te zijn, of sectors die nergens voor gebruikt worden. Het beste was dus een lijst te maken van bestanden die in de catalogus stonden, ze dan op adres te sorteren, en dan te kopieren. Ik stuur een ZIP bestand mee, genaamed RESTORED. Er is ook een log. Ik hoor graag van wat je er van vindt. Nu is het weekend voor mij :-)m Het programma is geschreven in Delphi, en iedereen mag het hebben.
Hulde voor Nico en driessens_nl,

Ik zou graag het programma ook hebben van Nico als dat mag.
Jos weet inmiddels al via de email wel dat ik zo'n
cloonpaneeltje erg leuk zou vinden om erbij te hebben.

Dat er iemand een origineel Philips paneeltje over heeft is natuurlijk een utopie.
Als je me een e-mail adres geeft, kan ik het mailen.
Welk paneel bedoel je? dat van een 859?
Ik heb er een van een P859, maar die heb ik gereserveerd om later als rekenmachine op de P852 te kunnen gebruiken. weet nog niet hoe dat moet, maar er komen nog vele winters, hoop ik :-)
Heb je een Delphi 6? Zo ja, dan kun je mijn programmas voor de 852/857 krijgen. Dat zijn een Assembler, een Windows-gebaseerde debugger voor P8xx assembler, en een programma voor het lezen van backup tapes die door SUM gescheven zijn.
De foto laat een screendump (een van velen) zien de Debugger.
Alles is geschreven in Delphi.
Hallo allemaal
Zoals eerder gezegd, heb ik de basis van een P800 simulator geschreven. Nu ben ik nooit P800/PTS Assembler programmeur geweest, en heb dus alles uit handboeken. Ik heb een aantal testprogrammas gevonden in handboeken, en die worden in ieder geval korrekt geassembleerd. Ik heb wat meer moeite met alles wat met CIO samenhangt, omdat externe eenheiden gesimuleerd moeten worden door lokale bestanden op de PC, bv cassette en floppy, om maar niet te spreken van harddisks.
Is er iemand in deze groep die hiermee kan helpen ? Anders wordt het projekt een eeuwigheids projekt, en ik wil het graag zo goed mogelijk doen zodat anderen er ook plezien van kunnen krijgen.
Alles is geschreven in Delphi 6.
Hier beneden staat een kleine routine die een REWIND van een cassette simuleert. Is nog niet getest, maar het laat zien hoe makkelijk Delphi is.

/Nico

function cas_rewind(j : integer) : integer;
var
psw : integer;
driveno : string;
begin
// when rewinding a cassette, there is no need to write any data.
// the record pointer can be cleared, the status bit saying "BOT"
// must be set *)
driveno := inttostr(j);
psw := 0;
if not fileexists(data_dir + 'CASDATA.' + driveno) then
psw := psw OR $0001 (* bit 15 - not operable *)
else
begin
cas_pos[j] := 0;
psw := psw OR $0400; (* bit 05 - BOT found *)
end;
cas_rewind := psw;
end;
De sourcetekst van zojuist is niet zoals die op het scherm staat. Spaties aan het begin van de lijn worden verwijdert.
/Nico

[Bericht gewijzigd door nico_dk op 18 oktober 2018 09:27:39 (73%)]

maartenbakker

Special Member

Je kunt er [ code] en [ /code] zonder de spaties omheen zetten om de layout te bewaren.

[Bericht gewijzigd door maartenbakker op 18 oktober 2018 12:44:22 (14%)]

"The mind is a funny thing. Sometimes it needs a good whack on the side of the head to jar things loose." - Disclaimer: ik post soms vanaf een tablet, het is geen doen om alle autocrrect, ontbrekende spaties en off-by-ones er uit te halen.
Probeer het nog een keer

Goed, Preview laat het korrekt zien.


code:
function cas_read(j : integer) : integer;
var
   driveno : string;
   casfile : file of char;
begin
   driveno := inttostr(j);
   psw := 0;
   if not fileexists(data_dir + 'CASDATA.' + driveno) then
      psw := psw or 1;                  (* bit 15 - not operable *)
   (* the easiest way to handle a READ command, is to read the whole file     *)
   (* when cas_pos = 0. wafterwards we can read a block from cas_block[j]     *)
   if cas_pos[j] = 0 then
   begin
      assignfile(casfile,data_dir + 'CASDATA.' + driveno);
      reset(casfile);
      cas_max[j] := 0;
      (* need to handle tapemarks ! *)
      while not eof(casfile) do
      begin
         blockread(casfile,cas_block[j,cas_max[j]],1);
         cas_max[j] := cas_max[j] + 1;  (* number of records in file *)
      end;
      closefile(casfile);
   end;
   (* now read the first block *)
   cas_read := psw;
end;

/code]
Nu iets heel anders. Ik heb een uitdaging met de CIO instruktie, en hetzelfde zal ook wel voor andere I/O instrukties gelden
.
In het Assembler handboek, pagina 1.137, staat dat bit 10..15 de device aangeven. Er staat op 1.138 dat bit 10 en 11 de drive aangeven, en bit 12..15 het adres. Dit vat ik op als het adres van de adapter waar de floppy drive(s) op zit(ten).

MAAR, omdat er maar 4 bits zijn, kan het adres (van de adapter) niet hoger zijn als /0F. Of heb ik iets verkeerd begrepen ?

Ik meen me te herinneren dat adres /00../0F gereserveerd was voor Programmed Channel. Of is dat misschien iets speciaals voor PTS ?
( Excuses voor m'n Hollands, ik ben al bijna 50 jaar in DK *)
/Nico
Heeft iemand de ordercodes (?) voor de DCR? Er ontbreekt een pagina in m'n handboek, en ik kan de code voor SEARCH TAPEMARK FORWARD niet afleiden van de andere codes. Nu kan ik wel wat verzinnen, maar ik wil het graag autentiek houden. En nee, het is niet identiek met wat er voor de MT gebruikt wordt :-)

Zijn er hier meer programmeurs, of zijn het "slechts" produktiemensen en verzamelaars ?

/nico
maartenbakker

Special Member

Ik ben hobbyprogrammeur (begonnen met zelf leren, daarna wel formeel opgeleid in wat moderne talen en assembly, maar nu al jaren weinig mee gedaan) dus ik kan ongeveer volgen waar het over gaat maar ik vrees niet dat ik echt een bijdrage kan leveren zonder grote investering van tijd die ik niet heb, hoe jammer ik dat ook vind :( Ik hoop dat Proxxima er wat meer mee kan, maar die is niet zo vaak op het forum.

[Bericht gewijzigd door maartenbakker op 19 oktober 2018 16:49:54 (11%)]

"The mind is a funny thing. Sometimes it needs a good whack on the side of the head to jar things loose." - Disclaimer: ik post soms vanaf een tablet, het is geen doen om alle autocrrect, ontbrekende spaties en off-by-ones er uit te halen.
Jammer, Maarten. Ik had gehoopt dat er hier een assembler programmeur was met P800 ervaring.
Ik heb overigens wat meer nagedacht over de bestanden die ik onlangs gekonverteerd heb. Iemand vond het merkwaardig dat de data die je kon zien, van verschillende PHilips fabrieken zou komen, die eigenlijk niets met elkaar te maken hadden. Nu heb ik de geredde bestanden niet zo goed bekeken op inhoud, maar zou de oplossing kunnen zijn dat de ene fabriek het systeem niet meer nodig had, en het dan doorgeschoven heeft naar een andere? Als je de bestanden wist, is het in elk geval in PTS zo, dat je alleen maar de bestandsnamen wijzigt (/ffff in het begin), en hetzelfde met de User-id. De data op de schijf blijft dus gewoon liggen, en als je dan een dump neemt, kun je alles netjez zien totdat er overschrijving plaatsvindt.
Just my 2 cents..
/Nico
Op 18 oktober 2018 15:16:09 schreef nico_dk:

In het Assembler handboek, pagina 1.137, staat dat bit 10..15 de device aangeven. Er staat op 1.138 dat bit 10 en 11 de drive aangeven, en bit 12..15 het adres. Dit vat ik op als het adres van de adapter waar de floppy drive(s) op zit(ten).

MAAR, omdat er maar 4 bits zijn, kan het adres (van de adapter) niet hoger zijn als /0F. Of heb ik iets verkeerd begrepen ?
/Nico


Zou kunnen dat de vier bits gebruikt worden bovenop een vast adres? Dus FD zitten op A000 en hoger (random voorbeeld) en met de 4 bits kan je er dan een specifieke drive selecteren, A000, A001 etc. Zo ook voor andere zaken.

Een beetje als I2C chips die ook op een vaste reeks adressen zitten, waarbij je met wat pinnen het precieze adres kan kiezen. Maar een idee.
driessens_nl

Golden Member

Het klopt dat de floppy controller maar 4 adres bits heeft. Hij beslaat echter wel 4 adressen in het IO gebied. Normaal gesproken staat de floppy controller in P800 systemen op adres /01 en beslaat dus de adressen /01, /11, /21, en /31 .
Voor gebruik onder IOP dient men dus ook een IOP te hebben die in deze adres range ligt.
De P858 system waren normaal uitgevoerd met een CP7R cpu bord. Op dit bord was ook een IOP geïntegreerd en deze lag vast op de adres range /00 tot /0F.

Tenminste dit is wat ik mij zo nog kan herinneren van deze system. Heb in grijze verleden ook nog wat assembly gedaan voor deze systemen maar eigenlijk te weinig om daar nu nog een goed beeld van te hebben.

Ook een DCR heb ik nooit gezien of onderhouden dus ook hier kan ik je niet bij helpen.
Beste mensen,

ope mijn FTP site ftp://ftp.dreesen.ch/P854 vind je nu de field support manual van de op dit system gebruikte P857EB CPU kaart. Deze CPU is zowel op de P854 als de PTS6925 gebruikt.

Met dank aan Camiel Vanderhoeven voor scannen & het ter beschikking stellen van deze dokumentatie.


Jos
Vandaag heb ik een FRCP paneeltje op mogen halen. -Blij mee-



Als tegenprestatie vond ik een fles wijn wel op zijn plaats :-)
Gefeliciteerd, Proxxima. Een ongelofelijke vondst.

Heeft iemand er een idee over hoe de P800 serie omging met Floating Point? Ik wil mijn simulator graat zo kompleet mogelijk hebben.
Ik ben nu bezig met het simuleren van de meeste eenheden als disk bestanden, maar het is de bedoeling dat ik relevante eenheden zoals tape punch, kortlezer en teletype ga laten draaien via de COM porten, maar dat zal nog wel even duren.

IK heb ook een vreemd idee om een FRCP panel te gebruiken als een hex rekenmachine :-))

Groeten
Nico