Mix
Random mix of pages and files
programování
2023.12.11 21:47:51 end SW HowTo Gilhad

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

      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