⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tube.x86

📁 MONA是为数不多的C++语言编写的一个很小的操作系统
💻 X86
字号:
; 256bytes demos archive Baze巵嶌偺tube傪堏怉; 僆儕僕僫儖擖庤愭 http://www.256b.com; 栚昗 1024bytes乧; 壗傕彂偄偰側偄偺偵 師儕儕乕僗偺梊掕偵擖偭偰傞側傫偰 傂偘傐傫旕摴偄傗	bits	32SYSPRINT		equ		0x0001			; 僥僉僗僩昞帵LEMMINGS		equ		0x0002			; 儗儈儞僌僗GETVRAMINFO		equ		0x0011			; VRAM庢摼%if 0SCREEN_W		equ		160SCREEN_H		equ		160%elseSCREEN_W		equ		240SCREEN_H		equ		240%endif		struc	tube_t.fpuwork	resd	1.angle		resd	1.step		resd	1.yalign		resd	1.vram		resd	1.bpp		resd	1.vramw		resd	1.vramh		resd	1.targw		resd	1.r240		resd	1.r128ppi	resd	1.anglestep	resd	1.size		endstrucscreen		equ		0xc0000000palettes	equ		(screen + (SCREEN_W * SCREEN_H))texture		equ		(palettes + (0x100 * 4))dataend		equ		(texture + 0x10000)section .text%ifdef BUILD_ON_LINUX	global	user_startuser_start:%else	global	_user_start_user_start:%endif				sub		esp, byte (tube_t.size)				; VRAM庢摼				xor		ebx, ebx				mov		bl, GETVRAMINFO				lea		esi, [esp + tube_t.vram]				int		0x80				mov		ebp, [esp + tube_t.bpp]				mov		esi, errvrammsg				cmp		ebp, byte 16				jb		short .lemmings				; FPU僠僃僢僋				add		esi, byte (errfpumsg - errvrammsg)				fninit				fnstcw	word [esp]				cmp		word [esp], 0x37f				je		short .main				; 僾儘僙僗廔椆.lemmings:		xor		ebx, ebx				mov		bl, SYSPRINT				int		0x80				xor		ebx, ebx				mov		bl, LEMMINGS				int		0x80				; 傔偄傫乣.main:			cld				; 僷儗僢僩嶌惉makepalettes:	mov		edi, palettes				xor		ecx, ecx.lp1:			mov		eax, ecx				imul	eax				shr		eax, 7				mov		ah, cl				rcl		eax, 9				stosd				inc		ecx				cmp		ecx, byte 0x7f				jbe		short .lp1				dec		ecx				xor		eax, eax.lp2:			imul	eax, ecx, 0x000201				stosd				dec		ecx				jns		short .lp2				inc		ecx				; 僥僋僗僠儍嶌惉 (棎悢偑柺搢側傫偱僆儕僕僫儖偐傜庁傝偰棃傞)maketexture:			;	mov		edi, texture.lp1:			mov		[edi + ecx], cl				inc		ecx				or		cx, cx				jne		short .lp1				mov		dl, 0xc9				xor		eax, eax.lp2:			lea		esi, [ecx + 255]				movzx	esi, si				movzx	ebx, cx				add		eax, ecx				rol		ax, cl				mov		dh, al				sar		dh, 5				adc		dl, dh				adc		dl, [edi + esi]				shr		dl, 1				mov		[edi + ebx], dl				not		bh				mov		[edi + ebx], dl				loop	.lp2				mov		ebx, esp				; rdata僐僺乕				mov		esi, const_tbl				lea		edi, [ebx + tube_t.targw]				mov		cl, 4				rep movsd				; yalign寁嶼				shr		ebp, 3				mov		eax, [ebx + tube_t.vramw]				sub		eax, [ebx + tube_t.targw]				imul	ebp				mov		[ebx + tube_t.yalign], eax				; 寁嶼乣updatescreen:	mov		esi, [ebx + tube_t.step]				add		byte [ebx + tube_t.step + 1], 8				mov		ecx, screen				fld		dword [ebx + tube_t.angle]				fadd	dword [ebx + tube_t.anglestep]				fst		dword [ebx + tube_t.angle]				fsincos				mov		edi, -(SCREEN_H / 2).lp2:			mov		ebp, -(SCREEN_W / 2).lp1:			mov		[ebx], ebp				fild	dword [ebx]				mov		[ebx], edi				fild	dword [ebx]				fld		st0				; y				fmul	st0, st3				fld		st2				; x				fmul	st0, st5				fsubp	st1, st0				fxch	st0, st2				fmul	st0, st3				fxch	st0, st1				fmul	st0, st4				faddp	st1, st0				fld		dword [ebx + tube_t.r240]%if 1				fld		st1				; y				fmul	st0, st4				fld		st1				; z				fmul	st0, st6				fsubp	st1, st0				fxch	st0, st1				fmul	st0, st4				fxch	st0, st2				fmul	st0, st5				faddp	st2, st0%endif				fld		st2				fmul	st0, st0				fld		st2				fmul	st0, st0				faddp	st1, st0				fsqrt				fdivp	st1, st0				fxch	st0, st2				fpatan				fmul	dword [ebx + tube_t.r128ppi]				fistp	dword [ebx]				mov		dl, [ebx]				fmul	dword [ebx + tube_t.r128ppi]				fistp	dword [ebx]				mov		dh, [ebx]				lea		eax, [esi + edx]				add		al, ah				and		al, 64				mov		ah, 8				je		short .store				shl		edx, 2				lea		eax, [esi + edx]				sub		al, ah				mov		ah, 16				jns		short .store				add		edx, edx				mov		ah, 48.store:			mov		al, byte [ecx]				sar		al, 2				sub		al, ah				lea		edx, [esi + edx]				movzx	edx, dx				add		al, [texture + edx]				mov		[ecx], al				inc		ecx				inc		ebp				cmp		ebp, byte (SCREEN_W / 2)				jl		near .lp1				inc		edi				cmp		edi, byte (SCREEN_H / 2)				jl		near .lp2				fstp	st0				fstp	st0				; VRAM昤夋乣vramdraw:		mov		edx, [ebx + tube_t.vram];				mov		ecx, palettes				mov		esi, screen				push	dword updatescreen				mov		edi, SCREEN_H				cmp		[ebx + tube_t.bpp], byte 24				je		short vramdraw24				cmp		[ebx + tube_t.bpp], byte 16				je		short vramdraw16vramdraw32:.lp2:			mov		ebp, [ebx + tube_t.targw].lp1:			movzx	eax, byte [esi]				inc		esi				mov		eax, [ecx + eax * 4]				mov		[edx], eax				add		edx, byte 4				dec		ebp				jne		short .lp1				add		edx, [ebx + tube_t.yalign]				dec		edi				jne		short .lp2				retvramdraw24:.lp2:			mov		ebp, [ebx + tube_t.targw].lp1:			movzx	eax, byte [esi]				inc		esi				mov		eax, [ecx + eax * 4]				mov		[edx], ax				shr		eax, 16				add		edx, byte 3				mov		[edx-1], al				dec		ebp				jne		short .lp1				add		edx, [ebx + tube_t.yalign]				dec		edi				jne		short .lp2				retvramdraw16:.lp2:			mov		ebp, [ebx + tube_t.targw].lp1:			movzx	eax, byte [esi]				inc		esi				mov		eax, [ecx + eax * 4]				ror		eax, 8				shr		ah, 3				shr		ax, 2				rol		eax, 5				mov		[edx], ax				add		edx, byte 2				dec		ebp				jne		short .lp1				add		edx, [ebx + tube_t.yalign]				dec		edi				jne		short .lp2				reterrvrammsg		db	'Require 16/24/32bpp.', 10, 0errfpumsg		db	'Require FPU.', 10, 0				align	4const_tbl		dd		SCREEN_W				dd		240.							; Z偺僨僼僅儖僩				dd		40.743665431525205956834		; 128 / PI				dd		0.05							; 偰偒偲乕夞揮兤const_term:	ends

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -