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.