Enterprise Forever

:HUN => Konvertálás => Spectrum-ról => Topic started by: Zozosoft on 2012.May.13. 11:08:57

Title: New Zeland Story
Post by: Zozosoft on 2012.May.13. 11:08:57
István, geco! Egy aktuális, legfejlettebb AY emulációs rutint tudnátok adni?
Title: Re: New Zeland Story
Post by: IstvanV on 2012.May.13. 11:30:08
István, geco! Egy aktuális, legfejlettebb AY emulációs rutint tudnátok adni?

A letöltéseknél (http://enterpriseforever.com/letoeltesek_downloads/egyeb_misc-t187.15.html) található Boulder Dash forráskódban megtalálható, de Spectrumhoz lehet, hogy kissé módosítani kell (elsősorban a burkológörbe emuláció megszakítási rutinba való beépítését), illetve a frekvencia konverziót biztosan.
Title: Re: New Zeland Story
Post by: IstvanV on 2012.May.13. 12:34:54
Spectrumra (valószínűleg nem teljesen :oops:) átalakított verzió:
  [attachurl=#]
Megszakításkezelő rutint nem tartalmaz, de az csak a burkológörbe emuláció használatához kell.
Title: Re: New Zeland Story
Post by: Zozosoft on 2012.May.13. 13:51:29
Köszi!
Ez a rész pontosan, hogyan is mûködik?
Code: ZiLOG Z80 Assembler
  1.         ld    a, 04h
  2.         out   (0bfh), a
  3.         ld    c, b
  4.         call  .l2
  5.         ld    l, b
  6.         call  .l2                       ; L = 1 kHz interrupts per video frame
  7.         ld    a, 25
  8.         cp    l
  9.         ld    a, 01h
  10.         rla
  11.         rla
  12.         out   (0bfh), a                 ; Z80 <= 5 MHz: 04h, > 5 MHz: 06h
  13.         ld    a, 10h                    ; use 17-bit noise generator
  14.         out   (0a6h), a
  15.     if NO_ENVELOPE_IRQ == 0
  16.         ld    a, 33h
  17.     else
  18.         ld    a, 30h
  19.     endif
  20.         out   (0b4h), a                 ; enable 1 kHz and video interrupts
  21.         ret
  22. .l2:    in    a, (0b4h)
  23.         and   11h
  24.         or    c
  25.         rlca
  26.         and   66h
  27.         ld    c, a                      ; -ON--ON-
  28.         rlca                            ; ON--ON--
  29.         xor   c                         ; OXN-OXN-
  30.         bit   2, a
  31.         jr    z, .l3
  32.         inc   l                         ; 1 kHz interrupt
  33. .l3:    cp    0c0h
  34.         jr    c, .l2                    ; not 50 Hz interrupt ?
  35.         ret
  36.  

Azt értem, hogy megméri, hogy 4 vagy 6 Mhz-es beállítás kell-e a Dave-nek :-) de pontosan hogyan is?

És jól gondolom, hogy ezt az AYRESET rutint így csak a program elején kell hívni, menet közben amikor a játék resetelgeti az AY-t (konkrét esetben úgy tûnik minden hangeffektnél), akkor oda praktikusabb egy csak a regisztertörléseket alkalmazó egyszerûbb verziót rakni?
Title: Re: New Zeland Story
Post by: IstvanV on 2012.May.13. 17:11:28
Azt értem, hogy megméri, hogy 4 vagy 6 Mhz-es beállítás kell-e a Dave-nek :-) de pontosan hogyan is?

Az 1 kHz-es megszakításokat számolja két video megszakítás (az .l2 két hívása) között. Ez 20 4 MHz-es gépen, és 30 6 MHz esetén, mivel turbós gépen az 1 kHz-es megszakítás is gyorsul.

Code: ZiLOG Z80 Assembler
  1. .l2:    in    a, (0b4h)
  2.         and   11h
  3.         or    c
  4.         rlca
  5.         and   66h
  6.         ld    c, a                      ; -ON--ON-
  7.         rlca                            ; ON--ON--
  8.         xor   c                         ; OXN-OXN-

