pouët.net

Rose Galaxy by Abaddon [web]

;Rose Galaxy - 256byte intro for FreeDOS
;code: TomCat
;
;Revision 2022
;Peace! Love! and have a fun!

ORG 256
 DW 127                 ; constant 127 -> amplitude for sinus table
 DW 3C00H               ; constant 1/128 -> calculating PI/128 for sinus table

 MOV AL,13H
.1:
 INT 10H
 IMUL DX,BX,88
 IMUL CX,BX,64
 IMUL AX,BX,80
 MOV CL,AH
 ADD DH,24+1
 ADD CX,29*256+2
 INC BL                 ; DH/CH/CL->R/G/B
 MOV AX,1010H           ; set only one color by the VGA BIOS
 JNZ .1

 MOV BH,63
.2:
 FLDPI                  ; PI
 FMUL DWORD [SI]        ; PI/128
 FIMUL WORD [DI]        ; counter*PI/128
 FSIN                   ; SIN(counter*PI/128)
 FIMUL WORD [SI]        ; 127*SIN(counter*PI/128)
 FISTP WORD [BX+SI]     ; -
 INC BX
 DEC BYTE [DI]          ; loop 256x
 JNZ .2                 ; BX = sinus LUT

 MOV BL,144
nextframe:
 PUSH WORD 0A000H
 POP ES
 MOV DI,320*12
 HLT
 CALL bars
nextpixel:
 PUSH DI
 MOV AX,0CCCDH
 MUL DI
 SUB DL,128
 SUB DH,100
 PUSH DX

 MOV CH,8

nextstar:
 PUSH BX
 PUSH CX
 MOV AL,CL
 MUL AL
 MOV CH,0
 MOV CL,AH
 PUSH CX
 MOV SI,SP

 MOV AL,BYTE [BX]
 CBW
 IMUL CX
 ADD BL,BH
 PUSH AX
 MOV AL,BYTE [BX]
 CBW
 IMUL CX
 POP CX
 MOV CL,AH

 MOV DX,[SI+6]
 SUB DL,CL
 JO skipstar
 SUB DH,CH
 JO skipstar

 IMUL BP,[SI],6
 MOV CL,112
nextpoly:
 MOV BL,[SI+2]
 MOV AL,[BX]
 IMUL CL
 SAR AX,5
 ADD AL,51
 MOV BL,AL

 MOV CH,5
nextedge:
 MOV AL,[BX]
 IMUL DL
 ADD BL,BH
 XCHG DI,AX
 MOV AL,[BX]
 IMUL DH
 ADD AX,DI
 SUB BL,64+51
 CMP AX,BP
 JG skippoly
 DEC CH
 JNZ nextedge
 XCHG AX,CX
 POP CX
 POP CX
 POP BX
 JMP setpixel

skippoly:
 ADD BP,[SI]
 ADD BP,[SI]
 ADD BP,[SI]
 SUB CL,14
 JNZ nextpoly

skipstar:
 POP CX
 POP CX
 POP BX
 ADD CL,32;BH
 ADD BL,BH
 DEC CH
 JNZ nextstar
 MOV AL,1
setpixel:
 POP DI
 POP DI
 STOSB
 CMP DI,64000-320*12
 JNE nextpixel

 CALL bars
 PUSHA
 MOV AX,1300H
 MOV BX,199;20
 MOV CX,6
 MOV DX,1821H
 PUSH CS
 POP ES
 MOV BP,text
 INT 10H
 POPA

 INC CX
 IN AL,60H
 CMP AL,1
 JNZ nextframe

bars:
 PUSH CX
 MOV CX,320
 MOV AL,200
 REP STOSB
 POP CX
RETN

text:
 DB 'Peace!'