1

Dzień dobry ;)

Czy któś z szanownych kolegów mógłby się podzielić asemblerowymi procedurami realizujące zadanie typu PLOT oraz DRAW w 15 trybie graficznym?

Najchętniej takie w wersji dla "wybitnych indywidualności" wywoływane np. tak:

ldx #x
ldy #y
jsr plot

ldx #x
ldy #y
jsr draw

Nienajgorzej byłoby je również umieścić w Atariki.

Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

A mają być tablicowane czy nie... I jak wygląda pamięć ekranu? Blok 8 KB czy pierwsze 40 bajtów na 192 stronach pamięci :P?

3

Dely masz w paczce z MADS'em ...\examples\LIBRARIES\graphics

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

4

zielony/waxsoft/bc napisał/a:

I jak wygląda pamięć ekranu? Blok 8 KB czy pierwsze 40 bajtów na 192 stronach pamięci :P?

Wyraznie napisany 15 tryb graficzny, czyli wszyscy wiemy jak tam pamiec wyglada, a najprosciej wywolac systemowe procedury ;)
No chyba ze zalezy na czyms innym niz narysowanie punktu lub linii... :) ... np. szybkosci.

Bla bla bla bla, bla bla bla. Bla bla bla - bla - bla. Blabla bleee.

Pecus: I dlatego zadałem takie pytanie :) gdyż może chodzić właśnie o szybkość.

6

Jeśli nie sprawi Wam to problemów to wklejcie swoje przykłady (używając tagu code), pozwolę sobie wybrać :)

Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

7 Ostatnio edytowany przez Pecus (2006-01-28 18:20:18)

Prosze bardzo, ale nie tu, systemowy dostep do grafiki przy pomocy CIO jest dobrze opisany np TUTAJ.
Kliknij i zobacz :)

A jesli chodzi o Atariki, to chyba miesciloby sie to w hasle CIO. Sa tam wypisane rozkazy specyficzne dla urzadzenia D: , wystarczy dopisac te dla urzadzenia S: (a w systemie jest jeszcze to dziwne FILL dla ekranu :) niezailmplementowane w BASICu).

Bla bla bla bla, bla bla bla. Bla bla bla - bla - bla. Blabla bleee.

8 Ostatnio edytowany przez zielony/waxsoft/bc (2006-01-29 10:49:19)

Dobra... na początek PLOT (pisałem w notatniku - bez testów, ale myślę że będzie działać ;) )

d0 equ $d0
ekr equ $xxxx

; ldx #kolor
; ldy #y
; lda #x
; jsr plot

plot stx pl00

 ldx tel,y
 stx d0
 ldx teh,y
 stx d0+1

 tay
 and #%11
 asl @
 asl @
pl00 equ *+1
 adc #0
 tax
 tya
 lsr @
 lsr @
 tay
 lda (d0),y
 and mask,x
 ora tkol,x
 sta (d0),y

 rts

tkol equ *
 dta b(%00000000)
 dta b(%00000001)
 dta b(%00000010)
 dta b(%00000011)
 dta b(%00000000)
 dta b(%00000100)
 dta b(%00001000)
 dta b(%00001100)
 dta b(%00000000)
 dta b(%00010000)
 dta b(%00100000)
 dta b(%00110000)
 dta b(%00000000)
 dta b(%01000000)
 dta b(%10000000)
 dta b(%11000000)

mask equ *
 dta b(%11111100)
 dta b(%11111100)
 dta b(%11111100)
 dta b(%11111100)
 dta b(%11110011)
 dta b(%11110011)
 dta b(%11110011)
 dta b(%11110011)
 dta b(%11001111)
 dta b(%11001111)
 dta b(%11001111)
 dta b(%11001111)
 dta b(%00111111)
 dta b(%00111111)
 dta b(%00111111)
 dta b(%00111111)

init equ *
 lda <ekr
 sta d0
 lda >ekr
 sta d0+1
 ldy #0
in00 equ *
 clc
 lda d0 
 sta tel,y
 adc #40
 sta d0
 lda d0+1
 sta teh,y
 adc #0 
 sta d0+1
 iny
 cpy #192
 bne in00
 rts

tel equ *
 org *+192
teh equ *
 org *+192

na początku inicjalizacja! JSR INIT

procedurę PLOT'a można oczywiście przyśpieszyć kosztem 6x160 bajtów dodatkowych tablic.

wtedy wyglądałaby tak:

; lda #kolor+>adres_tablicy_koloru0
; ldx #x
; ldy #y
; jsr plot

plot sta pl00

 lda tel,y
 sta d0
 lda teh,y
 sta d0+1         ; (d0) adres ekranu poz. 0,y

 ldy xpoz,x       ;xpoz(a)=a/4
 lda (d0),y
 and mask,x       ;mask(0,4, )=%11111100; mask(1,5, )=%11110011; mask(2,6, )=%11001111; mask(3,7, )=%00111111
pl00 equ *+2
 ora tkol,x       ;4*160bajtów tablic kolorów
 sta (d0),y

 rts

EDIT: A jednak wkradł się błąd - odwołanie do nieistniejącej etykiety :)

9

Dzięki wielkie Zielony, procka prawie działa. Poniższy przykład powinien narysować linię, ale coś mu nie wychodzi:

