Datorteknik TSIU02 Lab 4 Spel v0.3

Relevanta dokument
Datorteknik Hyfsa kod

Laboration Datorteknik D 4. Spel

Datorteknik TSIU02 Lab 2 Morsesändare v0.7

A-del motsvarande KS1

LABORATION. Datorteknik Y

Datorteknik TSIU02 Kursinformation

Datorteknik. Exempeluppgifter i Laborativ Examination

LABORATION. Datorteknik Y

Laboration 2 i Datorteknik- Assemblerprogrammering II

Digitala Projekt(EITF40) - Larm

Dataminne I/O Stack 0x005D 0x3D SP low byte 0x005E 0x3E SP high byte

Digitala projekt rapport

Programräknaren visar alltid på nästa instruktion som skall utföras. Så fort en instruktion har hämtats så visar programräknaren på nästa instruktion.

Ansvarig lärare: Olof Andersson, Telefon (besöker skrivsalen)

F4: Assemblerprogrammering

Provmoment: Ladokkod: Tentamen ges för: Tentamen TE111B El3. Namn: Personnummer: Tentamensdatum: Tid: 14:00-18:00.

Övning2 Datorteknik, HH vt12 - Programmering

Systemkonstruktion LABORATION REALTIDSPROGRAMMERING

Datorteknik. Tomas Nordström. Föreläsning 6. För utveckling av verksamhet, produkter och livskvalitet.

Digital- och datorteknik

General Purpose registers ALU I T H S V N Z C SREG. Antag att vi behöver skriva in talet 25 till register R18

Laboration 5 TSEA57 Datorteknik I

Övningsuppgifterna i kapitel F avser FLIS-processorn, vars instruktioner och motsvarande koder definieras i INSTRUKTIONSLISTA FÖR FLISP.

Snake. Digitala Projekt (EITF11) Fredrik Jansson, I-12 Lunds Tekniska Högskola,

Laboration 5. Temperaturmätning med analog givare. Tekniska gränssnitt 7,5 p. Förutsättningar: Uppgift: Temperatur:+22 C

TENTAMEN Datorteknik (DO2005) D1/E1/Mek1/Ö1

AVR 5. Styrning av trafikljus. Digitala system 15 p

LEU240 Mikrodatorsystem

Digitalt lärande och programmering i klassrummet

Laboration Datorteknik TSIU02/TSEA28 3. Digitalur

Rapport Digitala Projekt EITF11 Grupp 4 Axel Sundberg, Jakob Wennerström Gille Handledare: Bertil Lindvall

Laboration Datorteknik D 3. Digitalur

Datorteknik 1 (AVR 1)

Effektpedal för elgitarr

Datorsystem Laboration 2: Minnesmappade bussar

Svar till Övning3 Datorteknik, HH vt12 Avbrott och timers

Digitala Projekt (EITF11)

Digital- och datorteknik

TETRIS. LTH, Campus Helsingborg EITA15 Digitala System

CE_O3. Nios II. Inför lab nios2time

Avbrottshantering. Övningsuppgifter

Tentamen Datorteknik Y, TSEA28 Datum

Mekanisk solros, Digitala projekt(edi021) Kristoer Nordvall, Stefan Windfeldt, Inlämmnad: 4 december 2006

Lösningar till tentamen i EIT070 Datorteknik

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser

Laboration 4: Knappstuds Drivrutiner för att eliminera störningar.

Laboration Datorteknik TSIU02 2. I/O-programmering

KALKYLATOR LABORATION4. Laborationens syfte

Digital- och datorteknik

Objektorientering i liten skala

Datorprojekt, del 1. Digitala system 15 p

TSIU05 Digitalteknik. LAB1 Kombinatorik LAB2 Sekvensnät LAB3 System

Tentamen. Datorteknik Y, TSEA28

Robotfotboll med Arduino

Laboration Datorteknik TSIU02/TSEA28 3. Digitalur

PROJEKT LJUD. KOPIERINGSUNDERLAG Martin Blom Skavnes, Staffan Melin och Natur & Kultur Programmera i teknik ISBN

Enchipsdatorer med tillämpningar LABORATION 7, ROBOT

DEPARTMENT OF INFORMATION TECHNOLOGY. Digitala Projekt. Redovisning av Projekt - Grupp 14

