Temat: Graphics 12

Czy moglby mi ktos napisac programik, ktory wyswietla GR.12 (o wysokosci 192 lub 200 pikseli) i w ktorym mozna by jakos ustawiac kolory w palecie? Oto programik, ktorym posluguje sie obecnie do wczytania i wyswietlenia tego trybu. Dziala, ale palete ma ustawiona na sztywno:

opt %0100101

* Stale
eol    equ $9b
chn1   equ $10
chn0   equ $00
getlin equ $05
getbts equ $07

plik   equ $9800
obraz  equ $bc00 (zawsze o $40 dalej)
zestaw equ $6000

* Zmienne - strona zero
pomoc  equ $80     (2)
word   equ $82     (2)

vct0   equ $84     (2)
vct1   equ $86     (2)
vct2   equ $88     (2)
vct3   equ $8a     (2)
vct4   equ $8c     (2)
vct5   equ $8e     (2)
vct6   equ $90     (2)
vct7   equ $92     (2)

licz_1 equ $94
licz_2 equ $95
dlicnt equ $96
endscr equ $97

* Procedury systemu
edopn  equ $ef94
clrscr equ $f420
print  equ $c642

* Rejestry systemu
dmacts equ $022f
dmactl equ $d400
dliv   equ $0200
nmien  equ $d40e
dlptrs equ $0230
chbase equ $d409
vsync  equ $d40a
kbcode equ $02fc

* Biblioteka we/wy
_iocb  equ $340
_ciov  equ $E456
io_com equ _iocb+2
io_adr equ _iocb+4 (2)
io_len equ _iocb+8 (2)
io_mod equ _iocb+10
io_aux equ _iocb+11

       org $9000

start  equ *
       jsr clrscr
main   jsr odstep
       ldx <menu
       ldy >menu
       jsr print
       jsr wprowa
       bmi main

       lda nazwa
       cmp #eol
       bne *+5
       jmp edopn   wyjscie z programu

       ldx #$00
szukaj lda nazwa,x
       cmp #'?'
       beq direct
       cmp #'*'
       beq direct
       inx
       cmp #eol
       bne szukaj
       beq file

direct lda <nazwa
       sta pomoc
       lda >nazwa
       sta pomoc+1
       lda #$06    katalog
       jsr _open
       bpl *+8
       jsr error
       jmp main

       jsr odstep
etk_03 ldx #chn1
       jsr wprowa+2
       bmi dirend
       ldx <nazwa
       ldy >nazwa
       jsr print
       jmp etk_03
dirend jsr odstep
       jsr _close
       jmp main

file   jsr wczyta
       bcs main

       lda dmacts
       pha
       lda #$00
       sta dmacts
       sta dmactl

       lda plik+1
       jsr wybier

       lda #$00
       sta dlicnt

       pla
       sta dmacts

       lda dliv
       pha
       lda dliv+1
       pha

       lda <dli
       sta dliv
       lda >dli
       sta dliv+1

       lda #$c0
       sta nmien

       lda #$ff
       sta kbcode
       cmp kbcode
       beq *-3
       lda #$ff
       sta kbcode

       lda #$40
       sta nmien

       pla
       sta dliv+1
       pla
       sta dliv
       jsr edopn
       jmp main

* PROCEDURY *
wybier cmp #$0c
       bne tryb24
       lda #$be
       sta endscr
       lda #$03
       sta ilezes
       lda <ndl12
       sta dlptrs
       lda >ndl12
       sta dlptrs+1
       lda #$04
       jmp znaki
tryb24 lda #$c0
       sta endscr
       lda #$07
       sta ilezes
       lda <ndl24
       sta dlptrs
       lda >ndl24
       sta dlptrs+1
       lda #$08
*
znaki  tay
       lda <zestaw
       sta word
       lda >zestaw
       sta word+1

       lda <plik+2
       sta pomoc
       sta vct0
       lda >plik+2
       sta pomoc+1
       sta vct0+1

       ldx #$00
etk_02 lda pomoc
       clc
       adc #$28
       sta pomoc
       sta vct1,x
       lda pomoc+1
       adc #$00
       sta pomoc+1
       sta vct1+1,x
       inx
       inx
       cpx #$0e
       bcc etk_02

       tya
       sta licz_2

robzes lda #$03
       sta licz_1

jedenz ldy #$00
       ldx #$00
linia  lda (vct0),y
       sta (word,x)
       jsr zwieks
       lda (vct1),y
       sta (word,x)
       jsr zwieks
       lda (vct2),y
       sta (word,x)
       jsr zwieks
       lda (vct3),y
       sta (word,x)
       jsr zwieks
       lda (vct4),y
       sta (word,x)
       jsr zwieks
       lda (vct5),y
       sta (word,x)
       jsr zwieks
       lda (vct6),y
       sta (word,x)
       jsr zwieks
       lda (vct7),y
       sta (word,x)
       jsr zwieks
       iny
       cpy #$28
       bcc linia

       ldx #$00
