Hallo, guten Tag.
Ich spiele mit dem Plus4 und dem ACIA für Rs232 im Vice.
Es hat eine Eigenart.
Es werden erst Daten vom Plus4 zurück gesendet zum Terminal wenn ich
Daten zum Plus4 sende. Das heisst ich sende immer zum Plus4 damit er
aktiv wird zum zurücksenden.
Ich suche bitte mal eine Beschreibung wie der ACIA funktioniert in
dieser Richtung. Vielleicht kann man mir das einmal erklären?
Danke.
Hallo,
peter bierbach schrieb:> Ich suche bitte mal eine Beschreibung wie der ACIA funktioniert in> dieser Richtung. Vielleicht kann man mir das einmal erklären?
Deine ACIA dürfte ein MC6850 sein?
Datenblatt ist im Netz, der Chip macht da sehr wenig, Baudrate und
Format setzen, feszlegen welche Interrupts aktiviert werden sollen und
das war es eigentlich. Alles andere macht die Software, Statusregister
lesen, Daten zum Senden reinschreiben oder angekommene Daten abholen
usw. usw.
Zusätzliche Empfangs-/Sendebuffer hat er nicht, man muß also angekommene
Bytes auch rechtzeitig abholen. Alles schon sehr lange her...
Gruß aus Berlin
Michael
Michael U. schrieb:> Alles schon sehr lange her...
So weit ich weiss war beim 6850 sehr übel, wenn der Transfer mitten im
Byte durch Änderung der RTS/CTS abgebrochen wurde, war das Byte weg.
------------------------------------------------------------------------
--
Alles andere macht die Software, Statusregister
lesen, Daten zum Senden reinschreiben oder angekommene Daten abholen
------------------------------------------------------------------------
--
Da brauche ich mal bitte Info.
Welche Register werden benutzt usw : Senden und Empfangen ?
Wollte es mit dem 6502 in ASM.
Danke.
Hallo, guten Tag.
Wer kann mir dieses bitte einmal erklären für eine Programmerstellung
mit ASM? Was muss bitte beachtet werden?
-------------------------
Driver for the 6551 ACIA chip built into the Plus/4. Supports up to
19200 baud, hardware flow control (RTS/CTS) and interrupt driven
receives. Note that because of the peculiarities of the 6551 chip
transmits are not interrupt driven, and the transceiver blocks if the
receiver asserts flow control because of a full buffer.
--------------------------
Danke.
Ich habe hier das nochmal übersetzt, oben muss ein Fehler sein in der
englischen Version.
-------------------------------------
Treiber für den im Plus / 4 eingebauten 6551 ACIA-Chip. Unterstützt bis
zu 19200 Baud, Hardware-Flusskontrolle (RTS / CTS) und
Interrupt-gesteuerte Empfänge. Es ist zu beachten, dass aufgrund der
Besonderheiten des 6551-Chips Übertragungen nicht
unterbrechungsgesteuert sind und der Transceiver blockiert, wenn der
Empfänger aufgrund eines vollen Puffers eine Flusssteuerung aktiviert.
-------------------------------------
-unterbrechungsgesteuert ??
-Flusssteuerung aktiviert ??
Wer kann mir das bitte einmal Erkären, ich verstehe es nicht.
Was muss ich da jetzt beachten wenn ich Daten austausche mit ASM-Code ?
Wie bekomme ich das bitte in den Griff:
...wenn der Empfänger aufgrund eines vollen Puffers eine Flusssteuerung
aktiviert.
Danke.
Heute heißt das UART und kann meistens etwas mehr als die ACIA
(Asynchronous Communication Interface Adapter).
Such' mal nach UART, da solltest du mehr Glück haben...
Danke für die Info.
Im Plus4 Vice macht der ACIA seine Unwesen.
Das normale RS232 funktioniert auf den anderen Geräten : C64 und VIC20.
Mir fehlt die Kenntnis wie das Senden und Empfangen abgestimmt werden
muss.
Wenn ich Daten zum Plus4 sende kommt die Sendepflicht zurück die ich
dort aktiviert habe um Daten auf den Notebook zu empfangen die ich haben
möchte.
Das komische ist das ich den Empfang auf dem Plus4 noch nicht
eingerichtet habe.
Ich muss den ACIA also Anschubsen vom Notebook sonst kommt nichts rüber
vom Plus4.
Ich habe hier eine Demo gemacht.
Die Weile-Schleife kann immer laufen , es gibt beim ACIA kein Überlauf.
Und es wird auch nichts zum Notebook geschickt.
Wenn ich jetzt irgendwelche Daten rüberschicke pro Tastendruck (1
Byte)vom Notebook zum ACIA , wird auch das ABCD... einzeln so
zurückgeschickt vom ACIA wie ich es haben möchte.
Es kommt ein überlauf nach ca. 56 Tastendrücken auf dem Notebook.
Dann wird dauernd das ABC... zum Notebook geschickt als wer der ACIA
irgendwie abgestürtzt.
Darum verstehe ich nicht wie das Ding arbeitet.
-------------------------
program main;
var
i : byte;
p : pointer;
procedure seriell_send();
begin
asm("
ldx #1
jsr $ffc9
lda $fd
jsr $ffd2
");
end;
procedure seriell_open();
begin
asm("
lda #1
ldx #2
ldy #2
jsr $ffba
lda #2
ldy #$c0
ldx #$00
jsr $ffbd
jsr $ffc0
");
end;
begin
definescreen();
clearscreen($20, screen_char_loc);
clearscreen(white, screen_col_loc);
screenmemory := #screen_char_loc;
poke(^$c000,0,22);
poke(^$c000,1,5);
seriell_open();
i:=65;
while (true) do
begin
wait(100);
if(i =91) then
begin
i:=65;
end;
poke(^$fd,0,i);
seriell_send();
i:=i+1;
end;
loop();
end.
--------------------------------
Gruss
Vom 30.03.2021 10:47 ist überfällig.
Unten mit dem Programm kann ich jetzt Daten senden zum PLus4 und auch
Daten empfangen vom Plus4 mit 9600Baud
Ein kleines Problem ist , das beim Senden vom Plus4 immer das letzte
Byte (Ascii) 2 mal gedruckt wird am Empfänger bevor das Neue erscheint.
Beispiel:
A - wird eingeben beim Plus4 und erscheint beim Empfänger
B - sende ich , muss es 3 mal senden damit es erscheint. Es wird dann
erst 2mal das A gedruckt und dann das B usw.
hier möchte ich das B haben
| hier möchte ich das C haben
| |
| |
A AAB BBC CCD DDE ....usw.
------------------------
program seriel;
const
EMPTY = $20;
SCREEN_ADDR = $0c00;
var
i,y : byte;
procedure seriell_open(); assembler;
asm {
lda #1
ldx #2
ldy #2
jsr $ffba
lda #2
ldy #252
ldx #253
jsr $ffbd
jsr $ffc0
};
end;
procedure seriell_send(); assembler;
asm {
ldx #1
jsr $ffc9
lda $fe
jsr $ffd2
};
end;
procedure seriell_empfang(); assembler;
asm {
ldx #1
jsr $ffc6
jsr $ffe4
sta $ff
};
end;
procedure seriell_close(); assembler;
asm {
lda #$01
jsr $ffc3
};
end;
begin
FillChar(pointer(SCREEN_ADDR), 24 * 40, EMPTY);
seriell_open;
pause(10);
i:=0;
while True do begin
seriell_empfang();
poke($c00+i,peek($ff)-96);
poke($fe,peek($ff));
seriell_send();
i:=i+1;
end;
seriell_close;
end.
--------------------------------