Autostart kartridża bez nagłówka CBM80? Jak to działa?

Tutaj możemy porozmawiać o sprzęcie i modyfikacjach C64.
Wiadomość
Autor
Awatar użytkownika
Steffan
Posty: 854
Rejestracja: 04 maja 2019, 19:43
Grupa: BooM!

Autostart kartridża bez nagłówka CBM80? Jak to działa?

#1 Post autor: Steffan »

Witam
Zakupiłem karta z 4 grami na pokładzie. Kart prosty jak budowa cepa. Pamieć 64kb w27c512. Dwa przełączniki do selekcji banku.
Podłączyłem do programatora i zgrałem. Zawartość 4 gry: $0000 Donkey Kong, $4000 River Ride, $8000 Ms.Pacman, $C000 Frogger

2,3,4 gra ma w nagłówku (jak bozia przykazała) 4 bajty wektorów startowych i "CBM80" potrzebne do autostartu.

Ku mojemu zdziwieniu Donkey Kong nie ma tego nagłówka, a startuje normalnie. I tu w końcu pojawia się moje pytanie:

Jakim cudem to w ogóle startuje?
Jedyny pomysł jaki przychodzi mi do głowy to że: komop startuje, kernal wykonuje sobie swoją startową procedure i w końcu skacze do jakiegoś kodu w Basic Rom-ie (którego przykrywa kart), a tam już czeka na niego kod przejmujący kontrolę nad światem. Potem to już z górki.
Jeśli to, co sobie wykombinowałem może działać, to raczej tylko z kartami 16kb, bo 8k już nie przykryje bejzika.
Może ktoś wie jak to naprawde działa, jeśli kart nie identyfikuje się nagłówkiem CBM80?

Dziękuję i pozdrawiam
Steffan
B O O M !
we are the commodore terrorists
-------------------------------------
TEDDY BEER C=64 PARTY [csdb]

Awatar użytkownika
Steffan
Posty: 854
Rejestracja: 04 maja 2019, 19:43
Grupa: BooM!

Re: Autostart kartridża bez nagłówka CBM80? Jak to działa?

#2 Post autor: Steffan »

Małe śledztwo. Zgrałem grę i przygotowałem obraz karta 16k z Donkey Kong-em używając cartconv z vice-a.
Potem ustawiłem break-a od $8k do $Ck w monitorze vice.
Najpierw standardowy start. PC staje na $a408 (w basic rom).
Potem start z dołączonym kartem. PC staje na $a00d (w pamięci karta).
Spodziewałem się tego samego adresu, a tu niespodzianka. Myślałem, że kod karta nadpisze procedure bejzika z $a408.

Później poszukałem nawet pierwsze miejsce w kodzie, gdzie to się rozjeżdza.

break 0000 ffff
reset 1
del <brake id>
break 8000 c000
step x

Programy rozjechały się dopiero po x = 446 tyś. krokach. Ta liczba ostudziła moją ciekawość. Jeszcze kilka tysięcy kroków później break staje u lewego na $a00d (start gry), a prawego na $a408 - jakaś procedura basic rom) Temat porzucam.
Dodaje screena z monitorami (po lewej start tego z grą, po prawej start standardowy).

Pozdrawiam
Steffan
Załączniki
vice-monitor.png
vice-monitor.png (124.96 KiB) Przejrzano 2604 razy
B O O M !
we are the commodore terrorists
-------------------------------------
TEDDY BEER C=64 PARTY [csdb]

Awatar użytkownika
wegi
Posty: 839
Rejestracja: 14 lip 2009, 01:17

Re: Autostart kartridża bez nagłówka CBM80? Jak to działa?

#3 Post autor: wegi »

Podejrzewam...
W każdym razie jak cart się nie przedstawia (CBM80) to po resecie następuje skok przez wektor startu Basica jakoś tak. Innymi słowy jeżeli cart przesłania Basic to i tak kernel po resecie zrobi skok do Basica, w tym wypadku do romu zawartego w cartidge'u.
Jest to o tyle mniej "pewne" że gdyby wersje romów miały inny adres startu Basica, to mogłoby się wykrzaczać.
CBM80 jest niezbędne jak chcesz startować carta przez wektor $8000 - kiedyś z suchym to rozważaliśmy debatując nad jego Ucartem.
edit:
Jeżeli jest to cart, który jak AR "pokazuje" tylko swoje 8KB od adresu $8000-$9fff i nie ma CBM80 wówczas zgłosi się Basic ze zmniejszoną ilością wolnych bajtów (38911-8096).
Jeżeli pokazuje on 16KB od adresu $8000 to jak poprzednio - poleci przez wektor Basic.

Z tego co piszesz, (bo nie wiem jak wygląda ten cart) możliwe że cart potrafi się bankować 2 x po 16 kB i jest wybór przez menu zawartego w "połówce" z 32 Kb, która się "zgłosiła" po resecie i za pomocą kodu z menu jest wybrany drugi bank (drugie 16KB) i skok do uruchomienia gry bez procedury resetu.
Najstarszy bit adresowy przełączasz ręcznie wybierając "górne/dolne" 32 kB

