C64 RS232

Felkeltették az érdeklődésemet, hogy van a C64-be gyárilag is RS232 kapcsolódási lehetőség. Ez néhány egyszerű alkalmazás esetén igen hasznos lehet, mint például egy modem illesztése, vagy Arduinó vezérlés/debug esetében.
Több oldalon is utánnanéztem a dolognak, és kiderült, hogy az interface a USER portra van kivezetve, és általános I/O vonalakat használ tisztán szoftveres megoldással, ami a Kernal-ban van. Sajnos emiatt a sebessége elég alacsony: 300 – 2400 baud közötti sebességeket lehet beállítani rajta. A másik probléma vele az, hogy nem az RS232 szabványban meghatározott jelszintekkel működik, hanem TTL szintű jelekkel operál. Ez azért fontos, mert ha szabványos készülékkel kapcsoljuk össze, akkor tönkreteszi a CIA chipet a C64-ben illesztő elektronika nélkül, mivel az +-12V-os jeleket használ. A gyári modemekhez, és a PC portok használatához kell egy feszültségátalakító illesztő áramkör is, lent a letöltéseknél található egy példa. Sok esetben az átalakító hiánya nem gond, mivel az Arduino, vagy az USB RS232-TTL átalakító TTL jelszinteket használ, így ezeket közvetlenül rá lehet kötni a User portra.

RS232 bekötése a User porton

Rögtön ki is próbáltam, miután leszedtem a Hardwarebook oldalról a csatlakozó kiosztását. Először egy olcsó egyszerű USB-TTL átalakítóval próbáltam ki, és egy soros terminál programmal (CoolTerm) a másik oldalon, ami egy Macintosh volt. Az átalakító típusa nem fontos, csak hogy legyen hozzá a PC-n driver, és TTL jelet adjon ki. A 3,3V-os is jó, nem kötelező 5V-nak lennie, 2,4V fölött már magasnak érzékeli a C64. Kínából egy dollárért is kapható.

Összekötve a 2 gép egy USB átalakítón keresztül
Csak az RX/TX van bekötve – így már működőképes, de nincs hardver átvitelvezérlés

A C64 oldalon a B+C vonalat össze kell kötni, mert a vételi vonalon az egyik biten jön az adat, a másik generálja a vételi megszakítást (narancs drót).

A példa program kifejlesztése SD1541-II segítségével

A működés ellenőrzéséhez kellett egy példaprogram is, ami alapvetően lehet nagyon egyszerű is, akár egy open parancs Basic-ből, de ha komolyabban akarjuk a paramétereket beállítani, akkor jobb ha írunk egy példaprogramot rá. Én is így tettem, és megírtam BASIC-ben néhány példa alapján amiket a C64WIKI-n, és a C64 programmers reference guide-ben olvastam.

A beírt dolgokat átküldi a terminálba, és vissza
A beírt dolgokat átküldi a terminálba, és vissza

A programocska egyszerű, indulás után beállítja a program elején deffiniált COM paramétereket, és átküld egy üdvözlő szöveget, ebből lehet tudni hogy a beállítások jók. Ezután bármelyik oldalon beírunk valamit, enterre átküldi a másik oldalra a sort. A @ karakter leütésével lehet kilépni a Basic-be.

A program forráskódja:

10 REM ***RS232 TERMINAL TEST***
12 PRINT".ì.";"RS232 TEST BY CAPAC 2020"
14 PRINT"8N1 1200BAUD, EXIT:@"
19 GOTO 1000
20 :
30 A$="":B$="":AA$="":BB$=""
40 PRINT# LF,"HELLO I'M A C64!"
100 REM ***MAIN CYCLE
110 GOSUB 1200
120 GOSUB 1300
190 IF A$="@" THEN GOTO 1100
200 GOTO 100
1000 :
1001 REM ***SUB INIT RS232 PORT
1002 REM ***CONTROL REGISTER SETTINGS
1004 BR=8: REM 6-300 8-1200 10-2400 BAU
1006 DB=0: REM 8 DATA BIT 8.PARITY
1008 SB=0: REM 1 STOP BIT
1010 :
1012 REM ***COMMAND REGISTER SETTINGS
1014 HS=1: REM X-WIRE
1016 UA=0: REM FULL DUPLEX
1018 PA=160: REM MARK PARITY-8.DATA=1
1020 :
1022 REM ***GENERAL SETTINGS
1024 LF=2: REM LOGICAL FILE ANYTHING
1026 GA=2: REM RS232 DEVICE NUMBER
1028 SA=0: REM SECONDARY ADDRESS
1030 :
1032 OPEN LF,GA,SA,CHR$(BR+DB+SB)+CHR$(HS+UA+PA)
1034 LF=2: REM OPEN CLEARS ALL VARIABLE
1080 GOTO 20: RETURN DO NOT WORK HERE!
1090 :
1100 REM ***SUB CLOSE DEV RS232
1110 CLOSE LF: REM LOST VARIABLES!
1180 END
1190 :
1200 REM ***SUB GET RS232 STRING
1210 GET# LF,B$
1220 IF B$="" THEN RETURN
1230 IF B$=CHR$(13) THEN PRINT BB$:BB$="":B$=""
1240 BB$=BB$+B$
1280 RETURN
1290 :
1300 REM ***SUB SEND RS232 STRING
1310 GET A$
1320 IF A$="" THEN RETURN
1330 IF A$=CHR$(13) THEN PRINT# LF,AA$:AA$="":A$="":PRINT
1340 AA$=AA$+A$:PRINT A$;
1380 RETURN
1390 :

Letöltések: