Gestern Abend war sehr lang... Aber auch "erfolgreich" und zugleich ernüchternd.
Ich habe zu einen fluchs ne neue Platine gelötet. Vor allem wegem dem beschissenen CPU Sockel. Dabei habe ich direkt den Anschluss der Taktplatine geändert, sodass an CLK ein Stift statt einer Buchse ist. Ds macht das anschließen eines externen CLK deutlich einfacher - und entschlackt auch die zweite Version der CLK Platine erheblich. Anschließend hab ich wieder rumgetestet und bin etwas weiter gekommen:
Ich habe dann herausgefunden, dass die Platine einen schweren fehler im routing hat. Im Detail:
Die CPU kann von einem externen Busmaster zum schweigen verdammt werden. Wenn ein ArduinoNano auf dem Bus dinge tunen will muss die CPU ruhig sein. Damit sie das weiß gibts den Input HOLD und den Ausgang HLDA (Hold Acknowledged). HLDA ist active HIGH und wird zu den Bustreibern geschickt - diese haben einen Output-Enable Pin der active LOW ist. Heißt:
Zustand "CPU tue etwas":
HOLD low
HLDA low -> OUTPUT ENABLE low -> Bustreiber aktiv -> Bus gehört der CPU
Zustand "CPU nix":
Hold high
HLDA high -> OUTPUT ENABLE high -> Bustreiber auf TriState -> Bus gehört jemand anderem
Ich habe dummweise einen Inverter zwischen HLDA und die Treiber gesteckt. Sprich: Die Bustreiber sind (wenn die CPU aktiv wurde) immer in den Schlafmodus gegangen
Der Plan war, dass dort zwei Inverter hintereinander sind damit die CPU entkoppelt von den Treibern ist. War dumm. Der Inverter kommt also weg.
--
Nachdem ich das umgangen hatte war auf dem Bus zumindest einen Takt was los. Danach aber Funkstille.
Meine Vermutung: Ich habe den Opcode NOP (10010000) auf D0-D7 gelegt. Die CPU holt sich den, macht nix, der Befehlszähler geht +1 (und auch der Adresszähler geht +1) und erwartet jetzt auf D8-D15 einen Befehl. Der kommt aber nicht weil ich ja nur D0 bis D7 beschaltet habe. Und dann hängt sie weil 0h kein Befehl ist (bzw. ein illegal Opcode). Also versucht Sie zur Adresse des Interrupt für illeagale Operaden zu springen die aber auch 0h ist und wird dann vom großen Spaghettimonster gefressen.
Das mit den 8 Bit Befehlen und der Verteilung dieser auf dem 16Bit Datenbus muss ich mir nochmal geben. Ich weiß nicht genau was die CPU dann macht/erwartet.