Temat: Własne "uzupełnienie" Basica

Potwierdźcie, jeśli dobrze kombinuję albo poprawcie, jeśli coś źle rozumiem.

Idea: Dodać do kodu Basica mały fragment, który przy Cold Start czy nawet przy Warm Start oprócz pokazania na ekranie wyłącznie READY przed tym tekstem doda jakiś napis.

Plan wykonania: oczywiście chodzi o zmianę zawartosci ROM-u tak, żeby właściwe dane się w nim znalazły a następnie użycie tak spreparowanego obrazu w prawdziwej Atarce. W przestrzeni adresowej jest co najmniej 4KB pustego miejsca (np. $C000 - $CFFF) i można tam wsadzić zarówno tekst, jak i prockę, która go wyświetli. Następnie można by to podpiąć pod procedurę startu podmieniając jeden z obecnych tam skoków na skok do mojego kodu, który następnie skoczy tam gdzie skakał oryginalny (brzydka łata ale najlepsza jaką mogę zrobić). Ma to działać wyłącznie w przypadku, gdy jest włączony oryginalny Basic.

Nie znam jeszcze odpowiedzi na pytanie, w której kości należy grzebać bo C000-CFFF to już poza Basikiem ale jeszcze przez OS.

Zakładając, że powyższy plan ma ręce i nogi, czy są jeszcze jakieś rzeczy, które należałoby uwzględnić? Przy okazji, czy jest gdzieś jakaś dokładniejsza rozpiska mapy pamięci dla interpretera Basica? Np. co robią procedury Cold Start (A000-A04C) i Warm Start (A04D-A05F) tudzież procedury, do których się w nich się skacze? Czy też jestem skazany na disassembler i dochodzenie własne, co to robi? W "Mapping the Atari - memory map" nie jest to rozpisane.  Nie jestem w tym dobry i zajmie mi trochę czasu nim się poprawię ale jeśli nie będzie wyjścia to dam radę.

Ostatnio edytowany przez perinoid (2021-05-16 10:41:24)

Pamięć studenta ma charakter kwantowy - student wie wszystko, ale jednocześnie nic nie pamięta.
- Kilka(naście?) pudełek z klawiszami i światełkami. I jeden Vectrex, żeby nimi wszystkimi rządzić.

2

Odp: Własne "uzupełnienie" Basica

U Zientary http://tajemnice.atari8.info/ksiazki/index.html "Procedury interpretera BASIC-a" rozdział "Uruchomienie interpretera".
Skoro już musisz, to proponuję fragment od etykiety CONT:

            0300     *=  $A000
            0310 ;
            0320 ;ColD STart
            0330 ;
            0340 CDST LDA LOADFLG
            0350     BNE CONT
            0360     LDA WARMST
            0370     BNE WMST
            0380 CONT LDX #$FF
            0390     TXS
            0400     CLD

zamienić na swój JSR i tam zrobić LDX #$FF i TXS po czym wypisać co tam chcesz używając zwykłego CIO.

Edit: Zwykłym CIO przez #0. Np. tak:

  ldx #$FF
  txs
  inx
  lda #$0B   ;PUTBT
  sta ICCMD,x
  lda #<msg
  sta ICBUFA,x
  lda #>msg
  sta ICBUFA+1,x
  lda #<msg.?len
  sta ICBUFL,x
  lda #>msg.?len
  sta ICBUFL+1,x
  jmp JCIOMAIN

msg:
  .byte 'Alamakota',$9B    ;$9B=EOL
  .byte '(c) 2021 by Perinoid',$9B
?len = *-msg

Ostatnio edytowany przez mono (2021-05-16 11:23:04)

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

3

Odp: Własne "uzupełnienie" Basica

No genialnie! Ogromne dzięki!

W międzyczasie naszło mnie tylko jedno pytanie. Napisałem powyżej o przestrzeni C000-CFFF. Według "Mapping the Atari", ten fragment jest wolny. Natomiast według Zientary "Podstawowe procedury systemu operacyjnego"  w tej przestrzeni są funkcje systemu operacyjnego i to cała masa. To jak jest z tym fragmentem w rzeczywistości?

