[comp.sys.amiga.programmer] help me make ST/NT module player for NTSC *and* PAL machines

ben@epmooch.UUCP (Rev. Ben A. Mesander) (04/03/91)

  I'm frustrated by SoundTracker/NoiseTracker module players that are buggy
and refuse to play at the right speed on NTSC machines. Although I'm a
rank beginner at 68000 assembler, it seems from the following fragment
of a module player that the timebase is coming from the vertical blank
interrupt:

        section "play",CODE
        include "exec/types.i"
        include "libraries/dos.i"
        include "streplay_lib.i"
        xdef    mt_start
        xdef    mt_brems
                   ^^^^^------- Is this "end" or something in German?

call    MACRO
        xref    _LVO\1
        jsr     _LVO\1(a6)
        ENDM

        even
mt_start:
        movem.l d2-d7/a2-a6,-(sp)
        bsr     mt_init
        move.l  4,a6
                ^---------- AbsExecBase?
        lea     intnode(pc),a1
        moveq   #5,d0
                ^^--------- I think this is INTB_VERTB
        call    AddIntServer
        movem.l (sp)+,d2-d7/a2-a6
        rts

mt_brems:
        movem.l d2-d7/a2-a6,-(sp)
        lea     intnode(pc),a1
        moveq   #5,d0
                ^^--------- I think this is INTB_VERTB
        move.l  4,a6
                ^---------- AbsExecBase?
        call    RemIntServer
        bsr     mt_end
        movem.l (sp)+,d2-d7/a2-a6
        rts


intnode:
        dc.l    0,0
        dc.b    2,0
        dc.l    intname,0,mt_call
intname:
        dc.b    "STReplay_Lib Interrupt",0
        even

mt_init:
       [rest of source deleted]

  I assume the speed problem is the 50Hz/PAL vs. 60Hz/NTSC thing. So I
would guess that the thing to do to fix this code (besides replacing
manifest constants with symbols :-) would be to change it to derive a
50Hz timebase from a CIA timer. Would this be INTB_PORTS? How do I tell
the CIA that I want to be interrupted at 50Hz?

Thanks in advance...

--
| ben@epmooch.UUCP   (Ben Mesander)       | "Cash is more important than |
| ben%servalan.UUCP@uokmax.ecn.uoknor.edu |  your mother." - Al Shugart, |
| !chinet!uokmax!servalan!epmooch!ben     |  CEO, Seagate Technologies   |

peterk@cbmger.UUCP (Peter Kittel GERMANY) (04/04/91)

In article <ben.5586@epmooch.UUCP> ben@epmooch.UUCP (Rev. Ben A. Mesander) writes:
>
>        xdef    mt_brems
>                   ^^^^^------- Is this "end" or something in German?

No, "bremsen" means "to break", "get slower". In a program, I would guess
for a wait routine.

But this doesn't look like a wait routine, when calling RemoveInterruptServ:

>mt_brems:
>        movem.l d2-d7/a2-a6,-(sp)
>        lea     intnode(pc),a1
>        moveq   #5,d0
>                ^^--------- I think this is INTB_VERTB
>        move.l  4,a6
>                ^---------- AbsExecBase?
>        call    RemIntServer
>        bsr     mt_end
>        movem.l (sp)+,d2-d7/a2-a6
>        rts

-- 
Best regards, Dr. Peter Kittel  // E-Mail to  \\  Only my personal opinions... 
Commodore Frankfurt, Germany  \X/ {uunet|pyramid|rutgers}!cbmvax!cbmger!peterk