DTV software issues

From: Ullrich von Bassewitz (uz_at_musoftware.de)
Date: 2005-11-28 00:02:28

Since others have taken over the hardware flag, I could finish placing my DTV
in a case:-) After verifying that anything works smoothly (besides the colors
of course), I went on to write an extended memory driver for cc65.

Because I'm one of the good guys, I'm doing something like this:

        lda     $d03f           ; Load current state
        pha                     ; Save it
        ora     #$01            ; Enable access to extended registers
        sta     $d03f

        ...                     ; Go on doing DMA

        pla
        sta     $d03f           ; Restore old state

After lots of try&error I noticed that this piece of code prevents the driver
from working. It seems as if reading register $d03f doesn't give the last
value written to it. Typing in ?PEEK(53311) from BASIC proves this: It prints
255. Can this really be true? There's a similar issue with the register bank:
There's no way to read the old setting. How are subroutines or drivers
supposed to work if they cannot read and save the old settings before changing
anything?

There is one more issue with the register bank. An IRQ or NMI may interrupt
code when has has changed a register assignment. For example:

; Change the location of the zero page

        .byte   $32, $cc                ; Let A point to register $C
(i)->
        lda     #$01                    ; Change segment bank for $0000
        .byte   $32, $00                ; Let A point to register $0

If an interrupt occurs at (i), it will change the segment bank each time when
it loads A. If A points to register $A (instead of $C), the interrupt handler
will change the zero page location each time it loads A. Of course, there
shouldn't be any interrupts when changing register assignments, so this may be
a theoretical issue. Anyway, this seems like a dangerous feature.

The driver is finally working, but because of the problem with the $d03f
register, it will disable access to the extended registers on each DMA
operation. It is named dtv-himem.emd and will be in the next cc65 snapshot
(which is built nightly).

Regards


        Uz


-- 
Ullrich von Bassewitz                                  uz@musoftware.de

       Message was sent through the cbm-hackers mailing list

Archive generated by hypermail pre-2.1.8.