Uutiset:

Genetic PET BBS Powered by Commodore 64
g-pet.tunk.org port:1025

Main Menu

malli ruutiineita

Aloittaja virgo, tammikuu 06, 2013, 20:40

« edellinen - seuraava »

virgo

innostuin sitten ilta myöhään veivaamaan tälläiset Demojen perus kauraa olevan color scroll
mallin vääntämään eli kuusi ylintä riviä saavat väri vierityksen
mukana malli rutiini ja sorsa

koska merkkiväri muistia ei pysty mitenkään vierittämään siirtyvät palikat
yhden merkin kerran rasterikeskeytyksessä näin saamme illuusion vierivästä väri paletista xD


;-------------------------------
; color scroll
;-------------------------------       
.word $0801     ;oma assemplerini ei kirjoita
        ;ohjelma fileen alkuun lataus osoitetta joten
;kehvelivieköön kirjoitan se siis itse
*=$0801 ;kerromme  vielä assemplerille että ohjelma alkaa tästä

;BASIC LINE START
         .BYTE $0B,$08,$90,$06,$9E,$32
         .BYTE $30,$34,$39,$00,$A0,$00
;--------------------------
set_irq_hero
lda #0
sta $d021
sta $d020

sei ;Keskeytykset seis
bit $dc0d ;nollaamme Irq A ajastimen varmuuden vuoksi
lda #<irq_hero ;ala tavu XX!!
sta $0314
lda #>irq_hero ;ylätävu !!XX
sta $0315
lda #$7f ;keskeytykset pois päältä
sta $dc0d
lda #1 ;asetamme rasteri keskeytykset päälle
sta $d019
sta $d01a ;varsinainen rekisteri
lda #$fb ;millä rasterilla keskeytys tapahtuu
sta $d012
lda $d011 ;varmistamme vielä että keskeytys tapahtuu
and #$7f ;näytön näkyvällä osalla
sta $d011
cli ;keskeytykset päälle
rts ;valmista paluu Bacikkiin

irq_hero lda #1
sta $d019 ;nollataan keskeytys ettei jää looppiin
inc $d020 ;muutellaan borderi värejä +1
inc $d020
jsr color
dec $d020 ;palautetaan värit -1
dec $d020
bit $dc0d ;extra safe nollataan vielä A&B keskeytykset
jmp $ea31 ;normaali basic keskeytys rutiini
;-----------------------------
col =$d800                  ;leibelille näytön värimuistin alku osoite

color ldx #0                  ;x=0
colo lda col+1,x             ;lukeva osa yhden tavin edelle
sta col,x               ;tallennetaan
lda col+40+1,x          ;sama seuraavalle riville (+40)
sta col+40,x
lda col+80+1,x          ;ja niin edes päin
sta col+80,x
lda col+120+1,x
sta col+120,x
lda col+160+1,x
sta col+160,x
lda col+200+1,x
sta col+200,x
inx                     ;lisätään X rekisteriä yhdellä X=X+1
cpx #40                 ;joko se on 40 ?
bne colo         ;ei vielä uusi lenkki

a_again         ldx miss                ;missä mennään väri listassa ?
cpx #20                 ;ollaankko listasta jo ulkona ?
beq back_to_start       ;nollataan "miss" jos X = 20
lda list_color,x        ;otetaan väri X rekisterin määräämästä paikasta
sta col+39              ;asetamme sen näytön oikeaan laitaan
sta col+39+40           ;ja seuraavillekin riveille sama
sta col+39+80
sta col+39+120
sta col+39+160
sta col+39+200
inc miss                ;lisätään Miss iä yhdellä
rts ;ja pois
;-----------------------------
miss .byte 0
list_color                              ;käytettävät värit täällä
.byte 2,2,4,4,7,7,1,1,1,1,7,7,4,4,2,2,0,0,0,0
;-----------------------------
back_to_start
lda #0                  ;asetamme "miss" takaisin nollaksi
sta miss
jmp a_again             ;ja palaamme rutiiniimme
;-----------------------------

Genetic-PET C64 BBS:
g-point.tunk.org port 1025

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

virgo

tässä vielä hieman lisää koodia edelliseen
nyt lisäsin siihen Scroll textin ;)
toivottavasti toimii nykimättä en viitsinyt testata aidolla
näitä emuista ei aina tiedä onko nykiminen ohjelmassa vai Emun vika xD

.word $0801 ;Turbo ei tarvitse
*=$0801

;BASIC LINE START
         .BYTE $0B,$08,$90,$06,$9E,$32
         .BYTE $30,$34,$39,$00,$A0,$00
;-------------------------------------
set_irq_hero
lda #0
sta $d021
sta $d020
sei
bit $dc0d
lda #<irq_hero
sta $0314
lda #>irq_hero
sta $0315
lda #$7f
sta $dc0d
lda #1
sta $d019
sta $d01a
lda #$30
sta $d012
lda $d011
and #$7f
sta $d011
cli
rts

irq_hero         lda #1
sta $d019
inc $d020
inc $d020
jsr scroll
lda #$3a
cm cmp $d012
bne cm
lda #8
sta $d016
jsr roll
jsr color
dec $d020
dec $d020
bit $dc0d
jmp $ea31

;-----------------------------
screen =$0400
col =$d800

color         ldx #0
colo         lda col+1,x
sta col,x
inx
cpx #40
bne colo

a_again ldx miss
cpx #20
beq back_to_start
lda list_color,x
sta col+39
inc miss
rts
;-----------------------------------------
sc .byte 7
;-----------------------------------------

scroll
lda sc
and #7
sta $d016
dec sc
rts
;-----------------------------------------
roll lda sc
beq rot
rts
rot
lda #7
sta sc
ldx #0
mer lda screen+1,x
sta screen,x
inx
cpx #40
bne mer

a_again2                ldx miss+1
                        lda texti,x
                        beq nollaa
sec ;turbo ass ei tarvitse tätä
sbc #$40 ;eikä tätä (kai xD)
                        sta $0400+39
                        inc miss+1
rts
back_to_start
lda #0
sta miss
jmp a_again

nollaa                  lda #0
                        sta miss+1
                        jmp a_again2
;-----------------------------
miss .byte 0,0
list_color
.byte 2,2,4,4,7,7,1,1,1,1,7,7,4,4,2,2,0,0,0,0
;-----------------------------
texti           .aasc "SCROLL",$60,$60,$60,$60,$60,0
;               .text "scroll       " ;Turbo A ver
; .byte 0

Genetic-PET C64 BBS:
g-point.tunk.org port 1025

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