Log inRegister an accountBrowse CSDbHelp & documentationFacts & StatisticsThe forumsAvailable RSS-feeds on CSDbSupport CSDb Commodore 64 Scene Database
You are not logged in - nap
CSDb User Forums


Forums > C64 Coding > EF 3 hardware crash
2021-07-05 11:10
oziphantom

Registered: Oct 2014
Posts: 478
EF 3 hardware crash

So I have this Easy flash cart that I'm flashing to the EF3 in the normal way. Nothing special.
In VICE it works perfectly fine, no issues.

However on hardware it crashes.
The structure is a little odd.
the lo bank is mirrored across all lower banks, i.e bank 0 8000-9FFF = 1 8000-9FFF = 2 8000-9FFF etc the upper 8K is unique, kind of the reverse of a NES mapper I guess.

When the code changes the bank, there is a routine that takes A and does
and #$3f
sta $DE01
rts

on hardware this kills it, as far as I can tell a BRK occurs. It should be fine because that routine is in every lower bank in the same spot. That fact that it works in VICE tells me this is true.
But is there a case where on hardware ( I'm running it on a Commodore 128, it has also been shown to fail on a 1541U11+ with identical behavior ) the read of the RTS can fail? It gets garbage data for the next clock, the latch hasn't settled in time or something?

Or any other ideas?
 
... 17 posts hidden. Click here to view all posts....
 
2021-07-05 12:56
Martin Piper

Registered: Nov 2007
Posts: 634
Have to agree, bank switching code in RAM is the way to go.
2021-07-05 13:20
oziphantom

Registered: Oct 2014
Posts: 478
Yup it crashes here is the complete code and pre-built ef cart https://www.dropbox.com/s/qh5bt265xcx2dpt/ef_crashtest.zip?dl=0 it has a batch file, but it is trivial to convert to anything else. assembles with 64tass

but for those that just want to snoop the code
; upper bank
.logical $a000
* = $bfd8
coldStart
sei
        ldx #$ff
        txs
        cld
        lda #8
        sta $d016

        _coldStart_wait_for_ram:
        sta $0100, x
        dex
        bne _coldStart_wait_for_ram

        ldx #$40
        _coldStart_l1:
        lda _startUpCode+$4000, x
        sta $0100, x
        dex
        bpl _coldStart_l1
        jmp $0100

*= $BF98
_startUpCode
        lda #$87
        sta $de02
        lda #$7f
        sta $dc00
        ldx #$ff
        stx $dc02
        inx
        stx $dc03
        lda $dc01
        stx $dc02
        stx $dc00
        and #$e0
        cmp #$e0
        bne _startUpCode_kill
        ldx #0
        stx $d016
        jsr $ff84
        jsr $ff87
        jsr $ff8a
        jsr $ff81
        jmp $8000
        _startUpCode_kill:
        lda #4
        sta $de02
        jmp ($fffc)
        _startUpCode_end:

*= $BFFA 
.word $FFFE
.word coldStart+$4000
.word $4040
.here


;lowerBank00.asm 
.logical $8000
start
	lda #1
	sta $0400
	jsr changeBanks
	lda #2
	sta $0400
-	inc $d020
	jmp -
changeBanks
	and #$3f
	sta $de01
	rts
.here


;makeBin.asm
*=$0000
Bank0Lo .binclude "lowerBank00.asm"
*=$2000
Bank0Hi .binclude "upperBank.asm"
*=$4000 
Bank1Lo .binclude "lowerBank00.asm"
*=$6000
.fill $2000,$EA
2021-07-05 13:32
chatGPZ

Registered: Dec 2001
Posts: 11108
despite its a bit irritating that the ROMH bank base address is set to $a000 and not $e000 as it should be, this should work just fine. will test on the real thing later :)
2021-07-05 13:33
JackAsser

Registered: Jun 2002
Posts: 1989
Worked fine on my C128D using my custom EotB-carts. They are a direct clone of the logic in an EF1-cart but implemented using a CPLD. A 'B' is shown and the border is inc'd, like the code. Also works fine on the 1541U2+ EF-emulation (firmware 3.3(112)), again running on the same C128D. Will test with a plain C128 tonight.
2021-07-05 13:43
chatGPZ

