Projekt: TV-spel
Projekt: TV-spel
Tjenixen!
Tänkte använda denna tråd för att berätta lite hur vårat TV-spels projekt går...
Har för ett par månader sedan, tillsammans med en klasskompis påbörjat att programmera (och bygga det lilla som behövs) ett TV-spel som ett projekt i skolan inom kursen Mikroprocessor B. Videosignalen genereras helt i mjukvaran i en ATmega32 på 16Mhz och ligger för tillfället på 96*60Pixlar och 1bitars färgdjup(svart/vitt, vem behöver mer? ). Vi kommer nog försöka höja upplösningen lite, hoppas kring 128*96, men vi får se hur mycket som är möjligt.
Vi har byggt upp det nu så att koden som genererar själva videosignalen drivs helt av interrupts, på så vis slipper man under programmering av spelkoden att räkna tiden på alla instruktioner, det enda som man då inte kan använda under själva spelet är andra interrupts, i princip alla register och portar är lediga att använda som man vill. Vi har tidigare gjort rutiner för att sätta/ta bort/invertera en bestämmd pixel och har idag gjort en teckentabell och rutiner för att skriva ut tecken och strängar på TVn.
Vi har inte riktigt bestämmt oss för vad för spel vi ska göra, men det börjar luta åt att vi startar med ett enkelt Snake, när det inte kräver några som helst tunga uträkningar. Vi har även funderat en del på ett Pong, men det är desto svårare när det kräver lite "tyngre(egentligen är dom ju inte så tunga, men mycket av CPU-kraften går ju åt till videosignalen, så risken är stor att det skulle bli ganska långsammt) beräkningar för bollens rörelse. Har någon förslag på andra lättare spel man skulle kunna göra så är dom välkommna.
Ungefär så här ser det ut för tillfället:
Tänkte använda denna tråd för att berätta lite hur vårat TV-spels projekt går...
Har för ett par månader sedan, tillsammans med en klasskompis påbörjat att programmera (och bygga det lilla som behövs) ett TV-spel som ett projekt i skolan inom kursen Mikroprocessor B. Videosignalen genereras helt i mjukvaran i en ATmega32 på 16Mhz och ligger för tillfället på 96*60Pixlar och 1bitars färgdjup(svart/vitt, vem behöver mer? ). Vi kommer nog försöka höja upplösningen lite, hoppas kring 128*96, men vi får se hur mycket som är möjligt.
Vi har byggt upp det nu så att koden som genererar själva videosignalen drivs helt av interrupts, på så vis slipper man under programmering av spelkoden att räkna tiden på alla instruktioner, det enda som man då inte kan använda under själva spelet är andra interrupts, i princip alla register och portar är lediga att använda som man vill. Vi har tidigare gjort rutiner för att sätta/ta bort/invertera en bestämmd pixel och har idag gjort en teckentabell och rutiner för att skriva ut tecken och strängar på TVn.
Vi har inte riktigt bestämmt oss för vad för spel vi ska göra, men det börjar luta åt att vi startar med ett enkelt Snake, när det inte kräver några som helst tunga uträkningar. Vi har även funderat en del på ett Pong, men det är desto svårare när det kräver lite "tyngre(egentligen är dom ju inte så tunga, men mycket av CPU-kraften går ju åt till videosignalen, så risken är stor att det skulle bli ganska långsammt) beräkningar för bollens rörelse. Har någon förslag på andra lättare spel man skulle kunna göra så är dom välkommna.
Ungefär så här ser det ut för tillfället:
Har ni ett interrupt för varje pixel?
För att få högsta möjliga upplösning kunde man kanske köra ett interrupt per rad, och bara göra övriga beräkningar under synk- och blankingintervallen...
Fast då har ni kanske inte minne så det räcker till att använda den upplösningen heller.
Ser kul ut iaf, påminner lite om vårt pong vi gjorde med programmerbar logik. Vi skapade grafiken "on the fly" med en hög komparatorer istället för att lagra bilden i ett minne.
För att få högsta möjliga upplösning kunde man kanske köra ett interrupt per rad, och bara göra övriga beräkningar under synk- och blankingintervallen...
Fast då har ni kanske inte minne så det räcker till att använda den upplösningen heller.
Ser kul ut iaf, påminner lite om vårt pong vi gjorde med programmerbar logik. Vi skapade grafiken "on the fly" med en hög komparatorer istället för att lagra bilden i ett minne.
Hehe... Nej, vi har inte ett interrupt per pixel, vore alldeles för tidskrävande. Vi hade först ett interrupt per rad, men märkte att det inte fanns så mycket tid att utvinna mellan varje rad som visade bilddata(pixlarna) så nu sitter alla linjer som visar själva bilden ihop, därimot dom typ 10-20raderna(kommer inte ihåg exakt hur många) längst upp och längst ner + vertikalasyncen är olika interrupts, så där körs det mesta av spelkoden, ungefär som du beskrev.
Hur fin var bollen upplösning då i erat spel och hur många riktningar hade den? Det vore ju egentliga inga större problem i nuläget att göra ett pong med typ 8 riktningar på bollen, men jag kulle gärna se att man hade iaf kring 30.
Vi har 2KB att använda so bildminne, just nu används 96*61/8=720Byte, så det finns en del mer där att hämta.
Hur fin var bollen upplösning då i erat spel och hur många riktningar hade den? Det vore ju egentliga inga större problem i nuläget att göra ett pong med typ 8 riktningar på bollen, men jag kulle gärna se att man hade iaf kring 30.
Vi har 2KB att använda so bildminne, just nu används 96*61/8=720Byte, så det finns en del mer där att hämta.
Bollen var bara en fyrkant, men den rörde sig mjukt (Vi hade 512xnånting pixlar, fast all grafik var stora fyrkantiga block eftersom det är svårt att göra nåt annat med komparatorerna).
Antalet riktningar vete tusan, vi hade en X-hastighet och en Y-hastighet. X-hastigheten ökade lite för varje studs, och Y-hastigheten bestämdes vid varje studs av hur snabbt spelaren rörde på joysticken vid det ögonblicket (vi hade analoga joysticks att styra med).
Inte riktigt originalreglerna, men det var rätt kul att spela faktiskt.
Antalet riktningar vete tusan, vi hade en X-hastighet och en Y-hastighet. X-hastigheten ökade lite för varje studs, och Y-hastigheten bestämdes vid varje studs av hur snabbt spelaren rörde på joysticken vid det ögonblicket (vi hade analoga joysticks att styra med).
Inte riktigt originalreglerna, men det var rätt kul att spela faktiskt.
Höjde upplösningen ytterliggare idag, ligger nu på 144*102... Nu är nog dock gränsen nådd för vad minnet klarar (144/8*102 = 1836Bytes tar bilden nu). Håller även på och försöker få igång koden i GCC's assemblerare för att få möjlighet att kunna skriva spelen eller programmen i C, vore väldigt trevlig att slippa skriva dom i assambler.
Som det ser ut i nuläget:
Som det ser ut i nuläget:
Har nu gjort klart ett enkelt Tetris och även ett Snake, programmerat i båda C.
Fösökte spela samtidigt som jag tog bilden, vart lite snett därför:
Så kan också gå:
Och så kanske man får fresta med ett par jättedåliga filmer på det
http://w1.907.telia.com/~u90705005/bild ... eo%201.3gp
http://w1.907.telia.com/~u90705005/bild ... eo%202.3gp
Kan ses i Quicktime
Har inga bilder på Snake nu, men tar kanske senare. Härnäst så tänkte jag vidareutveckla Tetris så att man kan spela två spelare, tror att processorkraften ska räcka till det och lite mer, det återstår att se.
Fösökte spela samtidigt som jag tog bilden, vart lite snett därför:
Så kan också gå:
Och så kanske man får fresta med ett par jättedåliga filmer på det
http://w1.907.telia.com/~u90705005/bild ... eo%201.3gp
http://w1.907.telia.com/~u90705005/bild ... eo%202.3gp
Kan ses i Quicktime
Har inga bilder på Snake nu, men tar kanske senare. Härnäst så tänkte jag vidareutveckla Tetris så att man kan spela två spelare, tror att processorkraften ska räcka till det och lite mer, det återstår att se.
- MadModder
- Co Admin
- Inlägg: 29993
- Blev medlem: 6 september 2003, 13:32:07
- Ort: MadLand (Enköping)
- Kontakt:
Mitt quicktime fattar inte alls vad det är för slags filer, och realplayer som absolut vill öppna dem visar bara rappakalja. Massa vita bokstäver på svart bakgrund
[edit]
Jag har quicktime 6.5.1 och den säger:
Could not open the file "video 1.3gp" because it is not a file that QuickTime understands
[edit]
Jag har quicktime 6.5.1 och den säger:
Could not open the file "video 1.3gp" because it is not a file that QuickTime understands
Senast redigerad av MadModder 8 juni 2004, 18:19:45, redigerad totalt 1 gång.