PS.
Zakładam że nie jest to cart działający w ULTIMAX mode, bo wtedy w ogóle nie potrzebne jest cbm80, gdy przesłaniasz kernal i Basic pamięcią carta...
2021.06.16 "U mnie w okolicy też nikt nie umarł - ale nie będę na tej podstawie twierdził, że Covid nie istnieje ani że nie jest żadnym zagrożeniem"

2023.09.09 U mnie też nikt nie umarł włącznie z ciotką chorą na białaczkę. Dwukrotnie zaszczepiona dostała covida w szpitalu - żyje. Ta plandemia to już jak Bóg - wszędzie jest i nikt go nie widział.

Awatar użytkownika
Steffan
Posty: 854
Rejestracja: 04 maja 2019, 19:43
Grupa: BooM!

Re: Autostart kartridża bez nagłówka CBM80? Jak to działa?

#4 Post autor: Steffan »

Cześć!
Wegi ale mnie swoją odpowiedzią ucieszyłeś. Załączam pliki: bin (zgrany z eproma) i crt (skonwertowany przez cartconv dla vice-a). Jak będzie Ci się nudziło proszę rzuć na to okiem. Rozwikłasz zagadkę jak w CSI :D, a ja przy okazji się czegoś nauczę.

Pozdro
S
Załączniki
zagadka z donkey kongem.zip
(22.23 KiB) Pobrany 40 razy
B O O M !
we are the commodore terrorists
-------------------------------------
TEDDY BEER C=64 PARTY [csdb]

Awatar użytkownika
wegi
Posty: 839
Rejestracja: 14 lip 2009, 01:17

Re: Autostart kartridża bez nagłówka CBM80? Jak to działa?

#5 Post autor: wegi »

(C:$ad81) break fce2
BREAK: 1 C:$fce2 (Stop on exec)
(C:$ad81) x
#1 (Stop on exec fce2) 000 006
.C:fce2 A2 FF LDX #$FF - A:FE X:00 Y:00 SP:fd NV-....C 6
(C:$fce2) n
.C:fce4 78 SEI - A:FE X:FF Y:00 SP:fd NV-....C 8
(C:$fce4) n
.C:fce5 9A TXS - A:FE X:FF Y:00 SP:fd NV-..I.C 10
(C:$fce5) n
.C:fce6 D8 CLD - A:FE X:FF Y:00 SP:ff NV-..I.C 12
(C:$fce6) n
.C:fce7 20 02 FD JSR $FD02 - A:FE X:FF Y:00 SP:ff NV-..I.C 14
(C:$fce7) n
.C:fcea D0 03 BNE $FCEF - A:30 X:05 Y:00 SP:ff .V-..I.C 39
(C:$fcea) n
.C:fcef 8E 16 D0 STX $D016 - A:30 X:05 Y:00 SP:ff .V-..I.C 42
(C:$fcef) n
.C:fcf2 20 A3 FD JSR $FDA3 - A:30 X:05 Y:00 SP:ff .V-..I.C 46
(C:$fcf2) n
.C:fcf5 20 50 FD JSR $FD50 - A:57 X:FF Y:00 SP:ff .V-..I.C 187
(C:$fcf5) n
.C:fcf8 20 15 FD JSR $FD15 - A:04 X:00 Y:80 SP:ff .V-..I.. 1694853
(C:$fcf8) n
.C:fcfb 20 5B FF JSR $FF5B - A:31 X:30 Y:FF SP:ff NV-..I.. 1695828
(C:$fcfb) n
.C:fcfe 58 CLI - A:97 X:01 Y:84 SP:ff N.-..I.C 1745939
(C:$fcfe) n
===========================
===============================
===================================
.C:fcff 6C 00 A0 JMP ($A000) - A:97 X:01 Y:84 SP:ff N.-....C 1745941
===================================
===============================
==========================
(C:$fcff) m a000 a007
====================
>C:a000 0d a0 0d a0 43 42 4d 42 ....CBMB
====================
(C:$a008) break a00d
BREAK: 2 C:$a00d (Stop on exec)
(C:$a008)(C:$a008) x
#2 (Stop on exec a00d) 260 057
.C:a00d 58 CLI - A:97 X:01 Y:84 SP:ff N.-....C 1746165
(C:$a00d) z
.C:a00e A9 18 LDA #$18 - A:97 X:01 Y:84 SP:ff N.-....C 1746167
(C:$a00e) z
.C:a010 8D 18 03 STA $0318 - A:18 X:01 Y:84 SP:ff ..-....C 1746169
(C:$a010) z
.C:a013 A9 A0 LDA #$A0 - A:18 X:01 Y:84 SP:ff ..-....C 1746173
(C:$a013) z
.C:a015 8D 19 03 STA $0319 - A:A0 X:01 Y:84 SP:ff N.-....C 1746175
(C:$a015) z
.C:a018 A9 FF LDA #$FF - A:A0 X:01 Y:84 SP:ff N.-....C 1746179
(C:$a018) z
.C:a01a 8D 0E D4 STA $D40E - A:FF X:01 Y:84 SP:ff N.-....C 1746181
(C:$a01a) z
.C:a01d 8D 0F D4 STA $D40F - A:FF X:01 Y:84 SP:ff N.-....C 1746185
(C:$a01d)
.C:a020 A9 80 LDA #$80 - A:FF X:01 Y:84 SP:ff N.-....C 1746189
(C:$a020)

