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.
Im Plus4 wurden MOS 6551 bzw. MOS 8551 verbaut. https://de.wikipedia.org/wiki/Commodore_Plus/4#Ein-_und_Ausgabe,_Schnittstellen
------------------------------------------------------------------------ -- 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.
Micromon.asm zeigt, wie es geht: http://forum.6502.org/viewtopic.php?f=12&t=5709 Memorymap des Plus/4, der ACIA ist ab $FD00: http://www.cbmhardware.de/show.php?r=4&id=13/Commodore%20plus/4%20and%20Commodore%2016%20Memory%20Map Hier noch das Datenblatt mit Registerbeschreibung: http://archive.6502.org/datasheets/mos_6551_acia.pdf
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.
--------------------------------
Hallo Mario M. Danke für den Tip. Habe jetzt einfach mal diese KIM-DEMO raugenommen und für den Plus4 umgesetzt mit den richtigen Adressen. Das funktioniert. Mit diesem OPEN/CLOSE usw war ich auf dem falschen Weg. https://www.atarimagazines.com/compute/issue10/075_1_EXPERIMENTING_WITH_THE_6551_ACIA.php Gruss
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.