Madsowy „Hello World!”

Czytam powoli „Atari Roots” i przy trybach adresowania wymyśliłem sobie „Hello World” z wykorzystaniem madsowego .sb. Pomysł jest taki: pobieramy adres pamięci tekstu z adresu 660 i 661. Jest to trzecia od dołu linijka ekranu (pewnie dlatego, żeby print w basicu był prosty i obsługiwał tryby graficzne z „okienkiem tekstowym”). Odejmujemy odpowiednią magiczną liczbę (20 linii = 800 bajtów, LSB i MSB łatwo przeliczyć).

hello

Niespodzianka polega na tym, że opis .sb mówi: „it will convert all bytes into ATASCII screen codes before storing them”. Konwersja wykonywana jest do kodów ekranowych, stąd porównanie cmp #$db już po konwersji, zamiast #$9b.

     org $600
     cld
     sec
     lda 660
     sbc #32
     sta $cb
     lda 661
     sbc #3
     sta $cc
     ldy #0
     ldx #0
loop lda txt,y
     cmp #$db
     beq nxtl
     sta ($cb),y
     iny
     jmp loop
nxtl clc
     ldy #0
     lda $cb
     adc #54
     sta $cb
     lda $cc
     adc #0
     sta $cc
     inx
     cpx #24
     bne loop
rbow lda $d20a
     sta $d018
     lda #0
     sta $2c5
     sta $d40a
     jmp rbow
txt  .sb 'Hello World!' $9b

W „promocji” namalujemy na końcu losową tęczę :). Możliwości generowania obrazu tego małego komputerka zawsze mnie fascynowały.

Tabela mapowania ATASCII na kody ekranowe tutaj. Jak zauważył xxl na forum atarionline.pl przy napisie dłuższym niż 255 bajtów rejestr y się przekręci. W „Hello World!” nam to nie grozi, niech więc póki co zostanie tak jak jest.

Następny przystanek: plot/drawto.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj /  Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj /  Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj /  Zmień )

Połączenie z %s