;ś - Ä --ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ>
;  -  ÄÄÄ -ÄÄÄÄÄ ÜÜÜÜŪß ÄÄÄÄÄÄÄÄÜÜÜÜÄÄÄÄÄ> Ū ŪŻ   ÜŪßßßßŪŪÜ
;    ś -ÄÄÄÄÄÄ ÜŪŪß  ÜÜ ÄÄÄÄÄÄÜŪß ŪßŪÜÄÄÄÄŽŪ ŪÄ>ÜŽŪŻ      ßß
;  ł   śł- ÄÄÄŽŪß ÄÄÄÄ ßÜ Ä ÜŽŪŻ ÜŪ ŽŪŻ ÜÜŪŪ Ū ŽŪŻßßŪÜ
;      ł  ł--ÄŽŪŪÜÜÜŪßß  ŪÜŪ ŽŪŻ Ū  ŽŪŻŪß ŽŪ>ŪŻ ßŪÜ  ßßßßßŪŪÜ
;     ś  śł -ÄŽŪŻ ÄÄÄÄÄÄ ŽŪŻÄŽŪŻŪß  ŽŪŽŻÄ>ŽŪ ŪŻ   ßŪÜ      ŽŪŻ
;     ś  Ä ÄÄÄ ŪŪ ÄÄÄÄÄÄ ŪßŪÄ ßŪÜ  ÜŪŻ ŪÜ ŪŪ ŽŪÜÜ   ßŪÜ   ÜŪß
;  - ł śł -Ä ÄÄÄßŪŪÜÜŪß Ūß  ßÜ  ßßßß ÄÄ ßßß   ßßßßßßßßß ÜŪß
;    śł--ÄÄ-ÄÄÄÄÄÄÄÄÄ Üß Ä-ł÷š of ĄtäēļtVī š÷> Ūßßßßßß
;ś śł--ÄÄ-- ÄÄÄÄÄÄÄÄ ß ÄÉĶĶĶĶĶĶ-=-  - ł    -ł-  ś  -   -=ĶĶĶĶæ
; ł - ÄÄÄÄÄÄÄÄ\//\...\/\/\ T.I.L.E.D. - a 512b intro...      \š->
;  ś -łÄÄÄÄÄÄ>          Ó-  --ÄÄÄ--  -    ś-ś    ś      -- -ÄŁ

; Ok. It's a source for my intro I released for Delirium'96 512-bytes intro
; competition.  Whole  intro  (as you saw)  consists of scrolled background
; and strange message in the centre. Thiz  message's  letters  creates LCD-
; faked-self-transparent effect (whatta joke! :)
; Take a look in thiz  code, sorry  I didn't commented the source, anyway I
; think everything'll be understandable  to you. Enjoy, and remember : code
; ripping is very, very lame!

