Welcome, Guest. Please login or register.


Author Topic: Assembly programozás (Read 254397 times)

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #600 on: 2013.November.03. 02:39:58 »
Én úgy gondolom, hogy a 16 azt jelöli, hogy amikor van 32, akkor legyen z80 megszakítás.

A 32 meg a tényleges megszakítás megtörténte.

Úgy is mondhatjuk, hogy a 16 -ot te állítod amire akarod, és azt olvasod ki, amit beírtál,

a 32 -t meg al LPB állítja, te meg reszeteled, ha 1 -et irsz rá, és ha te 1 -et írsz rá, akkor utána a következő beolvasások 0 -át fognak rá adni rá, mindaddig, míg az LPB újra be nem állítja.

Csak én úgy sejtem, hogyha egy reszetelésnél a 32 mellé nem adod a 16 -ot, akkor többé valamiért nem műxik ... ezt akarom megkérdezni Zozo -tól.
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #601 on: 2013.November.03. 09:20:41 »
Na Zozo, te mit mondasz erre ?

Lehet sztd. z80 -nal figyelni a 0xb4 video megszak bitjét, és így főprogramból várni a megszakra, vagy csak a tényleges megszakításból lehet megbízhatóan detektálni a video megszakot ?
Z80 System

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14722
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #602 on: 2013.November.03. 09:52:33 »
Lehet, ezért tették kiolvashatóvá a Dave INT bemeneteit.
Bit4 (16) jelenti azt, hogy a Nick éppen megszakítás jelet ad.
Bit5 (32) azt jelenti, hogy van eltárolt videó megszakítás, ez csak akkor állítódik, ha engedélyeztük azt a B4 porton. Erre figyelni csak folyamatos DI mellett érdemes, mert egyébként úgyis IRQ lesz, amikor beáll.

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #603 on: 2013.November.03. 10:02:02 »
Quote
Lehet, ezért tették kiolvashatóvá a Dave INT bemeneteit.
Bit4 (16) jelenti azt, hogy a Nick éppen megszakítás jelet ad.
Bit5 (32) azt jelenti, hogy van eltárolt videó megszakítás, ez csak akkor állítódik, ha engedélyeztük azt a B4 porton. Erre figyelni csak folyamatos DI mellett érdemes, mert egyébként úgyis IRQ lesz, amikor beáll.
Kicsit akkor még általánosabban:

- Ha írom a 0xb4 bit4(16) -ot, akkor azzal azt adom meg, hogy a z80 -at megszakítsa -e a video, vagy sem.

- Ha olvasom a 0xb4 bit4(16) -ot, akkor azzal azt kapom meg, hogy épp video megszak van -e, nem pedig azt, amit én beleírtam.

- Ha írom a 0xb4 bit5(32) -őt, és mégpedig 1- gyel, akkor törlöm a video megszakot, és az interrupt nem váltódik ki újra a megszak visszatérése után, csak majd mikor újra beállítja az LPT ezt a bitet. Ha 0- val írom, akkor semmi nem történik.

- Ha olvasom a 0xb4 bit5(32) -őt, akkor azzal fene tudja mit kapok meg, de nem is jó az semmire.

Így van ?
« Last Edit: 2013.November.03. 10:15:54 by Z80System »
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #604 on: 2013.November.03. 10:14:06 »
Mindebből akkor az következne, hogy egy működő és futó audio interrupt mellett, ha főprogramban ez benne van a loop -omban:

 WaitForIRQ_Loop:

 in a, (0xb4)
 and #0x10

 jr z, WaitForIRQ_Loop

vagy pedig ugyanez de jr nz, -vel (kipróbáltam mindkettőt), akkor az várna a video megszakra. De nem vár. Egy darabig mintha egyáltalán nem akasztaná meg, aztán meg végtelen ciklus.
Z80 System

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14722
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #605 on: 2013.November.03. 10:16:13 »
A bit4-et olvasva azt tudod meg, hogy éppen generál-e a Nick megszakítást.
Ha a bit4-et írva engedélyezed a videó megszakítást, akkor ha Nick megszakítás történt átkerül a tárolóba, amit a bit5-t olvasva tudsz megnézni. Ez egyben ki is váltja a Z80 megszakítását, és mindaddig 1-ben marad, amíg a bit5-t írva nem törlöd.

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14722
  • Country: hu
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #606 on: 2013.November.03. 10:22:07 »
Próbáld ki ezt:
Code: [Select]
        DI