Pamięć studenta ma charakter kwantowy - student wie wszystko, ale jednocześnie nic nie pamięta.
- Kilka(naście?) pudełek z klawiszami i światełkami. I jeden Vectrex, żeby nimi wszystkimi rządzić.

4

Odp: Własne "uzupełnienie" Basica

$C000-$CFFF jest wolne w Atari 400/800. W XL/XE tam jest OS.

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

5

Odp: Własne "uzupełnienie" Basica

U... Rozumiem. No to kicha. Muszę poszukać miejsca gdzieś indziej. Resztę już zrozumiałem i zaplanowałem, tylko miejsce mi teraz potrzebne (konkretnie 18 bajtów na kod i trochę więcej na tekst).

Ostatnio edytowany przez perinoid (2021-05-16 11:48:45)

Pamięć studenta ma charakter kwantowy - student wie wszystko, ale jednocześnie nic nie pamięta.
- Kilka(naście?) pudełek z klawiszami i światełkami. I jeden Vectrex, żeby nimi wszystkimi rządzić.

6

Odp: Własne "uzupełnienie" Basica

32 bajty + tekst jeśli dobrze liczę.
Jako że Twój kod znajdzie się w konkretnej wersji ROM i będzie niejako częścią konkretnego OS-a, to możesz korzystać z "nielegalnych" skoków prosto do OS-a np. do sławnej procedury PUTLINE ($C642) która wypisze Ci linię tekstu spod adresu w YX :) Kod będzie miał 7 bajtów (* ilość wierszy tekstu) zamiast 32 czyli:

  ldx #$FF
  txs
  ldx #<msg1
  ldy #>msg1
  jsr PUTLINE
  ldx #<msg2
  ldy #>msg2
  jmp PUTLINE
msg1 .byte 'Alamakota',$9B    ;$9B=EOL
msg2 .byte '(c) 2021 by Perinoid',$9B

Edit: Widzę że w $CB65..$CBFF masz trochę miejsca (BB01 czyi rev.02).

Ostatnio edytowany przez mono (2021-05-16 12:32:25)

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

7

Odp: Własne "uzupełnienie" Basica

Jak wykorzystam kod praktycznie identyczny z tym, który wypisuje na ekranie READY to wyjdzie 16 plus skok. Tak kombinowałem.

Ostatnio edytowany przez perinoid (2021-05-16 12:41:36)

Pamięć studenta ma charakter kwantowy - student wie wszystko, ale jednocześnie nic nie pamięta.
- Kilka(naście?) pudełek z klawiszami i światełkami. I jeden Vectrex, żeby nimi wszystkimi rządzić.

8

Odp: Własne "uzupełnienie" Basica

Jak szukasz miejsca, to pewną opcją może być popsucie paru znaków w miedzynarodowym generatorze. I tak nikt z niego nie korzysta.

9

Odp: Własne "uzupełnienie" Basica

laoo/ng napisał/a:

Jak szukasz miejsca, to pewną opcją może być popsucie paru znaków w miedzynarodowym generatorze. I tak nikt z niego nie korzysta.

Który to jest obszar? Na sam tekst potrzebuję jakieś 110 bajtów (3 wiersze) plus kod - w sumie powinno się na upartego wyrobić poniżej 128 bajtów.

Pamięć studenta ma charakter kwantowy - student wie wszystko, ale jednocześnie nic nie pamięta.
- Kilka(naście?) pudełek z klawiszami i światełkami. I jeden Vectrex, żeby nimi wszystkimi rządzić.

10

Odp: Własne "uzupełnienie" Basica

CHARSET2 $cc00-$cfff

http://atariki.krap.pl/index.php/ATASCII

11

Odp: Własne "uzupełnienie" Basica

laoo/ng napisał/a:

Jak szukasz miejsca, to pewną opcją może być popsucie paru znaków w miedzynarodowym generatorze. I tak nikt z niego nie korzysta.

Część starych produkcji XOR-uje się z zawartością ROM, zmiana chociażby jednego bajtu w takim wypadku spowoduje uszkodzenie danych "oryginalnej produkcji" w ten sposób "zabezpieczonej". Oczywiście nie ma dużo takich programów, niemniej jednak chciałem tylko nadmienić że istnieją (np. starusieńkie dema, takie z końcówki lat '80 i początku '90).