nastli lda vct0,x
       clc
       adc #$40
       sta vct0,x
       lda vct0+1,x
       adc #$01
       sta vct0+1,x
       inx
       inx
       cpx #$10
       bcc nastli

       dec licz_1
       bne jedenz

       lda #$00
       sta word
       inc word+1

       dec licz_2
       bne robzes

* ekran tekstowy
       lda <obraz
       sta pomoc
       lda >obraz
       sta pomoc+1

       lda vct0
       sta word
       lda vct0+1
       sta word+1

       ldx #$00
       ldy #$40
       bne trzyli

tekst  ldy #$00
trzyli txa
       pha
       ldx #$00
       lda (word,x)
       lsr @
       ror @
       sta (word,x)
       pla
       pha
       ora (word,x)
       sta (pomoc),y
       jsr zwieks
       pla
       tax
       inx
       cpx #$78
       bcc *+4
       ldx #$00
       iny
       bne trzyli

       inc pomoc+1
       lda pomoc+1
       cmp endscr
       bcc tekst

       lda endscr
       cmp #$be
       bne omin
       dec endscr
       lda pomoc
       sec
       sbc #$e0
       sta pomoc
       bcs *+4
       dec pomoc+1
       ldy #$e0
       bne trzyli
* kolory
omin   ldy #$04
etk_01 lda tabkol,y
       sta $02c4,y
       dey
       bpl etk_01
       rts
tabkol dta b($14),b($12),b($f0),b($18),b($00)
*
zwieks inc word
       bne *+4
       inc word+1
       rts
*
wczyta jsr _close
       bmi error

       lda <nazwa
       sta pomoc
       lda >nazwa
       sta pomoc+1
       lda #$04    odczyt
       jsr _open
       bmi error

       lda #getbts
       ldx #$98
       ldy #$30
       jsr rd_wrt
       bmi error

       jsr _close
       bpl io_ok
*
error  tya
       pha
       jsr _close
       pla
       cmp #$88
       beq io_ok
       ldx <errmsg
       ldy >errmsg
       jsr print
       jsr odstep
       sec
       rts
io_ok  clc
       rts
*
odstep ldx <null
       ldy >null
       jmp print
*
dli    pha
       txa
       pha
       lda dlicnt
ilezes equ *+1
       and #$07
       tax
       lda chars,x
       sta vsync
       sta chbase
       inc dlicnt
       pla
       tax
       pla
       rti

chars  dta h(zestaw+$0000),h(zestaw+$0400)
       dta h(zestaw+$0800),h(zestaw+$0c00)
       dta h(zestaw+$1000),h(zestaw+$1400)
       dta h(zestaw+$1800),h(zestaw+$1c00)
*
wprowa ldx #chn0
       lda #getlin
       sta io_com,x
       lda <nazwa
       sta io_adr,x
       lda >nazwa
       sta io_adr+1,x
       lda #$20
       sta io_len,x
       lda #$00
       sta io_len+1,x
       jmp _ciov
*
ndl24  dta a($7070),b($f0),b($44),a($bc40)
       dta a($8404),a($0404),a($0484),b($04)
       dta a($0484),a($8404),a($0404),a($0484)
       dta a($8404),a($0404),a($0484),a($0404)
       dta b($41),a(ndl24)
*
ndl12  dta a($7070),b($f0),b($45),a($bc40)
       dta a($8505),a($0505),a($0585),b($05)
       dta a($0585),a($0505)
       dta b($41),a(ndl12)
*
null   dta b(eol)
menu   dta c'Podaj nazwe pliku, maske lub Return:',b(eol)
errmsg dta c'ýWystapil blad we/wy!',b(eol)
*
nazwa  org *+34

* Biblioteka we/wy - tylko kanal #1

* w pomoc adres nazwy
* w A tryb otwarcia (4,6,8,12, itp.)
_open  ldx #chn1
       sta io_mod,x
       lda #$03
       sta io_com,x
       lda pomoc
       sta io_adr,x
       lda pomoc+1
       sta io_adr+1,x
       lda #$00
       sta io_aux,x
       jmp _ciov
*
_close ldx #chn1
       lda #12
       sta io_com,X
       jmp _ciov
*
* w A typ operacji
* w X MSB adresu bufora (LSB=0)
* w Y MSB dlugosci bufora (LSB=0)
rd_wrt pha
       txa
       pha
       ldx #chn1
       tya
       sta io_len+1,X
       lda #$00
       sta io_len,X
       sta io_adr,X
       pla
       sta io_adr+1,X
       pla
       sta io_com,X
       jmp _ciov

       org $2e0
       dta a(start)

       end