Kontrollskrivning Mikrodatorteknik CDT S2-704

Batteri. Lampa. Strömbrytare. Tungelement. Motstånd. Potentiometer. Fotomotstånd. Kondensator. Lysdiod. Transistor. Motor. Mikrofon.

Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010

TENTAMEN. Datorteknik. D1/E1/Mek1/Ö Hjälpmedel: Häfte "ARM-instruktioner", A4-format, 17 sidor. Maxpoäng:

Sockets: server. with Ada.Command_Line; use Ada.Command_Line; with Ada.Exceptions; use Ada.Exceptions; with Ada.Text_IO; use Ada.

Lösningar till tentamen i EIT070 Datorteknik

Ett program som frågar regelbundet om något skall utföras. Exempelvis om spänningen på ett batteri sjunkit under en viss nivå.

Lösningar till tentamen i EIT070 Datorteknik

Styrteknik: MELSEC FX och numeriska värden

Innehållsförteckning. Figur- och tabellförteckning. Figure 1 Blockschema över hårdvaran...4 Figure 2 Blockschema över programet...

Temperaturmätare med lagringsfunktion DIGITALA PROJEKT EITF11 GRUPP 14, ERIK ENFORS, LUDWIG ROSENDAL, CARL MIKAEL WIDMAN

Högskolan i Halmstad Digital- och Mikrodatorteknik 7.5p. Lista på registeruppsättningen i PIC16F877A Datablad TTL-kretsar 74-serien

Växtviskaren EITF11 Digitala projekt VT15, I12

Maskinorienterad programmering

Besvara de elektroniska frågorna (se kurshemsidan). Läs kapitel i kursbok

Tentamen. Datorteknik Y, TSEA28

Stack och subrutiner Programmeringskonventionen

Tentamen PC-teknik 5 p Lösningar och kommentarer

Assemblerprogrammering, ARM-Cortex M4 del 3

Design vid utveckling av inbyggda system

Department of Information Technology Digitala projekt. SuperKull. Daniel Öhman Alexander Persson

Manual för Autostart Speed Control

Datorteknik Övningsuppgifter

Programmering. Scratch - grundövningar

Rapport. Fyra i rad-spel. Rapport Digitala Projekt EITF11 Grupp 9 Emma Rasmusson & Louise Ragnarsson Handledare: Bertil Lindvall

Datorteknik Exempel på stegvis förfining. Signalbehandling med AVR

Simulering med ModelSim En kort introduktion

Enchipsdatorns gränssnitt mot den analoga omvärlden

Digitala Projekt(EITF40) - Larm

TSEA28 Datorteknik Y (och U)

Mål. Datorteknik. Innehåll. Innehåll (forts) Hur ser ett program ut? Hur skapas maskinkoden?

Laboration Datorteknik D 1. IR-länk

Programmera i Block Editor

Tentamen. Datorteknik Y, TSEA28

Digital- och datorteknik

Tentamen. Datorteknik Y, TSEA28

Fö 5+6 TSEA81. Real-time kernel + Real-time OS

Tentamen Datorteknik Y, TSEA28 Datum TER2, TER4, TERE Tid 14-18

DIGITAL ELEKTRONIK. Laboration DE3 VHDL 1. Namn... Personnummer... Epost-adress... Datum för inlämning...

Kortfattad instruktion för installation och användning av streckodsapplikationer

Uppgift 1a (Aktiekurser utan poster)

KUNG. TEKNISKA HÖGSKOLAN. Laboration. Programmering av LEGO-robot

Transkript:

