1 Ostatnio edytowany przez Montezuma (2019-07-22 10:32:17)

Jak już napisałem na forum: http://www.atari.org.pl/forum/viewtopic … 36#p252436
zauważyłem , że XEX loader z projektu SDRIVE wyłącza BASIC, czyli, ze nie trzeba wciskać OPTION, żeby załadować gry potrzebujące więcej RAM-u.

Zastanawiam się, jak działa ta magia, bo w kodzie loader-a nie widzę odniesień do $D301 (PORTB).
Kod zdeasemblowałem na szybko za pomocą http://e-tradition.net/bytes/6502/disassembler.html
Plik binarny w załączeniu.

Czy ktoś ma jakiś pomysł?

                  * = 075F
075F   A9 20      LDA #$20
0761   8D 04 03   STA $0304
0764   8D 44 02   STA $0244
0767   A9 07      LDA #$07
0769   8D 05 03   STA $0305
076C   A9 70      LDA #$70
076E   8D 0A 03   STA $030A
0771   A9 01      LDA #$01
0773   8D 0B 03   STA $030B
0776   85 09      STA $09
0778   60         RTS
0779   7D 8A 48   ADC $488A,X
077C   20 53 E4   JSR $E453
077F   88         DEY
0780   D0 FA      BNE $077C
0782   68         PLA
0783   AA         TAX
0784   8C 8E 07   STY $078E
0787   AD 7D 07   LDA $077D
078A   EE 8E 07   INC $078E
078D   60         RTS
078E   A9 93      LDA #$93
0790   8D E2 02   STA $02E2
0793   A9 07      LDA #$07
0795   8D E3 02   STA $02E3
0798   A2 02      LDX #$02
079A   20 DA 07   JSR $07DA
079D   95 43      STA $43,X
079F   20 DA 07   JSR $07DA
07A2   95 44      STA $44,X
07A4   35 43      AND $43,X
07A6   C9 FF      CMP #$FF
07A8   F0 F0      BEQ $079A
07AA   CA         DEX
07AB   CA         DEX
07AC   10 EC      BPL $079A
07AE   30 06      BMI $07B6
07B0   E6 45      INC $45
07B2   D0 02      BNE $07B6
07B4   E6 46      INC $46
07B6   20 DA 07   JSR $07DA
07B9   A2 01      LDX #$01
07BB   81 44      STA ($44,X)
07BD   B5 45      LDA $45,X
07BF   D5 43      CMP $43,X
07C1   D0 ED      BNE $07B0
07C3   CA         DEX
07C4   10 F7      BPL $07BD
07C6   20 D2 07   JSR $07D2
07C9   4C 94 07   JMP $0794
07CC   A9 03      LDA #$03
07CE   8D 0F D2   STA $D20F
07D1   6C E2 02   JMP ($02E2)
07D4   AD 8E 07   LDA $078E
07D7   CD 7F 07   CMP $077F
07DA   D0 AB      BNE $0787
07DC   EE 0A 03   INC $030A
07DF   D0 03      BNE $07E4
07E1   EE 0B 03   INC $030B
07E4   AD 7D 07   LDA $077D
07E7   0D 7E 07   ORA $077E
07EA   D0 8E      BNE $077A
07EC   20 D2 07   JSR $07D2
07EF   6C E0 02   JMP ($02E0)
07F2   20 DA 07   JSR $07DA
07F5   8D E0 02   STA $02E0
07F8   20 DA 07   JSR $07DA
07FB   8D E1 02   STA $02E1
07FE   2D E0 02   AND $02E0
0801   C9 FF      CMP #$FF
0803   F0 ED      BEQ $07F2
0805   A9 20      LDA #$20
0807   8D 8E 07   STA $078E
080A   F0 82      BEQ $078E
080C              .END
Post's attachments

loader 179 b, liczba pobrań: 1 (od 2019-07-22) 

Tylko zalogowani mogą pobierać załączniki.
ATARI 65XE + SIO2BT
http://atari.pl/hsc/ad.php?i=22.3

2 Ostatnio edytowany przez mono (2019-07-22 10:38:24)

To na pewno jest pełny loader? To jest BOOT więc 6 pierwszych bajtów to jest nagłówek - ładowane są 2 sektory 128 bajtowe począwszy od adresu $75F. Spróbowałbyś ponownie zdisassemblować kod loadera?

Edit: Czytasz mi w myślach :) Dzięki. ALE! $75F to jest adres ładowania boota razem z nagłówkiem. Loader jest niepełny bo to:

0805   A9 20      LDA #$20
0807   8D 8E 07   STA $078E
080A   F0 82      BEQ $078E

przecież pójdzie w krzaki.

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

3

Sorry za edytowanie, ale sam zorientowałem się, że coś nie gra.
Tutaj jeszcze raz uwzględniając poprawkę, że
"Program uruchamiany jest od adresu wczytywania, plus sześć bajtów. "

Nagłówek BOOT-a

