W ostatniej klasie LO (1996 rok) zrobiliśmy z kolegą "konkurs" kto napisze mniejszy program wyświetlający nicka autora ;-) Ja miałem sprawę o tyle ułatwioną, że moim nickiem, czy wtedy to jeszcze ksywą było RMK :-)
Nie pamiętam już jakiej wielkości był program gdy wygrałem konkurs, chyba około 100 bajtów, ale później przez kilka lat (już w czasie studiów) wracałem co jakiś czas do tego programiku i trochę go zmniejszałem by w końcu osiągnąć rozmiar 69 bajtów (a nie 70 jak stoi w komentarzach).
Radzę zwrócić uwagę na bogactwo komentarzy i ich ortografię ;-)
;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
;(c) 1996-1998 by RMK               ▒ Aktualny rozmiar programu:
;e-mail : rmk@zeus.polsl.gliwcie.pl ▒ 70 bajtów ;-)
;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
;Jak chcesz to skomilować to rób to tak:
;       TASM    nazwa.ASM
;       TLINK   nazwa.OBJ /t
;dzięki temu uzyskasz programik nazwa.COM.
;Mam wrażenie, że nie można go już bardziej zmniejszyć niż o jakieś 4-5 bajtów
;bez zmian w formacie przechowywania danych.
;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
;Info tla ciekawskich
;Prgramik wypisujący w prawym dolnym rogu ekranu w 13h (320x200x256) moją
;xywkę bez używania fontów VGA.
;                       !!! Programik ma być jak najkrótszy. !!!
;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
;Ostatnie modyfikacjie:
;26-11-1998     76 NASM
;26-11-1998     74 NASM odwróciłem dane (czyli są na odwrót)
;26-11-1998     72 NASM znów odwróciłem dane (tzn. znów są po kolei)
;26-11-1998     71 NASM
;26-11-1998     70 NASM
;29-11-1998     70 TASM wracamy do starego dobrego TASMa
;04-03-2000     69 TASM zamiana instrukcji xor dx,dx i mov dl,7 na mov dx,7
;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
.model tiny
.code
org 100h
Start:
;        xor     dx,dx                  ; wycięte 04-03-2000
       mov     al,13h
       int     10h                     ; SET MODE 13h
       mov     al,15                   ; Kolorek pikseli
                                       ; teoretycznie można rysować kolorem
                                       ; 19 (13h) który mamy już w AL, trzeba
                                       ; jednak szczerze powiedzieć, że ten
                                       ; kolor jest do bani. I niestety
                                       ; przez to tracimy cenne 2 bajty
       mov     bh,0a0h                 ; Jak wiemy BX na początku=0 więc
                                       ; jeśli BH=0a0h to BX=0a000h
       mov     es,bx                   ; No i mamy segment VIDEO w ES
       mov     di,61740                ; Przesunięcie naszego piczturka
            ;    ^ to draństwo zajmuje 6 bajtów, horror :-)
       mov     dx,7                    ; zmienione z mov dl,7 04-03-2000
       mov     bx,offset rmkbin        ; W BX offset tablicy z rysunkiem
pocz:   dec     dx                      ; jeśli DL=0 (czyli narysowane)
       jz      koniec                  ; zakończ
       mov     bp,[bx]                 ; DO BP binarna linia piczturka
       mov     cl,16
rys:    shl     bp,1                    ; Przesunąć bity w BP o jeden w lewo
       jc      rysuj                   ; i jak jakiś tam był to rysujemy pixelka
wr:     dec     cx                      ; zmniejszamy CX, i jeżeli CX=0 to
       jz      dodaj                   ; znaczy koniec lini
       inc     di
       jmp     short rys               ; Znów zapentlaj