Itt az O a bit előző értéke, az N az új érték, az X pedig a kettő közötti XOR művelet eredménye. A byte felső fele a video megszakítás, az alsó pedig az 1 kHz-es megszakítás állapota. Tehát a 2. bit 1, ha 1 kHz-es megszakítás történt (le- és felfutó él is), és a 6. és 7. bit 1 video megszakításnál (lefutó él):

Code: ZiLOG Z80 Assembler
  1.         bit   2, a
  2.         jr    z, .l3
  3.         inc   l                         ; 1 kHz interrupt
  4. .l3:    cp    0c0h
  5.         jr    c, .l2                    ; not 50 Hz interrupt ?

Quote
És jól gondolom, hogy ezt az AYRESET rutint így csak a program elején kell hívni, menet közben amikor a játék resetelgeti az AY-t (konkrét esetben úgy tûnik minden hangeffektnél), akkor oda praktikusabb egy csak a regisztertörléseket alkalmazó egyszerûbb verziót rakni?

Ha az eredeti kódban is csak az AY regiszterek nullázása található, akkor természetesen az átiratba is az kerülhet a regiszter írás emuláció hívásával.
Title: Re: New Zeland Story
Post by: Zozosoft on 2012.May.13. 17:13:11
Az 1 kHz-es megszakításokat számolja két video megszakítás (az .l2 két hívása) között. Ez 20 4 MHz-es gépen, és 30 6 MHz esetén, mivel turbós gépen az 1 kHz-es megszakítás is gyorsul.
Ehhez kell engedélyezni ezeket a megszakításokat, vagy a B4 olvasásával mindenképpen látszik?
Title: Re: New Zeland Story
Post by: Zozosoft on 2012.May.13. 17:29:59
Ha az eredeti kódban is csak az AY regiszterek nullázása található, akkor természetesen az átiratba is az kerülhet a regiszter írás emuláció hívásával.
Az eredetiben ez van:
Code: ZiLOG Z80 Assembler
  1. .   C185  0E FD        LD    C, FD
  2. .   C187  11 00 0D     LD    DE, 0D00
  3. .   C18A  97           SUB   A
  4. .   C18B  06 FF        LD    B, FF
  5. .   C18D  ED 51        OUT   (C), D
  6. .   C18F  06 BF        LD    B, BF
  7. .   C191  ED 79        OUT   (C), A
  8. .   C193  15           DEC   D
  9. .   C194  F2 8B C1     JP    P, C18B
  10. .   C197  11 00 07     LD    DE, 0700
  11. .   C19A  06 FF        LD    B, FF
  12. .   C19C  ED 51        OUT   (C), D
  13. .   C19E  06 BF        LD    B, BF
  14. .   C1A0  ED 59        OUT   (C), E
  15. .   C1A2  C9           RET

Amit nem értek, hogy a 7-es regisztert minek még egyszer nullázni.
Title: Re: New Zeland Story
Post by: IstvanV on 2012.May.13. 17:41:34
Amit nem értek, hogy a 7-es regisztert minek még egyszer nullázni.

Akkor lenne értelme, ha például 3Fh-t írna helyette, ami minden hangot kikapcsol. Az AY emulációnál nincs hatása, mert az figyelmen kívül hagyja a regiszter írást, ha nem változik az érték (a burkológörbe kivételével).
Title: Re: New Zeland Story
Post by: geco on 2012.May.14. 14:53:26
Mi készül a műhelyben, ha nem titok? Egy korábban megkezdett dolog, vagy új?  :)
Title: Re: New Zeland Story
Post by: Zozosoft on 2012.May.14. 15:03:49
Mi készül a mûhelyben, ha nem titok? Egy korábban megkezdett dolog, vagy új?  :)
A korábban megkezdett még csipkerózsika álomban van  :oops: De majd abba is bele kell rakni az új rutint :-)

Most Lacika kért egy Coorsore féle átírat javítását, amit egyszerûbb volt újra átírni :-)
Title: Re: New Zeland Story
Post by: geco on 2012.May.14. 16:13:29
A korábban megkezdett még csipkerózsika álomban van  :oops: De majd abba is bele kell rakni az új rutint :-)
Nálam is nagyon sok elfekvő dolog van  :oops:, és mostanában nem is nagyon volt időm foglalkozni bármelyikkel is.  :oops:

Most Lacika kért egy Coorsore féle átírat javítását, amit egyszerûbb volt újra átírni :-)
:lol: Van ez így :)
Title: Re: New Zeland Story
Post by: IstvanV on 2012.May.14. 19:33:35
Code: ZiLOG Z80 Assembler
  1.         ld    a, 25
  2.         cp    l
  3.         ld    a, 01h
  4.         rla
  5.         rla
  6.         out   (0bfh), a                 ; Z80 <= 5 MHz: 04h, > 5 MHz: 06h

Itt a 01h-t 03h-ra kell módosítani a várakozás letiltásához.
Title: Re: New Zeland Story
Post by: Zozosoft on 2012.May.20. 10:12:34
Vajon mit rontok el, hogy nincs AY lövéshang?  :oops:
Vagy esetleg olyan effektet akar használni, amit nem tud ez a AY rutin?

128-as gépen FB szegmensben C16A-C1A2-ben van az AY piszkálás.
Title: Re: New Zeland Story
Post by: IstvanV on 2012.May.20. 12:03:58
Vajon mit rontok el, hogy nincs AY lövéshang?  :oops:

A program használ burkológörbét, de az emulációja nincs engedélyezve/megvalósítva.
Title: Re: New Zeland Story
Post by: Zozosoft on 2012.May.20. 12:15:04
Megszakításkezelõ rutint nem tartalmaz, de az csak a burkológörbe emuláció használatához kell.
Akkor ezek szerint kéne ez is  :oops:
Title: Re: New Zeland Story
Post by: IstvanV on 2012.May.20. 12:18:19
Akkor ezek szerint kéne ez is  :oops:

Az ay.s-ben van burkológörbe emuláció, de az envelopeInterrupt hívását be kell építeni a megszakításkezelő rutinba. A legjobb minőséget 1 kHz-es (illetve CPC átiratoknál jól használható a 300 Hz-es) megszakítással lehet elérni, de ha nincs gyors burkológörbe, akkor megfelelő lehet a video megszakítás is, az ENV_SRATE_DIV-et 20-ra állítva.
Title: Re: New Zeland Story
Post by: Zozosoft on 2012.May.20. 12:27:01
A végén van egy kikommentelt IF IRQ rész is, azt vissza kell tenni, vagy Spectrumoz nem kell?
Title: Re: New Zeland Story
Post by: IstvanV on 2012.May.20. 12:43:18
A végén van egy kikommentelt IF IRQ rész is

Pontosan hol ? :oops:
Title: Re: New Zeland Story
Post by: Zozosoft on 2012.May.20. 14:06:59
Pontosan hol ? :oops:
767-774 sorok az ide feltett ay.s-ben.
Title: Re: New Zeland Story
Post by: IstvanV on 2012.May.20. 15:55:44
767-774 sorok az ide feltett ay.s-ben.

Ennek a résznek akkor van jelentősége, ha az ayRegisterWriteAllD a burkológörbe regisztereket is írja, azaz a táblázat mérete 13 vagy 14 byte.
Title: Re: New Zeland Story
Post by: Zozosoft on 2012.May.20. 16:25:11
ENV_SRATE_DIV-et 20-ra állítva.
Így gond lesz itt:
  ld    a, MIN_ENV_FREQVAL
Mert a:
MIN_ENV_FREQVAL         equ     24 * ENV_SRATE_DIV
több lesz mint egy bájt.
Title: Re: New Zeland Story
Post by: IstvanV on 2012.May.20. 16:34:42
MIN_ENV_FREQVAL         equ     24 * ENV_SRATE_DIV

A 24 * ENV_SRATE_DIV helyett lehet 255, ami ugyan valamivel kisebb a megjegyzésben ajánlott minimális értéknél, de használható (50 Hz-es emulációval az ilyen gyors burkológörbe nem túl jó minőségű).
Title: Re: New Zeland Story
Post by: Zozosoft on 2012.May.20. 19:42:35
Köszi a segítséget! Egész jónak tûnik a végeredmény. Már csak ezt a sok apró fájlt kell betömöríteni  :)
Title: Re: New Zeland Story
Post by: Lacika on 2012.May.20. 21:39:55
Eredetileg én csak azt kértem, hogy nézzük meg, a "néma" átiratba be lehet-e rakni a hangot...  :oops:

