Texas Instruments TMS9918 er en elektronisk komponent, en videocontroller- chip (VDP, Video Display Processor). Det blev udviklet af Texas Instruments i 1977 - 1979 og blev udgivet i 1979. Den blev brugt i virksomhedens egen hjemmecomputer , TI-99/4A . Det blev efterfølgende brugt i en række computere og spillekonsoller i begyndelsen af 1980'erne . TMS9918 understøtter også en række andre, senere videocontrollere.
Seks personer deltog i udviklingen. En af dem, Karl M. Guttag, var involveret i udviklingen af sprite-undersystemet, DRAM-interface og logiktest i flere versioner af chippen [1] .
TMS9918-chippen blev brugt i følgende systemer:
Computere:
Spilkonsoller:
Der er flere versioner af chippen - TMS9918, TMS9918A, TMS9928, TMS9928A, TMS9929A, TMS9118 og TMS9128. Bogstavet A i navnet angiver den anden version af chippen, som tilføjede en ny rastervideotilstand (Graphic II) og nogle andre funktioner. Den første version af mikrokredsløbet, som ikke havde bogstavet A i betegnelsen, blev kun brugt i TI-99/4-computeren. TI-99/4A-computeren og alle andre computere, der bruger denne chip, bruger dens anden version.
TMS9918A- og TMS9928A-versionerne genererer et billede med en billedhastighed på 60 Hz , TMS9929A-versionen har en billedhastighed på 50 Hz.
TMS9918A-chippen genererer et fuldfarve-kompositvideosignal med NTSC -farvekodningssystemet , mens TMS9928A-versionen genererer signaler i YPbPr -formatet - outputtet af lysstyrken Y og udgangene fra farveforskelkanalerne RY, BY. Et sådant output var påkrævet på grund af brugen i forskellige lande, for eksempel i Europa, af tv-standarder med en billedhastighed på 50 Hz og forskellige farvekodningssystemer - PAL , SECAM . Brug af en ekstern farvekoder var mere omkostningseffektivt i dette tilfælde.
Alle versioner af denne serie omtales almindeligvis som TMS9918, nogle gange inklusive bogstavet A.
Til brug i computere med MSX2-standarden udviklede Yamaha V9938- chippen baseret på TMS9918A . Det er softwarekompatibelt med TMS9918A, men har yderligere rastervideotilstande, færre begrænsninger på brugen af farve til sprites, lodret billedrulleregister, muligheden for at udføre forskellige kommandoer (flytte eller male blokke i videohukommelsen) og en palet, der kan tilpasses. V9938 blev også brugt i Geneve 9640 -udvidelseskortet til TI-99/4A-computere.
Til gengæld, baseret på V9938, udviklede Yamaha V9958- chippen , designet til brug i computere med standarderne MSX2+ og MSX Turbo R. Forskellene mellem disse chips var ikke så væsentlige - flere grafiktilstande blev tilføjet med mulighed for at bruge mere farver, samt registrere vandret rulning af billedet.
Yamaha ledede også udviklingen af den næste chip i serien, V9978 , som oprindeligt skulle bruges i computere med MSX Turbo R-standarden, men af en eller anden grund blev udviklingen ikke afsluttet. Chippen blev efterfølgende udgivet under navnet V9990 . Den havde de funktioner, der blev annonceret til V9978, men var ikke bagudkompatibel med seriens chips. V9990 blev dog brugt på MSX-computere som en del af et tredjeparts Graphics9000 - udvidelseskort ( Sunrise Swiss ).
TMS9918A-chippen blev også brugt i Segas tidlige spilsystemer . Efterfølgende blev det brugt som grundlag for en specialiseret videocontroller til spilkonsoller Sega Master System og Sega Game Gear (benævnt 315-5124, 315-5246, 315-5378). Disse mikrokredsløb indeholder, udover deres egne muligheder, alle de originale TMS9918A videotilstande. Sega Mega Drive videospilkonsollen (chip 315-5313) er bagudkompatibel med Master System og Game Gear videocontrollere, men har ikke TMS9918A-tilstande.
TMS9918 har en grænseflade til at arbejde med 16K 8-bit videohukommelse. Denne hukommelse er placeret på videocontrollerens egen adressebus, uden for adresserummet på systemets hovedprocessor, og er ikke direkte tilgængelig for den. For at lægge data ind i videohukommelsen skal systemets hovedprocessor overføre dem gennem videocontrollerens kontrolporte. Denne løsning har både en ulempe - manglende evne til direkte at arbejde med grafiske data, og en fordel - betjeningen af videocontrolleren bremser ikke hovedprocessoren (hvilket sker i systemer med videohukommelse placeret i hovedhukommelsen, når enheder får adgang til hukommelsen på samme tid), og optager ikke dens adresseplads .
Processoren kommunikerer med videocontrolleren gennem to otte-bit porte. Gennem disse porte kan processoren sende kommandoer til videocontrolleren og data, der skal placeres i videohukommelsen, samt polle videocontrollerens aktuelle tilstand. For at overføre data til videohukommelsen skal du indstille den aktuelle adresse i videohukommelsen, hvorefter du kan overføre data. Et vigtigt træk ved TMS9918 er tilstedeværelsen af automatisk stigning af videohukommelsesadressen under hver byteoverførsel, hvilket gør det muligt at undgå manuel korrektion af adressen for hver byte under blokdataoverførsler.
TMS9918A-chippen implementerer fire videotilstande. Som nævnt ovenfor har TMS9918 ikke en Graphic II-tilstand:
Tilstand 0 (tekst): Monokrom teksttilstand 40×24 tegn. Da den vandrette skærmopløsning er 256 punkter, er hvert tegn 6 punkter bredt. I denne tilstand er hardwarevisning af sprites og ændring af rammens farve ikke tilgængelig.
Tilstand 1 (grafik 1): 32 x 24 tegn (256×192 punkter). Det er muligt at bruge 256 forskellige tegn, hvis billede indstilles programmatisk. Symboler er opdelt i 32 grupper af 8 symboler, hver af disse grupper er tildelt to farver - baggrund og billede. Således vil for eksempel tegn 0..7 altid have samme farve.
Tilstand 2 (grafik 2): 32 x 24 tegn (256×192 punkter). Det er muligt at bruge tre sæt på 256 tegn hver, hvis billede indstilles programmatisk. Hvert tegn i hvert sæt kan bruge op til 16 forskellige farver, dog kan hver tegnpunktrække (8-punktslinje) kun have to farver.
Tilstand 3 (Flerfarvet): 64×48 punkters bitmaptilstand. Den har en meget lav opløsning, hvorfor den sjældent blev brugt. Hver prik kan have sin egen farve, enhver af de 16 tilgængelige. Sprites forbliver i høj opløsning, det samme som i grafisk tilstand 1 og 2.
I tilstand 1, 2 og 3 kan videocontrolleren vise hardware-sprites. I alt er det muligt at vise op til 32 monokrome sprites på skærmen, 8 × 8 eller 16 × 16 pixels i størrelse. Alle sprites skal have samme størrelse. Hver sprite kan have sin egen farve. Op til 4 sprites kan vises på én vandret linje på skærmen, hvis denne værdi overskrides, vises de resterende sprites på denne linje ikke. Samtidig fungerer det enkleste prioriteringssystem - sprites med et lavere serienummer vises først. Begrænsningen på antallet af sprites, der vises pr. linje, kan delvist omgås programmæssigt ved at ændre deres serienumre for hver frame. I dette tilfælde, i stedet for fuldstændig forsvinden af de sprites, der falder ind under begrænsningen, vises de alle, men med et flimmer (de er ikke til stede i hver frame). Denne teknik kaldes sprite- multipleksing .
Videocontrolleren har ikke mulighed for automatisk at flytte sprites, denne opgave skal løses programmatisk. Videocontrolleren har evnen til at generere et afbrydelse i begyndelsen af det lodrette omvendte sweep af sweep-strålen - det forekommer hvert billede, det vil sige hvert 1/50 eller 1/60 sekund, afhængigt af versionen af mikrokredsløbet og farvekodningsstandard. Processoren skal ændre positionen af sprites i handleren af denne afbrydelse efter behov.
Når to uigennemsigtige punkter på et hvilket som helst spritepar overlapper hinanden, sættes spritekollisionsflaget. Dette kan bruges til at bestemme, om mere komplekse kollisionsdetektionsrutiner implementeret i programmet skal køres for at bestemme den nøjagtige placering af kollisionen og den nødvendige reaktion på den. I dette tilfælde giver videocontrolleren ikke information om, hvilke sprites der er involveret i kollisionen.
Teknisk set er Graphic 2-tilstand en teksttilstand med et sæt på 256 brugerdefinerede farvetegn. Skærmen er vertikalt opdelt i tre områder med 256×64 prikker, hver af disse områder har sit eget sæt på 256 tegn, så antallet af tegn i sættet er lig med antallet af viste tegn (768). Når man tildeler hver karakterposition til sin egen karakter fra sættet, bliver det muligt at simulere en grafiktilstand, hvor hvert punkt i billedet kan ændres. Imidlertid har den således opnåede rammebuffer en ikke-lineær organisation.
Programmet kan også bruge tre af de samme tegnsæt og behandle skærmen som teksttilstand med farvede tegn. I dette tilfælde består baggrundsbilledet og sprites af tegn. Denne teknik er ofte blevet brugt i spil, fordi det kun tager 32x24 bytes at behandle for at udfylde eller rulle en fuld skærm. Grafik til sådanne videotilstande skal tegnes på en sådan måde, at overgangene mellem grænserne for blokke på 8×8 pixels ikke er for mærkbare.
Vanskeligheden ved at skabe farvegrafik i Graphic 2-tilstand ligger i de begrænsede muligheder for at vise farve. Alle palettens 16 farver kan bruges på skærmen, men hver linje med 8 punkter kan kun indeholde to af dem. Disse farver kan frit vælges fra en palet på 16 farver. Når man bruger LINE-sætningen i BASIC-fortolkeren, kan man nemt se denne begrænsning - når krydsende eller tætsiddende linjer i forskellige farver males i farven på en af linjerne. Denne grafiske artefakt kaldes et farvespild . Artefakten af denne artefakt er fuldstændig magen til attributtens clash -artefakt (attributoverlapning) på ZX Spectrum-computere , forskellen er kun i størrelsen af de områder, der er underlagt begrænsningen for visning af farver.
TMS9918-videocontrolleren har ikke hardware-rullefunktioner. Om nødvendigt bør det implementeres helt i software.