rysuj:                                  ; Jak rysować to trzeba gdzieś umieścić
                                       ; adres naszego pixla, będzie to ES:DI
       stosb           ; PUT PIXEL :-) ; Naryzowane  (To jezd sztrasznie niesoptymalisowane tla Pentium-a)
       dec     di                      ; zmniejszamy DI, bo stosb go nam zwiększył
       jmp     short wr                ; No i skoczemy do wr
dodaj:  add     di,320-15                  ; Koniec lini binarnej więc zwiększamy
              ; ^ a to draństow zajmuje aż 4 bajty :-)
       inc     bx                      ; SI o 320
       inc     bx                      ; offset naszej tablicy zwiększamy o 2
       jmp     short pocz              ; no i skaczemy do POCZątku
koniec:
key:    mov     ah,1
       int     21h
       mov     al,3h
       int     10h                     ; SET MODE 03h
       ret                             ; no i kuniec
rmkbin  DW 1110010001010010b            ; napis w tablicy binarnej
       DW 1001011011010100b
       DW 1001010101011000b
       DW 1110010001011000b
       DW 1001010001010100b
       DW 1001010001010010b
;rmkbin   DW 0100101000100111b
;         DW 0010101101101001b
;         DW 0001101010101001b
;         DW 0001101000100111b
;         DW 0010101000101001b
;         DW 0100101000101001b
END     Start
Sam efekt działania programu wyglądał tak:

Nie powala, wiem ;-) Ale byłem z tego wtedy bardzo dumny :-)
Co zabawne teraz obrazek w PNG jest o prawie 14 razy większy niż cały program ;-)
Sam obrazek został wykonany w DOSBoksie, bo Windows 7 nie jest aż tak kompatybilny by potrafić uruchomić plik COM, w którym znajduje się program ;-)
Na wyprawę w swoje stare źródła udałem się w poszukiwaniu informacji o module, który mi się wtedy bardzo podobał i który użyłem w swoim "demku" (jego źródeł znaleźć nie mogę :-() z którego byłem też strasznie dumny i bardzo lubiłem nad nim pracę, choć nie wiem nawet czy je komuś pokazałem :-). Nie namierzyłem tak tego utworu, ale namierzyłem go chyba inaczej ;-) Był to moduł z dema Technological autorstwa XTD (tutaj wideo na YouTube, ale dźwięk jest taki sobie).
Tak patrzę na te źródła, i z jednej strony jestem zadowolony, że jestem w stanie je zrozumieć, ale z drugiej strony zadziwia mnie to jakie to było proste :-) i co może dziwnie zabrzmi ;-) niewinne. Ale wtedy to już umierało, był Windows ze swoim trybem chronionym (który zły nie był i nie jest), ale i z HALem, który zabrał przyjemność rozrabiania na sprzęcie ;-) I co prawda wiem, że tak jest lepiej, to czasem mi brakuje tego, że kiedyś było można ;-)
A teraz co? Java działa na wirtualnej maszynie, a wszystko wydaje się zmierzać w jeszcze bardziej wirtualnym kierunku... Bo już teraz np. większość aplikacji enterprise działa na wirtualnej maszynie Java'y, która jest odpalona na wirtualnym serwerze ;-) Do tego Apple od paru lat mocno używa (podobno) LLVM, Google odgraża się, że będzie go wspierać w NaCL... czyli kiedyś może być tak, że taka aplikacja enterprise będzie napisana w Java'ie (czy innej Scala'i...) która będzie wykonywana przez wirtualną maszynę Java'y, która będzie skompilowana do listy instrukcji LLVM (czyli wirtualnego procesora), której silnik będzie wbudowany w system operacyjny działający na wirtualnym serwerze..... ;-)
Podobne postybeta
Plan lekcji - wersja hard ;-)
Celeron M353 900MHz vs. Intel Atom 1.6GHz, czyli o tym czemu jest remis? ;-)
Noble
Gadające Gadu-Gadu
Lubię bity, czyli jak dodawać, odejmować, mnożyć i dzielić na bitach ;-)
Brak komentarzy:
Prześlij komentarz