hschumann2/TempleOS-Source-Code
0847
1 2#help_index "Graphics/Misc"3asm {4//************************************5_GR_UPDATE_LINE64::6 PUSH RBP7 MOV RBP,RSP8 PUSH RSI9 PUSH RDI10 11 MOV RAX,U64 SF_ARG2[RBP]12 MOV RSI,U64 [RAX] //rsi=src13 MOV RBX,U64 [&rev_bits_table]14 MOV RCX,U64 SF_ARG3[RBP] //rcx=d15 MOV RAX,U64 SF_ARG4[RBP]16 MOV RDI,U64 [RAX] //rdi=image17 18 MOV RAX,U64 SF_ARG1[RBP]19 MOV R8,U64 [RAX] //rbp=vga dst20 21@@05: LODSQ22 CMP U64 [RDI],RAX23 JE @@1024 MOV U64 [RDI],RAX25 XLATB26 ROR RAX,827 XLATB28 ROR RAX,829 XLATB30 ROR RAX,831 XLATB32 ROR RAX,833 XLATB34 ROR RAX,835 XLATB36 ROR RAX,837 XLATB38 ROR RAX,839 XLATB40 ROR RAX,841 MOV U64 [R8],RAX42@@10: ADD RDI,843 ADD R8,844 DEC RCX45 JNZ @@0546 47 MOV RAX,U64 SF_ARG1[RBP]48 MOV U64 [RAX],R849 MOV RAX,U64 SF_ARG4[RBP]50 MOV U64 [RAX],RDI51 MOV RAX,U64 SF_ARG2[RBP]52 MOV U64 [RAX],RSI53 POP RDI54 POP RSI55 POP RBP56 RET1 3257//************************************58_GR_UPDATE_LINE64_FLUSH_CACHE::59 PUSH RBP60 MOV RBP,RSP61 PUSH RSI62 PUSH RDI63 64 MOV RAX,U64 SF_ARG2[RBP]65 MOV RSI,U64 [RAX] //rsi=src66 MOV RBX,U64 [&rev_bits_table]67 MOV RCX,U64 SF_ARG3[RBP] //rcx=d68 MOV RAX,U64 SF_ARG4[RBP]69 MOV RDI,U64 [RAX] //rdi=image70 71 MOV RAX,U64 SF_ARG1[RBP]72 MOV R8,U64 [RAX] //rbp=vga dst73 74@@05: LODSQ75 MOV U64 [RDI],RAX76 XLATB77 ROR RAX,878 XLATB79 ROR RAX,880 XLATB81 ROR RAX,882 XLATB83 ROR RAX,884 XLATB85 ROR RAX,886 XLATB87 ROR RAX,888 XLATB89 ROR RAX,890 XLATB91 ROR RAX,892 MOV U64 [R8],RAX93 ADD RDI,894 ADD R8,895 DEC RCX96 JNZ @@0597 98 MOV RAX,U64 SF_ARG1[RBP]99 MOV U64 [RAX],R8100 MOV RAX,U64 SF_ARG4[RBP]101 MOV U64 [RAX],RDI102 MOV RAX,U64 SF_ARG2[RBP]103 MOV U64 [RAX],RSI104 POP RDI105 POP RSI106 POP RBP107 RET1 32108//************************************109_DC_BLOT_COLOR4::110 PUSH RBP111 MOV RBP,RSP112 PUSH RSI113 PUSH RDI114 PUSH R10115 116 MOV RDI,U64 SF_ARG1[RBP]117 MOV RSI,U64 SF_ARG2[RBP]118 MOV RBX,U64 SF_ARG3[RBP]119 MOV RCX,U64 SF_ARG4[RBP]120 121 MOV R8,RDI122 ADD R8,RCX123 MOV R9,R8124 ADD R9,RCX125 MOV R10,R9126 ADD R10,RCX127 128@@5: LODSQ129 MOV RDX,U64 [RBX]130 CMP RAX,RDX131 JE I32 @@10132 MOV U64 [RBX],RAX133 134 XOR RDX,RDX135 BT RAX,7*8+0136 ADC RDX,0137 SHL1 RDX138 BT RAX,6*8+0139 ADC RDX,0140 SHL1 RDX141 BT RAX,5*8+0142 ADC RDX,0143 SHL1 RDX144 BT RAX,4*8+0145 ADC RDX,0146 SHL1 RDX147 BT RAX,3*8+0148 ADC RDX,0149 SHL1 RDX150 BT RAX,2*8+0151 ADC RDX,0152 SHL1 RDX153 BT RAX,1*8+0154 ADC RDX,0155 SHL1 RDX156 BT RAX,0*8+0157 ADC RDX,0158 MOV U8 [RDI],DL159 160 XOR RDX,RDX161 BT RAX,7*8+1162 ADC RDX,0163 SHL1 RDX164 BT RAX,6*8+1165 ADC RDX,0166 SHL1 RDX167 BT RAX,5*8+1168 ADC RDX,0169 SHL1 RDX170 BT RAX,4*8+1171 ADC RDX,0172 SHL1 RDX173 BT RAX,3*8+1174 ADC RDX,0175 SHL1 RDX176 BT RAX,2*8+1177 ADC RDX,0178 SHL1 RDX179 BT RAX,1*8+1180 ADC RDX,0181 SHL1 RDX182 BT RAX,0*8+1183 ADC RDX,0184 MOV U8 [R8],DL185 186 XOR RDX,RDX187 BT RAX,7*8+2188 ADC RDX,0189 SHL1 RDX190 BT RAX,6*8+2191 ADC RDX,0192 SHL1 RDX193 BT RAX,5*8+2194 ADC RDX,0195 SHL1 RDX196 BT RAX,4*8+2197 ADC RDX,0198 SHL1 RDX199 BT RAX,3*8+2200 ADC RDX,0201 SHL1 RDX202 BT RAX,2*8+2203 ADC RDX,0204 SHL1 RDX205 BT RAX,1*8+2206 ADC RDX,0207 SHL1 RDX208 BT RAX,0*8+2209 ADC RDX,0210 MOV U8 [R9],DL211 212 XOR RDX,RDX213 BT RAX,7*8+3214 ADC RDX,0215 SHL1 RDX216 BT RAX,6*8+3217 ADC RDX,0218 SHL1 RDX219 BT RAX,5*8+3220 ADC RDX,0221 SHL1 RDX222 BT RAX,4*8+3223 ADC RDX,0224 SHL1 RDX225 BT RAX,3*8+3226 ADC RDX,0227 SHL1 RDX228 BT RAX,2*8+3229 ADC RDX,0230 SHL1 RDX231 BT RAX,1*8+3232 ADC RDX,0233 SHL1 RDX234 BT RAX,0*8+3235 ADC RDX,0236 MOV U8 [R10],DL237 238@@10: ADD RBX,8239 240 INC RDI241 INC R8242 INC R9243 INC R10244 245 DEC RCX246 JNZ I32 @@5247 248 POP R10249 POP RDI250 POP RSI251 POP RBP252 RET1 32253//************************************254_IS_PIX_COVERED0::255 PUSH RBP256 MOV RBP,RSP257#assert FONT_WIDTH==FONT_HEIGHT==8258 MOV RCX,U64 SF_ARG3[RBP]259 SAR RCX,3260 MOV RAX,U64 SF_ARG2[RBP]261 SAR RAX,3262 MOV RDX,U64 SF_ARG1[RBP]263 IMUL2 RCX,TEXT_COLS264 MOV RBX,U64 [&gr.win_z_buf]265 MOV DX,U16 CTask.win_z_num[RDX]266 ADD RCX,RAX267 XOR RAX,RAX268 CMP DX,U16 [RBX+RCX*2]269 JAE @@05 //Jump not covered270 INC RAX271@@05: POP RBP272 RET1 24273//************************************274_GR_ROP_EQU_U8_NO_CLIPPING::275//Puts foreground char shape onto gr.dc2.276//ch.u8[1] is color as a whole byte277//ch ATTRf_UNDERLINE attr flag is used.278 PUSH RBP279 MOV RBP,RSP280 MOVZX RAX,U8 SF_ARG1[RBP]281 MOV RDX,U64 [&text.font]282 MOV RAX,U64 [RDX+RAX*8] //RAX is 8x8 char font data, 64-bits283 BT U64 SF_ARG1[RBP],ATTRf_UNDERLINE284 JNC @@05285 MOV RBX,0xFF00000000000000286 OR RAX,RBX287@@05: TEST RAX,RAX288 JZ I32 @@10289 290 PUSH RSI291 PUSH RDI292 MOVZX RBX,U8 SF_ARG1+1[RBP] //Warning color is 8-bit293 MOV RDX,U64 [&gr.to_8_colors]294 MOV R8,U64 [RDX+RBX*8] //R8 is color repeated 8 times.295 MOV R9,U64 SF_ARG3[RBP] //R9 is width_internal296 MOV RDI,U64 SF_ARG2[RBP]297 MOV RSI,U64 [&gr.to_8_bits] //RSI is gr.to_8_bits298 299// m=my_1_to_8_bits[ch&255];ch>>=8;300// *dst=*dst&~m|c&m;301// dst(U8 *)+=w1;302 303 MOVZX RBX,AL304 MOV RDX,U64 [RSI+RBX*8]305 SHR RAX,8306 MOV RBX,U64 [RDI]307 MOV RCX,RDX308 NOT RCX309 AND RDX,R8310 AND RCX,RBX311 OR RCX,RDX312 MOV U64 [RDI],RCX313 ADD RDI,R9314 315 MOVZX RBX,AL316 MOV RDX,U64 [RSI+RBX*8]317 SHR RAX,8318 MOV RBX,U64 [RDI]319 MOV RCX,RDX320 NOT RCX321 AND RDX,R8322 AND RCX,RBX323 OR RCX,RDX324 MOV U64 [RDI],RCX325 ADD RDI,R9326 327 MOVZX RBX,AL328 MOV RDX,U64 [RSI+RBX*8]329 SHR RAX,8330 MOV RBX,U64 [RDI]331 MOV RCX,RDX332 NOT RCX333 AND RDX,R8334 AND RCX,RBX335 OR RCX,RDX336 MOV U64 [RDI],RCX337 ADD RDI,R9338 339 MOVZX RBX,AL340 MOV RDX,U64 [RSI+RBX*8]341 SHR RAX,8342 MOV RBX,U64 [RDI]343 MOV RCX,RDX344 NOT RCX345 AND RDX,R8346 AND RCX,RBX347 OR RCX,RDX348 MOV U64 [RDI],RCX349 ADD RDI,R9350 351 MOVZX RBX,AL352 MOV RDX,U64 [RSI+RBX*8]353 SHR RAX,8354 MOV RBX,U64 [RDI]355 MOV RCX,RDX356 NOT RCX357 AND RDX,R8358 AND RCX,RBX359 OR RCX,RDX360 MOV U64 [RDI],RCX361 ADD RDI,R9362 363 MOVZX RBX,AL364 MOV RDX,U64 [RSI+RBX*8]365 SHR RAX,8366 MOV RBX,U64 [RDI]367 MOV RCX,RDX368 NOT RCX369 AND RDX,R8370 AND RCX,RBX371 OR RCX,RDX372 MOV U64 [RDI],RCX373 ADD RDI,R9374 375 MOVZX RBX,AL376 MOV RDX,U64 [RSI+RBX*8]377 SHR RAX,8378 MOV RBX,U64 [RDI]379 MOV RCX,RDX380 NOT RCX381 AND RDX,R8382 AND RCX,RBX383 OR RCX,RDX384 MOV U64 [RDI],RCX385 ADD RDI,R9386 387 MOV RDX,U64 [RSI+RAX*8]388 MOV RBX,U64 [RDI]389 MOV RCX,RDX390 NOT RCX391 AND RDX,R8392 AND RCX,RBX393 OR RCX,RDX394 MOV U64 [RDI],RCX395 396 POP RDI397 POP RSI398@@10: POP RBP399 RET1 24400}401_extern _GR_ROP_EQU_U8_NO_CLIPPING U0 GrRopEquU8NoClipping(I64 ch,402 U8 *dst,I64 width_internal);403public _extern _IS_PIX_COVERED0 Bool IsPixCovered0(404 CTask *task,I64 x,I64 y);//No clipping405 406_extern _GR_UPDATE_LINE64 U0 GrUpdateLine64(407 U64 **_vga,U64 **_src,I64 d,U8 **_dst);408_extern _GR_UPDATE_LINE64_FLUSH_CACHE U0 GrUpdateLine64FlushCache(409 U64 **_vga,U64 **_src,I64 d,U8 **_dst);410_extern _DC_BLOT_COLOR4 U0 DCBlotColor4(411 U8 *dst,I64 *img,I64 *img_cache,I64 cnt);412 