; BBS addy for EKTO TRAKKS BBS ; Code by T.C.P. of D4Z in 1996 ; ; Compiled using Turbo Assembler 4.0 and TLink 6.0 ; Link with /t option to make com file code segment assume cs:code,ds:code,es:code,ss:code org 100h ; COM-Datei erzeugen start: mov di,127 xor si,si @Sinus: mov al,byte ptr SinTab[si] mov byte ptr SinTab[128+di],al inc si dec di jns @Sinus mov al,3 ; Bildschirm l”schen int 10h call BlackOut mov dx,3D4h ; virtuellen 160x50 Screen einschalten mov ax,5013h out dx,ax mov es,TextSeg ; Textmodus-Segment nach es xor di,di ; Z„hler initialisieren xor dx,dx xor bx,bx fillscreenwithsquares: ; Bildschirm mit kleinen K„stchen fllen mov ax,07DBh ; ASCII 219, Attributbyte 7 mov cl,8 ; 8 davon rep stosw ; ausgeben add di,16 ; und 8 leer lassen mov ax,960 mul bx cmp di,ax ; am Ende der Zeile? jna fillscreenwithsquares or dx,dx jnz @next1 add di,16 inc dx jmp @next2 @next1: xor dx,dx @next2: inc bx cmp bx,33 jna fillscreenwithsquares xor bx,bx mov es,TextSeg ; Textmodus-Segment nach ds mov di,1304 ; Bildschirmoffset fr Logo mov si,offset Logo1 ; Bitmusteroffset nach si showbigfatlogo: cmp si,offset Logo2 jne @@1 mov di,9304 @@1: mov dl,8 ; Z„hler fr die Bytes des Bitmusters mk0: mov al,[si] ; Byte des Bitmusters nach al mov dh,8 ; Z„hler fr Bits des Bitmuster-Bytes mk1: rcl al,1 ; Bits einzeln ins C-Flag jnc mk2 ; nach mk2, wenn Bitwert = 0 mov cx,0FDBh mov es:[di],cx ; sonst (Bitwert = 1) "Û" setzen. mov es:[di+2],cx mov es:[di+4],cx mov es:[di+6],cx mov es:[di+320],cx mov es:[di+322],cx mov es:[di+324],cx mov es:[di+326],cx mov es:[di+640],cx mov es:[di+642],cx mov es:[di+644],cx mov es:[di+646],cx mk2: add di,8 dec dh jnz mk1 inc si ; n„chstes Bitmuster-Byte add di,640+256 ; Offsetwert fr n„chste Zeile dec dx jnz mk0 sub di,11*640+560 ; Offset fr n„chstes Zeichen inc bx cmp bx,8 je goon jmp showbigfatlogo goon: call scrollit ; Bildauschnitt setzen call fade ; hochfaden xor bx,bx mov dx,100h ; dh = 1, dl = 0 scroll: xor ax,ax mov al,SinTab[bx] add ax,96 cmp dl,5 jbe @@5 mov ax,96 @@5: mov y,ax push bx cmp dl,1 jna @@2 shl bl,1 @@2: xor ax,ax mov al,SinTab[bx] cmp dl,1 je @@6 cmp dl,3 jbe @@3 cmp dl,5 ja @@3 @@6: mov cx,416 sub cx,ax mov x,cx jmp @@4 @@3: cmp dl,7 je @@6 add ax,416 mov x,ax jmp @@4 @@4: push dx call scrollit ; an neue Bildschirmkoordinaten scrollen pop dx pop bx add bl,dh cmp bl,255 jne @ok neg dh inc dx cmp dl,7 jbe @ok mov dl,0 @ok: mov ah,0Bh ; prfen, ob Taste gedrckt wurde int 21h or al,al jz okay jmp goon2 ; wenn ja, Schleife verlassen okay: jmp scroll goon2: call fade ; runterfaden mov ah,0Ch ; Keyboard-Buffer l”schen int 21h mov ax,3 int 10h mov ax,1112h ; 80x50 Textmodus xor bl,bl int 10h call BlackOut xor bx,bx mov es,TextSeg ; Textmodus-Segment nach ds mov di,1644 ; Bildschirmoffset fr Logo mov si,offset Logo1 ; Bitmusteroffset nach si showdalogo: cmp si,offset Logo2 jne @@01 mov di,3074 @@01: mov dl,8 ; Z„hler fr die Bytes des Bitmusters mk3: mov al,[si] ; Byte des Bitmusters nach al mov dh,8 ; Z„hler fr Bits des Bitmuster-Bytes mk4: rcl al,1 ; Bits einzeln ins C-Flag jnc mk5 ; nach mk2, wenn Bitwert = 0 mov cx,0FDBh mov es:[di],cx ; sonst (Bitwert = 1) "Û" setzen. mk5: add di,2 dec dh jnz mk4 inc si ; n„chstes Bitmuster-Byte add di,160-16 ; Offsetwert fr n„chste Zeile dec dx jnz mk3 sub di,8*160-18 ; Offset fr n„chstes Zeichen inc bx cmp bx,9 je @@02 jmp showdalogo @@02: mov si,offset EndMessage mov es,TextSeg mov di,4532 mov cx,27 rep movsw mov dx,3200h ; Cursor setzen mov ah,2 int 10h call fade xor ah,ah ; Auf Tastendruck warten int 16h call fade mov al,3 ; 80x25 Textmodus int 10h xor ax,ax ; Bildschirm l”schen mov ch,16h rep stosw mov si,offset EndMessage ; Endnachricht ausgeben add si,54 mov es,TextSeg mov di,102 mov cl,29 rep movsw mov ah,4Ch ; Zurck zum DOS int 21h ; Prozeduren fadepal1: ; fadet abh„ngig von UP die in T mov dx,3C7h ; bergebene Farbe hoch oder runter mov al,cl out dx,al ; Farbwerte einlesen mov dx,3C9h in al,dx mov ah,al in al,dx mov bl,al in al,dx mov bh,al add ah,up ; Farbwert um UP erh”hen add bl,up ; (bei negativem UP wird dekrementiert) add bh,up dec dx ; Farbwerte zurckschreiben mov al,cl out dx,al inc dx mov al,ah out dx,al mov al,bl out dx,al mov al,bh out dx,al ret scrollit: ; verschiebt den Bildauschnitt zu den mov ax,y ; Koordinaten in X und Y mov cl,4 shr ax,cl mov bx,160 mul bx mov cx,ax mov ax,x mov bx,9 div bx add cx,ax mov t,cx mov dx,3DAh @wait1: in al,dx test al,8 jnz @wait1 mov dx,3D4h ; zuerst Grobscrolling mov al,0Ch ; Register 0Ch (LSA Middle) mov ah,byte ptr t + 1 ; Bits 15-8 setzen out dx,ax ; Register 0Dh (LSA Low) mov al,0Dh ; Bits 7-0 setzen mov ah,byte ptr t out dx,ax mov dx,3DAh @wait2: in al,dx test al,8 jz @wait2 mov ax,y xor dx,dx mov cx,16 div cx xchg dx,ax ; jetzt Softscrolling mov dx,3D4h ; vertikales Panning mov ah,al mov al,8 out dx,ax mov ax,x dec ax xor dx,dx mov cx,9 div cx xchg dx,ax mov ch,al mov dx,3C0h ; horizontales Panning mov al,13h or 32 out dx,al mov al,ch or al,32 out dx,al ret fade: ; fadet die im Programm verwendeten mov cx,31 ; Farben 7 und 63 hoch/runter fadeloop: ; (je nachdem ob UP pos. oder neg.) mov dx,3DAh ; WaitRetrace w1: in al,dx test al,8 jnz w1 w2: in al,dx test al,8 jz w2 push cx mov cl,7 call FadePal1 mov cl,63 call FadePal1 call FadePal1 pop cx loop fadeloop neg up ret BlackOut: mov bh,255 ; bei Farbe 255 beginnen theloop: mov dx,3C8h ; alle Farbwerte auf 0 setzen mov al,bh out dx,al inc dx xor al,al out dx,al out dx,al out dx,al dec bh jnz theloop ret ; Daten EndMessage db 'A',7,'R',7,'T',7,' ',7,'H',7,'P',7,'A',7,' ',7,'T',7 db 'O',7,'O',7,'L',7,'Z',7,' ',7,' ',7 db '+',7,'4',7,'9',7,'-',9,'9',7,'5',7,'0',7,'4',7,'-',9,'6',7 db '7',7,'8',7 db 'I',8,'N',7,'T',7,'R',7,'O',7,' ',7,'C',8,'O',7,'D',7,'E',7 db 'D',7,' ',7,'B',8,'Y',7,' ',7,'T',3,'.',9,'C',3,'.',9,'P',3 db '.',9,'/',7,'D',3,'4',3,'Z',3,' ',7,'''',9,'9',3,'6',3 x dw 416 y dw 96 t dw ? up db 1 TextSeg dw 0B800h Logo1 db 00011110b db 00110011b db 01100000b db 11000000b db 11111100b db 01100000b db 01110011b db 01111110b db 00011110b db 00110011b db 01100000b db 11000000b db 11000000b db 01100000b db 00110011b db 00011110b db 11111111b db 10011001b db 00011000b db 00011000b db 00011000b db 00011000b db 00011000b db 00011000b db 00111100b db 01100110b db 11000011b db 11000011b db 11000011b db 11000011b db 01100110b db 00111100b Logo2 db 01111111b db 01100011b db 00000011b db 00000011b db 00000011b db 00000011b db 00000011b db 00000011b db 11111100b db 11000110b db 11000011b db 11000011b db 11111110b db 11000011b db 11000011b db 11000011b db 01111110b db 11000011b db 11000011b db 11000011b db 11111111b db 11000011b db 11000011b db 11000011b db 11000011b db 11000011b db 11000011b db 01100110b db 00111100b db 01100110b db 11000011b db 11000011b db 11000011b db 11000011b db 11000011b db 01100110b db 00111100b db 01100110b db 11000011b db 11000011b SinTab db 0,0,0,0,1,1,2,2,3,3,4,5,6,7,8,9,10,12,13,14,16,18,19,21,23,24 db 26,28,30,32,34,37,39,41,44,46,48,51,53,56,59,61,64,67,69,72,75 db 78,81,84,87,90,93,96,99,102,105,108,111,114,118,121,124,127,130 db 133,136,139,143,146,149,152,155,158,161,164,167,170,173,176,179 db 182,185,188,190,193,196,198,201,204,206,209,211,213,216,218,220 db 223,225,227,229,230,232,234,235,237,239,241,242,243,244,245,246 db 247,248,249,250,251,252,252,253,253,254,254,255,255,255,255 MakeIt999 db 8 dup (0) code ends end start