OldComp.cz http://oldcomp.cz/ |
|
Místo kruhu, zmije... http://oldcomp.cz/viewtopic.php?f=50&t=4120 |
Stránka 1 z 1 |
Autor: | mmartinka [ 24.05.2016, 14:47 ] |
Předmět příspěvku: | Místo kruhu, zmije... |
Jako obvykle, přijde na mě jednou za čas chuť posunout mé znalosti s i8080 na PMD o krok dále. V jiném vlakně jsem se pokoušel o výpočet souřadnice x,y http://oldcomp.cz/viewtopic.php?f=50&t=2715 a pro zkoušku jsem chtěl nakreslit kruh. Přiznavám že jsem použil kod Z80 z HP kalkulatoru, jenže kruh ne a ne...viz obr. Výpočet souřadnic je dobrý, protože jsem si to ověřil i pomoci rutiny z ROM. Výsledek stejný... Zajímá mě kde jsem udělal chybu, pochybuji že původní rutina kreslila kruh takhle Původní rutina http://www.ticalc.org/pub/85/asm/source/routines/circle.asm Příloha: Kód: .ENGINE pmd
.ORG 0 xold: .equ 0xc170h ;x souradnice yold: .equ 0xc172h ;y souradnoce mod: .equ 0xc1fah ;mod bodu attr: .equ 0xc03ah ;atribut ;------------------------------ ; Bresenham's circle algorithm ; ; * parameters : ; - D : x coordinate of center ; - E : y coordinate of center ; - B : radius - allow djnz's ; ;------------------------------ ; test procedure ;------------------------------ Start: lxi D,0x8080h ;coordinates of center mvi B,0x80h ;radius LoopE: call Circle dcr b jnz LoopE ret ;------------------------------ ; beginning of circle ;------------------------------ Circle: push B ;can be removed push D ;can be removed mvi H,0 mov L,B ; mov a,b ;rlc B - puvodni ; rlc ; mov b,a mvi A,0x06 sub B push PSW Loop: mov A,D ;Point #1 add H mov B,A mov A,E add L mov C,A call plot_vypocet mov A,E ;Point #2 sub L mov C,A call plot_vypocet mov A,D ;Point #4 sub H mov B,A call plot_vypocet mov A,E ;Point #3 add L mov C,A call plot_vypocet mov A,D ;Point #5 add L mov B,A mov A,E add H mov C,A call plot_vypocet mov A,E ;Point #6 sub H mov C,A call plot_vypocet mov A,D ;Point #8 sub L mov B,A call plot_vypocet mov A,E ;Point #7 add H mov C,A call plot_vypocet mov A,H ;is the circle finished ? sub L jnc EndCircle ;yes pop PSW mov B,A rlc jnc Pos ; mov A,H ;puvodni ; bit 7,B ;puvodni ; jz Pos ;původni Neg: ;case d<0 mov A,H ral ral add B adi 0x06 push PSW jmp EndC Pos: ;case d>=0 mov A,H sub L ral ral add B adi 0x0a push PSW dcr L EndC: ;one loop has been performed inr H jmp Loop EndCircle: pop PSW ;MUST NOT BE REMOVED pop D ;can be removed pop B ;can be removed ret plot_vypocet: ;vypocet s pouzitim ROM rutiny push h push d push b mvi a,0xb0h sta mod mov a,b ;x do sta xold ;xold mov a,c ;y do sta yold ;yold call 0x8c7dh pop b pop d pop h ret plot_vypocet_old: ;vypocet pomoci meho verku push h push d push b lxi h,0xc000h ;poèáteèní adresa videoram mov e,b ; začátek výpočtu souřadnice Y mov d,e ;5T ;--- reg E mvi a,0x03h ;7T ana e ;4T rrc ;4T rrc ;4T mov e,a ;5T ;--- celkem 25T ;--- reg D mov a,d ;5T rar ;4T rar ;4T ani 0x3Fh ;7T mov d,a ;5T ;--- celkem 25T dad d ; sečíst adresy ; konec výpočtu souřadnice Y ; zacatek vypoctu souradnice X mov a,c mvi c,0x06h cmp c jc minus_ne minus: sbb c inr l cmp c jnc minus minus_ne: mov c,a mvi a,0x00 cmp c jp rotace_ne mvi a,0x01 rotace_bod: rlc dcr c jnz rotace_bod jmp plot rotace_ne: mvi a,0x01h ; konec vypoctu souradnice X plot: ora m mov m,a pop b pop d pop h ret ; konec plot |
Autor: | Lanex [ 24.05.2016, 16:09 ] |
Předmět příspěvku: | Re: Místo kruhu, zmije... |
...to je boží.... |
Autor: | peroxid [ 25.05.2016, 11:04 ] |
Předmět příspěvku: | Re: Místo kruhu, zmije... |
no. ono to vyzera ze funguje OK pre male priemery (stred). pri malom displeji/rozliseni kalkulatora to bolo zrejme v poriadku, takze mozno nejake pretecenie hodnoty? |
Autor: | mmartinka [ 30.05.2016, 12:58 ] |
Předmět příspěvku: | Re: Místo kruhu, zmije... |
Příloha: Takže zas tak složité to nebylo, ponejprve jsem vyhodil bitový posun RAL ze sekce Neg: a Pos: Nespíš to bylo použito s ohledem na kalkulátor HP a pak upravil ve stejných sekcích ADI na hodnotu 0x04h jak to tak chápu je to nějaká korekce... s ADI 0x04h Příloha: kruh_kor.png [ 9.2 KiB | Zobrazeno 9909 krát ] bez ADI Příloha: kruh_nekor.png [ 9.15 KiB | Zobrazeno 9909 krát ] |
Stránka 1 z 1 | Všechny časy jsou v UTC + 1 hodina [ Letní čas ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |