| CODE |
| from Tkinter import * import Image,ImageDraw,ImageTk,sys def Dwords(files): temp1=ord(files.read(1))*256**0 temp2=ord(files.read(1))*256**1 temp3=ord(files.read(1))*256**2 temp4=ord(files.read(1))*256**3 return temp1+temp2+temp3+temp4 def Words(files): temp3=ord(files.read(1))*256**0 temp4=ord(files.read(1))*256**1 return temp3+temp4 def Read_Header_Bmp(bmpfile): text=bmpfile.read(2) print bmpfile print "========BMP-Header Information========" if text=="BM": print "first Dword 'BM' : ok" else: print text bfSize=Dwords(bmpfile) print "File size in Bytes:", bfSize reserv1=Words(bmpfile) print "Must be zero:", if reserv1==0: print "ok" else: print "error" reserv2=Words(bmpfile) print "Must be zero:", if reserv2==0: print "ok" else: print "error" offbits=Dwords(bmpfile) print "Image data offset:",offbits info=Words(bmpfile) print "Info header=",info,"bytes" # not Dwords but Longs ... :/ temp1=ord(bmpfile.read(1))*256**2 temp2=ord(bmpfile.read(1))*256**3 temp3=ord(bmpfile.read(1))*256**0 temp4=ord(bmpfile.read(1))*256**1 width=temp1+temp2+temp3+temp4 print "Width=",width temp1=ord(bmpfile.read(1))*256**2 temp2=ord(bmpfile.read(1))*256**3 temp3=ord(bmpfile.read(1))*256**0 temp4=ord(bmpfile.read(1))*256**1 height=temp1+temp2+temp3+temp4 print "Height=",height temp1=ord(bmpfile.read(1))*256**2 temp2=ord(bmpfile.read(1))*256**3 temp3=ord(bmpfile.read(1))*256**0 temp4=ord(bmpfile.read(1))*256**1 planes=temp1+temp2+temp3+temp4 print "Must be '1':", if planes==1: print "ok" else: print "error" bitcount=Words(bmpfile) print "Bits per pixel:",bitcount compression=Dwords(bmpfile) print "Compression type:",compression sizeimage=Dwords(bmpfile) print "Image size in Bytes:",sizeimage xpxelpermeter=Dwords(bmpfile) print "Pixels per meter (X):",xpxelpermeter ypxelpermeter=Dwords(bmpfile) print "Pixels per meter (Y):",ypxelpermeter colorused=Dwords(bmpfile) if colorused==0: print "All colors used" else: print colorused,"colors used" colorimportant=Dwords(bmpfile) print colorimportant,"important color(s)" print "============End of header ============" return [width,height,bitcount,offbits,sizeimage] def Bmp_read_24(offbits,bmpfile,size): data=[] if bmpfile.tell()<>offbits: print bmpfile.tell() bmpfile.seek(offbits) for count in range(size/3): test=bmpfile.read(3) blue=ord(test[0]) green=ord(test[1]) red=ord(test[2]) colors=[red,green,blue] data.append(colors) return data #file=open("Test.dat","rb") file=open("Sparclin.bmp","rb") bmpinfo=Read_Header_Bmp(file) if bmpinfo[2]==24: print "launch 24 bits decoding routine" bmpdata=Bmp_read_24(bmpinfo[3],file,bmpinfo[4]) else: print "%d bit(s) not supported yet"%(bmpinfo[2]) sys.exit() file.close() print"file closed" root=Tk() root.title("momo's dumb bmp reader") if (bmpinfo[4]/(3*bmpinfo[1]))<>bmpinfo[0]: print "size error", bmpinfo[0]=bmpinfo[4]/(3*bmpinfo[1]) print "Width=%d"%(bmpinfo[0]) bitmap=Image.new("RGB",[bmpinfo[0],bmpinfo[1]]) print "mode:",bitmap.mode,"taille:",bitmap.size bit=ImageDraw.Draw(bitmap) count,count1=0,bmpinfo[1] if (len(bmpdata)*3)<>bmpinfo[4]: print "data size error %d/%d" % (len(bmpdata)*3,bmpinfo[4]) else: print "data size ok" for counter in range(len(bmpdata)): color=(bmpdata[counter][0],bmpdata[counter][1],bmpdata[counter][2]) bit.point([count,count1],fill=color) count+=1 if count>=bmpinfo[0]: count=0 count1-=1 out=ImageTk.PhotoImage(bitmap) lab=Label(image=out) lab.pack() print "Done" root.mainloop() |
bon terminé avec ce truc bmp : prise de tête à la longue ...
| CODE |
| # attempt to create a chip8 interpreter def cpu8(instr,regs,I,PC): opcode=instr/4096 instr=instr-4096*opcode if opcode==0: PC=opcode0(instr,PC) elif opcode==1: print "%X: jump %X"%(PC,instr) PC=instr elif opcode==2: stack.append(PC) print "%X: jsr %X"%(PC,instr) PC=instr elif opcode==3: register=int(instr/256) value=instr-256*register print "%X: skeq V%X,%X"%(PC,register,value) if regs[register]==value: PC+=4 else: PC+=2 elif opcode==4: register=int(instr/256) value=instr-256*register print "%X: skne v%X,%X"%(PC,register,value) if regs[register]==value: PC+=2 else: PC+=4 elif opcode==5: register1=int(instr/256) register2=int((instr-256*register1)/16) print "%X: skeq V%X,V%X"%(PC,register1,register2) if regs[register1]==regs[register2]: PC+=4 else: PC+=2 elif opcode==6: register=int(instr/256) value=instr-256*register regs[register]=value print "%X: mov V%X,%X"%(PC,register,value) PC+=2 elif opcode==7: register=int(instr/256) value=instr-256*register regs[register]+=value print "%X: add V%X,%X"%(PC,register,value) PC+=2 elif opcode==8: register1=int(instr/256) register2=int((instr-256*register1)/16) value=instr-256*register1-16*register2 opcode8(register1,register2,value,PC) PC+=2 elif opcode==9: print "skne" elif opcode==0xA: print "mvi " elif opcode==0xB: print "jmi" elif opcode==0xC: print "rand v" elif opcode==0xD: print "sprite r" elif opcode==0xE: print "opcode E : translating" elif opcode==0xF: print "opcode F : translating" return PC def opcode0(value,PC): if value==0xE0: print "%X: cls"%(PC) PC+=2 elif value==0xEE: PC=stack.pop() print "%X: rts"%(PC) else: print "NoOp" PC=0 return PC def opcode8(register1,register2,value,PC): if value==1: regs[register1]=regs[register2] print "%X: mov V%X,V%X"%(PC,register1,register2) elif value==2: regs[register1]=regs[register1]|regs[register2] print "%X: or V%X,V%X"%(PC,register1,register2) elif value==3: regs[register1]=regs[register1]®s[register2] print "%X: and V%X,V%X"%(PC,register1,register2) elif value==4: regs[register1]=regs[register1]^regs[register2] print "%X xor V%X,V%X"%(PC,register1,register2) elif value==5: regs[register1]+=regs[register2] if regs[register1]>0xFF: regs[0xF]=1 regs[register1]=regs[register1]%0xFF print "%X add V%X,V%X"%(PC,register1,register2) elif value==7: regs[register1]-=regs[register2] if regs[register1]<0: regs[register1]+=0xFF regs[0xF]=1 print "%X sub V%X,V%X"%(PC,register1,register2) elif value==6: regs[0xF]=regs[register1]&1 regs[register1]=regs[register1]>>1 print "%X: shr V%X"%(PC,register1) elif value==0xE: regs[0xF]=regs[register1]&128 regs[register1]=regs[register1]<<1 print "%X: shl V%X"%(PC,register1) regs=[0]*16 stack=[] PC=0x200 I=0 print "" # list containing a instruction list ... no real memory map intr=[0]*0x200 intr.append(0x610F) intr.append(0) intr.append(0x7001) intr.append(0) intr.append(0x00E0) intr.append(0) intr.append(0x5010) intr.append(0) intr.append(0x1202) intr.append(0) intr.append(0x810E) intr.append(0) intr.append(0x8006) intr.append(0) intr.append(0) while PC<>0: PC=cpu8(intr[PC],regs,I,PC) print "registers:", regs print "stack:",stack print "0x%X"%PC |
loin d'être terminé .. mais faut bien commencer par qq part ..