De rosszul, nem azon a címen lévő cím kell, hanem maga a cím : ld hl,0c86eh
Úgy hallom, hogy gyors envelope-ok vannak a 3. csatornán, be kéne kapcsolni az 1KHz-es megszakítást, és minden 1KHz-es megszakításban az envelope interruptnak kell lefutnia, és minden 50Hz-es megszakításban meg a Playernek.
az 1 kHz-est hogyan?
; if non-zero, the envelope emulation routine is disabledNO_ENVELOPE_IRQ equ 1
Elvileg itt átírod 0-ra:Code: [Select]; if non-zero, the envelope emulation routine is disabledNO_ENVELOPE_IRQ equ 1
intrut1 push af in a,(0b4h) and 20h ld a,033h out (0b4h),a jp z,envelopeInterrupt call vidint pop af ei ret
Én így oldottam meg:Bár lehet bele kellett piszkálni az envelopeInterrupt rutinba a veremkezelés miatt, erre nem emlékszem.Code: [Select]intrut1 push af in a,(0b4h) and 20h ld a,033h out (0b4h),a jp z,envelopeInterrupt call vidint pop af ei ret
nem call z, envelopeInterrupt-ra gondoltál?egyébként nekem valami nagy hülyeséget csinál így... (mármint call-ra, jp-re lefagy)
Nem, mert akkor minden 1KHz-es megszakításban a video rutin is lefutna.Nézd meg a veremkezelő utasításokat, ott lesz a bibi, lehet csak ki kéne ugratni egy helyre, ott elmenteni a szükséges regisztereket, majd meghívni az envelopeinterrupt rutint, visszállítani, majd ei és ret.
sikerültkicsit "akad", de nem rossz
Az jó Nem lehet, hogy az akadást tiltott megszakítás okozza, emiatt bizonyos ideig nincs envelope emuláció, vagy maga a zenelejátszás "akad", bizonyos hangokat hosszabban játszik le?
Ebben a régebbi Spectrum átiratban látható példa az 1 kHz-es burkológörbe megszakítás használatára, itt 250 Hz-re osztva (ENV_SRATE_DIV = 4):