LOC Data_Segment GREG @ OpnRArg OCTA 0,BinaryRead RArg OCTA :Bmp:BMFile,6 Erst 6 Byte lesen (siehe unten) OpnWArg OCTA 0,BinaryWrite WArg OCTA :Bmp:BMFile,0 $*$ Erst wird die Struktur der BMP-Datei festgelegt. PREFIX :Bmp: Size IS 2 DOff IS 10 BYTE 0,0 F"ur TETRA-Alignment! BMFile BYTE 0 PREFIX : argc IS $0 argv IS $1 FLen IS $2 help IS $3 temp IS $4 Par1 IS $5 $*$ F"ur globale Gr"o"sen: Base GREG 0 Data GREG 0 Off GREG 0 $*$ Kanalnummern f"ur die Dateien IFile IS 3 OFile IS 4 LOC #100 1H BYTE "Usage: ",0 2H BYTE "source target",#A,0 LOC (@+4)&-4 3H BYTE "Fehler beim Oeffnen " BYTE "der Quelldatei",#A,0 LOC (@+4)&-4 4H BYTE "Fehler beim Oeffnen " BYTE "der Zieldatei",#A,0 Main LDO Off,argv,0 Argumente aus der Kommandozeile CMP temp,argc,3 BNN temp,1F GETA $255,1B Usage-Meldung ausdrucken TRAP 0,Fputs,StdErr LDOU $255,Off,0 TRAP 0,Fputs,StdErr GETA $255,2B TRAP 0,Fputs,StdErr TRAP 0,Halt,0 1H LDOU temp,argv,8 Dateien "offnen STOU temp,OpnRArg erst Quelldatei LDA $255,OpnRArg TRAP 0,Fopen,IFile BNN $255,1F GETA $255,3B \qquad ggf.\ Fehlermeldung TRAP 0,Fputs,StdErr TRAP 0,Halt,0 1H LDOU temp,argv,16 dann die Zieldatei STOU temp,OpnWArg LDA $255,OpnWArg TRAP 0,Fopen,OFile BNN $255,1F GETA $255,4B \qquad ggf.\ Fehlermeldung TRAP 0,Fputs,StdErr TRAP 0,Halt,0 1H LDA $255,RArg TRAP 0,Fread,IFile LDA Base,:Bmp:BMFile+:Bmp:Size $*$ Dateil"ange feststellen SET Par1,Base PUSHJ temp,rletet SET FLen,temp SET $255,0 TRAP 0,Fseek,IFile LDA $255,RArg STOU FLen,$255,8 TRAP 0,Fread,IFile $*$ Feststellen, wo die Bitmap beginnt LDA Base,:Bmp:BMFile+:Bmp:DOff SET Par1,Base PUSHJ temp,rletet SET Data,temp ADD Off,Data,2 $*$ Basisadresse der Bitmap nach {\tt Base} LDA Base,:Bmp:BMFile ADDU Base,Base,Data SUB Off,FLen,Off PUSHJ temp,invert $*$ und schreiben write LDA $255,WArg STOU FLen,$255,8 TRAP 0,Fwrite,OFile TRAP 0,Halt,0 Start IS $0 Value IS $1 tmp IS $2 1H OCTA #0102040810204080 rletet GETA $255,1B LDOU tmp,$255 LDHT Value,Start MOR Start,Value,tmp POP 1,0 $*$ Bitmap invertieren invert SET temp,255 1H LDBU Data,Base,Off SUBU Data,temp,Data STBU Data,Base,Off SUB Off,Off,1 PBNZ Off,1B POP 0,0 $*$ Bitmap Octa-weise invertieren inv8 SET temp,0 SUB temp,temp,1 1H LDOU Data,Base,Off BDIF Data,temp,Data STOU Data,Base,Off SUB Off,Off,8 PBP Off,1B POP 0,0 $*$ Aufhellen octaweise light8 SETH help,#6400 SET temp,0 SUB temp,temp,1 $-1$: Bit-Matrix mit lauter Einsen MOR help,help,temp verachtfachen 2H LDOU Data,Base,Off NOR temp,Data,0 BDIF temp,temp,help saturierte Differenz NOR Data,temp,0 STOU Data,Base,Off SUB Off,Off,8 PBP Off,2B POP 0,0