Kuukauden tehtävä

Aloittaja rams, tammikuu 07, 2012, 20:33

« edellinen - seuraava »

rams

Perusmorjens itse kullekin. Ajattelin tässä sellaista, että kun meikäläisellä ei ole vapaata aikaa kuin tunti tai kaksi silloin tällöin ja kuitenkin kiinnostaisi joskus jotain pientä C64 koodiakin työstää, niin kiinnostaisiko ketään osallistua jonkinlaiseen kuukauden tehtävä sessioon? Eli siis vähän samalla tavalla kun on noita pelikilpailuja, niin otettaisiin jokin yksinkertainen tehtävä ja ihmiset voisivat sitten postata vastauksensa siihen. Aikataulu voisi olla suhteellisen rento, kuukausi tai kaksi per tehtävä.

Kiinnostaako ketään? Siinähän voisi oppiakin jotain.

rams

Ja jottei mene ihan suun soittamiseksi, niin esimerkiksi viime yönä sain valmiiksi assemblerilla ratkaisun tähän: http://codingdojo.org/cgi-bin/wiki.pl?KataFizzBuzz

Tässä dasmilla tehty löysä ja suhteellisen kypsymätön versio. Tässä tosin menee "Fizz" ja "Buzz" väärin päin:


processor 6502
.org $c000
CHROUT = $FFD2
CHRXY = $FFF0
lda #$93
jsr CHROUT
lda #$00
sta $D020
sta $D021
ldx #1
ldy #0
clc
jsr CHRXY
sty $72
main: txa
ldy #3
jsr chkmod
bne zap
jsr prbuzz
zap: ldy #5
txa
jsr chkmod
bne number
jsr prfizz
jmp done
number: lda $72
cmp #$01
beq done
jsr prnum
done: clc
jsr prspc
inx
cpx #101
beq quit
lda #$00
sta $72
jmp main
chkmod: sec
sty $71
mloop: sbc $71

bcs mloop
adc $71
cmp #0
rts
prspc: lda #$0D
jsr CHROUT
rts
prbuzz: lda #$01
sta $72
lda #$42
jsr CHROUT
lda #$55
jsr CHROUT
lda #$5A
jsr CHROUT
lda #$5A
jsr CHROUT
rts
prfizz: lda #$01
sta $72
lda #$46
jsr CHROUT
lda #$49
jsr CHROUT
lda #$5A
jsr CHROUT
lda #$5A
jsr CHROUT
rts
prnum:  lda #$24
jsr CHROUT
txa
lsr
lsr
lsr
lsr
tay
lda hex,y
jsr CHROUT
txa
and #$0F
tay
lda hex,y
jsr CHROUT
txa
rts
quit: rts
brk
hex .byte #$30,#$31,#$32,#$33,#$34,#$35,#$36,#$37,#$38,#$39,#$61,#$62,#$63,#$64,#$65,#$66



virgo

#2
Nopea mun mallinen pätkä tuohon kisaan ;)
tosin hieman tulee huijaamis fiilis mutta
ainakin rutiini on nopea kun ottaa vive ohjelman välistä pois
ja on mun mallinen ohjelma kun en tuosta laskennasta niin perusta :P
(lue osaa)
eniten työtä teetti numeroiden tulostus mutta se olikin lopulta ihan easy kakku


*=$1000
LASKU

         SED        ;DESIMALI MODE ON
         LDA LUKU
         CLC
         ADC #1     ;LUKU+1
         STA LUKU
         CLD        ;DESIMAALI MODE OFF

         JSR NUM    ;NUMEROT TAI TEXT
         JSR TIMELOOP ;PIENI TAUKO
         LDA #13      ;TULOSTETAAN
         JSR $FFD2    ;RETURN

         LDA LUKU
         BNE LASKU    ;joko 100

         LDA #"O"
         JSR PRI
         LDA #"K"
         JSR PRI
         JMP LOOP     ;mennään odottamaan paluuta
                   ;editoriin
LUKU   .BYTE 0    ;luku 1-100
A3       .BYTE 3    ;jako 3
A5       .BYTE 5    ;jako 5

TIMELOOP            ;LOOP OHJELMAN
          LDX #1     ;HIDASTAMISEKSI
CM1       LDY #50
          LDA #$50
CM      CMP $D012 
          BNE CM
          DEY
          BNE CM
          DEX
          BNE CM1
          RTS
LOOP                ;ODOTELLAAN ctrl KEY

         LDA $DC01
         CMP #$FB
         BNE LOOP
         JMP $9000  ;paluu assempler ohjelmaan


PRI      = $FFD2    ;käyttiksen print rutiini

HEX
          .TEXT "0123456789ABCDEF" ;hex numero lista

NUM     JSR JAOT ;tarkistetaan osuvatko jaot
          CMP #1 ;a=1 joku jaoista osui
          BEQ NUMOUT     ;ei tulosteta numeroa
          LDA LUKU  ;numeroiden tulostus
          PHA       ;akku pinoon talteen
          LSR A
          LSR A
          LSR A
          LSR A    ;0000xxxx/16
          TAX
          LDA HEX,X
          JSR PRI
          PLA
          AND #$0F  ;xxxx0000
          TAX
          LDA HEX,X
          JSR PRI

NUMOUT   RTS

JAOT    LDA #0    ; akkuun 0 ettei sekoa paluussa
          DEC A3
          BNE JA2
          LDA #3
          STA A3
          JSR FIZZ

JA2      DEC A5
          BNE JAOUT
          LDA #5
          STA A5
          JSR BUZZ
JAOUT  RTS


FIZZ      LDA #"F" ;TULOSTETAAN FIZZ
          JSR PRI
          LDA #"I"
          JSR PRI
          LDA #"Z"
          JSR PRI
          LDA #"Z"
          JSR PRI
          LDA #1
          RTS

BUZZ    LDA #"B" ;TULOSTETAAN BUZZ
          JSR PRI
          LDA #"U"
          JSR PRI
          LDA #"Z"
          JSR PRI
          LDA #"Z"
          JSR PRI
          LDA #1
          RTS
Genetic-PET C64 BBS:
g-point.tunk.org port 1025

Genetic-point Amiga BBS:
g-point.tunk.org port 500

virgo

eikö muita osallistu :( ?!?!?
Genetic-PET C64 BBS:
g-point.tunk.org port 1025

Genetic-point Amiga BBS:
g-point.tunk.org port 500

rams

Ensi kuussa voisi ottaa jotain opettavaista ja käytännöllistä, kuten kertolasku tms. Tekisi itsellenikin ihan hyvää päästä näkemään erilaisia ratkaisuja.

virgo

Auts !
xD no saapa nähdä millaisen tehtävän saat aikaiseksi
ainoat jako ja kertolaskut mitä olen itse käyttänyt ovat Jukan kirjasta
jään mielenkiinnolla odottamaan seuraavaa haastetta :p
Genetic-PET C64 BBS:
g-point.tunk.org port 1025

Genetic-point Amiga BBS:
g-point.tunk.org port 500

rams

Joo! :D Enpä ole sen ensimmäistäkään kertolaskurutiinia tehnyt, joten eiköhän ole jo sen aika...