A Saboteur 2-ben a billentyûzetfigyelésrõl volt régebben szó, hogy pl. név és kódbeíráskor nem minden billentyû mûködik megfelelõen. Más baja amúgy nincs, több nehézségi szinten sokszor végignyomtam. Az javítható lenne? Úgy nézem az a program nem csak nekem tetszik, a WoS-on a toplistában is elõl van.
Meg után megnézni az R-Type-ot... :oops:
Title: Re: New Zeland Story
Post by: Zozosoft on 2012.May.20. 22:24:10
Eredetileg én csak azt kértem, hogy nézzük meg, a "néma" átiratba be lehet-e rakni a hangot...  :oops:
128-as hanggal csak jobb  :ds_icon_cheesygrin:
Title: Re: New Zeland Story
Post by: Lacika on 2012.May.20. 22:39:25
128-as hanggal csak jobb  :ds_icon_cheesygrin:

Szó se róla, tényleg jól szól.
Title: Re: New Zeland Story
Post by: IstvanV on 2012.May.21. 13:57:59
És jól gondolom, hogy ezt az AYRESET rutint így csak a program elején kell hívni, menet közben amikor a játék resetelgeti az AY-t (konkrét esetben úgy tûnik minden hangeffektnél), akkor oda praktikusabb egy csak a regisztertörléseket alkalmazó egyszerûbb verziót rakni?

Talán nem sok jelentősége van, de jelenleg nem hívja az ayReset-et a program. Itt egy módosított verzió, ami a turbó felismerést csak az első hívásnál végzi el, így nem kell külön ayNull rutin. Ezen kívül, mivel a burkológörbe emuláció nem használ 1 kHz-es megszakítást, annak az engedélyezését töröltem.

Code: ZiLOG Z80 Assembler
  1. ayReset:
  2.         di
  3.         ld    hl, ayRegisters - 1
  4.         ld    bc, 10afh
  5.         xor   a
  6. .l1:    inc   hl
  7.         out   (c), a
  8.         ld    (hl), a
  9.         dec   c
  10.         djnz  .l1
  11.         res   3, l                      ; register 7
  12.         ld    (hl), 3fh
  13.     if NO_ENVELOPE_IRQ == 0
  14.         ld    (envelopeInterrupt.l4 + 1), a
  15.         ld    a, 18h                    ; = JR +nn
  16.         ld    (envelopeInterrupt.l2), a
  17.         ld    hl, MIN_ENV_FREQVAL
  18.         ld    (envelopeInterrupt.l3 + 1), hl
  19.         ld    a, low (envelopeInterrupt.l12 - envelopeInterrupt.l11)
  20.         ld    (envelopeInterrupt.l10 + 1), a
  21.         ld    a, low envelopeEnableTable
  22.         ld    (setChannelAmplitude.l3 + 1), a
  23.     endif
  24.         ld    a, 10h                    ; use 17-bit noise generator
  25.         out   (0a6h), a
  26. .l4:    ld    a, 0c9h                   ; * = RET
  27.         ld    (.l4), a
  28.         ld    a, 04h
  29.         out   (0bfh), a
  30.         ld    c, b
  31.         call  .l2
  32.         ld    l, b
  33.         call  .l2                       ; L = 1 kHz interrupts per video frame
  34.         ld    a, 25
  35.         cp    l
  36.         ld    a, 03h
  37.         rla
  38.         rla
  39.         out   (0bfh), a                 ; Z80 <= 5 MHz: 04h, > 5 MHz: 06h
  40. ;   if NO_ENVELOPE_IRQ == 0
  41. ;       ld    a, 33h
  42. ;   else
  43.         ld    a, 30h
  44. ;   endif
  45.         out   (0b4h), a                 ; enable 1 kHz and video interrupts
  46.         ret
  47. .l2:    in    a, (0b4h)
  48.         and   11h
  49.         or    c
  50.         rlca
  51.         and   66h
  52.         ld    c, a                      ; -ON--ON-
  53.         rlca                            ; ON--ON--
  54.         xor   c                         ; OXN-OXN-
  55.         bit   2, a
  56.         jr    z, .l3
  57.         inc   l                         ; 1 kHz interrupt
  58. .l3:    cp    0c0h
  59.         jr    c, .l2                    ; not 50 Hz interrupt ?
  60.         ret
