*----------------------------------------------------------- * Program Number: Forritunarverkefni 1 * Written by : Sævar Öfjörð Magnússon * Date Created : 2005-01-20 * Description : * * Þetta forrit velur 5 raðir af lottótölum í samræmi við * íslenska lottókerfið. Að lokum eru dregnar út 5 tölur og * ein bónustala. * *----------------------------------------------------------- SP equ $20 ; space BS equ $08 ; backspace CR equ $0d ; carriage return LF equ $0a ; line feed ;--------------------------------------------------------------------------- ; nokkrir constantar ;--------------------------------------------------------------------------- org $800 veldu dc.b 'Veldu 5 radir. I hverri rod mega vera 5 tolur,' dc.b ' adskildar med stafabili.',CR,LF,0 delim dc.b '. ',0 dregnartolur dc.b 'Dregnar tolur: ',0 bonustalan dc.b 'og bonustalan er ',0 newline dc.b CR,LF,0 start org $1000 ;--------------------------------------------------------------------------- ; Hér eru valdar handvirkt tölur ;--------------------------------------------------------------------------- lea veldu,a1 ; Hlaða inn addressunni á breytunni bsr print ; Prenta haus move.l #$2000,a5 ; geymum addressuteljara í a5 move.b #0,d6 ; teljari í d6 move.l #$2100,d4 ; handval teljari í d4 loop1 addq #1,d6 ; hækka teljara um einn move d6,d1 ; afritum teljara í d1 move.b #3,d0 ; trap-kóði 3 trap #15 ; birta eina tölu lea delim,a1 ; setja addressuna á breytunni í a1 bsr print ; prenta delim='. ' move d4,a1 ; viljum geyma lottótölurnar sem giskað er á move.b #2,d0 ; trap-kóði 2 trap #15 ; lesa tölustreng frá lyklaborði add d1,d4 ; hækkum teljarann sem nemur lengd inntaks cmp #5,d6 ; athuga hvort d6 sé 5 bne loop1 ; halda áfram í lúppu ef ekki 5 ;--------------------------------------------------------------------------- ; Hér er dregið í lottóinu ;--------------------------------------------------------------------------- lea dregnartolur,a1 ; hlodum inn addressunni bsr print bsr makerandom5 ; búum til random tölu mod 5 (velja 1 af 5) move.b d1,d5 ; geymum hana í d5 subq #1,d5 ; lækkum um einn (notað til að velja array) bsr makerandom38 ; búum til random tölu mod 38 cmp #6,d1 ; athugum hvort random talan sé 6 eða minna ble skip ; branch ef <= 6 subq #6,d1 ; drögum 6 frá til þess að fá minna en 38 skip mulu #38,d5 ; margföldum d5 með 38 adda d5,a5 ; finnum í hvaða array þetta er adda d1,a5 ; og svo hvar í þeim array move.b #0,d7 ; teljari í d7 loop3 addq #1,d7 ; hækka teljara um einn move.b (a5),d1 ; færum það sem a5 vísar á í d1 move.b #3,d0 ; trap-kóði 3 trap #15 ; birta tölu í d1 move.b #6,d0 ; trap kóði 6, birta einn staf í d1.b move.b #$20,d1 ; ASCII kóðinn fyrir stafabil trap #15 cmp #5,d7 ; athuga hvort komið sé að bónustölu bne ebonus lea bonustalan,a1 bsr print ebonus adda #1,a5 ; hækkum minnisteljara um einn cmp #6,d7 ; athuga hvort d7 sé 6 bne loop3 ; halda áfram í lúppu ef ekki 6 move.b #9,d0 trap #15 ; Stoppa keyrslu ;--------------------------------------------------------------------------- ; subrútínur ;--------------------------------------------------------------------------- makerandom38: move.b #8,d0 ; trap-kóði 8 trap #15 ; lesa inn tímann í millis. frá miðnætti and.l #$0FFFFF,d1 ; koma í veg fyrir overflow divu #37,d1 ; tími / 37 swap d1 ; Skipta á efri og lægri orðum í D1 addq.w #1,d1 ; hækkum um einn and.l #$0FFFF,d1 ; d1.w inniheldur tölu frá 1 til 38 rts makerandom5: move.b #8,d0 ; trap-kóði 8 trap #15 ; lesa inn tímann í millisekúndum frá miðnætti and.l #$00FFFF,d1 ; koma í veg fyrir overflow divu #5,d1 ; tími / 5 swap d1 ; Skipta á efri og lægri orðum í D1 addq.w #1,d1 ; hækkum um einn and.l #$0FFFF,d1 ; d1.w inniheldur tölu frá 1 til 5 rts print: move.b #14,d0 ; trap-kóði 14 trap #15 ; prenta textann í minnishólfi a1 (endar á 0) rts ;--------------------------------------------------------------------------- ; data ;--------------------------------------------------------------------------- org $2000 ; hér ætla ég að geyma nokkra array dc.b 33 ; array 1 dc.b 20 dc.b 31 dc.b 15 dc.b 35 dc.b 14 dc.b 29 dc.b 11 dc.b 23 dc.b 19 dc.b 13 dc.b 27 dc.b 25 dc.b 1 dc.b 2 dc.b 26 dc.b 22 dc.b 8 dc.b 6 dc.b 16 dc.b 17 dc.b 3 dc.b 24 dc.b 7 dc.b 36 dc.b 34 dc.b 12 dc.b 28 dc.b 37 dc.b 5 dc.b 30 dc.b 9 dc.b 18 dc.b 32 dc.b 21 dc.b 4 dc.b 38 dc.b 10 dc.b 12 ; array 2 dc.b 11 dc.b 8 dc.b 20 dc.b 21 dc.b 14 dc.b 22 dc.b 5 dc.b 19 dc.b 16 dc.b 34 dc.b 27 dc.b 29 dc.b 28 dc.b 2 dc.b 25 dc.b 1 dc.b 10 dc.b 18 dc.b 24 dc.b 35 dc.b 17 dc.b 36 dc.b 31 dc.b 13 dc.b 9 dc.b 6 dc.b 15 dc.b 26 dc.b 37 dc.b 33 dc.b 4 dc.b 3 dc.b 30 dc.b 38 dc.b 23 dc.b 32 dc.b 7 dc.b 7 ; array 3 dc.b 36 dc.b 14 dc.b 16 dc.b 9 dc.b 12 dc.b 24 dc.b 32 dc.b 10 dc.b 31 dc.b 21 dc.b 15 dc.b 8 dc.b 20 dc.b 30 dc.b 27 dc.b 17 dc.b 23 dc.b 25 dc.b 3 dc.b 1 dc.b 22 dc.b 38 dc.b 35 dc.b 28 dc.b 37 dc.b 4 dc.b 5 dc.b 11 dc.b 2 dc.b 34 dc.b 18 dc.b 29 dc.b 33 dc.b 19 dc.b 13 dc.b 26 dc.b 6 dc.b 13 ; array 4 dc.b 5 dc.b 9 dc.b 10 dc.b 23 dc.b 4 dc.b 19 dc.b 31 dc.b 34 dc.b 1 dc.b 15 dc.b 30 dc.b 36 dc.b 27 dc.b 18 dc.b 17 dc.b 29 dc.b 33 dc.b 16 dc.b 28 dc.b 21 dc.b 22 dc.b 11 dc.b 3 dc.b 2 dc.b 25 dc.b 7 dc.b 26 dc.b 14 dc.b 32 dc.b 6 dc.b 35 dc.b 8 dc.b 38 dc.b 24 dc.b 37 dc.b 20 dc.b 12 dc.b 25 ; array 5 dc.b 14 dc.b 26 dc.b 1 dc.b 38 dc.b 13 dc.b 20 dc.b 11 dc.b 32 dc.b 36 dc.b 15 dc.b 4 dc.b 22 dc.b 23 dc.b 19 dc.b 3 dc.b 31 dc.b 16 dc.b 18 dc.b 7 dc.b 10 dc.b 27 dc.b 2 dc.b 29 dc.b 6 dc.b 9 dc.b 17 dc.b 33 dc.b 21 dc.b 5 dc.b 24 dc.b 28 dc.b 37 dc.b 30 dc.b 12 dc.b 34 dc.b 8 dc.b 35 end start ; hætta *~Font name~Courier New~ *~Font size~10~ *~Tab type~1~ *~Tab size~8~