Uutiset:

C=Foorumi suosittelee: Skrolli
http://www.skrolli.fi

Main Menu

miten poistamme ala ja ylä Reunukset

Aloittaja virgo, syyskuu 07, 2013, 20:58

« edellinen - seuraava »

virgo

koodaamisen ohessa jouduin muuttamaan kyseistä rutiinia melkorankasti ja ajattelin nyt näyttää
miten se tapahtuu ja miksi.
tämä jekku on helpoimmasta päästä eikä sen ajoitus ole kovin tarkka
ja siksi sen toteutus on melko helppo toisin kuin
vasemman ja oikean reunuksen poisto joka vie prosessoriaikaa tajuttomasti
enemmän kuin tämä

yksinkertaisesti efekti koostuu kahdesta käskystä jotka muuttavat
ruudun reunuksia $D011 rekisterissä reunuksia hoitaa bitti 8 %00001000
4,2,1 ovat vieritys rekiteriä joilla tehdään pysty vieritys 0-7 arvoilla
reunukset supistavat ruutua kahdella rivillä 24 => 22 miksi ?
vieritys näyttäisi melko tönköltä jos alempi ja ylenmpi rivi pomppisivat
vieritys rekisterin tahdissa mutta jos tämän piilottaa reunusten alla sitä ei huomaa
vaan tasainen virta kirjaimia valuu reunusten alta esiin.

mutta jos reunukset ovat pois päältä ja rasteri linja on $FA
Vic piiri valmistautuu viimeiseen Badline tehtäväänsä noin 9 kellosykliä vasemmasta laidasta lähtönsä jälkeen
jos silloin muutamme reunukset takaisin päälle...
reunuksien asetusta on muutettu juurioikealla hetkellä ennen tämä tapahtuman alkua
VIC piiri unohtaa tehdä tämän koska se olettaa että reunukset on jo laitettu päälle
8 rasteri linjaa aikaisemmin eikä normaalisti tapahtuvaa Badline päivitystä koskaan tapahdu
eikä se enään sen jälkee koskaa palaa tutkimaan onko asian tila oikeasti näin

tässä vielä malli koodi ja liitteenä itse ohjelma

;--------------------------------------
; miten poistetaan ylä ja ala borderit
;    coodattu 7.9.2013 by Virgo
; reunusten avauduttua ainoa grafiikka
;    mitä sinne voidaan laittaa
;       on Sprite grafiikkaa

;  koodi Turbo Assembler yhteensopiva
;--------------------------------------
*=$0801

.WORD endbasic
.WORD 2013 ;Line Num & year
         .BYTE $9E ;SYS
         .TEXT "2078 laitojen poisto "
.byte 0,0
endbasic .byte 0
;--------------------------------------
sei ;keskeytykset pois
jsr setup ;alustemma $3fff osoitteen
loop
;-----------------
lda #$1b  ; %00011011
sta $d011 ;ruudun kavennus pois päältä

lda #$fa
lo1 cmp $d012 ;odotetaan Rasteririviä $FA
bne lo1

lda #$13  ; %00010011 kytkemme kavennuksen oikealla
sta $d011 ; kohtaa ja vic unohtaa piirtää reunuksen
;-----------------
ldx #0   ; 0-255 looppi pitää huolen ettei
lo2 dex   ; ettei loop ehdi kiertää rutiinia uudelleen
bne lo2   ; samalla rasteririvillä
lda #$fb
cmp $dc01 ;jos painat CTRS nappia muutamme
bne loop  ;muistipaikan $3fff sisältöä
inc $3fff ;ja muutamme reunusten alle jäävää dataa
jmp loop
;--------------------------------------
; jostain syystä VIC täyttää reunusten alle jäävän
; tilan näyttömuistin viimeisellä tavulla mikä normaalisti on
; osoitteessa $3fff jos nollaamme tämän reunusten kohdalla näkyy
; ruudun taustaväri $d021
;--------------------------------------
setup lda #$00 ;puhdistetaan reunusten alla oleva tila
sta $3fff
rts
;--------------------------------------
Genetic-PET C64 BBS:
g-point.tunk.org port 1025

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

virgo

#1
Sama IRQ rasterikeskeytyksellä
älä välitä Syntax errorista koska se tulee textistä joka on SYS käskyn jälkeen


;--------------------------------------
; miten poistetaan ylä ja ala borderit
;    coodattu 7.9.2013 by Virgo
; reunusten avauduttua ainoa grafiikka
;    mitä sinne voidaan laittaa
;       on Sprite grafiikkaa
;       IRQ pohjainen versio

;  koodi Turbo Assembler yhteensopiva
;--------------------------------------
*=$0801

.WORD endbasic
.WORD 2013 ;Line Num & year
         .BYTE $9E ;SYS
         .TEXT "2078:laitojen poisto "
.byte 0,0
endbasic .byte 0
;--------------------------------------
sei ;keskeytykset pois
lda #0 ;alustamme $3fff osoitteen
sta $3fff

bit $dc0d
lda #<irq
sta $0314
lda #>irq
sta $0315
lda #1
sta $d01a
sta $d019
lda #$7f
sta $dc0d
lda #$1b
sta $d011
lda #$fa
sta $d012
cli ;sallitaan keskeytykset
rts ;paluu Basiciin
;syntax error tulee
;SYS käskyn jälkeen olevasta textistä
irq
;-----------------
lda #$13  ; %00010011
sta $d011 ;ruudun kavennus päälle

inc $d020
ldx #$0d  ;minimi tauko, mielellään isompi
loop dex
bne loop
dec $d020

lda #$1b  ; %00011011 palautetaan kavennus
sta $d011
;-----------------
lda #1
sta $d019
jmp $ea31 ;orginal irq
Genetic-PET C64 BBS:
g-point.tunk.org port 1025

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