Welcome, Guest. Please login or register.


Author Topic: New Zeland Story (Read 6998 times)

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
New Zeland Story
« on: 2012.May.13. 11:08:57 »
István, geco! Egy aktuális, legfejlettebb AY emulációs rutint tudnátok adni?

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: New Zeland Story
« Reply #1 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 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.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: New Zeland Story
« Reply #2 on: 2012.May.13. 12:34:54 »
Spectrumra (valószínűleg nem teljesen :oops:) átalakított verzió:
  [ Guests cannot view attachments ]
Megszakításkezelő rutint nem tartalmaz, de az csak a burkológörbe emuláció használatához kell.

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: New Zeland Story
« Reply #3 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?

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: New Zeland Story
« Reply #4 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.

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: New Zeland Story
« Reply #5 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?

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: New Zeland Story
« Reply #6 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.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: New Zeland Story
« Reply #7 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).

Offline geco

  • EP addict
  • *
  • Posts: 7085
  • Country: hu
    • Támogató Támogató
Re: New Zeland Story
« Reply #8 on: 2012.May.14. 14:53:26 »
Mi készül a műhelyben, ha nem titok? Egy korábban megkezdett dolog, vagy új?  :)

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: New Zeland Story
« Reply #9 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 :-)

Offline geco

  • EP addict
  • *
  • Posts: 7085
  • Country: hu
    • Támogató Támogató
Re: New Zeland Story
« Reply #10 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 :)

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: New Zeland Story
« Reply #11 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.

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: New Zeland Story
« Reply #12 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.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: New Zeland Story
« Reply #13 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.

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: New Zeland Story
« Reply #14 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: