in the latest CVS, I saw a config file including the SCSI configuration.
I tried that, but it seems the ROM doesn't recognize any disk attached, just the the SCSI ID 7 (the controller). It takes a lot of time saying Waiting for pka0.7.0.16.0 to poll (16 times), then a sh dev shows only the pka0.
Is the SCSI emulation working?
thanks,
fausto
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
That is strange indeed. I just tested SCSI again, and it still works for me. (although it causes problems when a SCSI disk is used to boot OpenVMS from).
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
There's a lot of commented-out printf-statements in the SCSI code; you
might want to uncomment these (or perhaps even wrap them with #if
defined(DEBUG_SCSI) lines, that way it would be easy to turn on and
off, and then we could put it in CVS like that).
Camiel.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
During the "waiting for pka to poll..." messages, the SCSI controller is running a script that tries to identify each target. The printf statements in CSym53C895::execute() are probably the most important.
Camiel.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
i did some tests...
Strange things happen during the script execution. I also noticed that the printf commands if finish with "." sometimes print junk characters... !!! It seems the memory is not cleaned.
Also, doing these tests I got the keyboard bug... and this bug persist through reboot! Maybe the flash.rom and dpr.rom must be deleted (?)
In config file I defined a disk0.0 and disk0.14
The first one is system disk, the other is CDROM. Basically the second number should be the target number, if I understood well. So the script should find something with SELECT 0 and SELECT 14, right?
This is the output:
SYM: start SCSI bus reset.
SYM: end SCSI bus reset.
SYM: 801c7600: SELECT 0 $$
In Select_target: 0 $$
state.phase = -1
In get_disk()
Bus: 0, Dev: 0$$
NumBus: 1, NumDev: 16$$
Setting SCSI parameter... in PTD
SYM: Ready for transfer.
SYM: Reading table at DSA(801d9520)+DSPS(00000004) = 801d9524.
SYM: 801c7610: MOVE Start/count 801d9550, 6
SYM.0 PHASE 6: c0 01 03 01 00 00
SYM: Ready for transfer.
SYM: 801c76d8: MOVE Start/count 801c78f0, 1
SYM.0 PHASE 7: 01
SYM: 801c7708: CLEAR ack
SYM: Ready for transfer.
SYM: 801c7710: MOVE Start/count 801c7728, 1
SYM.0 PHASE 7: 03
SYM: 801c7718: CLEAR ack
SYM: Ready for transfer.
SYM: 801c7728: MOVE Start/count 801c78f1, 3
SYM.0 PHASE 7: 01 00 00
SYM: start SCSI bus reset.
SYM: end SCSI bus reset.
SYM: 801c7600: SELECT 1 $$
In Select_target: 1 $$
state.phase = 2
SYM: start SCSI bus reset.
SYM: end SCSI bus reset.
SYM: 801c7600: SELECT 2 $$
In Select_target: 2 $$
state.phase = 2
SYM: start SCSI bus reset.
SYM: end SCSI bus reset.
SYM: 801c7600: SELECT 3 $$
In Select_target: 3 $$
state.phase = 2
SYM: start SCSI bus reset.
SYM: end SCSI bus reset.
SYM: 801c7600: SELECT 4 $$
In Select_target: 4 $$
state.phase = 2
SYM: start SCSI bus reset.
SYM: end SCSI bus reset.
SYM: 801c7600: SELECT 5 $$
In Select_target: 5 $$
state.phase = 2
SYM: start SCSI bus reset.
SYM: end SCSI bus reset.
SYM: 801c7600: SELECT 6 $$
In Select_target: 6 $$
state.phase = 2
SYM: start SCSI bus reset.
SYM: end SCSI bus reset.
SYM: 801c7600: SELECT 8 $$
In Select_target: 8 $$
state.phase = 2
SYM: start SCSI bus reset.
SYM: end SCSI bus reset.
[etc... the same until SELECT 15]
the script seems continue after the Alpha prompt:
SYM: 801c7600: SELECT 0 $$
In Select_target: 0 $$
state.phase = 2
SYM: start SCSI bus reset.
SYM: end SCSI bus reset.0 [NOTE THE JUNK CHARS!!! "0"]
SYM: 801c7600: SELECT 1 $$
In Select_target: 1 $$
state.phase = 2
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
After the two WDTR messages, the controller and target have agreed to communicate using 16-bit transfers. Normally, the next phase would now be the command phase; instead, a scsi bus reset occurs.
Could you try adding
PT.reselected = false;
To CSym53C895::select_target(int target)
Between the other PT.xxx = false; lines, and let me know what happens?
Also, please uncomment the printf-statements in CSym53C895::end_xfer, as these show the SCSI bus phase transitions.
The junk characters might simply be the last characters of the "2992 | 00000000006788C0" text that shows where the PC counter is that are left on the screen.
You can always delete the dpr.rom and flash.rom files; if these have become corrupted somehow (or possibly after a configuration change) I guess it could lead to strange errors. The only thing you might lose are some SRM variables (like sys_serial_num, auto_action, etc.)
Camiel.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
testing the SCSI interface, with the latest CVS (I updated the source 5 mins ago), I have a new error on the DOS cmd prompt:
Could not arbitrate for the SCSI bus.
scsi bus busy...
Could not arbitrate for the SCSI bus.
scsi bus busy...
Could not arbitrate for the SCSI bus.
scsi bus busy...
Could not arbitrate for the SCSI bus.
scsi bus busy...
Could not arbitrate for the SCSI bus.
scsi bus busy...
Could not arbitrate for the SCSI bus.
scsi bus busy...
[for ever]
and I suppose it's a loop.
Now the system is hand at "Testing the system", and I have no more the "Waiting for pka to poll..." messages.
regards,
fausto
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hello all,
in the latest CVS, I saw a config file including the SCSI configuration.
I tried that, but it seems the ROM doesn't recognize any disk attached, just the the SCSI ID 7 (the controller). It takes a lot of time saying Waiting for pka0.7.0.16.0 to poll (16 times), then a sh dev shows only the pka0.
Is the SCSI emulation working?
thanks,
fausto
Hello,
tried with the latest cvs (01/06), but still SCSI doesn't work: always stuck on Waiting for pka0.7.0.16.0 to poll, and no device in "sh dev" output.
regards,
fausto
That is strange indeed. I just tested SCSI again, and it still works for me. (although it causes problems when a SCSI disk is used to boot OpenVMS from).
Camiel, is there some DEBUG option I can enable in order to give you more info?
regards,
fausto
Hi Fausto,
There's a lot of commented-out printf-statements in the SCSI code; you
might want to uncomment these (or perhaps even wrap them with #if
defined(DEBUG_SCSI) lines, that way it would be easy to turn on and
off, and then we could put it in CVS like that).
Camiel.
Hi Camiel,
ok. I'll enable some debug output with #if macro.
During the "wait for pka to poll..." do you know what piece of code is more involved?
thanks,
fausto
Hi Fausto,
During the "waiting for pka to poll..." messages, the SCSI controller is running a script that tries to identify each target. The printf statements in CSym53C895::execute() are probably the most important.
Camiel.
Hi Camiel,
i did some tests...
Strange things happen during the script execution. I also noticed that the printf commands if finish with "." sometimes print junk characters... !!! It seems the memory is not cleaned.
Also, doing these tests I got the keyboard bug... and this bug persist through reboot! Maybe the flash.rom and dpr.rom must be deleted (?)
In config file I defined a disk0.0 and disk0.14
The first one is system disk, the other is CDROM. Basically the second number should be the target number, if I understood well. So the script should find something with SELECT 0 and SELECT 14, right?
This is the output:
SYM: start SCSI bus reset.
SYM: end SCSI bus reset.
SYM: 801c7600: SELECT 0 $$
In Select_target: 0 $$
state.phase = -1
In get_disk()
Bus: 0, Dev: 0$$
NumBus: 1, NumDev: 16$$
Setting SCSI parameter... in PTD
SYM: Ready for transfer.
SYM: Reading table at DSA(801d9520)+DSPS(00000004) = 801d9524.
SYM: 801c7610: MOVE Start/count 801d9550, 6
SYM.0 PHASE 6: c0 01 03 01 00 00
SYM: Ready for transfer.
SYM: 801c76d8: MOVE Start/count 801c78f0, 1
SYM.0 PHASE 7: 01
SYM: 801c7708: CLEAR ack
SYM: Ready for transfer.
SYM: 801c7710: MOVE Start/count 801c7728, 1
SYM.0 PHASE 7: 03
SYM: 801c7718: CLEAR ack
SYM: Ready for transfer.
SYM: 801c7728: MOVE Start/count 801c78f1, 3
SYM.0 PHASE 7: 01 00 00
SYM: start SCSI bus reset.
SYM: end SCSI bus reset.
SYM: 801c7600: SELECT 1 $$
In Select_target: 1 $$
state.phase = 2
SYM: start SCSI bus reset.
SYM: end SCSI bus reset.
SYM: 801c7600: SELECT 2 $$
In Select_target: 2 $$
state.phase = 2
SYM: start SCSI bus reset.
SYM: end SCSI bus reset.
SYM: 801c7600: SELECT 3 $$
In Select_target: 3 $$
state.phase = 2
SYM: start SCSI bus reset.
SYM: end SCSI bus reset.
SYM: 801c7600: SELECT 4 $$
In Select_target: 4 $$
state.phase = 2
SYM: start SCSI bus reset.
SYM: end SCSI bus reset.
SYM: 801c7600: SELECT 5 $$
In Select_target: 5 $$
state.phase = 2
SYM: start SCSI bus reset.
SYM: end SCSI bus reset.
SYM: 801c7600: SELECT 6 $$
In Select_target: 6 $$
state.phase = 2
SYM: start SCSI bus reset.
SYM: end SCSI bus reset.
SYM: 801c7600: SELECT 8 $$
In Select_target: 8 $$
state.phase = 2
SYM: start SCSI bus reset.
SYM: end SCSI bus reset.
[etc... the same until SELECT 15]
the script seems continue after the Alpha prompt:
SYM: 801c7600: SELECT 0 $$
In Select_target: 0 $$
state.phase = 2
SYM: start SCSI bus reset.
SYM: end SCSI bus reset.0 [NOTE THE JUNK CHARS!!! "0"]
SYM: 801c7600: SELECT 1 $$
In Select_target: 1 $$
state.phase = 2
Hi Fausto,
What I can see happening is a message sequence:
MESSAGE OUT phase: controller sends c0 (identify w/disconnect privilege), 01 03 01 00 00 (WDTR)
MESSAGE IN phase: target sends 01 03 01 00 00 (WDTR)
After the two WDTR messages, the controller and target have agreed to communicate using 16-bit transfers. Normally, the next phase would now be the command phase; instead, a scsi bus reset occurs.
Could you try adding
PT.reselected = false;
To CSym53C895::select_target(int target)
Between the other PT.xxx = false; lines, and let me know what happens?
Also, please uncomment the printf-statements in CSym53C895::end_xfer, as these show the SCSI bus phase transitions.
The junk characters might simply be the last characters of the "2992 | 00000000006788C0" text that shows where the PC counter is that are left on the screen.
You can always delete the dpr.rom and flash.rom files; if these have become corrupted somehow (or possibly after a configuration change) I guess it could lead to strange errors. The only thing you might lose are some SRM variables (like sys_serial_num, auto_action, etc.)
Camiel.
Camiel,
I did the modifications you told me.
I have again the keyboard problem... after SCSI I'll enable the debug for KBD too...
Now this is the output:
SYM: start SCSI bus reset.
SYM: end SCSI bus reset.
SYM: Execution started @ 801c7600.
SYM: EXECUTING SCRIPT
SYM: INS @ 801c7600, 801c7604
SYM: INS @ 1c7600, 1c7604
SYM: INS = 41, 0, 801c78b8
SYM: 801c7600: SELECT 0 $$
In Select_target: 0 $$
state.phase = -1
In get_disk()
Bus: 0, Dev: 0$$
NumBus: 1, NumDev: 16$$
Setting SCSI parameter... in PTD
SYM: EXECUTING SCRIPT
SYM: INS @ 801c7608, 801c760c
SYM: INS @ 1c7608, 1c760c
SYM: INS = 9e, 30000, 65
SYM: EXECUTING SCRIPT
SYM: INS @ 801c7610, 801c7614
SYM: INS @ 1c7610, 1c7614
SYM: INS = 1e, 0, 4
SYM: INS = Block Move (i 0, t 1, opc 1, phase 6
SYM: Ready for transfer.
SYM: Reading table at DSA(801d9520)+DSPS(00000004) = 801d9524.
SYM: 801c7610: MOVE Start/count 801d9550, 6
SYM.0 PHASE 6: c0 01 03 01 00 00
SYM: Transition from phase 6 to phase 7.
SYM: EXECUTING SCRIPT
SYM: INS @ 801c7618, 801c761c
SYM: INS @ 1c7618, 1c761c
SYM: INS = 82, b0000, 801c7638
SYM: EXECUTING SCRIPT
SYM: INS @ 801c7620, 801c7624
SYM: INS @ 1c7620, 1c7624
SYM: INS = 83, b0000, 801c7698
SYM: EXECUTING SCRIPT
SYM: INS @ 801c7628, 801c762c
SYM: INS @ 1c7628, 1c762c
SYM: INS = 87, b0000, 801c76d8
SYM: EXECUTING SCRIPT
SYM: INS @ 801c76d8, 801c76dc
SYM: INS @ 1c76d8, 1c76dc
SYM: INS = f, 1, 801c78f0
SYM: INS = Block Move (i 0, t 0, opc 1, phase 7
SYM: Ready for transfer.
SYM: 801c76d8: MOVE Start/count 801c78f0, 1
SYM.0 PHASE 7: 01
SYM: EXECUTING SCRIPT
SYM: INS @ 801c76e0, 801c76e4
SYM: INS @ 1c76e0, 1c76e4
SYM: INS = 80, c0004, 801c77d8
SYM: EXECUTING SCRIPT
SYM: INS @ 801c76e8, 801c76ec
SYM: INS @ 1c76e8, 1c76ec
SYM: INS = 80, c7f80, 801c7760
SYM: EXECUTING SCRIPT
SYM: INS @ 801c76f0, 801c76f4
SYM: INS @ 1c76f0, 1c76f4
SYM: INS = 80, c0001, 801c7708
SYM: EXECUTING SCRIPT
SYM: INS @ 801c7708, 801c770c
SYM: INS @ 1c7708, 1c770c
SYM: INS = 60, 40, 0
SYM: 801c7708: CLEAR ack
SYM: EXECUTING SCRIPT
SYM: INS @ 801c7710, 801c7714
SYM: INS @ 1c7710, 1c7714
SYM: INS = f, 1, 801c7728
SYM: INS = Block Move (i 0, t 0, opc 1, phase 7
SYM: Ready for transfer.
SYM: 801c7710: MOVE Start/count 801c7728, 1
SYM.0 PHASE 7: 03
SYM: EXECUTING SCRIPT
SYM: INS @ 801c7718, 801c771c
SYM: INS @ 1c7718, 1c771c
SYM: INS = 60, 40, 0
SYM: 801c7718: CLEAR ack
SYM: EXECUTING SCRIPT
SYM: INS @ 801c7720, 801c7724
SYM: INS @ 1c7720, 1c7724
SYM: INS = 80, c0000, 801c7738
SYM: EXECUTING SCRIPT
SYM: INS @ 801c7728, 801c772c
SYM: INS @ 1c7728, 1c772c
SYM: INS = f, 3, 801c78f1
SYM: INS = Block Move (i 0, t 0, opc 1, phase 7
SYM: Ready for transfer.
SYM: 801c7728: MOVE Start/count 801c78f1, 3
SYM.0 PHASE 7: 01 00 00
SYM: Transition from phase 7 to phase 2.
SYM: EXECUTING SCRIPT
SYM: INS @ 801c7730, 801c7734
SYM: INS @ 1c7730, 1c7734
SYM: INS = 98, 80000, 7
SYM: start SCSI bus reset.
SYM: end SCSI bus reset.
SYM: Execution started @ 801c7600.
SYM: EXECUTING SCRIPT
SYM: INS @ 801c7600, 801c7604
SYM: INS @ 1c7600, 1c7604
SYM: INS = 41, 10000, 801c78b8
SYM: 801c7600: SELECT 1 $$
In Select_target: 1 $$
state.phase = 2
SYM: EXECUTING SCRIPT
SYM: INS @ 801c7608, 801c760c
SYM: INS @ 1c7608, 1c760c
SYM: INS = 9e, 30000, 65
SYM: start SCSI bus reset.
SYM: end SCSI bus reset.
SYM: Execution started @ 801c7600.
SYM: EXECUTING SCRIPT
SYM: INS @ 801c7600, 801c7604
SYM: INS @ 1c7600, 1c7604
SYM: INS = 41, 20000, 801c78b8
SYM: 801c7600: SELECT 2 $$
In Select_target: 2 $$
state.phase = 2
SYM: EXECUTING SCRIPT
SYM: INS @ 801c7608, 801c760c
SYM: INS @ 1c7608, 1c760c
SYM: INS = 9e, 30000, 65
SYM: start SCSI bus reset.
SYM: end SCSI bus reset.
SYM: Execution started @ 801c7600.
SYM: EXECUTING SCRIPT
SYM: INS @ 801c7600, 801c7604
SYM: INS @ 1c7600, 1c7604
SYM: INS = 41, 30000, 801c78b8
SYM: 801c7600: SELECT 3 $$
In Select_target: 3 $$
state.phase = 2
SYM: EXECUTING SCRIPT
SYM: INS @ 801c7608, 801c760c
SYM: INS @ 1c7608, 1c760c
SYM: INS = 9e, 30000, 65
[etc... up to SELECT 15]
Hello again,
testing the SCSI interface, with the latest CVS (I updated the source 5 mins ago), I have a new error on the DOS cmd prompt:
Could not arbitrate for the SCSI bus.
scsi bus busy...
Could not arbitrate for the SCSI bus.
scsi bus busy...
Could not arbitrate for the SCSI bus.
scsi bus busy...
Could not arbitrate for the SCSI bus.
scsi bus busy...
Could not arbitrate for the SCSI bus.
scsi bus busy...
Could not arbitrate for the SCSI bus.
scsi bus busy...
[for ever]
and I suppose it's a loop.
Now the system is hand at "Testing the system", and I have no more the "Waiting for pka to poll..." messages.
regards,
fausto
Just another info, about the above issue.
Before the loop I have on DOS console these messages:
pci0.16(sym53c895).disk0.0(file): MSG: identify w/disconnect priv
pci0.16(sym53c895).disk0.0(file): MSG: extended: SDTR.
Indeed my conf has disk0.0 as hard disk and disk0.14 as cdrom.
regards,
fausto