-
Ich hatte so einen Adapter auch angefangen aber nicht nur für koystich sondern für alle möglichen Geräte.leider war der Prozessor den ich gewählt hatte zu langsam.
Apfel Eingänge lassen sich über einen digital Eingang und einem Ausgang und einem Wiederstand ansteuern.
-
die haben scheinbar keine paddel Unterstützung.
-
das ist auch gut ..hast du einen Link.?
-
nein Vorsicht das kann muss aber nicht gut gehen.
Der c64 darf nur Kontakte gegen Masse haben. Besser ein paar Dioden einbauen
-
so Jiffy Erkennung klappt.
-
Leider bekomme ich nur die Daten korrekt angezeigt die unter atn sind. Die anderen sind wirr und zu wenig....
Nun weiß ich warum ich nur die Byte der "Selection Phase" gesehen habe. Mein C64 hat Jiffy eingebaut und alle Beytes außer die der Selection werden mit Jiffydos übertragen. Daher bekam ich nur Müll nun habe ich mir einen mps 803 und eine 1541 ohne Jiffy geholt und es klappt prima.
Alle Bytes die über den Bus gehen kann ich nun beobachten.
OPEN 1,5,6: PRINT#1,"TEST"
IEC: | GPIB: |
ATN 25 | ATN 25 |
ATN 63 | ATN 63 |
54 | 54 |
45 | 45 |
53 | 53 |
54 | 54 |
eoi 06 | D0 |
ATN 3F | ATN eoi 0A |
eoi 01 | 3F |
| |
Ein wenig anders.
OPEN 1,5,2,"TEST"
IEC: | GPIB: |
ATN 25 | ATN 25 |
ATN F2 | ATN F2 |
54 | 54 |
45 | 45 |
53 | 53 |
eoi 54 | eoi 54 |
ATN 3F | ATN 3F |
eoi 01 | |
Auch ein wenig anders.
Wobei die daten vom GPIB vom Buch stammen und nicht gemessen sind.
-
-
ich habe ein altes Buch PET and the IEEE 488 Bus (GPIB) wenn ich das Lese kommt mir das alles sehr bekannt vor .
Angefangen von der Art der Beschreibung bis zu den Programmen und Beispielen, die ich alle 1/1 auf dem c64 verwenden kann.
Sogar dinge die ich nicht wusste wie cmd1,"test" das man da Text rein machen kann war mir nicht bekannt.
Inspieriert durch die Bytetabellen habe ich eine kleine software gebaut die den Bus belauscht und die Byte über 232 an den Pc als hex überträgt.
So kann man genau sehen was passiert wenn man zb. @ bei Jiffy drückt.
Leider bekomme ich nur die Daten korrekt angezeigt die unter atn sind. Die anderen sind wirr und zu wenig....
-
Kleines Programm um alle Geräte am Bus zu finden.
- 90 for i = 4 to 30
- 100 open 5,i,2: close 5
- 110 if ST=-128 then 130
- 120 print i
- 130 next i
-
so sieht das beim sd2iec aus
- case BUS_ATNACTIVE: // E884
- cmd = iec_getc();
- if (cmd < 0) {
- /* iec_check_atn changed our state */
- uart_putc('C');
- break;
- }
- uart_putc('A');
- uart_puthex(cmd);
- uart_putcrlf();
- if (cmd == 0x3f) { /* Unlisten */
- if (iec_data.device_state == DEVICE_LISTEN)
- iec_data.device_state = DEVICE_IDLE;
- iec_data.bus_state = BUS_ATNFINISH;
- } else if (cmd == 0x5f) { /* Untalk */
- if (iec_data.device_state == DEVICE_TALK)
- iec_data.device_state = DEVICE_IDLE;
- iec_data.bus_state = BUS_ATNFINISH;
- } else if (cmd == 0x40+device_address) { /* Talk */
- iec_data.device_state = DEVICE_TALK;
- iec_data.bus_state = BUS_FORME;
- } else if (cmd == 0x20+device_address) { /* Listen */
- iec_data.device_state = DEVICE_LISTEN;
- iec_data.bus_state = BUS_FORME;
- } else if ((cmd & 0x60) == 0x60) {
- /* Check for OPEN/CLOSE/DATA */
- /* JiffyDOS uses a slightly modified protocol for LOAD that */
- /* is activated by using 0x61 instead of 0x60 in the TALK */
- /* state. The original floppy code has additional checks */
- /* that force the non-load Jiffy protocol for file types */
- /* other than SEQ and PRG. */
- /* Please note that $ is special-cased in the kernal so it */
- /* will never trigger this. */
- if (cmd == 0x61 && iec_data.device_state == DEVICE_TALK) {
- cmd = 0x60;
- iec_data.iecflags |= JIFFY_LOAD;
- }
- iec_data.secondary_address = cmd & 0x0f;
- /* 1571 handles close (0xe0-0xef) here, so we do that too. */
- if ((cmd & 0xf0) == 0xe0) {
- if (cmd == 0xef) {
- /* Close all buffers if sec. 15 is closed */
- if (free_multiple_buffers(FMB_USER_CLEAN)) {
- /* The 1571 error generator/handler always jumps to BUS_CLEANUP */
- iec_data.bus_state = BUS_CLEANUP;
- break;
Alles anzeigen
-
in meiner Schaltung gibt es keine Hardware die den ATN beantwortet. Also brauche ich ATN acknowledge nicht.
Dafür habe ich eine IRQ ...
- void ATN_acknowledge() {
- digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
- iec.ATN();
- } //ATN_acknowledge
- boolean IEC::ATN()
- {
- writeDATA(false);// set Data Hihgh to tell im bysy.
- m_state or_eq atnFlag;// remember ATN
- return;
- }//ATN
-
und so könne (keine ahnung ) das sussehen
- IEC::ATNCheck IEC::checkATN(ATNCmd& cmd)
- {
- ATNCheck ret = ATN_IDLE;
- byte i = 0;
- if(not readATN()) {//6
- noInterrupts();//E85B
- atnFlag == 0; talkFlag = false; listenFlag = false;//E85E - E862
- x = 0x45;
- // Attention line is active, go to listener mode and get message. Being fast with the next two lines here is CRITICAL!
- writeCLOCK(false);//E86d
- writeDATA(true); //E8670
- //delayMicroseconds(TIMING_ATN_PREDELAY);
- while (readCLOCK());// E882
- // Get first ATN byte, it is either LISTEN or TALK
- ATNCommand c = (ATNCommand)receiveByte();// first Byte
- if(m_state bitand errorFlag)
- return ATN_ERROR;
- if(c == ATN_CODE_UNLISTEN ) listenFlag = false; //E887
- return ATN_UNLISTEN;
- if(c == ATN_CODE_UNTALK ) talkFlag = false; //E891
- return ATN_UNTALK;
- if(c == (ATN_CODE_LISTEN bitor m_deviceNumber)) {//E89B
- listenFlag = true;//E8AD
- talkFlag = false;//E8B1
- if (c == (ATN_CODE_TALK bitor m_deviceNumber)) {//E89B
- talkFlag = true;//E89F
- listenFlag = false;//E8A3
- break;
- }
- x and 0x60;//E8BA
- if (x /= 0x60){//E8BC
- seconaryAdress = x;//E8BF
- x and 0x0f;
- channel =x;//E8C3
- if (seconaryAdress and 0xf0 == ATN_CODE_CLOSE) {
- interrupts();
- COMPORT.write("close by reget "); } // Colse
- noInterrupts();
- }
- }//6
Alles anzeigen
-
ertsmal der text
- Die 1541 Verarbeitet die Signale am IEC Bus folgender massen.
- Ein irq vom ATN wird mit dem setzten des 7c ATN empfangen.
- -> irq zu
- Flag 7c ATN empfangen, 79Listen, 7a Talk löschen
- x=45
- x in stak
- Flag f8 ende löschen
- Flag 7d ATN Aktiv setzen
- Clock out lo
- Data out hi
- ATN acknowledge setzen
- 10 kein ATN? 6
- Kein Clock? 10
- 11 Byte holen
- kein unlisten 1
- Flag 79 Listen löschen
- spung 9
- 1 Kein UnTalk 2
- Flag 7a Talk löschen
- sprung 9
- 2 Keine Talk id 3
- Flag 79Listen löschen, 7a Talk setzen
- sprung 5
- 3 keine Listen id 4
- Flag 79 Listen setzen, 7a Talk löschen
- sprung e8d2
- 4 kein bit 5 und 6 von x gesetzt 9
- 84 = s sekudäradresse
- 83 = 00001111 and x
- kein E0= 11110000 and x 9
- irq an
- routine close
- irq aus
- 5 atn aktiv 11
- 6 Flag 7d ATN löschen
- ATN acknowledge löschen
- kein Flag 79 Listen 7
- rutine daten empfanen
- sprung 5
- 7 Kein Flag 7a Talk 8
- set data out
- del clock out
- Daten Senden
- 8 sprung ea4e
- 9 kein Atn 6
- Atn 9
- --------
Alles anzeigen
-
Ich hab das Stück Code mal aufschieben in text. Das Problem ist. Das in asm mit brauch und jump wild gesprungen werden kann was in c so nicht geht aber es umgesetzt sein will.
Ich werde nacher meine Versuche. zur Diskusion Stellen
-
in Moment bin ich dabei die Art und weise wie die 1541 den Bus bedient aufzuschreiben ...
-
Abaut the get problem i have add a thing to get the las used channel in the ata talk session.
-
in c64 the bit of the i think talk is not set so the c64 tels a different iec stuff.
this is a bug but we see 1541 make it briliant.
-
Dss dos 5.1 arbeitet an einer 1541 einwandfrei.
-
ok bei allen hätte 00 ok 00 00 rauskommen müssen --- da bin ich grade drann das bei mir zu fixen. meatloaf muss noch viel lernen.
-
ok wenn der Kommando Kanal abgefragt wir kommt dann was?
Zum Ersten
1 open1,8,15
2 get#1,a$:?a$;:if st<>64 then 2
3 close1
kommt da was?
Zum Zweiten
load dos 5.1 von der Test Demo Disk
sys 52224
@
kommt da was?
Zum Dritten
1 open1,8,15
2 Input#1,a$,b$,c$,d$:?a$,b$,c$,d$
3 close1