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.
:
Bearbeitet durch User
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...
:
Bearbeitet durch User
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
:
Bearbeitet durch User
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.