;śł--ÄÄ=ž[ Equ's ]ž=ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ
;          ś   ś ł- --ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ
TileOffst          equ 20*320
Tiles_X            equ 20
Tiles_Y            equ 10

TextOffst          equ 64*320+10

                   .286
                   .model tiny
                   .code
                   org 100h

;śł--ÄÄ=ž[ Initialize intro ]ž=ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ
;          ś   ś ł- --ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ
start:             mov  ax, 1130h
                   mov  bh, 6
                   int  10h

                   mov  cs:FontOffst, bp
                   mov  cs:FontSeg, es
                   push cs
                   pop  es

SetMode13h:        mov  ax, 0013h
                   int  10h

;śł--ÄÄ=ž[ Makes palette ]ž=ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ
;          ś   ś ł- --ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ
SetPalette:        mov  ax, 1012h
                   mov  cx, 5
                   mov  bl, 1
                   lea  dx, TileColors
                   int  10h
                   mov  bl, 9
                   sub  cx, 2
                   int  10h

;śł--ÄÄ=ž[ Expands tile ]ž=ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ
;          ś   ś ł- --ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ
ExpandTile@s1:     lea  si, Tile_1[3*16]
                   lea  di, Tile_1[5*16]
                   mov  cx, 3
et@l1:             push cx
                   mov  cx, 8
                   rep  movsw
                   sub  si, 2*16
                   pop  cx
                   loop et@l1

ExpandTile@s2:     lea  si, Tile_1
                   lea  di, Tile_1[8*16+8]
                   call ExpandTile2
                   lea  si, Tile_1[8]
                   lea  di, Tile_1[8*16]
                   call ExpandTile2

ClearVirt:         xor  ax, ax
                   mov  cx, 80*320
                   lea  di, VirtScreen
                   rep  stosw

                   xor  bl, bl                   ; direction counter

;śł--ÄÄ=ž[ Main loop ]ž=ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ
;          ś   ś ł- --ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ
MainLoop:          lea  si, Tile_1
                   mov  di, si

                   inc  bl
                   cmp  bl, 127
                   ja   ScrollRight

;śł--ÄÄ=ž[ Scroll left ]ž=ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ
;          ś   ś ł- --ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ
ScrollLeft:        mov  cx, 16
L_ScrollLoop:      lodsw
                   push cx
                   push ax
                   mov  cx, 7
                   rep  movsw
                   pop  ax
                   pop  cx
                   stosw
                   loop L_ScrollLoop
                   jmp  ScrollUp

;śł--ÄÄ=ž[ Scroll right ]ž=ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ
;          ś   ś ł- --ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ
ScrollRight:       mov  cx, 16
                   sub  si, 2
                   std
R_ScrollLoop:      add  si, 16
                   mov  di, si
                   lodsw
                   push cx
                   push ax
                   mov  cx, 7
                   rep  movsw
                   pop  ax
                   pop  cx
                   stosw
                   add  si, 16
                   loop R_ScrollLoop
                   cld

;śł--ÄÄ=ž[ Scroll up ]ž=ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ
;          ś   ś ł- --ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ
ScrollUp:          lea  si, Tile_1
                   lea  di, Buffer
                   mov  cx, 8
                   rep  movsw
                   lea  di, Tile_1
                   mov  cx, 15*8
                   rep  movsw
                   lea  si, Buffer
                   lea  di, Tile_1[15*16]
                   mov  cx, 8
                   rep  movsw

;śł--ÄÄ=ž[ Draw background ]ž=ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ
;          ś   ś ł- --ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ
DrawBackgrnd:      lea  si, Tile_1
                   lea  di, VirtScreen
                   xor  ax, ax

                   mov  cx, Tiles_Y*16
V_TileLoop:        push cx

                   mov  cx, Tiles_X
H_TileLoop:        push cx
                   mov  cx, 8
                   rep  movsw
                   sub  si, 16
                   pop  cx

                   loop H_TileLoop

                   add  si, 16
                   inc  ax
                   cmp  ax, 16
                   jb   InTile
                   sub  si, 16*16
                   xor  ax, ax

InTile:            pop  cx
                   loop V_TileLoop

;śł--ÄÄ=ž[ Draw text ]ž=ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ
;          ś   ś ł- --ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ
DrawText:          lea  di, VirtScreen[TextOffst]
                   xor  bp, bp                   ; char counter

                   push ds
                   mov  ax, cs:FontSeg
                   mov  ds, ax

NewChar:           mov  al, cs:Text[bp]

                   cmp  al, 0
                   je   EndText

                   xor  ah, ah
                   shl  ax, 4
                   mov  si, ax
                   add  si, cs:FontOffst

                   mov  dl, 10000000b
CharLoop:          cmp  dl, 0
                   jz   CharDrawn

                   mov  cx, 16
ColLoop:           lodsb
                   test al, dl
                   jz   NoDot
                   mov  al, cs:[di]
                   xor  al, 08h
                   mov  cs:[di], al
                   add  al, 2
                   mov  cs:[di+320], al

NoDot:             add  di, 2*320
                   loop ColLoop

                   shr  dl, 1
                   sub  di, 2*16*320
                   add  di, 2
                   sub  si, 16
                   jmp  CharLoop

CharDrawn:         inc  bp
                   jmp  NewChar
EndText:           pop  ds

;śł--ÄÄ=ž[ Display Virtual Screen ]ž=ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ
;          ś   ś ł- --ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ
                   push es
DisplayVirt:       mov  ax, 0a000h
                   mov  es, ax
                   lea  si, VirtScreen
                   mov  di, TileOffst
                   mov  cx, 80*320

                   mov  dx, 3dah
HZ_Wait:           in   al, dx
                   test al, 8
                   je   HZ_Wait

                   rep  movsw
                   pop  es

                   in   al, 60h
                   cmp  al, 1
                   je   ShutDown

                   lea  bp, MainLoop
                   jmp  bp

;śł--ÄÄ=ž[ Shutdown ]ž=ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ
;          ś   ś ł- --ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ
ShutDown:          mov  ax, 3
                   int  10h
                   mov  ax, 4c01h
                   int  21h
                   ret

;śł--ÄÄ=ž[ PrOceDuREz ]ž=ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ
;          ś   ś ł- --ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ
;ŚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ--ł- ł ś
;ŗ ExpandTile2: expands tile (step)
;ČĶĶĶÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ-- -ł- ś ł Ä-- - ł   ś
;ł     In : - (si, di adjusted...)
;:    Out : -
;| Modify : cx, si, di
;ĄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ-- - ł ś -ł- -Ä- ł   ś
ExpandTile2:       mov  cx, 8
et@l2:             push cx
                   mov  cx, 4
                   rep  movsw
                   pop  cx
                   add  si, 8
                   add  di, 8
                   loop et@l2
                   ret

;śł--ÄÄ=ž[ Datas in code segment ]ž=ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæ
;          ś   ś ł- --ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŁ
Text               db '-=šž T.i.L.E.D žš=-'

TileColors:        db 00,00,18, 00,00,22, 00,00,26, 00,00,30
                   db 00,00,34

Tile_1:            db 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
                   db 4,4,4,4,4,4,4,5,1,1,1,1,1,1,1,5
                   db 4,3,3,3,3,3,4,5,1,2,2,2,2,2,1,5
                   db 4,3,2,2,2,3,4,5,1,2,3,3,3,2,1,5
                   db 4,3,2,1,2,3,4,5,1,2,3,4,3,2,1,5
                   db ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
                   db ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
                   db ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
                   db ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
                   db ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
                   db ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
                   db ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
                   db ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
                   db ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
                   db ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
                   db ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
VirtScreen:        dw 80*320 dup (?)
Buffer:            dw 8 dup (?)
FontOffst          dw ?
FontSeg            dw ?
                   end start