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.
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 (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
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
eikö muita osallistu :( ?!?!?
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.
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
Joo! :D Enpä ole sen ensimmäistäkään kertolaskurutiinia tehnyt, joten eiköhän ole jo sen aika...