;These signs are at you disposal in the text: a to z ( ) ! , . ' - * & " ;Remember you can only write in lower case when you are using a to z. ;You can write as much as you wish in the text below. Just remember to end ;the text with db 0 as showed! Or else the text won't wrap around! ;------------------------------------------------------------------------------- SinusLength equ (128*2)*2 ;Don't alter any of these data! Source equ 320*106+8 ;As the loader would fuck up! Source2 equ 320*124+8 ; Step equ 5 ; .model small ; dosseg ; .data ;------------------------------------------------------------------------------- Text label byte db ' international network of crackers! ' db 'we bring you yet another quality release' db '----------------------------------------' db ' ** use this version of the loader ** ' db ' i have removed all known bugs! ' db ' and all data is collected in one file! ' db ' ' db 0 ;Marks end of text. DON'T FORGET! ;------------------------------------------------------------------------------- EndMessage db '(C) The International Network of Crackers 1992!',10,10,13 db 'All programming by Xerox!',10,13 db 'Original music by Drax of the Vibrants!',10,13 db 'Adlib player & conversion by Jch of the Vibrants!',10,10,13,24h ;------------------------------------------------------------------------------- StartText dw 0 Delay2 db 0 Pause dw 0 First dw 0 ColVar db 9 Check db 2 Fade db 0 _Si dw 0 _Di dw 0 Ditto1 dw 0 Ditto2 dw 0 ;------------------------------------------------------------------------------- LetterTabel dw Source+(16*00),Source+(16*01),Source+(16*02),Source+(16*03),Source+(16*04),Source+(16*05),Source+(16*06),Source+(16*07),Source+(16*08),Source+(16*09),Source+(16*10),Source+(16*11),Source+(16*12),Source+(16*13),Source+(16*14),Source+(16*15),Source+(16*16),Source+(16*17),Source+(16*18) dw Source2+(16*00),Source2+(16*01),Source2+(16*02),Source2+(16*03),Source2+(16*04),Source2+(16*05),Source2+(16*06),Source2+(16*07),Source2+(16*08),Source2+(16*09),Source2+(16*10),Source2+(16*11),Source2+(16*12),Source2+(16*13),Source2+(16*14),Source2+(16*15),Source2+(16*16),Source2+(16*17),Source2+(16*18) ;------------------------------------------------------------------------------- SinusVar db 0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0 SinusData dw 0,0,0,0,0,0,0,0,0,0 dw 0,0,0,0,0,0,0,0,0,0 dw 0,0,0,0,0,0,0,0,0,0 dw 0,0,0,0,0,0,0,0,0,0 ;------------------------------------------------------------------------------- DataFile db 'datafile.inc',0 ;------------------------------------------------------------------------------- UnpackedPicSeg dw 0 MusicSegment dw 0 ;------------------------------------------------------------------------------- Rgb1 db 0 Rgb2 db 0 Rgb3 db 0 PaletteData Label byte db 00,00,00,51,51,59,35,35,47,23,23,43,19,19,47,07,11,31,03,03,27,00,00,19,59,59,59,59,59,55,59,59,51,59,59,47,59,59,43,59,59,39,59,59,35,59,59,31,59,59,27,59,55,23,55,51,23,55,47,19,51,43,19,51,39,15,51,35,15,47,31,11 db 47,31,11,47,27,07,43,23,07,39,19,03,35,15,03,31,15,03,27,11,00,23,07,00,63,00,00,59,00,00,55,00,00,51,00,00,48,00,00,47,00,00,43,00,00,39,00,00,38,00,00,34,00,00,31,00,00,27,00,00,23,00,00,22,00,00,19,00,00,14,00,00 db 63,52,52,63,44,44,63,39,39,63,31,31,63,23,23,63,15,15,63,07,07,63,00,00,63,42,23,63,38,15,63,34,07,63,30,00,55,27,00,51,23,00,43,21,00,39,19,00,63,63,52,63,63,44,63,63,39,63,63,31,63,60,23,63,59,15,63,59,07,63,59,00 db 55,52,00,51,47,00,43,43,00,39,39,00,31,31,00,27,27,00,22,21,00,15,15,00,51,63,23,47,63,15,43,63,07,39,63,00,35,55,00,31,51,00,27,43,00,23,39,00,52,63,52,47,63,44,39,63,39,31,63,31,23,63,23,15,63,15,07,63,07,00,63,00 db 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 db 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 db 00,00,11,00,00,11,00,00,11,00,00,11,00,00,11,00,00,11,00,00,11,00,00,13,00,00,13,00,00,13,00,00,13,00,00,14,00,00,14,00,00,14,00,00,14,00,00,15,59,52,63,55,44,63,52,39,63,51,31,63,48,23,63,47,15,63,43,07,63,42,00,63 db 38,00,55,31,00,51,27,00,43,23,00,39,19,00,31,17,00,27,13,00,22,10,00,15,63,52,63,63,44,63,63,39,63,63,31,63,63,23,63,63,15,63,63,07,63,63,00,63,55,00,55,48,00,51,43,00,43,39,00,39,31,00,31,27,00,27,22,00,22,15,00,15 db 63,56,55,63,55,51,63,52,47,63,51,47,63,51,43,63,47,39,63,47,39,63,44,35,63,43,31,63,39,27,63,39,23,59,35,23,56,35,22,55,34,21,51,31,19,48,31,19,47,30,18,43,27,17,42,26,15,39,23,15,39,23,14,35,23,13,34,22,11,31,19,11 db 27,19,10,27,18,09,23,15,07,21,15,07,18,14,06,15,11,06,14,11,05,10,07,03,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,47,10,10,47,19,10,47,27,10,47,39,10,47,47,10,39,47,10,27,47,10,19,47,10 db 10,47,11,10,47,23,10,47,34,10,47,43,10,42,47,10,31,47,10,19,47,11,10,47,22,10,47,31,10,47,43,10,47,47,10,43,47,10,31,47,10,21,47,10,10,63,63,63 ;------------------------------------------------------------------------------- Sinus1 DW 36,38,40,41,43,45,46,48,49,51,52,54,55,57,58,59,60,62,63,64,65,65,66,67,67,68,68,69,69,69,69,69,69,69,69,69,68,68,67,67,66,65,65,64,63,62,60,59,58,57,55,54,52,51,49,48,46,45,43,41,40,38,36,34,33,31,29,28,26,24,23,21,20,18,17,15,14,12,11,10,9,7,6,5,4,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,1,1,2,2,3,4,4,5,6,7,9,10,11,12,14,15,17,18,20,21,23,24,26,28,29,31,33,34 DW 36,38,40,41,43,45,46,48,49,51,52,54,55,57,58,59,60,62,63,64,65,65,66,67,67,68,68,69,69,69,69,69,69,69,69,69,68,68,67,67,66,65,65,64,63,62,60,59,58,57,55,54,52,51,49,48,46,45,43,41,40,38,36,34,33,31,29,28,26,24,23,21,20,18,17,15,14,12,11,10,9,7,6,5,4,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,1,1,2,2,3,4,4,5,6,7,9,10,11,12,14,15,17,18,20,21,23,24,26,28,29,31,33,34,36 ;------------------------------------------------------------------------------- StartPos dw 320*101 EndPos dw 320*10 Antal dw 0 Book dw 90 ;------------------------------------------------------------------------------- SetError7 db 'Allocation error: ' db 'Memory control blocks destroyed.$' SetError8 db 'Allocation error: ' db 'Insufficient memory.$' SetError9 db 'Allocation error: ' db 'Invalid memory block adress.$' SetUnknown db 'Unknown allocation error.$' DataBuffer db 20786 dup (0) .code .286 Player: ret db 9ah,0,0 Music dw 0 ret ;------------------------------------------------------------------------------- Start: mov ax,@data mov ds,ax call Reserve ;Allocate memory needed call Setup ;precalculate data & etc. ;------------------------------------------------------------------------------- Main: call Waitraster call Dycp mov ah,3 ;Play music call Player mov cx,8 ;Put INC logo onto screen! Network: push cx call LogoShower pop cx loop Network mov ah,1 ;Check for keypress int 16h je Main mov ah,0 int 16h ;End main ;------------------------------------------------------------------------------- Terminate: call ClearInit mov es,UnpackedPicSeg call Deallocate mov ax,3 ;Switch to normal graphics! int 10h mov ah,9 ;Write EndMessage to screen lea dx,EndMessage int 21h mov ax,4c00h ;Terminate program! Return to dos! int 21h ;------------------------------------------------------------------------------- DepackPicture: mov es,UnpackedPicSeg mov ax,@data mov ds,ax lea si,DataBuffer add SI,3883 ;After player+data MOV DI,0 MOV CX,200 mov al,0 MOV BP,320 MOV BX,0 MOV DX,8 PUSH AX MOV AX,BP AND AX,7 SHR BP,3 CMP AX,0 JE ax_0 MOV AX,1 ax_0: ADD BP,AX SHR BX,3 POP AX push cx mov cl,al mov al,1 shl al,cl MOV AH,AL NOT AH pop cx Depackl1: PUSH CX PUSH AX MOV CX,DX Planes: PUSH CX PUSH DI PUSH BP NotherOne: XOR CX,CX MOV CL,DS:[SI] INC SI CMP CL,127 JA CrunchyNut INC CX SUB BP,CX push bx PutByte: mov bl,ds:[si] inc si push cx mov cx,8 orpixel: rcl bl,1 jc carry_set and es:[di],ah jmp set_done carry_set: or es:[di],al set_done: inc di loop orpixel pop cx LOOP PutByte pop bx JMP LineOk CrunchyNut: SUB CX,257 NEG CX SUB BP,CX push bx mov bl,ds:[si] mov bh,bl inc si PutByte2: push cx mov cx,8 orpixel2: rcl bl,1 jc carry_set2 and es:[di],ah jmp set_done2 carry_set2: or es:[di],al set_done2: inc di loop orpixel2 mov bl,bh pop cx LOOP PutByte2 pop bx LineOk: CMP BP,0 JNE NotherOne POP BP POP DI POP CX SHL AL,1 STC RCL AH,1 LOOP Planes push bp push bx shl bp,3 shl bx,3 ADD DI,BP ADD DI,BX pop bx pop bp POP AX POP CX LOOP Depackl1 RET SetVgaPalette: call waitraster mov dx,3c8h mov ax,di out dx,al inc dx mov ax,cx shl cx,1 add cx,ax rep outsb ret ;------------------------------------------------------------------------------- Reserve: mov bx,(110000/16) ;105 KB needed to run intro! call Setblock mov bx,(5000/16) ;5 KB for all data call Allocate mov MusicSegment,ax mov Music,ax mov bx,(65000/16) ;65 KB for the unpacked picture call Allocate mov UnpackedPicSeg,ax ret ;------------------------------------------------------------------------------- SetBlock: mov ah,4ah int 21h jc SetBlockError ret SetBlockError: push ax mov ax,0003h int 10h pop ax cmp ax,7 jz Set10 cmp ax,8 jz Set20 cmp ax,9 jz Set30 lea dx,SetUnknown jmp short SetBlockPrint Set10: lea dx,SetError7 jmp short SetBlockPrint Set20: lea dx,SetError8 jmp short SetBlockPrint Set30: lea dx,SetError9 SetBlockPrint: mov ah,9 int 21h mov ax,4c00h int 21h Allocate: mov ah,48h int 21h jc AllocateError ret AllocateError: push ax mov ax,0003h int 10h pop ax cmp ax,7 jz Allo10 cmp ax,8 jz Allo20 lea dx,SetUnknown jmp short AllocatePrint Allo10: lea dx,SetError7 jmp short AllocatePrint Allo20: lea dx,SetError8 AllocatePrint: mov ah,9 int 21h mov ax,4c00h int 21h DeAllocate: mov ah,49h int 21h jc DeAlloError ret DeAlloError: push ax mov ax,0003h int 10h pop ax cmp ax,7 jz DeA10 cmp ax,9 jz DeA20 lea dx,SetUnknown jmp short DeAlloPrint DeA10: lea dx,SetError7 jmp short DeAlloPrint DeA20: lea dx,SetError9 DeAlloPrint: mov ah,9 int 21h mov ax,4c00h int 21h waitraster: mov dx,3dah ras1: in al,dx test al,8 jnz ras1 ras2: in al,dx test al,8 jz ras2 ret ;------------------------------------------------------------------------------- LogoShower: mov ax,@data mov ds,ax cmp Book,1 jne Naah ret Naah: mov cx,160 mov si,StartPos mov di,EndPos mov ax,@data mov ds,ax mov ds,UnpackedPicSeg mov ax,0a000h mov es,ax rep movsw mov ax,@data mov ds,ax mov ax,Book inc Antal cmp Antal,ax jne Reset1 dec Book mov Antal,0 mov EndPos,320*9 sbb StartPos,320 Reset1: add EndPos,320 ret Setup: mov ax,@data mov ds,ax mov ax,MusicSegment mov es,ax mov cx,3900/2 lea si,DataBuffer xor di,di rep movsw mov ah,6 ;Adlib detection call Player jc NoCard Yes: mov Byte ptr player,90h NoCard: mov ax,13h ;Switch to 320x200 256 colors int 10h call ClearInit ;------------------------------------------------------------------------------- CALL DepackPicture mov ax,@data mov ds,ax mov di,0 mov cx,256 lea si,PaletteData call setvgapalette mov ds,UnpackedPicSeg mov ax,0a000h mov es,ax cld xor si,si xor di,di mov cx,160*9 rep movsw mov si,(320*191) mov di,(320*191) mov cx,160*9 rep movsw mov ax,@data mov ds,ax mov es,ax lea si,Sinus1 lea di,Sinus1 mov cx,256 Calc: lodsw add ax,110 stosw loop Calc lea si,SinusData lea di,SinusData mov cx,40 Calc2: lodsw add ax,Source-8 stosw loop Calc2 lea si,SinusVar lea di,SinusVar mov cx,40 mov bl,0 Calc3: lodsb add al,bl stosb add bl,3 loop Calc3 mov ax,@data mov ds,ax mov ax,0a000h mov es,ax ret ;------------------------------------------------------------------------------- Dycp: mov ax,@data mov ds,ax Kwon: mov Rgb1,0 mov Rgb2,0 mov Rgb3,0 cmp Check,0 jne Red mov Rgb2,60 mov Rgb3,60 jmp Skib1 Red: cmp Check,1 jne Green mov Rgb2,60 jmp Skib1 Green: mov Rgb3,60 mov Rgb1,60 Skib1: mov bl,15*8 sbb bl,ColVar mov cx,8 Col2: mov dx,3c8h mov al,bl out dx,al inc dx nop nop nop nop nop nop mov al,Rgb1 out dx,al nop nop nop nop nop nop mov al,Rgb2 out dx,al nop nop nop nop nop nop mov al,Rgb3 out dx,al cmp Check,0 jne Red2 sbb Rgb2,Step sbb Rgb3,Step jmp Skib2 Red2: cmp Check,1 jne Green2 sbb Rgb2,Step jmp Skib2 Green2: sbb Rgb3,Step sbb Rgb1,Step Skib2: inc bl loop col2 mov dx,3c8h mov al,bl out dx,al inc dx nop nop nop nop nop nop mov al,0 out dx,al nop nop nop nop nop nop out dx,al nop nop nop nop nop nop out dx,al Wrappie: xor di,di mov si,StartText mov cx,40 Trans: mov al,Text[si] cmp al,0 jne Wrap mov StartText,0 jmp Wrappie Wrap: xor ah,ah cmp al,32 jne Space mov al,26+97 ; Space: cmp al,'(' jne Para1 mov al,27+97 ;( Para1: cmp al,')' jne Para2 mov al,28+97 ;) Para2: cmp al,'!' jne udrob mov al,29+97 ;! Udrob: cmp al,',' jne comma mov al,30+97 ;, Comma: cmp al,'.' jne Punktum mov al,31+97 Punktum: cmp al,'''' ;' jne oper mov al,32+97 Oper: cmp al,'+' jne Plus mov al,33+97 Plus: cmp al,'-' jne Minus mov al,34+97 Minus: cmp al,'*' jne Stjerne mov al,35+97 Stjerne: cmp al,'&' jne og mov al,36+97 Og: cmp al,'"' jne Gose mov al,37+97 Gose: sbb al,97 shl ax,1 mov bx,ax mov ax,LetterTabel[bx] mov SinusData[di],ax inc si add di,2 loop Trans ;------------------------------------------------------------------------------- mov ax,0a000h mov es,ax mov cx,40 Lykke: push cx xor bh,bh mov di,_DI mov si,_SI Testt: mov bl,SinusVar[Si] shl bx,1 mov ax,320 mul Sinus1[bx] add di,ax push di mov di,Ditto1 inc SinusVar[di] mov di,Ditto2 mov si,SinusData[di] pop di mov ds,UnpackedPicSeg mov cx,12 Husk1: push cx mov cx,4 rep movsw add si,312 add di,312 pop cx loop Husk1 mov ax,@data mov ds,ax add _Di,8 add _Si,1 add Ditto1,1 add Ditto2,2 pop cx loop Lykke mov _si,0 mov _di,0 mov Ditto1,0 mov Ditto2,0 cmp First,100 je Cool inc First ret Cool: cmp Fade,0 je Op jmp FadeDown Op: inc Delay2 cmp Delay2,7 je Now1 ret Now1: mov Delay2,0 cmp ColVar,0 je Don1 dec Colvar ret Don1: mov Pause,0 mov Fade,1 mov Delay2,0 ret FadeDown: cmp Pause,400 je OkayDown inc Pause ret OkayDown: inc Delay2 cmp Delay2,7 je Down1 ret Down1: mov Delay2,0 cmp ColVar,9 je Down2 inc ColVar ret Down2: mov Delay2,0 mov fade,0 mov Pause,0 add StartText,40 inc Check cmp Check,3 jne Reset mov Check,0 Reset: ret ClearInit: mov ah,1 ;Init player call Player mov ax,@data mov ds,ax xor ah,ah mov cx,2125 mov bx,MusicSegment sub dl,dl call Player mov ah,2 xor bx,bx call Player ret end Start