Anders lagar en gammal dator (-relaterad pryl)

Berätta om dina pågående projekt.
Castor
Inlägg: 2229
Blev medlem: 24 mars 2012, 13:03:49

Re: Anders lagar en gammal dator (-relaterad pryl)

Inlägg av Castor »

Är det datorerna från något företag i Hammarbyhamnen som sysslade med virning?
Användarvisningsbild
anders_bzn
Inlägg: 5892
Blev medlem: 17 december 2008, 19:22:18
Ort: Kävlinge
Kontakt:

Re: Anders lagar en gammal dator (-relaterad pryl)

Inlägg av anders_bzn »

Inte var jag vet. De kommer från företaget Kretsplanering som gjorde PCB CAD åt andra företag. De satt i Osram huset i Hammarbyhamnen.
Castor
Inlägg: 2229
Blev medlem: 24 mars 2012, 13:03:49

Re: Anders lagar en gammal dator (-relaterad pryl)

Inlägg av Castor »

Hammarby var rätt i alla fall, du/ni hämtade lite av mina överskottskretsar i Nyköping på vägen ner.
Användarvisningsbild
anders_bzn
Inlägg: 5892
Blev medlem: 17 december 2008, 19:22:18
Ort: Kävlinge
Kontakt:

Re: Anders lagar en gammal dator (-relaterad pryl)

Inlägg av anders_bzn »

Det stämmer! Vi såg på vägen tillbaks. Det borde varit 2017. Men de två första maskinerna stod i Hammarby, den sista borde vi hämtat i Västberga (om jag minns rätt, söder om stan i alla fall).
Användarvisningsbild
anders_bzn
Inlägg: 5892
Blev medlem: 17 december 2008, 19:22:18
Ort: Kävlinge
Kontakt:

Re: Anders lagar en gammal dator (-relaterad pryl)

Inlägg av anders_bzn »

