.. vim: noexpandtab fileencoding=utf-8 nomodified wrap textwidth=270 foldmethod=marker foldmarker={{{,}}} foldcolumn=4 ruler showcmd lcs=tab\:|- list tabstop=8 noexpandtab nosmarttab softtabstop=0 shiftwidth=0 :date: 2023.12.11 21:47:51 :_modified: 1970.01.01 00:00:00 :tags: SW,HowTo :authors: Gilhad :summary: programování - tipy a triky :title: programování :nice_title: |logo| %title% |logo| %HEADER% programování -------------------------------------------------------------------------------- * `Queue` je had - hlava požírá data, z ocasu padají ven * `Ring buffer` - točí se na místě, kapacita n-1 bytů, hlava == ocas => Empty, [hlava+1]%size == ocas => Full * **Trik**: při zápisu zapsat další byte vždy, ale data upravit, jen když se vejde * **Trik**: použít adresu začátku bufferu a pro size do 255 mít hlavu i ocas jako byty a při přetečení nulovat (dá se ušetřit pár taktů) 6309 -------------------------------------------------------------------------------- * `OR A,B` = `PSHS B`; `ORA ,S+` * pro return statusu používat `CC[Carry]` - `CLRA` shodí, `COMA` nahodí, `LDA` nemění, pokud nemám volný 8bit reg, tak `ANDCC #~1` shodí, `ORCC #1` nahodí. * `CC[Carry] set = Error` => `BCS chyba` a `BCC Ok` * hezký trik s komentáři - položit otázku u testu a u skoku ji zodpovědět .. code:: ANDA #1 ; Is ready byte to read? BNE Retry ; .. if not: retry LDA ACIA.Data ; .. if yes: Read the byte from ACIA * `MC6850` sice zvládá i 1 Mb/s, ale 20 cyklů mi nestačí ani interrupt, * takže 115.200 je asi limit, zvláště pokud výhledově přidám nějaké další * ať ven, nebo uvnitř k Arduinu - což by ale mohlo mít pro Arduino lepší propustnost, protože bez Expanduina po cestě? Seriál má zadrátovaný, takže nemusím testovat Status v cyklu. * `ACIA interrupts` - naházet to do bufferů, nechat je SW přehazovat za běhu (za delší, například), `JSR [V_cosi]` před uložením, `BCC ring.put` pro gamesky na interceptování stisku * ale ono možná bude gamesce zcela stačit číst i ten bufferovaný vstup, pokud bude dost rychlá, aby se jí nehromadil - stejně zatím nemám puštění klávesy - jedině nějak přez Arduino či jinou HW klávesnici * **6809 Assembly Language Subroutines (Lance Leventhal)** okolo strany 322 je něco o `IRQ řešení ACIA` * `OS-9` má taky rutiny pro `ACIA`, když dost jiné schéma práce