(C:$a037) d a00d a050
.C:a00d 58 CLI
.C:a00e A9 18 LDA #$18
.C:a010 8D 18 03 STA $0318
.C:a013 A9 A0 LDA #$A0
.C:a015 8D 19 03 STA $0319
.C:a018 A9 FF LDA #$FF
.C:a01a 8D 0E D4 STA $D40E
.C:a01d 8D 0F D4 STA $D40F
.C:a020 A9 80 LDA #$80
.C:a022 8D 12 D4 STA $D412
.C:a025 A9 8F LDA #$8F
.C:a027 8D 18 D4 STA $D418
.C:a02a A0 00 LDY #$00
.C:a02c AD 1B D4 LDA $D41B
.C:a02f 99 00 0B STA $0B00,Y
.C:a032 C8 INY
.C:a033 D0 F7 BNE $A02C
.C:a035 A9 00 LDA #$00
.C:a037 8D 0E DC STA $DC0E
.C:a03a A9 1C LDA #$1C
.C:a03c 20 6B 98 JSR $986B
.C:a03f A9 1D LDA #$1D
.C:a041 20 6B 98 JSR $986B
.C:a044 A9 1E LDA #$1E
.C:a046 20 6B 98 JSR $986B
.C:a049 A9 00 LDA #$00
.C:a04b 85 E9 STA $E9
.C:a04d 85 FA STA $FA
.C:a04f 85 FB STA $FB
.C:a051 85 FC STA $FC
2021.06.16 "U mnie w okolicy też nikt nie umarł - ale nie będę na tej podstawie twierdził, że Covid nie istnieje ani że nie jest żadnym zagrożeniem"

2023.09.09 U mnie też nikt nie umarł włącznie z ciotką chorą na białaczkę. Dwukrotnie zaszczepiona dostała covida w szpitalu - żyje. Ta plandemia to już jak Bóg - wszędzie jest i nikt go nie widział.

Awatar użytkownika
Steffan
Posty: 854
Rejestracja: 04 maja 2019, 19:43
Grupa: BooM!

Re: Autostart kartridża bez nagłówka CBM80? Jak to działa?

#6 Post autor: Steffan »

Na nie będę ukrywał, dla mnie to czary mary. Daj znać po "ludzkiemu" co się tam wyczynia. :)
Dzięx
S
B O O M !
we are the commodore terrorists
-------------------------------------
TEDDY BEER C=64 PARTY [csdb]

Awatar użytkownika
wegi
Posty: 839
Rejestracja: 14 lip 2009, 01:17

Re: Autostart kartridża bez nagłówka CBM80? Jak to działa?

#7 Post autor: wegi »

$fce2 to reset C64 zapodany w wektorze ($fffc)
Inicjalizacja stosu i procedury inicjacji CIA, kopiowanie wektorów

$fd02 to test CBM80 - nie wykrywa go i leci dalej - gdyby wykrył byłoby jmp ($8000)

Skoro nie ma CBM80 leci dalej ustawia wektory basic, inicjacja VIC i na końcu po CLI skok przez wektor ($a000)
A000 wskazuje na $a00d
Zanim wykona się jmp($a000) jest po CLI wykonane jedne przerwanie IRQ i zaraz po jego zakończeniu leci jmp ($a000)

Normalnie jak mówiłem na początku.
2021.06.16 "U mnie w okolicy też nikt nie umarł - ale nie będę na tej podstawie twierdził, że Covid nie istnieje ani że nie jest żadnym zagrożeniem"

2023.09.09 U mnie też nikt nie umarł włącznie z ciotką chorą na białaczkę. Dwukrotnie zaszczepiona dostała covida w szpitalu - żyje. Ta plandemia to już jak Bóg - wszędzie jest i nikt go nie widział.

Awatar użytkownika
Steffan
Posty: 854
Rejestracja: 04 maja 2019, 19:43
Grupa: BooM!

Re: Autostart kartridża bez nagłówka CBM80? Jak to działa?

#8 Post autor: Steffan »

wegi pisze:
21 lis 2020, 21:33
Normalnie jak mówiłem na początku.
Teraz zakumkałem. Z tego co czytam, to ja też w lutym takie coś podejrzewałem, ale niestety poziom wtajemniczenia za mały. Jeszcze dużo nauki przede mną.
Dziękuję Ci bardzo!
S.
B O O M !
we are the commodore terrorists
-------------------------------------
TEDDY BEER C=64 PARTY [csdb]

ODPOWIEDZ