72 - wartość bez znaczenia
02 - liczba 128-bajtowych sektorów dyskietki jakie należy wczytać 
5f 07 - adres, pod jaki system operacyjny wczyta całość danych ($75F)
f8 07 - adres ponownego inicjowania programu w przypadku wciśnięcia klawisza RESET ($7f8)

Kod zdisassemblowany od adresu $75F+6

                  * = 0765
0765   A9 20      LDA #$20
0767   8D 04 03   STA $0304
076A   8D 44 02   STA $0244
076D   A9 07      LDA #$07
076F   8D 05 03   STA $0305
0772   A9 70      LDA #$70
0774   8D 0A 03   STA $030A
0777   A9 01      LDA #$01
0779   8D 0B 03   STA $030B
077C   85 09      STA $09
077E   60         RTS
077F   7D 8A 48   ADC $488A,X
0782   20 53 E4   JSR $E453
0785   88         DEY
0786   D0 FA      BNE $0782
0788   68         PLA
0789   AA         TAX
078A   8C 8E 07   STY $078E
078D   AD 7D 07   LDA $077D
0790   EE 8E 07   INC $078E
0793   60         RTS
0794   A9 93      LDA #$93
0796   8D E2 02   STA $02E2
0799   A9 07      LDA #$07
079B   8D E3 02   STA $02E3
079E   A2 02      LDX #$02
07A0   20 DA 07   JSR $07DA
07A3   95 43      STA $43,X
07A5   20 DA 07   JSR $07DA
07A8   95 44      STA $44,X
07AA   35 43      AND $43,X
07AC   C9 FF      CMP #$FF
07AE   F0 F0      BEQ $07A0
07B0   CA         DEX
07B1   CA         DEX
07B2   10 EC      BPL $07A0
07B4   30 06      BMI $07BC
07B6   E6 45      INC $45
07B8   D0 02      BNE $07BC
07BA   E6 46      INC $46
07BC   20 DA 07   JSR $07DA
07BF   A2 01      LDX #$01
07C1   81 44      STA ($44,X)
07C3   B5 45      LDA $45,X
07C5   D5 43      CMP $43,X
07C7   D0 ED      BNE $07B6
07C9   CA         DEX
07CA   10 F7      BPL $07C3
07CC   20 D2 07   JSR $07D2
07CF   4C 94 07   JMP $0794
07D2   A9 03      LDA #$03
07D4   8D 0F D2   STA $D20F
07D7   6C E2 02   JMP ($02E2)
07DA   AD 8E 07   LDA $078E
07DD   CD 7F 07   CMP $077F
07E0   D0 AB      BNE $078D
07E2   EE 0A 03   INC $030A
07E5   D0 03      BNE $07EA
07E7   EE 0B 03   INC $030B
07EA   AD 7D 07   LDA $077D
07ED   0D 7E 07   ORA $077E
07F0   D0 8E      BNE $0780
07F2   20 D2 07   JSR $07D2
07F5   6C E0 02   JMP ($02E0)
07F8   20 DA 07   JSR $07DA
07FB   8D E0 02   STA $02E0
07FE   20 DA 07   JSR $07DA
0801   8D E1 02   STA $02E1
0804   2D E0 02   AND $02E0
0807   C9 FF      CMP #$FF
0809   F0 ED      BEQ $07F8
080B   A9 20      LDA #$20
080D   8D 8E 07   STA $078E
0810   F0 82      BEQ $0794
0812              .END
ATARI 65XE + SIO2BT
http://atari.pl/hsc/ad.php?i=22.3

4

Loader ma 179=6+173 bajtow, a więc reszta drugiego sektora wypełniona jest pewnie zerami.
Ciekawostką jest to, że kod jest relokowalny w taki sposób, że wszystkie wystąpienia bajtu '$07' w  loaderze można zamienić na inny numer strony pamięci, np. '$05'.
Np. w appce SIO2BT można przytrzymać palec na nazwie pliku gra.xex, żeby pojawiła się lista stron pamięci, na którą chcemy załadować loader.

ATARI 65XE + SIO2BT
http://atari.pl/hsc/ad.php?i=22.3

5 Ostatnio edytowany przez Montezuma (2019-07-22 12:22:51)

Tu w załączniku orginalny plik z projektu SDRIVE

Post's attachments

sboot.h 1.14 kb, liczba pobrań: 4 (od 2019-07-22) 

Tylko zalogowani mogą pobierać załączniki.
ATARI 65XE + SIO2BT
http://atari.pl/hsc/ad.php?i=22.3

6

Is this the same source code?

https://github.com/joysfera/SDrive/blob … /SBOOT.A65

7

:rolleyes: Yes, it is. I downloaded sdrive sources from: https://nuxx.net/wiki/SDrive_NUXX, where SDrive20090403.zip is mirrored, but I must have overlooked the *.a65 file.
The loader code seems to be highly optimised...
What happens there, so that BASIC gets switched off ?

ATARI 65XE + SIO2BT
http://atari.pl/hsc/ad.php?i=22.3

8

