Log inRegister an accountBrowse CSDbHelp & documentationFacts & StatisticsThe forumsAvailable RSS-feeds on CSDbSupport CSDb Commodore 64 Scene Database
 Welcome to our latest new user Dawn ! (Registered 2020-09-19) You are not logged in 
CSDb User Forums

Forums > C64 Coding > Problems overloading LOAD vector
2005-08-30 11:15

Registered: Apr 2004
Posts: 116
Problems overloading LOAD vector

I want to replace kernal LOAD to jump into the mmc64 bios. I have two problems;

- The mmc64 doesnt have any RAM like AR/RR so I need to use 6 bytes in main ram to switch in the mmc rom. I've been looking for a reasonably safe place and I' currently thinking about using the upper 6 bytes of the file number tables at 259. Can anyone think of safer places?

- My RR cart replaces LOAD per default as expected, but when I try to change it is instantly restored to the RR vector again. Why is this and how do you avoid it?

Also I wonder if there are any examples on using parts of the original kernal routines to do stuff like print error messages, print LOADING or generate basic listings for LOAD "$".
2005-08-30 12:34
iAN CooG

Registered: May 2002
Posts: 2790
Here are some code snippets I'm using sometimes.
The 1st send "I" and print status msg.
Is taken and adapted from some IDE64 examples
         *= $c000
         ;callable from basic
         jmp initdrv

         jmp printstatus

         jsr openchan
         lda $ba
         jsr $ed0c ;listen
         lda $b9
         jsr $edb9 ;second
         lda #$49  ;"I"
         jsr $eddd ;send
         jsr $edfe ;unlisten
         jmp status

         ;only print error/status
         jsr openchan
         lda $ba
         jsr $ed09 ;talk
         lda $b9
         jsr $edc7 ;tksa
         jsr $ee13 ;read
         jsr $ffd2 ;print
         bit $90
         bvc *-8

         jsr $edef ;untalk
         jsr $f642 ;close
         jsr $ffc3 ;close

         lda #0
         sta $90
         lda #8 ;drive 8
         sta $ba
         lda #$6f ;channel
         sta $b9
         lda #0
         jsr $ffbd ;setname
         jmp $f3d5 ;open

This one prints directory, wait for a key, exits.
Disassembled from a packer and commented by me.
        *= $0334

        JSR $E544      ;clear screen
        LDA #$01
        LDX #<dirname
        LDY #>dirname
        JSR $FFBD      ; set filename "$"
        LDA #$08
        STA $BA        ; device #8
        LDA #$60
        STA $B9        ; secondary chn
        JSR $F3D5      ; open for serial bus devices
        JSR $F219      ; set input device
        LDY #$04
labl1   JSR $EE13      ; input byte on serial bus
        BNE labl1      ; get rid of Y bytes
        LDA $C6        ; key pressed?
        ORA $90        ; or EOF?
        BNE labl2      ; if yes exit
        JSR $EE13      ; now get in AX the dimension
        TAX            ; of the file
        JSR $EE13
        JSR $BDCD      ; print number from AX
labl3   JSR $EE13      ; now the filename
        JSR $E716      ; put a character to screen
        BNE labl3      ; while not 0 encountered
        JSR $AAD7      ; put a CR , end line
        LDY #$02       ; set 2 bytes to skip
        BNE labl1      ; repeat
labl2   JSR $F642      ; close serial bus device
        JSR $F6F3      ; restore I/O devices to default
labl4   JSR $F142      ; w8 a key
        BEQ labl4

dirname .byte "$"

Hope it helps.
2005-08-31 19:13
Account closed

Registered: Oct 2004
Posts: 189
Plenty of good messages at $f0bd, printing routine at $f12b
To print "loading" ldy #$49;jsr $f12b

If you update $93 for load/verify you can print appropriate message with jsr $f5d2

jsr $f5af is "searching" + filename

ldx #01..1e; jsr $a43a for some more errors

What code you use to jump into MMC64 Flash? inc $df11;jmp?
2005-09-01 07:00

Registered: Apr 2004
Posts: 116
What code you use to jump into MMC64 Flash? inc $df11;jmp?

This is wat I use (by saving carry at destination I can preserve $01 too). It assumes no program maps char rom while loading (which I think is pretty safe).

dec  $df11
lsr  $01
jmp  $8xxx

2005-09-01 18:48
Account closed

Registered: Oct 2004
Posts: 189
That's eight bytes and causes side effects (tape control). I would try splitting code into three parts and use all three file tables.

dec $df11
bpl $267

ldx $01
ldy #$37
bne $272

sty $01
jmp $8xxx

That way you can have four open files without overwriting switching code.
2005-09-02 07:18

Registered: Apr 2004
Posts: 116
I use the rest of the space to LDA different values and some BIT trickery to be able to overload 6 vectors, which takes all 3 * 8 bytes. I doubt a typical game has more than two open files though, and the tape motor thing is unfortunate but not that big a deal IMO since I wont be using tape.

There might be other problems, I wont know until I try it properly (havent had time thse last couple of days).

RefreshSubscribe to this thread:

You need to be logged in to post in the forum.

Search the forum:
Search   for   in  
All times are CET.
Search CSDb
Users Online
Unkle K/Reset Magazi..
Dex-D/Airsomjith Class
Guests online: 97
Top Demos
1 Uncensored  (9.7)
2 Memento Mori  (9.7)
3 Edge of Disgrace  (9.6)
4 Coma Light 13  (9.6)
5 The Shores of Reflec..  (9.6)
6 Unboxed  (9.6)
7 Comaland 100%  (9.6)
8 Lunatico  (9.6)
9 Remains  (9.5)
10 C=Bit 18  (9.5)
Top onefile Demos
1 Cuarentenauta  (9.5)
2 Dawnfall V1.1  (9.5)
3 Listen to Your Eyes  (9.5)
4 Rewind  (9.5)
5 Instinct  (9.5)
6 Daah, Those Acid Pil..  (9.5)
7 Crystal Gazer  (9.5)
8 Smile to the Sky  (9.5)
9 The Tuneful Eight [u..  (9.5)
10 Bad Boy  (9.5)
Top Groups
1 PriorArt  (9.4)
2 Booze Design  (9.4)
3 Censor Design  (9.4)
4 Fossil  (9.4)
5 Performers  (9.3)
Top Cover Designers
1 Duce  (9.8)
2 Electric  (9.8)
3 Junkie  (9.7)
4 The Elegance  (9.4)
5 Mermaid  (9.3)

Home - Disclaimer
Copyright © No Name 2001-2020
Page generated in: 0.033 sec.