OldComp.cz
http://oldcomp.cz/

Ondra - tajomstvá programovania
http://oldcomp.cz/viewtopic.php?f=47&t=8300
Stránka 11

Autor:  Martin1 [ 11.02.2020, 22:52 ]
Předmět příspěvku:  Ondra - tajomstvá programovania

Pred nedávnom som dostal od Stamila otázku, či je možné zistiť, ako je nastavený režim zobrazovania. Priznám sa, sám som si v prvej chvíli nebol istý, či to ide. Ale potom mi napadla myšlienka skúsiť zmerať takty medzi dvomi prerušeniami.

Jedna horizontálna linka má 64us, čo je 128 taktov mikroporcesora. Maximálny počet nastaviteľných riadkov je 255. Pri zobrazovaní procesor nebeží, iba počas zatemnenia. Celkový počet TV riadkov je 312. Čiže meraním (teda správne počítaním) dostaneme rozdiel medzi číslom 312 a nastaveným počtom riadkov. Z toho sa matematicky dopočíta počet zobrazovaných riadkov.

V reáli som nechal v cykle bežať počítadlo s fixnou dĺžkou 16T , ktoré skončí druhým prerušením. Počas jedného riadku napočíta 8 cyklov (128/16). V závere sa teda výsledok delí 8.

Týmto testom sa dá otestovať kvalita emulátorov, utilitka zobrazuje napočítaný a nastavený počet riadkov (v hexa).
https://sites.google.com/site/ondraspo186/download/9-2-rom-a-utility
Počet liniek sa mení klávesami Enter a Space.
Prosím dobrovoľníkov pre otestovanie na reálnom Ondrovi, lebo sa mi doma nedarí nájsť zdroj ani kábel k TV.


Kód:
; prepare for test
TestInit:       LD      HL, TestFin     ; jump address
                LD      (0039h), HL     ; prepare address for jump
                LD      HL, 0038h       ; INT38 vector
                LD      (HL), 0C9h      ; RET opcode
                LD      C, 0C3h         ; JP opcode
                LD      DE, 0002h       ; start with 2 (32T as noted later)
                EI                      ; enable interrupt
                HALT                    ; wait for interrupt
; now wait for VSYNC interrupt
                LD      (HL), C         ; 7T    set JP nnnn opcode
                EI                      ; 4T    enable int again
                NOP                     ; 12T   dummy
                NOP
                NOP
;                                       ;       Sum 32T with RET (from INT)
;
; increment counter until INT re-triggered
; one line ~ 64uS = 128T (8*16T)
; every line is DE incermented 8-times
TestLines:      INC     DE              ; 6T    increment counter
                JP      TestLines       ; 10T   repeat
;                                       ;       Sum 16T
;
; now test is done, calculate lines
TestFin:        XOR     A               ; reset CY
                RR      D               ; divide by 8 to get number of lines
                RR      E
                RR      D
                RR      E
                RR      D
                RR      E
                XOR     A               ; reset CY
                LD      HL, 312         ; 312 TV lines
                SBC     HL, DE          ; calc real lines
; now real lines in DE


Přílohy:
Ondra-lines.GIF
Ondra-lines.GIF [ 1.92 KiB | Zobrazeno 5723 krát ]

Autor:  Antony/DTA [ 12.02.2020, 00:27 ]
Předmět příspěvku:  Re: Ondra - tajomstvá programovania

V tom deleni je chyba (namiesto RR D má byť SRA D),
ale ak je DE násobkom 8, tak sa neprejaví.

Autor:  Martin1 [ 12.02.2020, 08:41 ]
Předmět příspěvku:  Re: Ondra - tajomstvá programovania

Antony/DTA píše:
V tom deleni je chyba (namiesto RR D má byť SRA D),
ale ak je DE násobkom 8, tak sa neprejaví.

Správne by malo byť SRL D, ale keďže výsledok je len v registri E, tak je to nepodstatné.
M1

Autor:  stamil [ 12.02.2020, 09:47 ]
Předmět příspěvku:  Re: Ondra - tajomstvá programovania

Ahoj, zkusil jsem to na reálném Ondrovi a po spuštění zmizí obraz a už se neobjeví. Ani klávesy Space a Enter s tím nic neudělají.
Nezapomněl jsi tam zavolat out, který udělá Video ON?

Autor:  Martin1 [ 12.02.2020, 22:56 ]
Předmět příspěvku:  Re: Ondra - tajomstvá programovania

stamil píše:
Ahoj, zkusil jsem to na reálném Ondrovi a po spuštění zmizí obraz a už se neobjeví. Ani klávesy Space a Enter s tím nic neudělají.
Nezapomněl jsi tam zavolat out, který udělá Video ON?

Opravené, našiel som u Nobomiho ďalší bug v emulácii Z80, preto mi to v emulátore išlo, ale na ostrom HW nie.
Vyskúšal som to na reálnom Ondrovi, počíta to (takmer) správne, je tam ešte nejaká malá dochýlka v pár taktoch, spôsobená pravdepodobne spozdením pri preberaní zbernice pri BUSRQ. Vyskúšal som ešte iný algoritmus, nechal som bežať NOP medzi dvomi prerušeniami (tým pádom bola presnosť 4T oproti 16T pri predošlom teste) a z rozdielu PC som vypočítal strojové cykly.
M1
P.S. Odchýlka jeden riadok by mala byť správna, lebo hoci sa nastavuje na čítači hodnota FF, v skutočnosti je to 256 riadkov (i keď ten posledný nevidieť).

Autor:  stamil [ 13.02.2020, 09:44 ]
Předmět příspěvku:  Re: Ondra - tajomstvá programovania

Zkusil jsem to a už to jede. A funguje to téměř přesně. max odchylka 1 řádek. To je hodně dobré.
Díky

Stránka 11 Všechny časy jsou v UTC + 1 hodina [ Letní čas ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/