I suspect BASIC is switched off somewhere else, perhaps by ATRs themselves, MyPicoDOS, etc. Possibly even a patched OS with reverse Option logic? I even searched Google and in all articles I found, it was said that Option must be held to disable BASIC with SDrive, unless the ATRs themselves have provision for automatically disabling BASIC.

9

WTF
I used notepad++ with the Hexviewer plugin to copy the bytes to the http://e-tradition.net/bytes/6502/disassembler.html webpage. Now I realized that Hexviewer plugin screwed it up.
One more try - this time with wxHexEditor.
Disassembly results (should match SBOOT.A65):

                  * = 0765
0765   A9 00      LDA #$00
0767   8D 04 03   STA $0304
076A   8D 44 02   STA $0244
076D   A9 07      LDA #$07
076F   8D 05 03   STA $0305
0772   A9 70      LDA #$70
0774   8D 0A 03   STA $030A
0777   A9 01      LDA #$01
0779   8D 0B 03   STA $030B
077C   85 09      STA $09
077E   60         RTS
077F   7D 8A 48   ADC $488A,X
0782   20 53 E4   JSR $E453
0785   88         DEY
0786   D0 FA      BNE $0782
0788   68         PLA
0789   AA         TAX
078A   8C 8E 07   STY $078E
078D   AD 7D 07   LDA $077D
0790   EE 8E 07   INC $078E
0793   60         RTS
0794   A9 93      LDA #$93
0796   8D E2 02   STA $02E2
0799   A9 07      LDA #$07
079B   8D E3 02   STA $02E3
079E   A2 02      LDX #$02
07A0   20 DA 07   JSR $07DA
07A3   95 43      STA $43,X
07A5   20 DA 07   JSR $07DA
07A8   95 44      STA $44,X
07AA   35 43      AND $43,X
07AC   C9 FF      CMP #$FF
07AE   F0 F0      BEQ $07A0
07B0   CA         DEX
07B1   CA         DEX
07B2   10 EC      BPL $07A0
07B4   30 06      BMI $07BC
07B6   E6 45      INC $45
07B8   D0 02      BNE $07BC
07BA   E6 46      INC $46
07BC   20 DA 07   JSR $07DA
07BF   A2 01      LDX #$01
07C1   81 44      STA ($44,X)
07C3   B5 45      LDA $45,X
07C5   D5 43      CMP $43,X
07C7   D0 ED      BNE $07B6
07C9   CA         DEX
07CA   10 F7      BPL $07C3
07CC   20 D2 07   JSR $07D2
07CF   4C 94 07   JMP $0794
07D2   A9 03      LDA #$03
07D4   8D 0F D2   STA $D20F
07D7   6C E2 02   JMP ($02E2)
07DA   AD 8E 07   LDA $078E
07DD   CD 7F 07   CMP $077F
07E0   D0 AB      BNE $078D
07E2   EE 0A 03   INC $030A
07E5   D0 03      BNE $07EA
07E7   EE 0B 03   INC $030B
07EA   AD 7D 07   LDA $077D
07ED   0D 7E 07   ORA $077E
07F0   D0 8E      BNE $0780
07F2   20 D2 07   JSR $07D2
07F5   6C E0 02   JMP ($02E0)
07F8   20 DA 07   JSR $07DA
07FB   8D E0 02   STA $02E0
07FE   20 DA 07   JSR $07DA
0801   8D E1 02   STA $02E1
0804   2D E0 02   AND $02E0
0807   C9 FF      CMP #$FF
0809   F0 ED      BEQ $07F8
080B   A9 00      LDA #$00
080D   8D 8E 07   STA $078E
0810   F0 82      BEQ $0794
0812              .END
ATARI 65XE + SIO2BT
http://atari.pl/hsc/ad.php?i=22.3

10

When copied from Notepad++ all 0x00 bytes were replaced with 0x20...

ATARI 65XE + SIO2BT
http://atari.pl/hsc/ad.php?i=22.3

11

flashjazzcat napisał/a:

I suspect BASIC is switched off somewhere else, perhaps by ATRs themselves, MyPicoDOS, etc. Possibly even a patched OS with reverse Option logic? I even searched Google and in all articles I found, it was said that Option must be held to disable BASIC with SDrive, unless the ATRs themselves have provision for automatically disabling BASIC.

I see. Bios4Config shows that BASIC is ON after Atari is powered ON and then that BASIC is OFF after some sectors are loaded. I assumed that this happens after the XEX loader was started, but you are right, it is the game (XEX) that does the job... It looks like all games from Homesoft collections are patched this way...

Now the magic is gone :)

Post's attachments

Montezuma's Revenge ! (preliminary version).zip 19.06 kb, liczba pobrań: 1 (od 2019-07-22) 

montezuma.PNG 17.29 kb, nikt jeszcze nie pobierał tego pliku. 

Tylko zalogowani mogą pobierać załączniki.
ATARI 65XE + SIO2BT
http://atari.pl/hsc/ad.php?i=22.3

12

Good - well figured out. :)