Registered: Dec 2001
Posts: 11108
One thing that comes to mind - did you try setting the irq vector to something valid? Perhaps you are getting a spurious interrupt for some reason.
2021-07-05 15:17
sailor

Registered: Jan 2002
Posts: 90
start
             sei                ; reset/init
             ldx #$ff
             txs
             cld
             lda #$2f
             sta $00
             lda #$e7
             sta $01

             lda #$00           ;fd50. memclr+test
             tay
Ifd53        STA $0002,Y    
             STA $0200,Y
             STA $0300,Y
             INY
             BNE IFD53
             ldx #<($8000)
             ldy #>($8000)
             jsr $FD8D
             jsr $e3bf  ;reset basic vectors
             jsr $e453  ;reset 0300-030b
             jsr $ff81
             jsr $ff84
             jsr $ff8a  ;reset 0314-0330

This is what I have for booting an EF, for C64 atleast. I remember that $00/$01 had to be set or it could/would crash, worked flawlessly in emu tho.
2021-07-05 15:44
chatGPZ

Registered: Dec 2001
Posts: 11108
Quote:
I remember that $00/$01 had to be set or it could/would crash

that should not be the case (unless broken hardware/PLA/pullups) as long as regular ROMs are being accessed.
2021-07-05 16:06
tlr

Registered: Sep 2003
Posts: 1714
Quoting sailor
start
             sei                ; reset/init
             ldx #$ff
             txs
             cld
             lda #$2f
             sta $00
             lda #$e7
             sta $01


This is what I have for booting an EF, for C64 atleast. I remember that $00/$01 had to be set or it could/would crash, worked flawlessly in emu tho.

Isn't that $00/$01 ordering risky? You set the DDR before setting the actual value in $01. IIRC $00 is cleared on reset effectively making all bits output 1's which is a safe state. You'd want the $01 value to be correct before changing that or else your ROM might go away below your feet.
2021-07-05 16:33
oziphantom

Registered: Oct 2014
Posts: 478
the JSR $FF84 in the "$100" code sets $00 and $01 explicitly.

If I put the inc border in infinite loop the line before the "change cart" bank then it works. And thus the code is easily making it past, past the move to $100, swiching the cart to 16K from ultimax mode and thus remove the $40,$40 from being the IRQ vector.
2021-07-05 16:55
sailor

Registered: Jan 2002
Posts: 90
Right!

That is wrong,

this is the correct order

start
                    sei                ; reset/init
                    ldx #$ff
                    txs
                    cld
                    lda #$e7
                    sta $01
                    lda #$2f
                    sta $00
Previous - 1 | 2 | 3 - Next
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
Advanced
Users Online
Matt
Knut Clausen/SHAPE/F..
CA$H/TRiAD
megasoftargentina
Mibri/ATL^MSL^PRX
Shake/Role
t0m3000/ibex-crew
Guests online: 115
Top Demos
1 Next Level  (9.8)
2 Mojo  (9.7)
3 Coma Light 13  (9.7)
4 Edge of Disgrace  (9.6)
5 Comaland 100%  (9.6)
6 No Bounds  (9.6)
7 Uncensored  (9.6)
8 Wonderland XIV  (9.6)
9 Bromance  (9.6)
10 Memento Mori  (9.6)
Top onefile Demos
1 It's More Fun to Com..  (9.7)
2 Party Elk 2  (9.7)
3 Cubic Dream  (9.6)
4 Copper Booze  (9.5)
5 Rainbow Connection  (9.5)
6 TRSAC, Gabber & Pebe..  (9.5)
7 Onscreen 5k  (9.5)
8 Wafer Demo  (9.5)
9 Dawnfall V1.1  (9.5)
10 Quadrants  (9.5)
Top Groups
1 Oxyron  (9.3)
2 Nostalgia  (9.3)
3 Booze Design  (9.3)
4 Censor Design  (9.3)
5 Crest  (9.3)
Top Webmasters
1 Slaygon  (9.7)
2 Perff  (9.6)
3 Morpheus  (9.5)
4 Sabbi  (9.5)
5 CreaMD  (9.1)

Home - Disclaimer
Copyright © No Name 2001-2024
Page generated in: 0.05 sec.