Datorteknik TSIU02 Lab 4 Spel v0.3 Inledning din mark or tr affar m alet. Som spelplan anv ands en lysdiodmatris om 5x7 tecken. M alet markeras med en t and lysdiod och din mark or med en annan lysdiod. Programstrukturen anges men det saknas flera viktiga rutiner. I programlistningen anges vad som skall h anda i respektive rutin. Det ar din uppgift att skriva f ardigt programmet. Obs! I laborationen finns inga f orberedelseuppgifter angivna. Det betyder dock inte att f orberedelser inte beh ovs. Tv artom, i denna laboration ar de mer n odv andiga a n n agonsin tidigare och allt m aste f orberedas. Det ar upp till dig att komma till laborationen tillr ackligt f orberedd. Till laborationen m aste du medf ora konstruktionsunderlag, exempelvis strukturdiagram, programkod och kopplingsschema. Du m aste dessutom anv anda ett strukturerat angreppss att i programmeringen och ett ingenj orsm assigt t ankande genom hela uppgiften. Det anga fallgropar och f orm agan att inse Denna laboration ar ett projekt d ar du skall finns m a runt dem eller l osa dem, ar tillverka ett digitalt spel. Spelet g ar ut p a att dessa i tid, och g med en joystick leta upp m alet som slocknar d a en v asentlig del i den h ar laborationen. Utrustning Till den h ar laborationen beh over du anv anda ny h ardvara: Joystick Spelplan A/D-omvandlare H ogtalare Dessutom finns tryckknappar och lysdioder till ditt f orfogande vid deltester. Spelkrav F or godk and laboration skall spelet uppfylla atminstone f oljande spelkrav: 1. Vid spelstart skall ett m al placeras n agonstans p a spelplanens v anstra halva. Samtidigt skall en mark or placeras i kolumnen l angst till h oger p a spelplanen. 2. Spelarens uppgift ar att flytta mark oren till m alet. 3. N ar m alet a r t ackt av mark oren skall tr aff signaleras med en ljudsignal i en h ogtalare. 4. Vid tr aff skall spelet startas om. 5. Subrutinen RANDOM skall anropas som angivet i koden, dvs med f orberedda argument p a stacken. 1

Hårdvara Blockschema Spelet kräver joystick, A/D-omvandlare, spelplan och högtalare. Dessutom skall en yttre multiplexsignal initiera uppdatering av spelplanen. Figuren nedan anger hårdvarans principiella uppbyggnad. Joystick Spelplan Avbrott X-led Y-led A/D A/D Dalia Rad Kolumn Högtalare Spelplan Principschema över spelets hårdvara. joystickens läge omvandlas med inbyggd A/D-omvandlare och används av programmet för att styra den egna markören. Målet utgörs av en lysdiod i spelplanens vänstra halva. Vid träff skall ett ljud höras ur högtalaren. Spelplanen återspeglar innehållet i ett videominne, VMEM, om 5 bytes. Planen är 5x7 lysdioder och använder en byte per rad i sram. Högsta biten i varje byte används inte. En tänd lysdiod markeras med en logisk etta och en släckt med logisk nolla: VMEM+4 VMEM+3 VMEM+2 VMEM+1 VMEM+0? 0 0 0 0 0 0 0? 0 0 1 0 0 0 0? 0 0 0 0 0 0 1? 0 0 0 0 0 0 0? 0 0 0 0 0 0 0 7 6 5 4 3 2 1 0 Spelets koordinatsystem i x- och y-led är angivet i figuren. x [0..6], y [0..4]. Den egna positionen återfinns i två variabler POSX och POSY. Målets koordinater är på motsvarande sätt TPOSX och TPOSY Spelplansuppdatering skall initieras av ett externt avbrott och utföras med en frekvens av 1 khz. Avbrottsrutinen skall överföra videominnet till spelplanen, en rad per avbrott, med hjälp av multiplexning. 4 3 2 1 0 Joystick Joysticken ger utspänningen 0 5 V i x- respektive y-led och skall avläsas med hjälp av processorns inbyggda A/D-omvandlare. Enbart de två högsta bitarna, b 7 b 6, av respektive omvandling används för den egna förflyttningen. Detta delar upp hela intervallet i fyra områden: 00, 01, 10, 11. Joysticken är i viloläge för värdena 01 och 10. De avlästa bitarna skall användas på följande sätt: b 7 b 6 riktning x-led riktning y-led 11 vänster upp 10 - - 01 - - 00 höger ner Med de två mest siginifikanta bitarna (b 7 och b 6 ) kan vi avgöra om spaken är i något av sina ändlägen eller i ett läge någonstans i mitten av sitt utslag. Med denna konvention kan naturligtvis också kombinationer av dessa, exempelvis snett nedåt höger, detekteras: 11 10/01 00 11 y-led 10/01 00 x-led Med två A/D-omvandlarkanaler kan riktningarna upp, ner, höger, vänster såväl som diagonalriktningarna kännas av. Strukturdiagram och programskal På nästa sida ges en översikt över programmets programflöde. Programskalet följer i huvudsak det angivna flödet, speciellt används samma subrutinnamn. Programskalet är avsiktligt inte komplett. *** markerar områden som måste kompletteras. Du måste själv definiera de portar du vill använda. Rita ett schema! Du behöver skriva en del helt nya rutiner men använd programskalet som ledning. Du ska inte behöva avvika från flödet i programskalet. Helt färdiga rutiner är LIMITS och UPDATE (med tillhörande subrutiner POS_LIM, SETPOS och SET- BIT). Läs dem. 2