Title: Re: New Zeland Story
Post by: Zozosoft on 2012.May.21. 14:25:09
Ezt ilyenformában meg bármely progiba lehet berakni a fix out (191) helyett?
Code: ZiLOG Z80 Assembler
  1.         di
  2.         ld    a, 04h
  3.         out   (0bfh), a
  4.         ld    c, 0
  5.         call  .l2
  6.         ld    l, 0
  7.         call  .l2                       ; L = 1 kHz interrupts per video frame
  8.         ld    a, 25
  9.         cp    l
  10.         ld    a, 03h
  11.         rla
  12.         rla
  13.         out   (0bfh), a                 ; Z80 <= 5 MHz: 04h, > 5 MHz: 06h
  14.         ret
  15. .l2:    in    a, (0b4h)
  16.         and   11h
  17.         or    c
  18.         rlca
  19.         and   66h
  20.         ld    c, a                      ; -ON--ON-
  21.         rlca                            ; ON--ON--
  22.         xor   c                         ; OXN-OXN-
  23.         bit   2, a
  24.         jr    z, .l3
  25.         inc   l                         ; 1 kHz interrupt
  26. .l3:    cp    0c0h
  27.         jr    c, .l2                    ; not 50 Hz interrupt ?
  28.         ret
Title: Re: New Zeland Story
Post by: IstvanV on 2012.May.21. 14:57:50
Ezt ilyenformában meg bármely progiba lehet berakni a fix out (191) helyett?

Igen; az "ld    a, 03h" (out 191, 12/14) helyett lehet "ld    a, 01h" is (out 191, 4/6).
Title: Re: New Zeland Story
Post by: szipucsu on 2012.May.22. 14:02:29
NewZealandStory_Beta.zip (87.22 KB - letöltve 252346 .)
Eddig jónak tûnik! Bár nem sokáig jutottam vele, igaz, csak egy percig próbálkoztam.
Title: Re: New Zeland Story
Post by: Lacika on 2012.May.22. 14:53:59
Eddig jónak tûnik! Bár nem sokáig jutottam vele, igaz, csak egy percig próbálkoztam.

Én Level 3-2-ig jutottam. Snapshot-okkal, örökélet nélkül játszottam, de elfogyott állandóan az idõm. Lehet, hogy az a baj, rohantam, nem lövöldöztem, így nem kaptam plusz idõt sem. (Elvileg van olyan tárgy, ami ad.)
Title: Re: New Zeland Story
Post by: Zozosoft on 2012.May.22. 14:57:49
Én úgy 2-2-ig jutottam örökélet és snapshot nélkül. Ezért is tetszett meg a játék, mert nem az a fajta, ahol a kezdõképernyõrõl se jut ki az ember 1 hét gyakorlás nélkül :-)
Title: Re: New Zeland Story
Post by: Zozosoft on 2012.June.03. 12:44:13
Újabb teszt verzió, tömörítve már.
Title: Re: New Zeland Story
Post by: Lacika on 2012.June.03. 22:17:51
A LEVEL 1-4-en, amikor a fõszörny jönne lefagyott nekem.
Title: Re: New Zeland Story
Post by: Zozosoft on 2012.June.04. 10:28:12
A LEVEL 1-4-en, amikor a fõszörny jönne lefagyott nekem.
Tartottam tõle  :oops:
Lefagyás elõtti utolsó pálya végérõl kéne snapshot.

Egyéb kérdés: EP64 kompatibilitás maradjon, vagy olyan brutál lassú, hogy minek? :-)
Title: Re: New Zeland Story
Post by: Lacika on 2012.June.04. 11:02:35
Egyéb kérdés: EP64 kompatibilitás maradjon, vagy olyan brutál lassú, hogy minek? :-)

Olyan brutál lassú, hogy teljesen felesleges.
Title: Re: New Zeland Story
Post by: Zozosoft on 2012.June.04. 11:09:18
Olyan brutál lassú, hogy teljesen felesleges.
Én is így gondolom :-)
Így akkor a fájlban turkálós utántöltést ki lehet dobni, 128-ason mehet RAM-ból minden.
Title: Re: New Zeland Story
Post by: Lacika on 2012.June.04. 12:00:48
Így akkor a fájlban turkálós utántöltést ki lehet dobni, 128-ason mehet RAM-ból minden.

Így a legpraktikusabb!  :)