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