Hallo erst mal,
da die Demoversion vom BASCOM-Compiler maximal 4k übersetzen kann und ich diesen Wert schon einmal überschritten hatte wurde kontinuierlich versucht das Programm zu schrumpfen, mein letzter Versuch war eine weitere Prozedur zu erstellen.
Da die Prozedur 4 Zeilen hat und dafür gerade mal 2 Zeilen eingespart wurden hatte ich mir nur ein paar Byte erhofft, das Ergebnis war verblüffend gut:
2 Zeilen weniger (0,8%) bei 248 Zeilen im Quelltext machen 606Byte weniger (24,5%) bei 2474Byte Programmcode aus der jetzt nur noch 1868Byte hat ! Soviel haben alle anderen Aktionen nicht erbracht, die Verschachtlung der Gosubs ist maximal 2 und sollte i.O. sein.
Grüßle, Naubaddi
Die alte Version:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Gesicht:
A6a = A6 : A5a = A5 : M4a = M4 ' die alten Werte merken
M3 = M4 + 8 : M2 = M3 + 8 : M1 = M2 + 8
for Zeile = 1 to 8
Cs = 0 : Din = 0 : Clk = 0 ' noch nicht anzeigen
Befehl = Zeile
Daten = lookup( A6 , Augenarten ) ' 8x8 Matrix 4 die Letzte 8x8 Matrix
shiftout Din , Clk , Befehl , 1 ' den Befehl senden
shiftout Din , Clk , Daten , 1 ' die Daten senden
Daten = lookup( A5 , Augenarten ) ' 8x8 Matrix 4 die Letzte 8x8 Matrix
shiftout Din , Clk , Befehl , 1 ' den Befehl senden
shiftout Din , Clk , Daten , 1 ' die Daten senden
Daten = lookup( M4 , Mundarten ) ' 8x8 Matrix 4 die Letzte 8x8 Matrix
shiftout Din , Clk , Befehl , 1 ' den Befehl senden
shiftout Din , Clk , Daten , 1 ' die Daten senden
Daten = lookup( M3 , Mundarten ) ' 8x8 Matrix 3
shiftout Din , Clk , Befehl , 1 ' den Befehl senden
shiftout Din , Clk , Daten , 1 ' die Daten senden
Daten = lookup( M2 , Mundarten ) ' 8x8 Matrix 2
shiftout Din , Clk , Befehl , 1 ' den Befehl senden
shiftout Din , Clk , Daten , 1 ' die Daten senden
Daten = lookup( M1 , Mundarten ) ' 8x8 Matrix 1 die Erste 8x8 Matrix seriel angeschloßen
shiftout Din , Clk , Befehl , 1 ' den Befehl senden
shiftout Din , Clk , Daten , 1 ' die Daten senden
incr A6 : incr A5 ' die nächste Zeile vom Auge
incr M4 : incr M3 : incr M2 : incr M1 ' die nächste Zeile vom Mund
Cs = 1 ' jetzt anzeigen
next Zeile
A6 = A6a : A5 = A5a : M4 = M4a ' auf die alten Werte zurück setzen
return
Die neue Version:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Gesicht:
A6a = A6 : A5a = A5 : M4a = M4 ' die alten Werte merken
M3 = M4 + 8 : M2 = M3 + 8 : M1 = M2 + 8
for Zeile = 1 to 8
Cs = 0 : Din = 0 : Clk = 0 ' noch nicht anzeigen
Befehl = Zeile
Daten = lookup( A6 , Augenarten ) ' 8x8 Matrix 4 die Letzte 8x8 Matrix
gosub Send_max_Gesicht
Daten = lookup( A5 , Augenarten ) ' 8x8 Matrix 4 die Letzte 8x8 Matrix
gosub Send_max_Gesicht
Daten = lookup( M4 , Mundarten ) ' 8x8 Matrix 4 die Letzte 8x8 Matrix
gosub Send_max_Gesicht
Daten = lookup( M3 , Mundarten ) ' 8x8 Matrix 3
gosub Send_max_Gesicht
Daten = lookup( M2 , Mundarten ) ' 8x8 Matrix 2
gosub Send_max_Gesicht
Daten = lookup( M1 , Mundarten ) ' 8x8 Matrix 1 die Erste 8x8 Matrix seriel angeschloßen
gosub Send_max_Gesicht
incr A6 : incr A5 ' die nächste Zeile vom Auge
incr M4 : incr M3 : incr M2 : incr M1 ' die nächste Zeile vom Mund
Cs = 1 ' jetzt anzeigen
next Zeile
A6 = A6a : A5 = A5a : M4 = M4a ' auf die alten Werte zurück setzen
return
Send_max_Gesicht:
shiftout Din , Clk , Befehl , 1 ' den Befehl senden
shiftout Din , Clk , Daten , 1 ' die Daten senden
Return
Grüßle, Naubaddi