OldComp.cz http://oldcomp.cz/ |
|
Mandelbrod set PMD http://oldcomp.cz/viewtopic.php?f=47&t=4206 |
Stránka 1 z 1 |
Autor: | mmartinka [ 20.06.2016, 14:08 ] |
Předmět příspěvku: | Mandelbrod set PMD |
Pouze jsem chtěl vyzkoušet tento prográmek http://www.retroprogramming.com/2014/03/plotting-mandelbrot-set-on-zx-spectrum.html na PMD a to se zadařilo...tak přikládám kód (amaterský) pro někoho kdo by se v tom chtěl ještě pokoukat či dále zkoušet binarka a kód pro pmd: JUMP 0000 Příloha: iterations 15 Příloha: iterations 40 Příloha: a kód k prohlížení Kód: .org 0
.engine pmd lxi d,0xFFBF XLOOP: push d lxi h,0xFF4Ch ;-180 ; x-coordinate mov e,d call SCALE sta ZALA mov a,c ;(XPOS),bc sta XPOS mov a,b sta XPOS+1 ;--- lda ZALA pop d YLOOP: push d lxi h,0xFFA0 ;-96 ; y-coordinate call SCALE sta ZALA mov a,c ;(YPOS),bc sta YPOS mov a,b sta YPOS+1 ;--- lda ZALA lxi h,0 shld IMAG shld REAL mvi b,40 ; iterations ITER: push b lhld IMAG ;bc,(IMAG) mov c,l mov b,h lhld REAL ;hl,(REAL) ora a sta ZALA ;sbc hl,bc mov a,l sub c mov l,a mov a,h sbb b mov h,a lda ZALA mov d,h mov e,l dad b dad b call FIXMUL xchg lhld XPOS xchg ;de,(XPOS) dad d sta ZALA xchg lhld REAL xchg ;de,(REAL) mov a,l sta REAL mov a,h sta REAL+1 lhld IMAG ;hl,(IMAG) lda ZALA call FIXMUL ral dad h ;adc hl,hl xchg lhld YPOS xchg ;de,(YPOS) dad d shld IMAG ;(IMAG),hl call ABSVAL xchg lhld REAL ;hl,(REAL) call ABSVAL dad d mov a,h cpi 0x2E ; 46 ≅ 2 × √ 2 << 4 pop b jnc ESCAPE dcr b ;djnz ITER jnz ITER pop d call PLOT db 254 ; trick to skip next instruction ESCAPE: pop d dcr e jnz YLOOP dcr d jnz XLOOP ret FIXMUL: ; hl = hl × de >> 24 call MULT16BY16 mov a,b mvi b,4 FMSHIFT: ral sta ZALA ;adc hl,hl mov a,l add l mov l,a mov a,h adc h mov h,a lda ZALA dcr b ;djnz FMSHIFT jnz FMSHIFT ret SCALE: ; bc = (hl + e) × zoom mvi d,0 dad d lxi d,0x30 ; zoom MULT16BY16: ; hl:bc (signed 32 bit) = hl × de xra a call ABSVAL xchg call ABSVAL push PSW mov c,h mov a,l call MULT8BY16 mov b,a mov a,c mov c,h push b mov c,l call MULT8BY16 pop d dad d adc b mov b,l mov l,h mov h,a pop PSW rar rnc xchg xra a mov h,a mov l,a ;sbc hl,bc mov a,l sub c mov l,a mov a,h sbb b mov h,a mov b,h mov c,l mvi h,0 mvi l,0 ;sbc hl,de mov a,l sub e mov l,a mov a,h sbb d mov h,a ret MULT8BY16: ; returns a:hl (24 bit) = a × de lxi h,0 mvi b,8 M816LOOP: dad h ral jnc M816SKIP dad d aci 0 M816SKIP: dcr b ;djnz M816LOOP jnz M816LOOP ret ABSVAL: ; returns hl = |hl| and increments sta ZALA mov a,h ;bit 7,h rlc ; a if the sign bit changed lda ZALA rnc ;rz mov b,h mov c,l lxi h,0 ora a sta ZALA ;sbc hl,bc mov a,l sub c mov l,a mov a,h sbb b mov h,a lda ZALA inr a ret PLOT: ; plot d = x-axis, e = y-axis push h push b push d mov a,d sta x lxi h,0xc000h ;poèáteèní adresa videoram mov b,e 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 lda x mov d,a ; zacatek vypoctu souradnice X mov c,d 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 plotbit rotace_ne: mvi a,0x01h ; konec vypoctu souradnice X plotbit: ora m mov m,a pop d pop b pop h ret ; konec plot XPOS: .equ 0x0FA0h YPOS: .equ 0x0FA2h REAL: .equ 0x0FA4h IMAG: .equ 0x0FA6h ZALA: .equ 0x0FA8h ;zaloha registru A x: .equ 0x0FAA ;zaloha reg d pro x souradnici |
Autor: | Busy [ 21.06.2016, 10:12 ] |
Předmět příspěvku: | Re: Mandelbrod set PMD |
Skvele Ako dlho to kreslilo ? |
Autor: | mmartinka [ 21.06.2016, 10:49 ] |
Předmět příspěvku: | Re: Mandelbrod set PMD |
Tu iterations 15 nevím, ale při 40 jsem se podival a cca 23min. Používám emulator IDE80. PS: Jen jsem nepřišel na to jak ušetřit nějaký ten takt u SBC HL,BC, na z80 15T a i8080 28T a ještě musím zálohovat reg A |
Autor: | Busy [ 21.06.2016, 12:04 ] |
Předmět příspěvku: | Re: Mandelbrod set PMD |
mmartinka píše: Jen jsem nepřišel na to jak ušetřit nějaký ten takt u SBC HL,BC, na z80 15T a i8080 28T a ještě musím zálohovat reg A Napriklad tak, ze vynechas ora a pred implementaciou SBC HL,BC pouzivajucou sub c (usetris 4 takty) Dalsich 5 taktov usetris ak A budes zalohovat nie ukladanim a citanim ZALA ale klasicky pomocou push/pop. Tiez som si vsimol, ze v niektorych pripadoch mas volne 8bit registre, tak A odzalohuj do takehoto registra - vtedy usetris dokonca az 16 taktov.
|
Autor: | Antony/DTA [ 21.06.2016, 12:36 ] |
Předmět příspěvku: | Re: Mandelbrod set PMD |
V podprograme "MULT16BY16:" by podľa mňa mala byť namiesto "sub e" použitá inštrukcia "sbb e". mmartinka píše: PS: Jen jsem nepřišel na to jak ušetřit nějaký ten takt u SBC HL,BC, na z80 15T a i8080 28T a ještě musím zálohovat reg A V pprg "MULT16BY16:" aj v "ABSVAL:" sa "sbc hl,bc" a "sbc hl,de" používa len na zmenu znamienka. Ja by som skúsil pre 16bit (ABSVAL): mov a,l cma mov l,a mov a,h cma mov h,a inx h a pre 32bit (MULT16BY16): mov a,c cma mov c,a mov a,b cma mov b,a mov a,l cma mov l,a mov a,h cma mov h,a inr c rnz ;rnc inr b rnz ;rnc inx h ret Pozabudol som na to, že "inr" asi nenastavuje Carry, tak som opravil "rnc" na "rnz". |
Autor: | mmartinka [ 21.06.2016, 16:23 ] |
Předmět příspěvku: | Re: Mandelbrod set PMD |
Tohle přece nemůže fungovat, on tam potřebuje obrácenou hodnotu z 255 ne bitovou negaci? Antony/DTA píše: V podprograme "MULT16BY16:" by podľa mňa mala byť namiesto "sub e" použitá inštrukcia "sbb e".
mmartinka píše: PS: Jen jsem nepřišel na to jak ušetřit nějaký ten takt u SBC HL,BC, na z80 15T a i8080 28T a ještě musím zálohovat reg A V pprg "MULT16BY16:" aj v "ABSVAL:" sa "sbc hl,bc" a "sbc hl,de" používa len na zmenu znamienka. Ja by som skúsil pre 16bit (ABSVAL): mov a,l cma mov l,a mov a,h cma mov h,a inx h a pre 32bit (MULT16BY16): mov a,c cma mov c,a mov a,b cma mov b,a mov a,l cma mov l,a mov a,h cma mov h,a inr c rnz ;rnc inr b rnz ;rnc inx h ret Pozabudol som na to, že "inr" asi nenastavuje Carry, tak som opravil "rnc" na "rnz". |
Autor: | Antony/DTA [ 21.06.2016, 17:25 ] |
Předmět příspěvku: | Re: Mandelbrod set PMD |
Citace: Tohle přece nemůže fungovat, on tam potřebuje obrácenou hodnotu z 255 ne bitovou negaci? zmena znamienka z 1 na -1 (doplnkový kód): complement 1=254 increment 254=255 ;255=-1 |
Autor: | mmartinka [ 21.06.2016, 22:29 ] |
Předmět příspěvku: | Re: Mandelbrod set PMD |
Dal jsem 4 průchody za sebou se změnou barvy. Jednoduší by byl jeden průchod a změna barvy podle iterace. Ale i tak to vypadá zajímavě iterations 3-6-9-12 Příloha:
|
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/ |