Ja, lieber Herr Kollege, so einfach ist das nicht:
für den FLASH brauchst du 16-bit pointer (d.h. jeder Schmarrn * 2)
Schau die das Prog an, ich habe für den ersten Buchstaben "H" alles gecheckt, ein bißchen was darfst du dann auch
*grmpf* Im Flash muttu mit LPM u. Z lesen !
;************************************************* *****************************
;
; Testen des indizierten Tabellenzugriffs
; MCU: AT90S2313 Takt: 4,433618 MHz
;
;Zeiger_Text_Anfang = Register X
;Zeiger_Pattern = Register Y
;Zeiger_Text_Basis = Register Z
;************************************************* *****************************
;
.nolist
.include <2313def.inc>
.list
;
; Konstanten
.equ Offset = 0x20 ;Offset zum ersten Zeichens im Zeichensatz (32)
.equ Counter_Spalte = 0 ;Spaltenzähler
.equ Counter_Zeile = 0 ;Index für Pattern
;
; Benutzte Register
.def wreg = R16
.def temp = R17
;
; Codebeginn
;
.CSEG
.ORG 0000
rjmp main
; Reset- und Interruptroutinen
;*********** Hauptprogramm ******************************************
main:
ldi wreg,low(RAMEND)
out SPL,wreg ;der übliche Stack
ldi wreg,0
sts Counter_Spalte, wreg ;clear
sts Counter_Zeile, wreg ;clear
sts Counter_Spalte, wreg ;clear
ldi ZH, high (Text*2)
ldi ZL, low (Text*2)
loop_Zeile:
loop_Zeichen:
lpm ;Zeichen aus Text holen und erhöhen
tst R0
breq ende ;ja,nächste Zeile (vorläufig ende)
adiw ZL,1
push ZL ;Basisadresse sichern ...
push ZH ;Basisadresse sichern ...
ldi ZH, high (Zeichensatz*2)
ldi ZL, low (Zeichensatz*2)
mov temp,R0 ; character
subi temp,Offset ;Offset des Zeichensatzes abziehen
rol temp
add ZL,temp ;Zeichen als Offset zur Basis addieren
clr temp
adc ZH, temp
lpm
mov temp,R0 ; character vec low
adiw ZL,1
lpm
mov zh,R0 ; character vec high
mov zl, temp
lpm
mov temp,R0 ; pattern
;Zeilenmuster holen
pop ZH ;... und wieder zurückholen
pop ZL ;... und wieder zurückholen
neue_Zeile:
rjmp loop_Zeile
ende:
rjmp ende
;************* Tabellen *********************************************
Text:
.db "Hallo 2&4-eR",0
;Einsprungtabelle,vom Zeichsatz müssen 32 abgezogen werden,
;damit mit der Zählung bei Null begonnen werden kann
Zeichensatz:
.dw char_leer, char_ausr, char_gf, char_dk, char_dol, char_proz
.dw char_und, char_hkom, char_likl, char_rekl, char_mal, char_plus
.dw char_kom, char_minus, char_pkt, char_slash
;-------------------------------------------
.dw char_0, char_1, char_2, char_3, char_4, char_5, char_6, char_7
.dw char_8, char_9, char_dp, char_sk, char_li, char_gl, char_re, char_fr
;-------------------------------------------
.dw char_at, char_A, char_B, char_C, char_D, char_E, char_F, char_G
.dw char_H<<1, char_I, char_J, char_K, char_L, char_M, char_N, char_O
;-------------------------------------------
.dw char_P, char_Q, char_R, char_S, char_T, char_U, char_V, char_W
.dw char_X, char_Y, char_Z, char_lie, char_yen, char_ree, char_da, char_us
;-------------------------------------------
.dw char_hk, char_a
.dw char_b, char_c, char_d, char_e, char_f, char_g
.dw char_h, char_i, char_j, char_k, char_l, char_m
.dw char_n, char_o, char_p, char_q, char_r, char_s
.dw char_t, char_u, char_v, char_w, char_x, char_y
.dw char_z, char_res, char_pip, char_lis, char_rep, char_lip
;Zeichensatz Bitmuster
char_leer: ;Leerzeichen
.db 0b00000000, 0b00000000, 0b00000000, 0b00000000
.db 0b00000000, 0b00000000, 0b00000000,0 ;0,0,0,0,0,0,0
char_ausr: ;Ausrufezeichen
.db 0b00100000, 0b00100000, 0b00100000, 0b00100000
.db 0b00000000, 0b00000000, 0b00100000,0 ;20,20,20,20,0,0,20
char_gf: ;Gänsefüsse
.db 0b01010000, 0b01010000, 0b01010000, 0b00000000
.db 0b00000000, 0b00000000, 0b00000000,0 ;50,50,50,0,0,0,0
char_dk: ;Doppelkreuz
.db 0b01010000, 0b01010000, 0b11011000, 0b01010000
.db 0b11011000, 0b01010000, 0b01010000,0 ;50,50,d8,a0,d8,50,50
char_dol: ;Dollar
.db 0b00100000, 0b01111000, 0b10100000, 0b01110000
.db 0b00101000, 0b11110000, 0b00100000,0 ;20,78,a0,70,28,f0,20
char_proz: ;Prozent
.db 0b11000000, 0b11001000, 0b00010000, 0b00100000
.db 0b01000000, 0b10011000, 0b00011000,0 ;60,68,10,20,40,98,18
char_und: ;kaufmännisch-und
.db 0b01100000, 0b10010000, 0b10100000, 0b01000000
.db 0b10101000, 0b10010000, 0b01101000,0 ;60,90,a0,40,a8,90,68
char_hkom: ;Hochkomma
.db 0b01100000, 0b00100000, 0b01000000, 0b00000000
.db 0b00000000, 0b00000000, 0b00000000,0 ;60,20,40,0,0,0,0
char_likl: ;linke Klammer
.db 0b00010000, 0b00100000, 0b01000000, 0b01000000
.db 0b01000000, 0b00100000, 0b00010000,0 ;10,20,40,40,40,20,10
char_rekl: ;rechte Klammer
.db 0b01000000, 0b00100000, 0b00010000, 0b00010000
.db 0b00010000, 0b00100000, 0b01000000,0 ;40,20,10,10,10,20,40
char_mal: ;Mal-Zeichen
.db 0b00000000, 0b00100000, 0b10101000, 0b01110000
.db 0b10101000, 0b00100000, 0b00000000,0 ;0,20,a8,70,a8,20,0
char_plus: ;Plus-Zeichen
.db 0b00000000, 0b00100000, 0b00100000, 0b11111000
.db 0b00100000, 0b00100000, 0b00000000,0 ;0,20,20,f8,20,20,0
char_kom: ;Komma
.db 0b00000000, 0b00000000, 0b00000000, 0b00000000
.db 0b01100000, 0b00100000, 0b01000000,0 ;0,0,0,0,60,20,40
char_minus: ;Minus-Zeichen
.db 0b00000000, 0b00000000, 0b00000000, 0b11111000
.db 0b00000000, 0b00000000, 0b00000000,0 ;0,0,0,f8,0,0,0
char_pkt: ;Punkt
.db 0b00000000, 0b00000000, 0b00000000, 0b00000000
.db 0b00000000, 0b01100000, 0b01100000,0 ;0,0,0,0,0,60,60
char_slash: ;/ Slash-Zeichen
.db 0b00000000, 0b00001000, 0b00010000, 0b00100000
.db 0b01000000, 0b10000000, 0b00000000,0 ;0,80,10,20,40,80,0
char_0:
.db 0b01110000, 0b10001000, 0b10011000, 0b10101000
.db 0b11001000, 0b10001000, 0b01110000,0 ;70,88,98,a8,c8,88,70
char_1:
.db 0b00100000, 0b01100000, 0b00100000, 0b00100000
.db 0b00100000, 0b00100000, 0b01110000,0 ;20,60,20,20,20,20,70
char_2:
.db 0b01110000, 0b10001000, 0b00001000, 0b00010000
.db 0b00100000, 0b01000000, 0b11111000,0 ;70,88,08,10,20,40,f8
char_3:
.db 0b11111000, 0b00010000, 0b00100000, 0b00010000
.db 0b00001000, 0b10001000, 0b01110000,0 ;f8,10,20,10,08,88,70
char_4:
.db 0b00010000, 0b00110000, 0b01010000, 0b10010000
.db 0b11111000, 0b00010000, 0b00010000,0 ;10,30,50,90,f8,10,10
char_5:
.db 0b11111000, 0b10000000, 0b11110000, 0b00001000
.db 0b00001000, 0b10001000, 0b01110000,0 ;f8,80,f0,80,80,88,70
char_6:
.db 0b00100000, 0b01000000, 0b10000000, 0b111100000
.db 0b10001000, 0b10001000, 0b01110000,0 ;20,40,80,f0,88,88,70
char_7:
.db 0b11111000, 0b00010000, 0b00100000, 0b01000000
.db 0b01000000, 0b01000000, 0b01000000,0 ;f8,10,20,40,40,40,40
char_8:
.db 0b01110000, 0b10001000, 0b10001000, 0b01110000
.db 0b10001000, 0b10001000, 0b01110000,0 ;70,88,88,70,88,88,70
char_9:
.db 0b01110000, 0b10001000, 0b10001000, 0b01111000
.db 0b00001000, 0b00010000, 0b00100000,0 ;70,88,88,78,80,10,20
char_dp: ;Doppelpunkt
.db 0b00000000, 0b01100000, 0b01100000, 0b00000000
.db 0b01100000, 0b01100000, 0b00000000,0 ;0,60,60,0,60,60,0
char_sk: ;Symikolon
.db 0b00000000, 0b01100000, 0b01100000, 0b00000000
.db 0b01100000, 0b00100000, 0b01000000,0 ;0,60,60,0,60,20,40
char_li: ;Spitze links
.db 0b00010000, 0b00100000, 0b01000000, 0b10000000
.db 0b01000000, 0b00100000, 0b00010000,0 ;10,20,40,80,40,20,10
char_gl: ;gleich
.db 0b00000000, 0b00000000, 0b11111000, 0b00000000
.db 0b11111000, 0b00000000, 0b00000000,0 ;0,0,f8,0,f8,0,0
char_re: ;Spitze rechts
.db 0b01000000, 0b00100000, 0b00010000, 0b00001000
.db 0b00010000, 0b00100000, 0b01000000,0 ;40,20,10,08,10,20,40
char_fr: ;Fragezeichen
.db 0b01110000, 0b10001000, 0b00001000, 0b00010000
.db 0b00100000, 0b00000000, 0b00100000,0 ;70,88,08,10,20,0,20
char_at: ;@-Zeichen
.db 0b01110000, 0b10001000, 0b00001000, 0b01101000
.db 0b10101000, 0b10101000, 0b01110000,0 ;70,88,08,68,a8,a8,70
char_A:
.db 0b01110000, 0b10001000, 0b10001000, 0b10001000
.db 0b11111000, 0b10001000, 0b10001000,0 ;70,88,88,88,f8,88,88
char_B:
.db 0b11110000, 0b10001000, 0b10001000, 0b11110000
.db 0b10001000, 0b10001000, 0b11110000,0 ;f0,88,88,f0,88,88,f0
char_C:
.db 0b01110000, 0b10001000, 0b10000000, 0b10000000
.db 0b10000000, 0b10001000, 0b01110000,0 ;70,88,80,80,80,88,70
char_D:
.db 0b11100000, 0b10010000, 0b10001000, 0b10001000
.db 0b10001000, 0b10010000, 0b11100000,0 ;e0,90,88,88,88,90,e0
char_E:
.db 0b11111000, 0b10000000, 0b10000000, 0b11110000
.db 0b10000000, 0b10000000, 0b11111000,0 ;f8,80,80,f0,80,80,f8
char_F:
.db 0b11111000, 0b10000000, 0b10000000, 0b11110000
.db 0b10000000, 0b10000000, 0b10000000,0 ;f8,80,80,f0,80,80,80
char_G:
.db 0b01110000, 0b10001000, 0b10000000, 0b10110000
.db 0b10001000, 0b10001000, 0b01110000,0 ;70,88,80,b0,88,88,70
char_H:
.db 0b10001000, 0b10001000, 0b10001000, 0b11111000
.db 0b10001000, 0b10001000, 0b10001000,0 ;88,88,88,f8,88,88,88
char_I:
.db 0b01110000, 0b00100000, 0b00100000, 0b00100000
.db 0b00100000, 0b00100000, 0b01110000,0 ;70,20,20,20,20,20,70
char_J:
.db 0b00111000, 0b00010000, 0b00010000, 0b00010000
.db 0b00010000, 0b10010000, 0b01100000,0 ;38,10,10,10,10,90,60
char_K:
.db 0b10001000, 0b10010000, 0b10100000, 0b11000000
.db 0b10100000, 0b10010000, 0b10001000,0 ;88,90,a0,c0,a0,90,90
char_L:
.db 0b10000000, 0b10000000, 0b10000000, 0b10000000
.db 0b10000000, 0b10000000, 0b11111000,0 ;80,80,80,80,80,80,f8
char_M:
.db 0b10001000, 0b11011000, 0b10101000, 0b10101000
.db 0b10001000, 0b10001000, 0b10001000,0 ;88,d8,a8,a8,88,88,88
char_N:
.db 0b10001000, 0b10001000, 0b11001000, 0b10101000
.db 0b10011000, 0b10001000, 0b10001000,0 ;88,88,68,a8,98,88,88
char_O:
.db 0b01110000, 0b10001000, 0b10001000, 0b10001000
.db 0b10001000, 0b10001000, 0b01110000,0 ;70,88,88,88,88,88,70
char_P:
.db 0b11110000, 0b10001000, 0b10001000, 0b11110000
.db 0b10000000, 0b10000000, 0b10000000,0 ;f0,88,88,f0,80,80,80
char_Q:
.db 0b01110000, 0b10001000, 0b10001000, 0b10001000
.db 0b10101000, 0b10010000, 0b01101000,0 ;70,88,88,88,a8,90,68
char_R:
.db 0b11110000, 0b10001000, 0b10001000, 0b11110000
.db 0b10100000, 0b10010000, 0b10001000,0 ;f0,88,88,f0,90,90,90
char_S:
.db 0b01111000, 0b10000000, 0b10000000, 0b01110000
.db 0b00001000, 0b00001000, 0b11110000,0 ;78,80,80,70,08,08,f0
char_T:
.db 0b11111000, 0b00100000, 0b00100000, 0b00100000
.db 0b00100000, 0b00100000, 0b00100000,0 ;f8,20,20,20,20,20,20
char_U:
.db 0b10001000, 0b10001000, 0b10001000, 0b10001000
.db 0b10001000, 0b10001000, 0b01110000,0 ;88,88,88,88,88,88,70
char_V:
.db 0b10001000, 0b10001000, 0b10001000, 0b10001000
.db 0b10001000, 0b01010000, 0b00100000,0 ;88,88,88,88,88,50,20
char_W:
.db 0b10001000, 0b10001000, 0b10001000, 0b10101000
.db 0b10101000, 0b10101000, 0b01010000,0 ;88,88,88,58,58,58,50
char_X:
.db 0b10001000, 0b10001000, 0b01010000, 0b00100000
.db 0b01010000, 0b10001000, 0b10001000,0 ;88,88,50,20,50,88,88
char_Y:
.db 0b10001000, 0b10001000, 0b10001000, 0b01010000
.db 0b00100000, 0b00100000, 0b00100000,0 ;88,88,88,50,20,20,20
char_Z:
.db 0b11111000, 0b00001000, 0b00010000, 0b00100000
.db 0b01000000, 0b10000000, 0b11111000,0 ;f8,08,10,20,40,80,f8
char_lie: ;eckige Klammer links
.db 0b01110000, 0b01000000, 0b01000000, 0b01000000
.db 0b01000000, 0b01000000, 0b01110000,0 ;70,40,40,40,40,40,70
char_yen: ;Yen-Zeichen
.db 0b10001000, 0b01010000, 0b11111000, 0b00100000
.db 0b11111000, 0b00100000, 0b00100000,0 ;88,50,f8,20,f8,20,20
char_ree: ;eckige Klammer rechts
.db 0b01110000, 0b00010000, 0b00010000, 0b00010000
.db 0b00010000, 0b00010000, 0b01110000,0 ;70,10,10,10,10,10,70
char_da: ;^ Dachzeichen
.db 0b00100000, 0b01010000, 0b10001000, 0b00000000
.db 0b00000000, 0b00000000, 0b00000000,0 ;20,50,88,0,0,0,0
char_us: ;Unterstrich
.db 0b00000000, 0b00000000, 0b00000000, 0b00000000
.db 0b00000000, 0b00000000, 0b11111000,0 ;0,0,0,0,0,0,f8
char_hk: ;`-Zeichen
.db 0b01000000, 0b00100000, 0b00010000, 0b00000000
.db 0b00000000, 0b00000000, 0b00000000,0 ;40,20,10,0,0,0,0
char_a_klein:
.db 0b00000000, 0b00000000, 0b01110000, 0b00001000
.db 0b01111000, 0b10001000, 0b01111000,0 ;0,0,70,08,78,88,78
char_b_klein:
.db 0b10000000, 0b10000000, 0b10000000, 0b11110000
.db 0b10001000, 0b10001000, 0b11110000,0 ;80,80,80,f0,88,88,f0
char_c_klein:
.db 0b00000000, 0b00000000, 0b00000000, 0b01110000
.db 0b10000000, 0b10001000, 0b01110000,0 ;0,0,0,70,80,88,70
char_d_klein:
.db 0b00001000, 0b00001000, 0b01101000, 0b10011000
.db 0b10001000, 0b10001000, 0b01111000,0 ;80,80,68,98,88,88,78
char_e_klein:
.db 0b00000000, 0b00000000, 0b01110000, 0b10001000
.db 0b11111000, 0b10000000, 0b01110000,0 ;,0,0,70,88,f8,80,70
char_f_klein:
.db 0b00110000, 0b01001000, 0b01000000, 0b11100000
.db 0b01000000, 0b01000000, 0b01000000,0 ;30,48,40,e0,40,40,40
char_g_klein:
.db 0b00000000, 0b00000000, 0b01111000, 0b10001000
.db 0b01111000, 0b00001000, 0b01110000,0 ;0,0,78,88,78,08,70
char_h_klein:
.db 0b10000000, 0b10000000, 0b10000000, 0b10110000
.db 0b11001000, 0b10001000, 0b10001000,0 ;80,80,80,b0,c8,88,88
char_i_klein:
.db 0b00100000, 0b00000000, 0b01100000, 0b00100000
.db 0b00100000, 0b00100000, 0b01110000,0 ;20,0,60,20,20,20,70
char_j_klein:
.db 0b00001000, 0b00000000, 0b00001000, 0b00001000
.db 0b00001000, 0b10001000, 0b00110000,0 ;08,0,08,08,08,88,30
char_k_klein:
.db 0b10000000, 0b10000000, 0b10010000, 0b10100000
.db 0b11000000, 0b10100000, 0b10010000,0 ;80,80,90,a0,c0,a0,90
char_l_klein:
.db 0b01100000, 0b00100000, 0b00100000, 0b00100000
.db 0b00100000, 0b00100000, 0b01110000,0 ;60,20,20,20,20,20,70
char_m_klein:
.db 0b00000000, 0b00000000, 0b11010000, 0b10101000
.db 0b10101000, 0b10001000, 0b10001000,0 ;0,0,D0,A8,A8,88,88
char_n_klein:
.db 0b00000000, 0b00000000, 0b10110000, 0b11001000
.db 0b10001000, 0b10001000, 0b10001000,0 ;0,0,B0,C8,88,88,88
char_o_klein:
.db 0b00000000, 0b00000000, 0b01110000, 0b10001000
.db 0b10001000, 0b10001000, 0b01110000,0 ;0,0,70,88,88,88,70
char_p_klein:
.db 0b00000000, 0b00000000, 0b11110000, 0b10001000
.db 0b11110000, 0b10000000, 0b10000000,0 ;0,0,f0,88,f0,80,80
char_q_klein:
.db 0b00000000, 0b00000000, 0b01101000, 0b10011000
.db 0b01101000, 0b00001000, 0b00001000,0 ;0,0,68,98,68,08,08
char_r_klein:
.db 0b00000000, 0b00000000, 0b10110000, 0b11001000
.db 0b10000000, 0b10000000, 0b10000000,0 ;0,0,b0,c8,80,80,80
char_s_klein:
.db 0b00000000, 0b00000000, 0b01110000, 0b10000000
.db 0b01110000, 0b00001000, 0b11110000,0 ;0,0,70,80,70,08,f0
char_t_klein:
.db 0b01000000, 0b01000000, 0b11100000, 0b01000000
.db 0b01000000, 0b01001000, 0b00110000,0 ;40,40,e0,40,40,48,30
char_u_klein:
.db 0b00000000, 0b00000000, 0b10001000, 0b10001000
.db 0b10001000, 0b10011000, 0b01101000,0 ;0,0,88,88,88,98,68
char_v_klein:
.db 0b00000000, 0b00000000, 0b10001000, 0b10001000
.db 0b10001000, 0b01010000, 0b00100000,0 ;0,0,88,88,88,50,20
char_w_klein:
.db 0b00000000, 0b00000000, 0b10001000, 0b10001000
.db 0b10101000, 0b10101000, 0b01010000,0 ;0,0,88,88,54,54,50
char_x_klein:
.db 0b00000000, 0b00000000, 0b10001000, 0b01010000
.db 0b00100000, 0b01010000, 0b10001000,0 ;0,0,88,50,20,50,88
char_y_klein:
.db 0b00000000, 0b00000000, 0b10001000, 0b10001000
.db 0b01111000, 0b00001000, 0b01110000,0 ;0,0,88,88,78,08,70
char_z_klein:
.db 0b00000000, 0b00000000, 0b11111000, 0b00010000
.db 0b00100000, 0b01000000, 0b11111000,0 ;0,0,f8,10,20,40,f8
char_lis: ;geschweift Klammer
.db 0b00010000, 0b00100000, 0b00100000, 0b01000000
.db 0b00100000, 0b00100000, 0b00010000,0 ;10,20,20,40,20,20,10
char_pip: ;| Pipe-Zeichen
.db 0b00010000, 0b00010000, 0b00010000, 0b00010000
.db 0b00010000, 0b00010000, 0b00010000,0 ;10,10,10,10,10,10,10,
char_res: ;geschweift Klammer rechts
.db 0b01000000, 0b00100000, 0b00100000, 0b00010000
.db 0b00100000, 0b00100000, 0b01000000,0 ;40,20,20,10,20,20,40
char_rep: ;Pfeil rechts
.db 0b00000000, 0b00100000, 0b00010000, 0b11111000
.db 0b00010000, 0b00100000, 0b00000000,0 ;0,20,10,f8,10,20,0
char_lip: ;Pfeil links
.db 0b00000000, 0b00100000, 0b01000000, 0b11111000
.db 0b01000000, 0b00100000, 0b00000000,0 ;0,20,40,f8,40,20,0
EDIT: mach dir nix draus, man kann schon mal einrosten ! O:)
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.