add first WEGA commands
This commit is contained in:
parent
db8ef4e8df
commit
618ce9cf8e
|
|
@ -0,0 +1,52 @@
|
||||||
|
/*
|
||||||
|
|------------------------------------------------------|
|
||||||
|
| Standalone-Programm sa.shipdisk (Version 4.1) |
|
||||||
|
|------------------------------------------------------|
|
||||||
|
| Programm zum Bewegen des Schreib-Lese-Kamms |
|
||||||
|
| auf den innersten Zylinder fuer alle Laufwerke |
|
||||||
|
| Bearbeiter: F. Spielmann |
|
||||||
|
|------------------------------------------------------|
|
||||||
|
*/
|
||||||
|
|
||||||
|
char db[512];
|
||||||
|
unsigned int kc,dr,drs,cl,hd,sc,lg;
|
||||||
|
int i;
|
||||||
|
unsigned int c_c;
|
||||||
|
unsigned int rg7,rg6,rg5,rg4;
|
||||||
|
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
printf("\n>>> Shipdisk 4.1 <<<\n");
|
||||||
|
|
||||||
|
/* Lesen des Parameterblocks */
|
||||||
|
kc = 0x28;
|
||||||
|
lg = 0x40;
|
||||||
|
rg_um();
|
||||||
|
c_c = wdc(rg7,rg6,rg5,rg4,&db[0]);
|
||||||
|
if (c_c != 0) c_c = wdc(rg7,rg6,rg5,rg4,&db[0]);
|
||||||
|
if (c_c != 0) {printf("Error %x\n",c_c); exit();}
|
||||||
|
|
||||||
|
/* Lesen auf dem innersten Zylinder */
|
||||||
|
drs = db[49]&0xff;
|
||||||
|
cl = (((db[24]&0xff) << 8) | (db[23]&0xff)) - 1;
|
||||||
|
kc = 0x01;
|
||||||
|
hd = 0;
|
||||||
|
sc = 1;
|
||||||
|
lg = 0x200;
|
||||||
|
/* Leseversuch auf jedem angeschlossenem Laufwerk */
|
||||||
|
for (dr=0;dr<drs;dr++)
|
||||||
|
{ rg_um();
|
||||||
|
c_c = wdc(rg7,rg6,rg5,rg4,&db[0]);
|
||||||
|
}
|
||||||
|
printf("\nShipdisk ok.\n");
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* UP rg_um */
|
||||||
|
rg_um()
|
||||||
|
{
|
||||||
|
rg7 = ((kc & 0x00ff) << 8) | (dr & 0x00ff);
|
||||||
|
rg6 = ((cl & 0x00ff) << 8) | ((cl & 0xff00) >> 8);
|
||||||
|
rg5 = ((hd & 0x00ff) << 8) | (sc & 0x00ff);
|
||||||
|
rg4 = ((lg & 0x00ff) << 8) | ((lg & 0xff00) >> 8);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,265 @@
|
||||||
|
disk module
|
||||||
|
$nonsegmented
|
||||||
|
constant
|
||||||
|
!Port-Adressen!
|
||||||
|
PIOAD := %FFA1
|
||||||
|
PIOBD := %FFA3
|
||||||
|
PIOAC := %FFA5
|
||||||
|
PIOBC := %FFA7
|
||||||
|
!PIO-Programmierung!
|
||||||
|
OUTPUT := %0F
|
||||||
|
INPUT := %4F
|
||||||
|
BITMODE := %CF
|
||||||
|
INTVEC := %18
|
||||||
|
! Anschlussbelegung des Controlers am PIO des 16-Bit-Teils
|
||||||
|
Port A : 8 Bit bidirektionale Daten (D0 bis D7)
|
||||||
|
Port B : Steuerport
|
||||||
|
Bit0 : /ST0 (Statusbit 0)
|
||||||
|
Bit1 : /ST1 (Statusbit 1)
|
||||||
|
Bit2 : /ST2 (Statusbit 2)
|
||||||
|
Bit3 : frei Ausgang
|
||||||
|
Bit4 : frei Ausgang
|
||||||
|
Bit5 : RESET (WDC-Reset) Ausgang
|
||||||
|
Bit6 : TE (Richtung) Ausgang
|
||||||
|
Bit7 : TR (Anforderung) Eingang
|
||||||
|
!
|
||||||
|
! Steuerport WDC !
|
||||||
|
RDATA := %4000
|
||||||
|
WDATA := %00
|
||||||
|
|
||||||
|
! Uebergabe der Parameter an den Host-Treiber
|
||||||
|
rh7 : Kommandocode
|
||||||
|
rl7 : Laufwerksnummer
|
||||||
|
r6 : Zylindernummer
|
||||||
|
rh5 : Kopfnummer
|
||||||
|
rl5 : Sektornummer
|
||||||
|
r4 : Datenlaenge (rh4: low, rl4: high)
|
||||||
|
r3 : Host-Datenadresse (rh3: high, rl3: low)
|
||||||
|
Uebergabe der Parameter byteweise (9 Byte) an den WDC-Controler:
|
||||||
|
-- Kommandocode
|
||||||
|
-- Laufwerksnummer
|
||||||
|
-- Zyl (low)
|
||||||
|
-- Zyl (high)
|
||||||
|
-- Kopf
|
||||||
|
-- Sektor
|
||||||
|
-- Datenlaenge (low)
|
||||||
|
-- Datenlaenge (high)
|
||||||
|
-- Pruefsumme (wird nicht ausgewertet)
|
||||||
|
!
|
||||||
|
|
||||||
|
global
|
||||||
|
_wdc procedure
|
||||||
|
entry
|
||||||
|
! Initialisierung des PIO !
|
||||||
|
! und RESET an den WDC !
|
||||||
|
calr disk_in
|
||||||
|
! PIO-Programmierung Host-->WDC !
|
||||||
|
ld r0,#WDATA+OUTPUT
|
||||||
|
outb PIOBD,rh0
|
||||||
|
outb PIOAC,rl0
|
||||||
|
! Loeschen Fehlerregister !
|
||||||
|
ldk r2,#0
|
||||||
|
! Warten auf WDC-Bereitschaft !
|
||||||
|
w_st1:
|
||||||
|
inb rl0,PIOBD
|
||||||
|
andb rl0,#%7
|
||||||
|
cpb rl0,#0
|
||||||
|
jp z,stat7
|
||||||
|
cpb rl0,#%1 !Status 6: PROM-Fehler!
|
||||||
|
jp z,err_20
|
||||||
|
cpb rl0,#6
|
||||||
|
jr nz,w_st1
|
||||||
|
! Ausgabe der neun Kommandobytes an den WDC !
|
||||||
|
outb PIOAD,rh7 !Kommandocode!
|
||||||
|
outb PIOAD,rl7 !Laufwerk!
|
||||||
|
outb PIOAD,rh6 !Zylinder low!
|
||||||
|
outb PIOAD,rl6 !Zylinder high!
|
||||||
|
outb PIOAD,rh5 !Head!
|
||||||
|
outb PIOAD,rl5 !Sektor!
|
||||||
|
outb PIOAD,rh4 !Laenge low!
|
||||||
|
outb PIOAD,rl4 !Laenge high!
|
||||||
|
outb PIOAD,rh3 !Leerbyte!
|
||||||
|
ldb rh0,rh4
|
||||||
|
ldb rh4,rl4
|
||||||
|
ldb rl4,rh0
|
||||||
|
! Warten auf Status=0 !
|
||||||
|
w_st2: inb rl0,PIOBD
|
||||||
|
andb rl0,#%7
|
||||||
|
cpb rl0,#%7
|
||||||
|
jr nz,w_st2
|
||||||
|
! Warten auf Ergebnis-Status !
|
||||||
|
w_st3: inb rl0,PIOBD
|
||||||
|
andb rl0,#%7
|
||||||
|
cpb rl0,#%7
|
||||||
|
jr z,w_st3
|
||||||
|
inb rl0,PIOBD
|
||||||
|
andb rl0,#%7
|
||||||
|
cpb rl0,#0
|
||||||
|
jp z,stat7
|
||||||
|
cpb rl0,#6
|
||||||
|
jp z,stat1
|
||||||
|
cpb rl0,#5
|
||||||
|
jp z,stat2
|
||||||
|
cpb rl0,#4
|
||||||
|
jp z,stat3
|
||||||
|
jp err_0
|
||||||
|
!*******************************************!
|
||||||
|
! Auswertung Status=1 !
|
||||||
|
!*******************************************!
|
||||||
|
stat1:
|
||||||
|
cpb rh7,#%41
|
||||||
|
jp z,h_ret
|
||||||
|
cpb rh7,#%c2
|
||||||
|
jp z,h_ret
|
||||||
|
cpb rh7,#%48
|
||||||
|
jp z,h_ret
|
||||||
|
bitb rh7,#2
|
||||||
|
jp z,err_1
|
||||||
|
jp h_ret
|
||||||
|
|
||||||
|
!*******************************************!
|
||||||
|
! Auswertung Status=2 !
|
||||||
|
!*******************************************!
|
||||||
|
stat2:
|
||||||
|
cpb rh7,#%18
|
||||||
|
jp z,wdc_wt
|
||||||
|
cpb rh7,#%78 !Schreiben PAR aus Host!
|
||||||
|
jp z,wdc_wt
|
||||||
|
cpb rh7,#%68 !Schreiben BTT aus Host!
|
||||||
|
jp z,wdc_wt
|
||||||
|
bitb rh7,#1 !Schreibkommandos!
|
||||||
|
jp z,err_2
|
||||||
|
wdc_wt:
|
||||||
|
ld r1,#PIOAD
|
||||||
|
otirb @r1,@r3,r4
|
||||||
|
! Warten auf Status=0 !
|
||||||
|
w_st4:
|
||||||
|
inb rl0,PIOBD
|
||||||
|
andb rl0,#7
|
||||||
|
cpb rl0,#7
|
||||||
|
jr nz,w_st4
|
||||||
|
! Warten auf Ergebnis-Status !
|
||||||
|
w_st5:
|
||||||
|
inb rl0,PIOBD
|
||||||
|
andb rl0,#7
|
||||||
|
cpb rl0,#7
|
||||||
|
jr z,w_st5
|
||||||
|
inb rl0,PIOBD
|
||||||
|
andb rl0,#%7
|
||||||
|
cpb rl0,#0
|
||||||
|
jp z,stat7
|
||||||
|
cpb rl0,#6
|
||||||
|
jp z,h_ret
|
||||||
|
jp err_5
|
||||||
|
|
||||||
|
!*******************************************!
|
||||||
|
! Auswertung Status=3 !
|
||||||
|
!*******************************************!
|
||||||
|
stat3:
|
||||||
|
cpb rh7,#%0 !Ready-Test!
|
||||||
|
jp z,wdc_rd
|
||||||
|
cpb rh7,#%08 !Lesen WDC-RAM!
|
||||||
|
jp z,wdc_rd
|
||||||
|
cpb rh7,#%28 !Lesen WDC-Parameterblock!
|
||||||
|
jp z,wdc_rd
|
||||||
|
cpb rh7,#%38 !Lesen WDC-Fehlerstatistik!
|
||||||
|
jp z,wdc_rd
|
||||||
|
cpb rh7,#%58
|
||||||
|
jp z,wdc_rd
|
||||||
|
cpb rh7,#%24 !Formatieren mit Defektspurtabelle!
|
||||||
|
jp z,wdc_rd
|
||||||
|
bitb rh7,#0 !HD-Lesekommandos!
|
||||||
|
jp z,err_3
|
||||||
|
! PIO-Umprogrammierung !
|
||||||
|
wdc_rd:
|
||||||
|
ld r0,#RDATA+INPUT
|
||||||
|
outb PIOAC,rl0
|
||||||
|
outb PIOBD,rh0
|
||||||
|
inb rl0,PIOAD !Scheineingabe!
|
||||||
|
! Uebernahme der Bytes !
|
||||||
|
ld r1,#PIOAD
|
||||||
|
inirb @r3,@r1,r4
|
||||||
|
cpb rh7,#%24 !Formatieren mit Defektspur?!
|
||||||
|
jp nz,w_stat
|
||||||
|
ld r2,#%21
|
||||||
|
jp w_stat
|
||||||
|
|
||||||
|
!*******************************************!
|
||||||
|
! Auswertung Status=7 !
|
||||||
|
!*******************************************!
|
||||||
|
stat7:
|
||||||
|
! PIO-Umprogrammierung !
|
||||||
|
ld r0,#RDATA+INPUT
|
||||||
|
outb PIOAC,rl0
|
||||||
|
outb PIOBD,rh0
|
||||||
|
inb rl0,PIOAD !Scheineingabe!
|
||||||
|
! Uebernahme des Fehlerbytes!
|
||||||
|
inb rl2,PIOAD
|
||||||
|
|
||||||
|
w_stat:
|
||||||
|
! Warten auf Ergebnis-Status !
|
||||||
|
inb rl0,PIOBD
|
||||||
|
andb rl0,#7
|
||||||
|
cpb rl0,#7
|
||||||
|
jr nz,w_stat
|
||||||
|
w_stat1:
|
||||||
|
inb rl0,PIOBD
|
||||||
|
andb rl0,#%7
|
||||||
|
cpb rl0,#%7
|
||||||
|
jr z,w_stat1
|
||||||
|
inb rl0,PIOBD
|
||||||
|
andb rl0,#%7
|
||||||
|
cpb rl0,#6
|
||||||
|
jp nz,err_4
|
||||||
|
h_ret:
|
||||||
|
ret
|
||||||
|
|
||||||
|
! Fehlerbehandlung !
|
||||||
|
err_0:
|
||||||
|
ldb rl2,#%c0
|
||||||
|
jr err_rt
|
||||||
|
err_1:
|
||||||
|
ldb rl2,#%c1
|
||||||
|
jr err_rt
|
||||||
|
err_2:
|
||||||
|
ldb rl2,#%c2
|
||||||
|
jr err_rt
|
||||||
|
err_3:
|
||||||
|
ldb rl2,#%c3
|
||||||
|
jr err_rt
|
||||||
|
err_4:
|
||||||
|
ldb rl2,#%c4
|
||||||
|
jr err_rt
|
||||||
|
err_5:
|
||||||
|
ldb rl2,#%c5
|
||||||
|
jr err_rt
|
||||||
|
err_20: ldb rl2,#%20
|
||||||
|
err_rt:
|
||||||
|
jp h_ret
|
||||||
|
end _wdc
|
||||||
|
|
||||||
|
internal
|
||||||
|
! Initialisierung des PIO und des WDC !
|
||||||
|
init array [* byte] := [
|
||||||
|
PIOBC, INTVEC,
|
||||||
|
PIOBD, WDATA,
|
||||||
|
PIOBC, BITMODE,
|
||||||
|
PIOBC, %87,
|
||||||
|
]
|
||||||
|
|
||||||
|
disk_in procedure
|
||||||
|
entry
|
||||||
|
ld r2,#PIOBD
|
||||||
|
inb rl1,@r2
|
||||||
|
bitb rl1,#5 !Reset weggenommen ?!
|
||||||
|
ret z
|
||||||
|
lda r1,init
|
||||||
|
ldk r0,#4 !Anzahl der Ausgaben!
|
||||||
|
iloop: ldb rl2,@r1 !Portadresse!
|
||||||
|
inc r1,#1
|
||||||
|
outib @r2,@r1,r0
|
||||||
|
jr nov,iloop
|
||||||
|
ret
|
||||||
|
end disk_in
|
||||||
|
end disk
|
||||||
|
|
||||||
Loading…
Reference in New Issue