Also was meinst du mit Schemaplan ?
Ich sende dir mal für den Anfang die Adressen, an denen der jeweilige
Speicher liegt und meinen Init-String für´s erste.
#define TXTADR 0000H
#define GRADR 0500H
#define CGADR 1800H
#define DUMMY 00H
#define CURSOR 21H
#define OFFSET 22H
#define ADPSET 24H
#define TXTHOME 40H
#define TXTAREA 41H
#define GRHOME 42H
#define GRAREA 43H
#define ORMODE 80H
#define XORMODE 81H
#define ANDMODE 83H
#define MODETXT 94H
#define MODEGRAPH 98H
#define MODEMIX 9CH
#define SEQUENCE_END 0A1H ;define for Sequence-Routine
coInitSequence:
; -------------+- LOW ------+- HIGH ------+- CMD ------------------
db low(TXTADR), high(TXTADR), TXTHOME ; set
text home address
db COLS, 00H, TXTAREA ; set
text area (columns)
db 00H, 00H, CURSOR
db low(GRADR), high(GRADR), GRHOME ; set
graphic home address
db COLS, 00H, GRAREA ; set
graphic area (columns)
db DUMMY, DUMMY, ORMODE ; set
XOR mode for text & graphic mix
db low(GRADR), high(GRADR), ADPSET ;
address pointer set
db DUMMY, DUMMY, MODEMIX ; set
text & graphic mode
db SEQUENCE_END
Das Ganze sende ich mit einer Routine als String zum Display. Die dazu
passenden Routinen haben keinen Sinn, da ja jeder das Display anders
ansteuert (bei mir über Port-Leitungen).
Ein Teil meiner Init sieht z.B. so aus :
vDisplayInit: ; set home address
clr SIG_CE
clr SIG_RES
mov r0, #0FFH
loop: nop
nop
djnz r0, loop ; Display startup
setb SIG_RES
mov r7, #low(coInitSequence)
mov r6, #high(coInitSequence)
call _vDisplaySendSequence
In das Display schreiben ...
_vDisplayWriteData: call vCheckBusyForData
mov DATA_BUS, r7
clr SIG_WR
setb SIG_WR
ret
vCheckBusyForData: mov DATA_BUS, #0FFh ; switch bus to
read bit 0+1
setb SIG_CD ; switch to
cmd-mode
jBusyForDataLoop: clr SIG_RD
mov a, DATA_BUS
setb SIG_RD
anl a, #03h ; take the
status-byte
xrl a, #03h
jnz jBusyForDataLoop ; STA 0+1 is
not zero
clr SIG_CD ; switch to
data-mode
ret
Na für den Anfang wirds ja mal reichen.
Ciao, Philipp