Autostart kartridża bez nagłówka CBM80? Jak to działa?
Autostart kartridża bez nagłówka CBM80? Jak to działa?
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
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]
we are the commodore terrorists
-------------------------------------
TEDDY BEER C=64 PARTY [csdb]
Re: Autostart kartridża bez nagłówka CBM80? Jak to działa?
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
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 (124.96 KiB) Przejrzano 2603 razy
B O O M !
we are the commodore terrorists
-------------------------------------
TEDDY BEER C=64 PARTY [csdb]
we are the commodore terrorists
-------------------------------------
TEDDY BEER C=64 PARTY [csdb]
Re: Autostart kartridża bez nagłówka CBM80? Jak to działa?
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...
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ł.
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ł.
Re: Autostart kartridża bez nagłówka CBM80? Jak to działa?
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 , a ja przy okazji się czegoś nauczę.
Pozdro
S
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 , 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]
we are the commodore terrorists
-------------------------------------
TEDDY BEER C=64 PARTY [csdb]
Re: Autostart kartridża bez nagłówka CBM80? Jak to działa?
(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
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ł.
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ł.
Re: Autostart kartridża bez nagłówka CBM80? Jak to działa?
Na nie będę ukrywał, dla mnie to czary mary. Daj znać po "ludzkiemu" co się tam wyczynia.
Dzięx
S
Dzięx
S
B O O M !
we are the commodore terrorists
-------------------------------------
TEDDY BEER C=64 PARTY [csdb]
we are the commodore terrorists
-------------------------------------
TEDDY BEER C=64 PARTY [csdb]
Re: Autostart kartridża bez nagłówka CBM80? Jak to działa?
$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.
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ł.
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ł.
Re: Autostart kartridża bez nagłówka CBM80? Jak to działa?
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]
we are the commodore terrorists
-------------------------------------
TEDDY BEER C=64 PARTY [csdb]