[Simh] UDA-50 - want to use 'odd byte count'

Andreas Cejna Andreas.Cejna at gnc.at
Wed Jul 11 06:28:23 EDT 2007


Hi,
have you tried to run the emulated VAX 11/780. You have the chance to run massbus devices there.

Hope this helps

Kind Regards
Andreas


----- Originalnachricht -----
Von: simh-bounces at trailing-edge.com im Auftrag von Hoyer Falko 
Gesendet: Mit, 11.7.2007 08:50
An: simh at trailing-edge.com
Betreff: [Simh] UDA-50 - want to use 'odd byte count'

Hi,

I'm using SIMH and want to use our special written application software
on it. this application was originally designed to run on massbus
controller-disks or now we are using HSC's.

This SW uses QIOW to read/write to/from the disk and supplies:

qio.p1= buffer start address
qio.p2= transfer size
qio.p3= disk block address

My problem now:
the simh is emulating a UDA-50 controller which does not allow a odd
byte count (and I know this is according spec) - but our SW do this.
Currently I don't want to do a change to our application because it is
too sensitive and still running on the "real VAX (6x00)". so for us the
easier approch would be to modify SIMH.

Without any change we got the QIO status "%SYSTEM-F-IVBUFLEN, invalid
buffer length" (= 034C hex)- as expected on UDA-50 - if an attemt to
write odd byte count is made.

now we tried to modify pdp11_rq.c by ourself by incrementing (the user
supplied) byte count in case of odd value - but without full success.

the change we tried was as follows :

==== part of pdp11_rq.c ================

/* Data transfer commands */

t_bool rq_rw (MSC *cp, int32 pkt, t_bool q)
{
uint32 lu = cp->pak[pkt].d[CMD_UN];                     /* unit # */
uint32 cmd = GETP (pkt, CMD_OPC, OPC);                  /* opcode */
uint32 sts;
UNIT *uptr;

/* insert start hy/pa */
uint32 ll = GETP32 (pkt, RW_BCL);
if (ll & 1) {
     fprintf (sim_deb, "+++ len  = %d +++\n", ll);
     ll++;
     PUTP32 (pkt, RW_BCL, ll);
     ll = GETP32 (pkt, RW_BCL);
     fprintf (sim_deb, "+++ len  = %d +++\n", ll);
}
/* insert end hy/pa */

if (uptr = rq_getucb (cp, lu)) {                        /* unit exist?
*/
..... rest unchanged .....
==============================

with this change applied now we get the following status instead:
%SYSTEM-F-INCSEGTRA, incomplete segmented transfer request posted (=
2234 hex) which is again not what I like.

my question: how can I make this odd byte count possible on that
controller-simulation and/or from where (which code) is this status code
(%x2234) actually coming from ?

any help would be very appreciated.

many thanks in advance
Falko
_______________________________________________
Simh mailing list
Simh at trailing-edge.com
http://mailman.trailing-edge.com/mailman/listinfo/simh




More information about the Simh mailing list