rem ColourCube (Assembly version rewrite) .... Rev 3.2 rem A J Tooth / March 2006 rem ================================================== on error if (err=17) then quit *FLOAT 64 himem=lomem + 5000000 install @lib$+"MyUtils.bbc" install @lib$+"BMP_Utils.bbc" rem ================================================== proc_fullscreen(xscreen%,yscreen%) : rem Set up use of Full Screen *REFRESH OFF rem Setup bitmap and assembly routine proc_setup rem Title proc_title *REFRESH stp&=1 repeat z&=0 repeat rem Calculate and Display Slice call Slyce% proc_BMP_DispS(yscreen%,yscreen%,pic%) *REFRESH z&+=1 mouse x,y,b& a$=inkey$(0) until (z&=255 or b&<>0 or a$<>"") stp&+=1 : if stp&=4 then stp&=1 until (a$<>"" or b&<>0) *REFRESH ON rem Wait for a mouse or keyboard event proc_event(a$,b&) quit rem End of Program +++++++++++++++++++++++++++++++++++++++++++++++++++++ rem ==================================================================== rem Setup bitmap and assembly routine def proc_setup wid%=256 : hei%=256 rem Set up a 768x768 blank bitmap proc_BMP_Set(wid%,hei%,pic%,Wlim%,lgth%) dim Slyce% 1000 x%=0 : y%=0 : i&=0 : j&=0 r&=0 : g&=0 : b&=0 rem Dual-pass assembly, in case of labels for pass&=0 to 2 step 2 proc_Slyce(pass&) next pass& endproc rem ==================================================================== rem Title def proc_title colour 3 print tab(5,5);"SLICES" print tab(5,7);"THROUGH" print tab(8,9);"A" print tab(5,11);"COLOUR" print tab(7,13);"CUBE" rem Displays my icon proc_AJTicon(30,3*yscreen%/4) endproc rem ==================================================================== rem Display BMP def proc_BMP_DispS(wdth%,hght%,pic%) sys "SetStretchBltMode", @memhdc%, 3 command$="MDISPLAY "+str$~pic%+" 256,0,"+str$(2*wdth%)+","+str$(2*hght%) oscli command$ endproc rem =============================================================== rem Rotate and Display Routine def proc_Slyce(opt&) P%=Slyce% [opt opt& mov edx,0 mov [^x%],edx .loopx mov edx,0 mov [^y%],edx .loopy mov dl,0 mov [^i&],dl mov al,[^stp&] cmp al,1 jne nt1 mov ebx,[^x%] mov [^r&],bl mov ebx,[^y%] mov [^g&],bl mov bl,[^z&] mov [^b&],bl jmp cont .nt1 cmp al,2 jne nt2 mov bl,[^z&] mov [^r&],bl mov ebx,[^x%] mov [^g&],bl mov bl,[^y%] mov [^b&],bl jmp cont .nt2 mov ebx,[^y%] mov [^r&],bl mov bl,[^z&] mov [^g&],bl mov ebx,[^x%] mov [^b&],bl .cont mov eax,[^y%] imul eax,768 ;Multiply bi 3 x 256 add eax,[^x%] add eax,[^x%] add eax,[^x%] add eax,54 ;EAX holds the bmp reference mov bl,[^b&] mov pic%[eax],bl mov bl,[^g&] mov pic%[eax+1],bl mov bl,[^r&] mov pic%[eax+2],bl ;Load the col0r t0 the bmp inc dword [^y%] mov edx,[^y%] cmp edx,255 jbe near loopy inc dword [^x%] mov edx,[^x%] cmp edx,255 jbe near loopx ret ] endproc rem =======================================================================