Börjar-bli-gammal-kommentar: Det vore bra med lite större font i schemat
för att förstå funktionen så kanske (eller kanske inte) det kan vara värt att flytta runt komponenterna så att det blir mer flödesmässigt. Typ rotera C2,D1,D2 och E1 så att utgångarna är åt höger, och sätt ROM:et till höger om dessa och skiftregistret till höger om ROM:et osv. Inte jätteviktigt, men gör det tydligare. Det vore kanske bra om signalnamnen ändrades så att de t.ex. följer Texas datablad. Lättare att läsa DOWN och UP än CpDn och CpUp osv.
Nåväl, ett försök till analys:
Om TAPE_MOTION är låg så nollställs A1,A2,E1 och D2 eftersom inverteraren B2D ger en etta ut och clear/MR är aktivt hög.
Samtidigt nollställs D1 och C2 men då direkt av icke-inverterad TAPE_MOTION till LOAD-ingångarna på dessa räknare. Signalen går även till en ingång på NAND-grinden B3C som har något att göra med genereringen av signalen flag_reboot. Jag gissar att inverteraren används för att några saker ska drivas direkt av signalen medan andra via inverteraren för att inte lasta signalen för hårt, eller kanske för att göra kretskortslayouten enklare.
Sannolikt är tanken att om CPU inte försöker köra nån av bandstationerna så nollställs hela kortet så att räknarna börjar från noll.
När TAPE_MOTION går hög så brakar allt loss så att säga
Räknaren A1 används för att dela 4800kHz med 16, för att få en klocka på 300Hz.
Räknaren A2 används för att dela 300Hz med 16, dels för att generera 150Hz (Q0) och dels 18,75Hz med väldigt assymetrisk duty cycle (TcUp).
E2 är inte ett skiftregister utan en 1-av-8-multiplexer, som ihop med de lägsta bitarna på räknaren E1 används som 8-bitars skiftregister. D.v.s. med 300bps klockas en synkron datasignal ut från rom:et, bit för bit. Högsta biten på räknaren E1 samt alla bitar på D2 och D1 och de två lägsta bidarna på C2 räknar 11 adressbitar till ROM:et, d.v.s. total 2048 bytes.
Högsta biten på D1 (näst högsta räknaren) samt de tre lägsta bitarna på C2 (högsta räknaren) går också till en 74LS42 (som saknar komponentplaceringsbeteckning??), fyra-till-tio-decimal-dekoder, som i sin tur matar ett jumperblock som verkar välja hur stor datamängd som ska emuleras innan den emulerar att bandläsningen är "klar".
Denna krets matar inverteraren B2C vars utgång går hög när emuleringen är "klar", och den matar i sin tur dataingången på B1A, en halv 74LS74.
Båda halvorna i denna 74LS74 klockas av samma 300Hz-klocka som också klockar "skiftregistret" och ROM-adressräknarna.
Om insignalen reboot är låg så hålls lysdioden släckt samt både räknaren A2 samt första halvan av 74LS74 (B1A) hålls konstant nollställda (via _LOAD respektive _RESET).
Om insignalen reboot är hög och emuleringen av bandet är "klar", alltså inverteraren B2C matad via byglarna från 74LS42 ger hög signal, så kommer första halvan av 74LS74 (B1A) gå aktiv på nästa 300Hz-klocka. På nästa 300Hz-klockpuls kommer andra halvan av 74LS74 (B1B) gå aktiv och det drar utgången force_reboot aktiv, och den signalen nollställer också räknarna D1 och C2 (högsta bitarna till ROM:ets adress osv) för att säkerställa att ingången till första 74LS74-halvan går låg, varpå efter ytterligare två 300Hz-klockpulser så kommer force_reboot att gå låg igen. D.v.s. den kommer vara aktiv under två 300Hz-klockcykler.
Undantaget är dock ifall signalen deck_2 är låg. Då kommer andra halvan av 74LS74 hållas konstant inaktiv, och force_reboot kommer aldrig gå aktiv. Vet inte om deck-2 är aktivit låg eller hög. I vilket fall som helst så lär väl tanken vara att antingen kunna boota och få force_reboot genom att begära läsning från ena bandaren, medan man kan läsa ROM:et som ett band utan att boota om ifall man begär läsning från andra bandaren.
Återstående del är genereringen av flag_reboot.
NAND-grindarna B3C och B3A gör att om tape_motion är låg (emuleringen avstängd så att säga) och/eller force_reboot är aktiv så kommer en halv ytterligare 74LS74 (A3B) nollställas. När den är nollställd så kommer NAND-grinden B3D ihop med inverteraren B2B se till att utgången flag_reboot hålls låg.
Dock när tape_motion är hög (emuleringen igång) och force_reboot är låg=inaktiv så 18,75Hz-klockan få nyss nämda 74LS74-halva (A3B) att gå aktiv. När den är aktiv så ser NAND-grinden B3D till att 150Hz-klocka (Q0 från räknaren A2) skickas ut på flag_reboot.
Vet inte riktigt vad flag_reboot används till. Nån slags pulserande signal som indikerar att inläsning av bootstrap pågår, men till vilken nytta?
Det är väl smaksak hur nära originalet man vill vara. I princip kan du bygga en klassisk ROM-emulator som använder RAM och mux:ar för att det ska vara autentiskt som det kunnat vara vid utveckling på 1970-talet. Eller så kan du emulera hela seriedatagenereringen, och låta 300Hz-klockan gå till en ingång på din mikrokontroller och två utgångar dels ge serdat_out och dels motsvarande utången från 74LS42, och på så sätt skippa ROM, 1-av-8-väljaren samt de fyra räknarna E1, D2, D1 och C2, och 74LS42.
Notera att både kretsen med de två 74LS74-halvorna som genererar force_reboot och alla räknarna till ROM:et reagerar på uppgående flank på 300Hz-klockan. Det är kanske bra att ha kod i mikrokontrollern som reagerar dels på aktivt hög clear eller aktivit låg load och nollställer räknare, och dels reagerar på uppgående flank på 300Hz-klockan och då skiftar ut nästa bit, och när det är gjort förgenererar efterföljande bit, så att det går blixtsnabbt att få fram ny utdatabit (och också signalen som signallerar att emuleringen är klar) på uppgående flank på 300Hz-klockan. Med rätt kodning så lär en klart långsammare mikrokontroller klara av att emulera detta tänker jag. Vet iofs inte vad serdat_out i sin tur matar - ifall det är något synkront med 4800Hz-klockan så behöver emuleringen antagligen vara mycket exakt, annars inte. Det bör väl gå att jämföra med hur bandaren gör.
Eller så kan du emulera hela kortet med en tillräckligt snabb mikrokontroller. Inte lika autentiskt, men...
Nu har jag inte liksom renskrivit ovanstående, ifall det här hade varit en uppgift i en kurs eller om det skulle vara ett officiellt dokument så hade jag nog gått igenom ovanstående nån vända till. Hoppas ändå det tangerar önskade briljanta tankar
Sidospår: det är intressant hur olika hjärnan fungerar på olika personer. Just att följa digitala kretsscheman verkar vara en grej jag har nån slags talang för
Också:
Pluspoäng till TI som har alla databladen från stenåldern som PDF:er, och upplagda så att de hamnar högt om man bara google:ar på t.ex. 74LS193.
Räknaren:
https://www.ti.com/lit/ds/symlink/sn74ls193.pdfdenna visar pinout bäst
https://susta.cz/fel/74/pdf/74LS193.pdfdenna har bra tidsdiagram som sammanfattar logiknivåer/funktion på alla signaler
1-av-8-väljaren som simulerar skiftregister:
https://www.ti.com/lit/ds/symlink/sn54s151.pdf
4-till-10-avkodaren som används för att avgöra när emuleringne är färdig:
https://www.ti.com/lit/ds/symlink/sn74ls42.pdf
74LS74 (för att bli påmind om vilken flank på klockan som den läser dataingången på):
https://www.ti.com/lit/ds/symlink/sn74ls74a.pdf