A moze sa inne rozwiazania? Celem jest wyswietlenie obrazka w GR.12. RAMbrandt tego nie robi i inne znane mi programy na Atari tez.

Kaz/Rohar
Prowadzę stronę dla obłąkanych: http://atari.online.pl/

2

Odp: Graphics 12

GR.12 to tryb znakowy który używa G2F jeśli wybierzesz PIXEL = 2x1, wszystkie obrazki G2F (które nie są HiRes) są właśnie w Graphics 12

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

Odp: Graphics 12

Swietnie. A w takim razie jak uzyc piatego koloru? Mam obrazek w czterech i chcialbym narysowac cos piatym. Ustawilem odpowiedni kolor (COLOR3), pamietam o ograniczeniu inwersji... i co dalej, bo w powiekszeniu nie moge rysowac COLOR-em 3?

EDIT:
O, widze, ze odpowiedziales mi na atari.online.pl. Sorki za smiecenie takze tutaj.

Ostatnio edytowany przez Krzysztof (Kaz) Ziembik (2008-03-22 00:10:00)

Kaz/Rohar
Prowadzę stronę dla obłąkanych: http://atari.online.pl/

4

Odp: Graphics 12

COLOR3 powstaje kiedy COLOR2 dasz w inversie, stąd wynikają ograniczenia, w 1 znaku (4x8 pixli) nie może współistnieć COLOR2 i COLOR3, w 1 znaku wszystkie pixle COLOR2 po inversie zmienią się w COLOR3 itd.

na C64 masz w 1 znaku max 4 kolory, z czego jeden z nich możesz zmienić na inny z palety kolorów C64 (bo masz mape kolorów), metoda podobna w działaniu do dopałki GTIA Psychola

Ostatnio edytowany przez tebe (2008-03-22 00:30:59)

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

Odp: Graphics 12

Ja korzystam z wlasnego oprogramowania na STE, ktore mi sprawdza miedzy innymi, czy obrazek nie ma bledow w inwersji (tak jak napisales, COLOR3 nie wystepuje z COLOR2 w obszarze jednego znaku) i zaznacza ewentualne bledy kolorem z palety ST, zeby potem mozna to bylo latwo wczytac do programu graficznego na STE (lub PC) i poprawic.

Program moj generuje wlasnie taka "mape inwersji" zapisywana razem z danymi grafiki - zrobilem taki format P15 i P7 (odpowiedniki Gr.12 i Gr.13). Czy dalbys rade wrzucic odczyt takiego formatu do G2F? (tzn. dalbys, ale czy by Ci sie chcialo?)

Budowa pliku P15 i P7 (cytuje za wlasna instrukcja):
" Program tworzy dwa rodzaje plików trybu 4+:  P15 i P7. Ten pierwszy składa się kolejno z dwóch bajtów informacyjnych (zawierają wartości 40 i 24,  oznaczające ilość znaków i wierszy), z obrazu w trybie Graphics 15 o długości 7680 bajtów, tablicy negatywów o długości 960 bajtów oraz ewentualnie danych o kolorach (rejestry XL/XE:  712, 708, 709, 710, 711) o długości 5 bajtów. Całkowita  długość pliku P15 wynosi 8642 lub 8647 bajtów. Plik typu P7 ma następującą budowę:  najpierw dwa bajty (wartości 40 i 12),  obraz w trybie Graphics 7 o długości 3840  bajtów,  tablica negatywów długości 480 bajtów, i ewentualnie dane kolorów, takie jak w P15  czyli  następne 5 bajtów.  Razem długość danych P7  to  4322  lub
4327 bajtów.

Wyjaśnienia wymaga tablica negatywów.  Program tworzy ją  śledząc kolejne znaki na ekranie.  Jeśli znak jest normalny (nie zawiera koloru piątego) to program do tablicy wpisuje 0,  natomiast po  napotkaniu znaku  w negatywie (a więc z kolorem piątym) wpisuje  1.  Ponieważ na ekranie jest 960 znaków (P15) lub 480 (P7), to tablica ma tyleż bajtów długości."

Na maila podeslalem Ci tez przykladowy plik do testowania, gdybys zechcial to dolaczyc do rozpoznawania w G2F. Ja niestety nie jestem w stanie zmodyfikowac wlasnych programow na bardziej kompatybilne z G2F, bo nie moge odnalezc zrodel.

Ostatnio edytowany przez Krzysztof (Kaz) Ziembik (2008-03-22 00:48:01)

Kaz/Rohar
Prowadzę stronę dla obłąkanych: http://atari.online.pl/