Så, nu var det dags att laga ett konsolkort, samma som jag lagade innan (viewtopic.php?p=1869776#p1869776), med då insåg jag inte att det hade mer än ett fel. När man hade detta kort i datorn så gick datorn inte igång, den ska autostarta så att konsolemulatorn kör. Det gjorde den inte. Detta sköts av boot-rommet och gör att man kan manipulera minne och starta datorn från valfri adress precis som med frontpanelen fast från sin serieterminal. Kortet är inte nödvändigt för funktionen av datorn om man inte vill använda frontpanelen.

Efter lite tanke och studerande av schemat så insåg jag att kortet inte ska kunna få datorn att stanna om man inte aktivt tryckt på CNTRL+HLT/SS knappen. Nu fungerade ju en massa andra saker som att göra examine/deposit i minnet på valfri adress så det borde vara något enkelt. Jag mätte och såg att HALT REQ L signalen var just låg. Det borde den inte vara så jag kollare båda sidor på bussdrivaren av signalen. Den borde inte vara låg, men eftersom det är en open collector signal vet man ju inte om någon annan håller ner den. Så då sätter man en tejpbit över kontaktfingret och testar. Då startade datorn.

De visade sig vara en inringade bussdrivaren DEC8881 som var kass. Med den bytt så fungerade kortet som det skulle!

DEC8881 eller N8881 är den bussdrivare som är ökänd för att gå sönder. Jag har bytt en hög sådana i PDP-8/A...
IMG_4307.JPG
Näst på tur står tre seriekort som jag vet är trasiga. Sen har jag två fungerande kortuppsättningar till PDP-11/34
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
uaxnet
Inlägg: 198
Blev medlem: 12 oktober 2020, 07:43:25

Re: Anders lagar en gammal dator (-relaterad pryl)

Inlägg av uaxnet »

Snyggt jobbat som vanligt Anders

Ser fram mot ett att se den lajv
Användarvisningsbild
anders_bzn
Inlägg: 5892
Blev medlem: 17 december 2008, 19:22:18
Ort: Kävlinge
Kontakt:

Re: Anders lagar en gammal dator (-relaterad pryl)

Inlägg av anders_bzn »

Jag lagar vidare. Jag har en liten hög kort kvar som inte är testade eller inte fungerar.

* 3st DL11-W seriekort
* 2st DR11 parallellkort (dessa vet jag inte vad jag ska göra med)
* 1st PC11 interface till PC05 pappersremsläsare/stans, detta kan jag inte testa utan PC05 så det får vänta lite

Så jag börjar med DL11-W!

Chat GPT är hygglig (bättre än mig) på PDP11 assembler. Jag bad den skriva ett program som skickar ut A-Z på serieporten i en oändlig loop.

Kod: Markera allt

        .TITLE  AZLOOP
        .ASECT
        .GLOBL  START

RCSR    =       1776500
RBUF    =       1776502
XCSR    =       1776504
XBUF    =       1776506

START:
        MOV     #'A, R0          ; Current character = 'A'

MAIN:
WAIT:
        BIT     #200, @#XCSR     ; Test transmitter ready (bit 7)
        BEQ     WAIT             ; Loop until ready

        MOVB    R0, @#XBUF       ; Send character (byte write!)

        INC     R0               ; Next letter
        CMP     R0, #'Z+1
        BNE     MAIN

        MOV     #'A, R0          ; Restart at 'A'
        BR      MAIN             ; Infinite loop

        .END    START
        
Detta assemblerar man och sedan matar man in det i minnet. Enkelt första test.

Först kortet. Jag noterade att koden körde som den skulle men inga tecken kom ut. Eftersom programmet snurrade som det skulle så verkade ju buss-delen av kortet vara okej, så jag mätte på UART:en. Där såg jag att man klockade in data, men alldeles för ofta. Snabbare än vad det tar att skicka ett tecken och UART:en har ingen buffer. Mätte på READY-pinnen på UART:en den låg och flöt på 2,5V. Konstigt. Jag lossade kretsen efter för att se om den lastade ner utgången, men det var inte problemet. Bytte UART:en sen fungerade kortet!
IMG_4310.JPG
Nästa kort, detta fungerade som det första. Men här noterade jag att programet aldrig skrev ett nytt tecken eftersom READY flaggan aldrig nollställdes i registret. Det gjorde den inte heller på UART:en då jag bytte den. Sen fungerade kortet!
IMG_4313.JPG
Efter detta så vill man ju testa att RX också fungerar så det blev ett nytt program som bara ekar tillbaks tecknet man skickar till datorn.

Detta progremmet är lite onödigt komplicerat, man kan ju förlita sig på att det inte tar längre tid att skicka ett tecken än att ta emot ett nytt... Nu kan man i och för sig ställa in olika baudrates på RX och TX men det har jag inte.

Kod: Markera allt

        .TITLE  ECHO
        .ASECT
        .GLOBL  START

RCSR    =       1776500
RBUF    =       1776502
XCSR    =       1776504
XBUF    =       1776506

START:
MAIN:

; --- Wait for character received ---

RXWAIT:
        BIT     #200, @#RCSR     ; Receiver Done?
        BEQ     RXWAIT           ; No -> keep waiting

        MOVB    @#RBUF, R0       ; Read character
                                 ; (Reading clears Done bit)

; --- Wait for transmitter ready ---

TXWAIT:
        BIT     #200, @#XCSR     ; Transmitter Ready?
        BEQ     TXWAIT

        MOVB    R0, @#XBUF       ; Send it back

        BR      MAIN             ; Repeat forever

        .END    START
Även detta programmet fungerar på båda korten.

Det tredje kortet då? Jo det var ett lite svårare fall. Jag behövde beställa en pryl, så jag skriver om det när det är lagat...
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
bqt
Inlägg: 287
Blev medlem: 14 juni 2011, 11:54:44
Skype: sillbit
Ort: Zürich

Re: Anders lagar en gammal dator (-relaterad pryl)

Inlägg av bqt »

Kul.
Bara en liten detalj. Att ready-flaggan är på bit 7 är ingen slump. Det gör det möjligt att testa mycket enklare än

Kod: Markera allt

BIT #200,@#REG
. Man gör istället

Kod: Markera allt

TSTB @#REG
, följt av BPL eller BMI beroende på om man är intresserad av att flaggan är satt eller clearad.
Men man kan ju inte räkna med att AI-verktyg ska kunna allt... :D
Användarvisningsbild
anders_bzn
Inlägg: 5892
Blev medlem: 17 december 2008, 19:22:18
Ort: Kävlinge
Kontakt:

Re: Anders lagar en gammal dator (-relaterad pryl)

Inlägg av anders_bzn »

Smart! Så de har en egen instruktion för att testa just denna biten! Så spar man ett ord i minnet, jag antar att det är vinsten plus att man dessutom slipper lägga tid på att hämta 0200 från minnet!
Användarvisningsbild
anders_bzn
Inlägg: 5892
Blev medlem: 17 december 2008, 19:22:18
Ort: Kävlinge
Kontakt:

Re: Anders lagar en gammal dator (-relaterad pryl)

Inlägg av anders_bzn »

Så då var sista kortet lagat. När man satte det i datorn så fick jag inte CPU:n att köra vettig, Uniprobe-kortets lysdioder skvallrade om att SACK signalen var aktiv, alltid. Det kunde snabbt konstateras att drivkretsen på seriekortet höll den låg och att en bussdrivare DEC8881 var kass. Den byttes och då gick det att köra program. Konstiga saker hände, ett tag fick jag ut konsolemulatorns output på båda serieterminalerna. Jag funderade på om kortet var byglat rätt, det var det men två DIP switchblock visade sig vara kass. Det kom nya från electrokit idag som löddes dit och sedan fungerade det igen!
IMG_4321.jpeg
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
bqt
Inlägg: 287
Blev medlem: 14 juni 2011, 11:54:44
Skype: sillbit
Ort: Zürich

Re: Anders lagar en gammal dator (-relaterad pryl)

Inlägg av bqt »

anders_bzn skrev: 3 mars 2026, 20:28:38 Smart! Så de har en egen instruktion för att testa just denna biten! Så spar man ett ord i minnet, jag antar att det är vinsten plus att man dessutom slipper lägga tid på att hämta 0200 från minnet!
Tja, TSTB kan ju användas för alla möjliga ändamål, när man är intresserad av bytear. Men som sagt, testa högsta bitten i en byte, eller ett ord, kan göras enkelt tack vare TST(B), och det kan man säga är lite småstandardiserat på kontrollrar. Höga bitten i ordet är ofta en summering av fel-bittar, och höga bitten i första byten ofta en ready-flagga.
Användarvisningsbild
MiaM
Inlägg: 13790
Blev medlem: 6 maj 2009, 22:19:19

Re: Anders lagar en gammal dator (-relaterad pryl)

Inlägg av MiaM »

bqt skrev: 3 mars 2026, 01:39:08 Kul.
Bara en liten detalj. Att ready-flaggan är på bit 7 är ingen slump. Det gör det möjligt att testa mycket enklare än

Kod: Markera allt

BIT #200,@#REG
. Man gör istället

Kod: Markera allt

TSTB @#REG
, följt av BPL eller BMI beroende på om man är intresserad av att flaggan är satt eller clearad.
Men man kan ju inte räkna med att AI-verktyg ska kunna allt... :D
Intressant! Detta är väl sannolikt förebilden för 6502-instruktionen BIT som kopierar bit 6 och 7 till två flaggor. Att den i sin tur kopierar just de bitarna, och sannolikt även varför PDP kopierar just de bitarna, torde väl vara att kopiering av just de bitarna är vad som ändå görs vid (vissa/alla?) aritmetiska operationer. Högsta biten är ju minus-bit för "signed"-nummer, och den näst högsta biten används på något vis som jag glömt hur det fungerar :wink:


Anders:
Trevligt att du får mer och mer att fungera!
Fråga: Sparar du trasiga kretsar och märker på dem vad felet är?
Tänker att nån gång i framtiden så kanske det uppstår faktiskt brist på kretsarna. Då skulle man t.ex. kunna bara klippa benen på de bitar/delar av bussdrivarna som är trasiga, och piggyback:a två drivare med olika trasiga bitar/delar för att få en fungerande. Likaså för de två trasiga UART:arna så verkar det väl rimligt att det kan fungera att dels klippa signalen som ändå bara verkade vara flytande, och sätta seriemotstånd till databusspinnen på den krets som gav felaktigt svar vid läsning av statusregistret. Visst, man ber väl i princip att fler delar av kretsarna ska gå sönder, men utan att undersöka dem med typ (elektron)mikroskop så är det nog svårt att veta om konstaterat delvis trasiga kretsar har större risk att gå sönder mer än risken att en idag fungerande krets går sönder i framtiden.

Anekdot, ursäkta om det är en upprepning: I början av 90-talet då en VIC 20 var värd så lite att det var tveksamt att köpa en 6522-VIA-krets för ett par tior plus frakt från Elfa så tog jag två trasiga 6522, med varsin I/O-pinne trasig, och klippte de trasiga pinnarna och satte seriemotstånd på databussen på de bitar som motsvarar de trasiga bitarna. Vid skrivning så skrivs såklart data till båda kretsarna, men då man läser från dem så gör motstånden att den krets som har fungerande I/O-pinne för den biten "vinner" varpå datorn fungerade korrekt :)
bqt
Inlägg: 287
Blev medlem: 14 juni 2011, 11:54:44
Skype: sillbit
Ort: Zürich

