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ć).
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.