d0    equ $d0
ekr   equ $5000
    
    ; ldx #kolor
    ; ldy #y
    ; lda #x
    ; jsr plot
    
     opt h+
    
     org $2000
     
     mwa #dl $230
     jsr init
     
     ldx #$e
     lda #50
rys0 ldy #40
     jsr plot
     dey
     bpl rys0      
          
     jmp *     
    
plot stx pl00
    
     ldx tel,y
     stx d0
     ldx teh,y
     stx d0+1
    
     tay
     and #%11
     asl @
     asl @
pl00 equ *+1
     adc #0
     tax
     tya
     lsr @
     lsr @
     tay
     lda (d0),y
     and mask,x
     ora tkol,x
     sta (d0),y
    
     rts
    
dl   dta b($70,$70,$70)
     dta b($4e),a(ekr)
:100 dta b($e)
     dta b($41),a(dl)
     
tkol equ *
     dta b(%00000000)
     dta b(%00000001)
     dta b(%00000010)
     dta b(%00000011)
     dta b(%00000000)
     dta b(%00000100)
     dta b(%00001000)
     dta b(%00001100)
     dta b(%00000000)
     dta b(%00010000)
     dta b(%00100000)
     dta b(%00110000)
     dta b(%00000000)
     dta b(%01000000)
     dta b(%10000000)
     dta b(%11000000)
    
mask equ *
     dta b(%11111100)
     dta b(%11111100)
     dta b(%11111100)
     dta b(%11111100)
     dta b(%11110011)
     dta b(%11110011)
     dta b(%11110011)
     dta b(%11110011)
     dta b(%11001111)
     dta b(%11001111)
     dta b(%11001111)
     dta b(%11001111)
     dta b(%00111111)
     dta b(%00111111)
     dta b(%00111111)
     dta b(%00111111)
    
init equ *
     lda <ekr
     sta d0
     lda >ekr
     sta d0+1
     ldy #0
in00 equ *
     clc
     lda d0 
     sta tel,y
     adc #40
     sta d0
     lda d0+1
     sta teh,y
     adc #0 
     sta d0+1
     iny
     cpy #192
     bne in00
     rts
    
tel  equ *
     org *+192
teh  equ *
     org *+192
     
     icl 'xasm.mac'
Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

zapomniałem dodać, że:

; ldx #kolor    ;wartosci jak w basicu od 0-3, 1-rejestr koloru:708, 2-709, 3-710, 0-712 (tło)

w związku z tym jeśli napiszesz tak:
 lda #12
 sta 708    ;wart: 1
 lda #8
 sta 709    ;wart: 2
 lda #4
 sta 710    ;wart: 3
 lda #0
 sta 712    ;wart: 0

 ldx #2
 lda #0
 ldy #0
 jsr plot

to zapalisz punkt o współrzędnych 0,0 i kolorze jaki reprezentowany jest przez rejestr 709...

Co do procki to spoko... niewychodzi dlatego, że procedura plot'a używa wszystkich trzech rejestrów A,X,Y... W związku z tym po wyjściu z porceduy zmnienia się ich wartości... Musisz zapamiętać wartość Y w jakiejś komórce (a najlepiej wszystkie), np:

ypos equ $d2

     lda #40
     sta ypos        ;tu przechowywujemy wartość

rys0 ldy ypos   ; y - przechowywana w ypos
     ldx #1        ; założyłem, że w rejestrze 708 jest wartość 14 ;)
     lda #50          ; x, a - wartości niezmienne więc wpisane bezpośrednio
     jsr plot
     dec ypos
     bpl rys0

PS. będę miał chwile to naskrobie jakieś delty i będzie DRAWTO... ;)

pozdrawiam

11

Ok, wszystko fajnie, ale cały czas mi coś się nie podoba. Np. poniższy kod powinien narysować skośną przerywaną linię, a co rysuje?

     lda #20
     ldx #1
     ldy #20
     jsr plot
     lda #22
     ldx #1
     ldy #22
     jsr plot
     lda #24
     ldx #1
     ldy #24
     jsr plot
     lda #26
     ldx #1
     ldy #26
     jsr plot                         
     jmp *

Specjalnie tak rozpisałem, żeby było widać co zacz.

Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

12

kiero - co kminisz na poland forevera ?? :)

Kontakt: pin@usdk.pl

Mea culpa! No tak.... pupa ze mnie i to rasowa! Patrz:

tkol equ *
 dta b(%00000000)
 dta b(%01000000)
 dta b(%10000000)
 dta b(%11000000)
 dta b(%00000000)
 dta b(%00010000)
 dta b(%00100000)
 dta b(%00110000)
 dta b(%00000000)
 dta b(%00000100)
 dta b(%00001000)
 dta b(%00001100)
 dta b(%00000000)
 dta b(%00000001)
 dta b(%00000010)
 dta b(%00000011)

mask equ *
 dta b(%00111111)
 dta b(%00111111)
 dta b(%00111111)
 dta b(%00111111)
 dta b(%11001111)
 dta b(%11001111)
 dta b(%11001111)
 dta b(%11001111)
 dta b(%11110011)
 dta b(%11110011)
 dta b(%11110011)
 dta b(%11110011)
 dta b(%11111100)
 dta b(%11111100)
 dta b(%11111100)
 dta b(%11111100)

Błąd leżał w tablicach. Po prostu w wersji pierwszej je odwróciłem, sam nie wiem czemu ;)

14

Pipa ze mnie, zapomniałem WIELCE PODZIĘKOWAĆ!!!

Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.