Re: Anders lagar en gammal dator (-relaterad pryl)

Inlägg av bqt »

Hum? TST(B) "kopierar" inga bitar. Det är en instruktion som bara testar en byte eller ett ord. Och "testa" innebär i princip att byten eller ordet jämförs mot noll. Så Z och N flaggorna sätts därefter. V och C nollställs. Men poängen är just att högsta bitten ju reflekterar om värdet är negativt, så N-flaggan sätts ju därmed direkt beroende på vad högsta bitten är. Så bit 7 och bit 15 är dom två bittar som kan testas lite enklare.

Men t.ex. en klassiker som strlen blir i PDP-11 assembler:

Kod: Markera allt

STRLEN: MOV    R0,-(SP)
10$:    TSTB   (R0)+
        BNE    10$
        SUB    (SP)+,R0
        RETURN
Användarvisningsbild
MiaM
Inlägg: 13790
Blev medlem: 6 maj 2009, 22:19:19

Re: Anders lagar en gammal dator (-relaterad pryl)

Inlägg av MiaM »

Det är väl en semantisk fråga, men rent praktiskt kopieras ju bit 7 till en av flaggorna.
bqt
Inlägg: 287
Blev medlem: 14 juni 2011, 11:54:44
Skype: sillbit
Ort: Zürich

Re: Anders lagar en gammal dator (-relaterad pryl)

Inlägg av bqt »

MiaM skrev: 4 mars 2026, 10:10:22 Det är väl en semantisk fråga, men rent praktiskt kopieras ju bit 7 till en av flaggorna.
Sant. Men det var också lite en kommentar eftersom det pratades om att kopiera både bit 6 och 7, vilket skulle antyda något mer som definitivt inte händer på en PDP-11 i alla fall. 6502 kan jag inte kommentera mycket om alls.
Och om du gör en TST (inte TSTB) så är det ju bit 15. Så det är egentligen MSB vi pratar om. Men ja, man kan mycket väl beskriva det som att TST kopierar MSB till N-flaggan. Men min poäng var också att avsikten med insturktionen är inte att kopiera bara MSB. Det är en instruktion som tittar på hela argumentet och sätter flaggor baserat på det. Så den används för mer/annat än att bara titta på MSB.
Skriv svar