022
03.09.2016, 13:56 Uhr
holm
|
...weiß ich nicht Andreas. Überwache doch mal den Pegel an diesem Pin 2..der sollte wohl bei den äueren Spuren high sein und ab 43 low werden ..
Ich habe im CP/A und im KRZ System nachgesehen, da Manfred Krzikalla und Willy Dames ziemlich unter einer Decke steckten ist der Floppytreiber weitgehend identisch und dort habe ich nur ein Einschalten der Write Precompensation ab spur 25h (37dez) gefunden..
Ich selbst habe mit 8 Zoll und diesen Systemen noch nicht gespielt.
Ich habe aber eine Mimik mit einem attiny2313 (und LED Anzeige) gebastelt die mir die Tracks auf einem 8 Zoll Floppy mitgezählt und genau dieses Signal generiert hat, wohl fürs FD1165 an einem PC um RX01 Floppies schreiben zu können..
Ich kann mich aber auch erinnern das das Tandon LW das Runni mir mal zur Reparatur gegeben hatte in der Lage war dieses Signal selbst zu erzeugen und einige in der DDR üblich gewesene LW konnten das mittels Mikrotaster an der Mechanik auch...
Ich weiß nur das selbst eim relativ modernen FD1165 ohne das TRK43 Signal beim Schreiben nur Blödsinn raus kam...
Wenn das Signal überhaupt generiert wird, dann würde ich es auf einer Leitung wie "/Fault Reset" oder so am Controller vermuten... Ob und wann das passiert ist natürlich vom Betriebssystem abhängig.
Edit:
Das Signal /FR ist wohl schon durch die alternative Belegung Side Select verwurstet...wobei das bei den von Robotron verwendeten LW ja durchaus frei ist, es gab kene 2 seitigen 8" Floppies..
Die Legende aus CP/A der Portbelegungen:
Quellcode: | ;; Legende AMF: ;; Port A ;; | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ;; | | | | | | | |__ A /WE 0-Schreiben ein ;; | | | | | | |______ A MK lesen 0-MFM-A1 Erkennung ;; | | | | | | 1-FM-Mark., MFM-C2 Erkenn. ;; | | | | | | schreiben 0-Takt fuer MFM ;; | | | | | | 1-Marken FM und A1 MFM ;; | | | | | |__________ A /SIDE 0-Kopf Seite 1; 1-Kopf Seite 0 ;; | | | | | oder A /FR 0-Fault reset; 1-kein FR ;; | | | | |______________ A /STR 0-AMF aktiv ;; | | | | 1-AMF ausgeschaltet ;; | | | |__________________ A MK1 lesen 0-Informationen einlesen ;; | | | 1-nur 1 einlesen ;; | | | schreiben 0-FM-Daten schreiben ;; | | | 1-MFM und FM-Marken schr. ;; | | |______________________ A MR, SD 0-steppen Richtung aussen ;; | | 1-Marke-erkannt loeschen ;; | | steppen Richtung innen ;; | |__________________________ A /HL 0-Kopf geladen ;; | 1-Kopf entladen ;; |______________________________ A /ST 0-Stepsignal an LW ein ;; 1-Stepsignal an LW aus ;; ;; Port B ;; | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ;; | | | | | | | |__ E /RDY 0-Laufwerk bereit ;; | | | | | | | 1-Laufwerk nicht bereit ;; | | | | | | |______ E /MKE 0-Marke erkannt ;; | | | | | | 1-Marke noch nicht erkannt ;; | | | | | oder PC1715 E MKE 1-Marke erkannt ;; | | | | | | 0-Marke noch nicht erkannt ;; | | | | | |__________ E /SYN ???? ;; | | | | | oder A 0-Takt fuer 8" MFM ;; | | | | | 1-Takt fuer 5" MFM und 8" FM ;; | | | | | oder PC1715: A MFM 0-FM-Aufzeichnung ;; | | | | | 1-MFM-Aufzeichnung ;; | | | | |______________ A PRE 0-schreiben ohne Prekompensation ;; | | | | 1-schreiben mit " ;; | | | |__________________ E /FA 0-Fehler in der AMF aufgetreten ;; | | | 1-kein Fehler aufgetreten ;; | | | oder PC1715: A FO 0-5"-Disketten ;; | | | 1-8"-Disketten ;; | | |______________________ E /WP 0-Schreibschutz ist ein ;; | | 1-kein Schreibschutz ;; | |__________________________ E /FW 0-Laufwerk meldete Schreibfehler ;; | 1-Laufwerk meldete keinen Fehler ;; |______________________________ E /T0 0-Kopf steht auf Spur 0 ;; 1-Kopf steht nicht auf Spur 0
|
Nun müßte man mal im Programmcode (biosdsk*) nachforschen ob FR oder Sidle Select irgendwie bei 8" mißbraucht wird, ansonsten mußt Du Dir wohl auch so eine Trk43 Mimik bauen wie ich...
Quellcode: |
/* * Holm Tiffe 01/13/2012 * TG43 Signalerzeugung + Track Anzeige 8 Zoll Floppy */
/* * Clk 8Mhz Attiny2313 internal RC Oszillator */
#include <inttypes.h> #include <avr/io.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> #include <util/delay.h> #include <avr/wdt.h>
#define DEBUG 1
/* * External Connections * * PB0 Seg e * PB1 Seg d * PB2 Seg c * PB3 Seg dp Display 7 Segm. TDSR 5150 common Anode * PB4 Seg b * PB5 Seg a * PB6 Seg f * PB7 Seg g * * PD6 Anode left L active * PD5 Anode right L active * PD4 /DS1 Input * PD3 /SD Input * PD2 /ST Input * PA0 /T0 Input * PA1 /TG43 Output L active to Floppy */
#define AnL PD6 #define AnR PD5 #define DS1 PD4 #define SD PD3 #define ST PD2 #define T0 PA0 #define TG43 PA1 #define TxD PD1 // not used #define RxD PD0 // not used #define Seg_a (1<<PB5) #define Seg_b (1<<PB4) #define Seg_c (1<<PB2) #define Seg_d (1<<PB1) #define Seg_e (1<<PB0) #define Seg_f (1<<PB6) #define Seg_g (1<<PB7) #define Seg_dp (1<<PB3)
uint8_t chargen[] PROGMEM = { Seg_a|Seg_b|Seg_c|Seg_d|Seg_e|Seg_f, // 0 Seg_b|Seg_c, // 1 Seg_a|Seg_b|Seg_g|Seg_e|Seg_d, // 2 Seg_a|Seg_b|Seg_g|Seg_c|Seg_d, // 3 Seg_b|Seg_g|Seg_f|Seg_c, // 4 Seg_a|Seg_f|Seg_g|Seg_c|Seg_d, // 5 Seg_a|Seg_f|Seg_g|Seg_e|Seg_d|Seg_c, // 6 Seg_a|Seg_b|Seg_c, // 7 Seg_a|Seg_b|Seg_c|Seg_d|Seg_e|Seg_f|Seg_g, // 8 Seg_a|Seg_b|Seg_c|Seg_d|Seg_f|Seg_g, // 9 Seg_a|Seg_b|Seg_c|Seg_e|Seg_f|Seg_g, // A Seg_c|Seg_d|Seg_e|Seg_f|Seg_g, // b Seg_a|Seg_f|Seg_e|Seg_d, // C Seg_b|Seg_c|Seg_d|Seg_e|Seg_g, // d Seg_a|Seg_d|Seg_e|Seg_f|Seg_g, // E Seg_a|Seg_e|Seg_f|Seg_g, // F };
/*********************************************************************/
volatile uint8_t digit; volatile uint8_t dpl,dpr; volatile uint8_t led_val; volatile uint8_t digit; volatile uint8_t trackcount;
/*********************************************************************/ SIGNAL(SIG_TIMER0_OVF) { if(!digit) { PORTD|=(1<<AnL); // cut off Anode // set segments PORTB=~pgm_read_byte(&chargen[led_val & 0xf]); if(dpr) PORTB&=~Seg_dp; PORTD&=~(1<<AnR); // enable left anode digit++; }
} /*********************************************************************/ SIGNAL(SIG_INT0) {
// Triggers on falling Edge of Step
if(!(PIND & (1<<DS1))&&(!(PINA&(1<<T0)))) trackcount=0; // Reset Counter if(!(PIND & (1<<DS1))) // DS1 active, Controller is talking to us { if(PIND & (1<<SD)) // SD is high trackcount--; // step outward else trackcount++; // step inward
if(trackcount>99) // range limit trackcount=99; // if(trackcount >= 43) { PORTA&=~(1<<TG43); // activate TG43 Line dpl=1; } else { PORTA|=(1<<TG43); // deactivate TG43 Line dpl=0; }
led_val=trackcount % 10; led_val|=((trackcount / 10) << 4); // to BCD }
} /*********************************************************************/ void ioinit(void) {
DDRA=(1<<TG43); // Output PORTA|=(1<<TG43); // deactivate TG43 Line dpl=0; }
led_val=trackcount % 10; led_val|=((trackcount / 10) << 4); // to BCD }
} /*********************************************************************/ void ioinit(void) {
DDRA=(1<<TG43); // Output PORTA=(1<TG43)|(1<<T0); // TD0 inact + Pullup T0 DDRB=0xff; // all Outputs PORTB=0xff; // all inactive //DDRD=(1<<AnL)|(1<<AnR)|(1<<TxD); // Outputs DDRD=(1<<PD5)|(1<<PD6)|(1<<PD1); // Outputs PORTD=0xff; // inact/Pullups MCUCR=(1<<ISC01); // INT0 falling Edge GIMSK=(1<<INT0);
// OSCCAL=0x5d;
/* Timer 0 CTC Mode, Prescaler 256, Value 256, 8msec, 122Hz */ /* timebase */
TCCR0A=0; TCCR0B=(1<<CS02); // CLK/256 (Prescaler) TIMSK|=(1<<TOIE0); // Int enable
sei(); }
/*********************************************************************/
int main(void) { ioinit(); dpr=1; trackcount=0; led_val=0xff; while(1); // not reached }
|
Gruß,
Holm -- float R,y=1.5,x,r,A,P,B;int u,h=80,n=80,s;main(c,v)int c;char **v; {s=(c>1?(h=atoi(v[1])):h)*h/2;for(R=6./h;s%h||(y-=R,x=-2),s;4<(P=B*B)+ (r=A*A)|++u==n&&putchar(*(((--s%h)?(u<n?--u%6:6):7)+"World! \n"))&& (A=B=P=u=r=0,x+=R/2))A=B*2*A+y,B=P+x-r;} Dieser Beitrag wurde am 03.09.2016 um 14:19 Uhr von holm editiert. |