Översikt över programflödet (MUX-rutinen utelämnad) Read A/D Start HW_init Game Warm Run * while(1) Joystick Video Delay Hit? Update Coords Erase Update VMEM Ja Nä Again --- Beep Warm 3

Förberedelse- och laborationsuppgifter Tänk på att förberedelserna, kod, strukturdiagram och elektriskt schema är direkta underlag för den senare programmeringen. Var noggrann och ha schemat framför dig på laborationen. Spelkonstruktionen skall uppdelas i två delar: Huvudprogrammet utgör spelmotorn och en avbrottsrutin sköter displayen. Rita upp ett detaljerat schema över hur uppgiften kan lösas med befintlig hårdvara. Schemat skall vara så detaljerat som möjligt, dvs varje koppling mellan komponenterna skall redovisas. Konsultera bilagorna för mer information. Studera och använd programlistningen. Vissa rutiner är färdigskrivna, andra är bara antydda och det är en del av förberedelserna att förstå och komplettera programkoden. Laborationsuppgift Använd strukturdiagrammet och föreslagna assemblerrutiner för spelmotorn som underlag och komplettera tillämpliga delar. Du får själv skriva multiplexrutinen som läser av videominnet och uppdaterar spelplanen. Skriv in koden, kompilera, felsök. Konstruktionsöverväganden Som konstruktör av programmet är du ansvarig för allt. Målet med laborationen är att i första hand få igång spelet. Vägen dit behöver inte vara lika för alla. Förslag till slumpgenerator Det är tillräckligt om vi kan ta fram två slumptal mellan 0 och 4. Låt varje anrop till avbrottsrutinen för spelplansuppdatering räkna upp en byte, RND, i minnet. Det gör inget i det här fallet är det faktiskt en fördel om innehållet snabbt räknas upp som 254, 255, 0, 1,.... Använd de tre lägsta bitarna som slumptal. Om de tre lägsta bitarna ger ett tal som är större än vi önskar subtraherar vi 4 från det och använder resultatet som slumptal. Gör vi detta två gånger kan vi använda talen som koordinater i x- och y-led för målet. Du får naturligtvis hellre hitta på en egen metod att ta fram slumptalen! Roligare spel Flera uppenbara tillägg till spelet kan göras. Skulle det till exempel vara svårt att införa följande förändringar? Få målet och/eller markören att blinka? ändra hastigheten hos markören? Låta målet flytta sig då markören är nära? Göra en roligare ljudeffekt med hjälp av PWM? Använd en inbyggd timer för att skapa avbrottssignalen.... 4

Programskal ; --- lab4_skal. asm. equ VMEM_SZ = 5 ; # rows on display. equ AD_CHAN_X = 0 ; ADC0 = PA0, PORTA bit 0 X- led. equ AD_CHAN_Y = 1 ; ADC1 = PA1, PORTA bit 1 Y- led. equ GAME_SPEED = 70 ; inter - run delay ( millisecs ). equ PRESCALE = 7 ; AD - prescaler value. equ BEEP_PITCH = 20 ; Victory beep pitch. equ BEEP_LENGTH = 100 ; Victory beep length ; --- Memory layout in SRAM. dseg. org SRAM_START POSX :. byte 1 ; Own position POSY :. byte 1 TPOSX :. byte 1 ; Target position TPOSY :. byte 1 LINE :. byte 1 ; Current line VMEM :. byte VMEM_SZ ; Video MEMory SEED :. byte 1 ; Seed for Random ; --- Macros for inc /dec - rementing ; --- a byte in SRAM. macro INCSRAM ; inc byte in SRAM lds r16,@0 inc r16 sts @0, r16. endmacro. macro DECSRAM ; dec byte in SRAM lds r16,@0 dec r16 sts @0, r16. endmacro ; --- Code. cseg. org $0 jmp START. org INT0addr jmp MUX START : RUN : *** ; satt stackpekaren call HW_INIT call WARM call JOYSTICK call ERASE call UPDATE *** Vanta en stund sa inte spelet gar for fort *** *** Avgor om traff *** 5

NO_HIT : brne ldi call call jmp NO_HIT r16, BEEP_LENGTH BEEP WARM RUN MUX : ; --- Multiplex display r16 *** skriv rutin som handhar multiplexningen och *** *** utskriften till diodmatrisen. Oka SEED. *** i ; --- JOYSTICK Sense stick and update POSX, POSY JOYSTICK : *** skriv kod som okar eller minskar POSX beroende *** *** pa insignalen fran A/D- omvandlaren i X-led... *** ***... och samma for Y-led *** JOY_LIM : call LIMITS ; don t fall off world! LIMITS : ; --- LIMITS Limit POSX, POSY coordinates r16, r17 lds r16, POSX ; variable ldi r17,7 ; upper limit +1 call POS_LIM ; actual work sts POSX, r16 lds r16, POSY ; variable ldi r17,5 ; upper limit +1 call POS_LIM ; actual work sts POSY, r16 POS_LIM : ori r16,0 ; negative? brmi POS_LESS ; POSX neg = > add 1 cp r16, r17 ; past edge brne POS_OK subi r16,2 POS_LESS : inc r16 POS_OK : 6

UPDATE : SETPOS : ; --- UPDATE VMEM ; --- with POSX /Y, TPOSX /Y r16, r17, Z clr ZH ldi ZL, LOW ( POSX ) call SETPOS clr ZH ldi ZL, LOW ( TPOSX ) call SETPOS ; --- SETPOS Set bit pattern of r16 into * Z r16, r17, Z ; --- 1 st call Z points to POSX at entry and POSY at exit ; --- 2 nd call Z points to TPOSX at entry and TPOSY at exit ld r17,z+ ; r17 = POSX call SETBIT ; r16 = bitpattern for VMEM + POSY ld r17, Z ; r17 = POSY Z to POSY ldi ZL, LOW ( VMEM ) add ZL, r17 ; Z= VMEM +POSY, ZL= VMEM +0..4 ld r17, Z ; current line in VMEM or r17, r16 ; OR on place st Z, r17 ; put back into VMEM ; --- SETBIT Set bit r17 on r16 r16, r17 SETBIT : ldi r16, $01 ; bit to shift SETBIT_LOOP : dec r17 brmi SETBIT_END ; til done lsl r16 ; shift jmp SETBIT_LOOP SETBIT_END : ; --- Hardware init HW_INIT : *** Konfigurera hardvara och MUX - avbrott enligt *** *** ditt elektriska schema. Konfigurera *** *** flanktriggat avbrott pa INT0 ( PD2 ). *** sei ; display on 7

WARM : ; --- WARM start. Set up a new game. *** Satt startposition (POSX, POSY )=(0,2) *** push r0 push r0 call RANDOM ; RANDOM urns TPOSX, TPOSY on stack *** Satt startposition ( TPOSX, POSY ) *** call ERASE RANDOM : ; --- RANDOM generate TPOSX, TPOSY ; --- in variables passed on stack. ; --- Usage as: ; --- push r0 ; --- push r0 ; --- call RANDOM ; --- pop TPOSX ; --- pop TPOSY r16 in mov in mov lds r16, SPH ZH, r16 r16, SPL ZL, r16 r16, SEED *** Anvand SEED for att berakna TPOSX *** *** Anvand SEED for att berakna TPOSY *** *** ; store TPOSX 2..6 *** ; store TPOSY 0..4 ERASE : ; --- ERASE videomemory ; --- Clears VMEM.. VMEM +4 *** Radera videominnet *** BEEP : ; --- BEEP ( r16 ) r16 half cycles of BEEP - PITCH *** skriv kod for ett ljud som ska markera traff *** -o-o-o- 8