CIKLUS          IN A,(0B4H)
                AND 10H
                OUT (81H),A
                JR CIKLUS
Fenasban futtatva az utolsó sor alatt zöld lesz a keret.

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #607 on: 2013.November.03. 10:26:10 »
Nem lehet, hogy a DI kavar be ?

Nálam engedélyezettek a megszakítások, hisz az audio megszakítás megy, miközben én főprogramból akarok várni a video megszakításra.

Ez az audio megszak, abban is van 0xb4 kezelés (nyilván) :



Code: [Select]
void IRQ() __naked
{
__asm

exx

ld c, #0xb4
ld b, #0x1+ 0x2
out (c), b

ld c, #0xa8
outi
ex de, hl

ld c, #0xac
outi
ex de, hl

exx

ei

ret

__endasm;
}



« Last Edit: 2013.November.03. 10:29:49 by Z80System »
Z80 System

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #608 on: 2013.November.03. 10:53:11 »
Ez így szerintem rossz, mert elrontja a jelzőbiteket. Kellene EX AF, AF' is.

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #609 on: 2013.November.03. 10:56:32 »
Quote
Ez így szerintem rossz, mert elrontja a jelzőbiteket. Kellene EX AF, AF' is.
Fú, az simán lehet, mert azokat a legutolsó optimalizálási lépcsőben "optimalizáltam" ki ... :)
Z80 System

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #610 on: 2013.November.03. 10:59:05 »
Quote from: Z80System
Fú, az simán lehet, mert azokat a legutolsó optimalizálási lépcsőben "optimalizáltam" ki ... :)
Valójában nem veszítenél vele időt, mert a kód elején az OUT (C), B helyére egyszerűbb és gyorsabb OUT (0B4H), A kerülhetne.

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #611 on: 2013.November.03. 11:04:06 »
Quote
Valójában nem veszítenél vele időt, mert a kód elején az OUT (C), B helyére egyszerűbb és gyorsabb OUT (0B4H), A kerülhetne.
Hát pedig pont a 2 ex af, af -et optimalizáltam ki, előtte az volt ... :)

Ebből is látszik, hogy nézni kéne a referenciát, nem "érzésre" kéne optimalizálni ...

Mindjárt kiderül az is, hogy ez sem gyorsabb:

 
Code: [Select]
ld c, #0xa8
 outi
 ex de, hl

 ld c, #0xac
 outi
 ex de, hl


ennél:

 
Code: [Select]
ld a, (de)
 out (0xa8), a
 inc de

 ld a, (hl)
 out (0xac), a
 inc hl



Pedig ez is (érzésre) optimalizálás ... :)
Z80 System

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Assembly programozás
« Reply #612 on: 2013.November.03. 11:06:30 »
A második megoldás jobb, mert kis mértékben gyorsabb, és kevesebb regisztert használ. A háttér regiszterek hasznosak lehetnének a főprogramban a grafikai és egyéb rutinokban. :)

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #613 on: 2013.November.03. 11:09:24 »
Quote
A második megoldás jobb, mert kis mértékben gyorsabb, és kevesebb regisztert használ. A háttér regiszterek hasznosak lehetnének a főprogramban a grafikai és egyéb rutinokban. 
Szuper ... na befejeztem a fejből optimalizálást. Így visszafele haladok ... :)
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: Assembly programozás
« Reply #614 on: 2013.November.03. 11:15:27 »
A másik megszak javaslatodat visszavontad ? Mert most nem találom, csak a levelek között van meg ... És az mintha egy stereo hangot játszana le egyrészt,

másrészt meg a többi is túl nagy megkötésnek tűnik nekem, hogy a max 256 byte lehet a sample, meg ilyenek ...
Z80 System