Eigentlich schon gestern bekommen, aber egal.
Wolfig hat mir etwas feines mitgebracht: einen EPC MFA (Einplatinencomputer Mikrocomputer für Ausbildung)
PDF (Achtung 26Mb)
Das erste was zu machen war: Die Tastatur - da gibts leider keine Informationen und im Netz bin ich dazu leider auch nicht fündig geworden, immerhin konnte ich die
Pinbelegung des Db15 Anschlusses finden.
Also gleich mal einen Adapter für den Parallelport gebastelt (danke Kevin für den DB15), Pinbelegung ist wie folgt:
DB25->DB15
1->8 2->1 3->2 4->3 5->4 6->5 7->6 8->7
Obs so stimmt: ka. aber geht.
Dazu ein erstes Programm um Tastatureingaben zum MFA zu bringen:
Code: Alles auswählen
uses crt;
Const Baseport:word=$378;
var w:word;
var c:char;
begin;
writeln('dezimale Basisadresse Parallelport eingeben (0=$378)');
readln(w);
if w<>0 then Baseport:=w;
Writeln('OK');
repeat;
c:=readkey;
{write(c);}
Port[Baseport]:=ord(c);
Port[Baseport+2]:=$01; {Strobe->Strobe vom mfa}
delay(1);
Port[Baseport+2]:=0;
until ord(c)=0;{F-Tasten}
end.
läuft
Jetzt habe ich ja einen Atari Portfolio der einen Nutzen braucht
Um es kurz zu machen: Die Unit CRT läuft nicht auf dem Pofo, d.h. kein readkey und kein delay - ist nicht schwer, kann man selberbasteln - aber die Systemunterschiede sind doch beträchtlich und es hat doch etwas gedauert das in den Griff zu bekommen (Programm auf den Pofo ziehen -> Starten -> Recherchieren warum es nicht geht und herausfinden wie es richtig geht -> repeat).
Herausgekommen ist dabei dann sowas:
Code: Alles auswählen
Program MFATast_fuer_den_Portfolio;
uses Dos;
const taste :byte=0; {Variable für die Tastaturcodes/auch für
Delayinitialisierung verwendet}
var baseport :word; {Basisadresse des Parallelports}
const delayconst:longint=0; {Delaykonstante, wird noch initialisiert}
var delayvar :longint; {Delayvariable}
const quit :boolean=false; {Wenn true, dann Programmende}
var TimerTick :procedure; {TimerTick - bei PC 18.2/s, beim Pofo 1/s bzw. 1/128s -
siehe weiter unten}
procedure DelayInit; interrupt; {Interuptroutine für die Initialisierung der
Delaykonstante}
begin {Unit CRT läuft nicht auf dem Pofo}
taste:=not taste; {macht aus $00 ein $FF und umgekehrt - flag für Start/Ende
des Delayinit}
end;
begin
asm {setzen des Systemticks auf 1 Tick/s - Pofospezifisch, PCs
haben 18.2 Ticks/s}
mov ah,$1e {int $61 - Pofoint}
mov al,$01 {ah=$1E -> Systemtick}
mov bx,1 {al=$01 setzen, al=$00 lesen der Einstellung}
int $61 {bx=0 -> 1Tick/128s, bx=1 -> 1Tick/s}
end;
GetIntVec ($1c, @TimerTick); {umleiten des SystemTicks auf die Delayinitialisierung}
SetIntVec ($1c, @DelayInit);
repeat;until taste<>0; {warten auf den ersten Ticks für den Start der Messung,
siehe Delayinit}
repeat;
inc(delayconst); {Zählschleife für die DelayKonstante}
until taste=0; {der zweite Tick setzt die Variable taste zurück auf
0-> Ende der Messung}
{siehe DelayInit}
SetIntVec ($1c, @TimerTick); {zurücksetzen der Interruptumleitung}
asm
mov ah,$1e {zurücksetzen des Systemticks auf 1 Tick/128s}
mov al,$01
mov bx,0
int $61
end;
delayconst:=delayconst shr 1; {berechnen der Delaykonstante für 1ms; shr 1 = /2 - für
den Fall dass delayconst in den negativen Bereich}
delayconst:=round(delayconst/500); {gelaufen ist. 2147483647+1=-2147483648}
writeln('Delaykonstante für 1ms: ',delayconst);
Baseport:=$8078; {Die Basisadresse des Parallelports beim Pofo}
Writeln('OK');
repeat; {Hauptschleife}
asm
mov ah,$08 {Ersatz für readkey (Unit crt läuft nicht auf dem Pofo)}
int $21 {wartet auf einen Tastendruck und liefert den Tastencode}
mov taste,al {in al zurück}
end;
if taste>0 then
begin;
Port[Baseport]:=taste; {Ausgabe der Taste an den MFA}
Port[Baseport+1]:=$01; {Signal für Tastendruck: Strobe->Strobe vom mfa}
delayvar:=0; {Register (mit dem Strobesignal) ist beim Pofo verschoben}
repeat {1ms warten}
inc(delayvar);
until delayvar>=delayconst;
Port[Baseport+1]:=0; {zurücksetzen des Tastensignals - damit der MFA kein
dauerdrücken erkennt}
end
else
begin
asm
mov ah,$08 {Tastencode 0 bedeutet 2byte code, d.h. ein Tastencode}
int $21 {muss noch abgefangen werden um genaue Taste zu}
mov taste,al {erkennen}
end;
(*###IN ARBEIT###*) {Erkennung der F-Taste für Load/Save/Quit}
quit:=true;
end;
until quit;
end.
Gleich noch für Kevin etwas kommentiert - Kevin: ich weiß jetzt auch wie die Verzögerung zustande kam, ich hatte ein } vergessen, dadurch hat das Programm pro Tastendruck 500ms gewartet.
Nur hat Kevin leider keine Parallele Schnittstelle für den Pofo... naja...

- 10 X=X+1
20 Print X
30 goto 10 - IMG_0947.JPG (100.06 KiB) 6272 mal betrachtet
Der Scrollbalken nervt...
EDIT: Listing des Pofo-Programms an den Zeilenumbruch des Forums angepasst damit das ganze überhaupt Lesbar ist...
EDIT2: das Forum hat bei Tabulatoren eine andere Schrittweite -.- -> Korrektur Nr. 2 des Listings