Wednesday, May 4, 2016

PZ and DEFS, and loading REX into memory

This page is a part of the "Understanding IRIS" collection.  Many thanks to David Takle, for figuring this out, and sharing this with us:

"I'm fairly certain at this point we can isolate an LU0, and create a pseudo disk drive out of it as it. Because SimH Nova disk drives are just continuous blocks of data 512 bytes each, no formatting ( at least I think so at this point ).

The problem is that SimH Nova only recognizes one approach to writing a disk driver, and only one device code = 33.

There's a chance I could reverse engineer the requirements for writing a SimH compatible disk driver, at least the read portion, which I could then fat finger into the boot sector. That would get REX (Real Time Executive) loaded into memory during the boot process, but that would be the end of it. because writing a disk driver for REX is a lot harder and has strict rules for which I can no longer find any documentation.

We need two critical text files, PZ and DEFS which normally reside on LU0.  Without them it will be almost impossible to write a system level driver.

I found PZ and DEFS on LU0.

These are very important for reverse engineering any part of IRIS."


; f:\www\nova\LU0\pz-f.bin  words=1280/ octal=2400
; "REX" PAGE ZERO DEFINITIONS FOR "IRIS" R7.5
; 30 OCTOBER 1980

;                 All Rights Reserved
;     Copyright (C) 1974, Educational Data Systems
;     Copyright (C) 1980, Educational Data Systems
;    This document may not be reproduced without the
; prior written permission of Educational Data Systems

C2=2
C3=3

RUP=5
RUS=RUP+1
RTP=RUS+1

.BSA=RTP+1
.HBA=.BSA+1
.HXA=.HBA+1
.SSA=.HXA+1
.ABA=.SSA+1

BBA=.ABA+1
BPI=BBA+1

CM400=21
C4=CM400+1
C5=C4+1
C6=C5+1
C7=C6+1

AI1=C7+1
AI2=AI1+1
AD1=AI2+1
AD2=AD1+1

C10=AD2+1
C11=C10+1
C12=C11+1
C13=C12+1
C14=C13+1
C15=C14+1
C16=C15+1
C17=C16+1
C20=C17+1
C37=C20+1
C40=C37+1
C77=C40+1
.C100=C77+3
C177=C100+1
C200=C177+1
C205=C200+1
C215=C205+1
C240=C215+1
C244=C240+1
C260=C244+1
C271=C260+1
C300=C271+1
C334=C300+1
C377=C334+1
C400=C377+1
C777=C400+1
C1000=C777+1
C1777=C1000+1
C2000=C1777+1
C4000=C2000+1
C774C=C4000+1
C170K=C774C+1

ESCF=C170K+1
RTL=ESCF+1
BSACF=RTL+1
ERRF=BSACF+1

.CALL=ERRF+1

CALL=JSR @.CALL
FLAGC=JSR @.CALL+1
QCHAR=JSR @.CALL+2
QUEUE=JSR @.CALL+3
DQUEUE=JSR @.CALL+4
CHANNEL=JSR @.CALL+5
FREENODE=JSR @.CALL+6
..LCM=.CALL+11.;LCM ACCESS VECTOR
.PCA=.LCM+2
.BPS=.PCA+1
.INFO=.BPS+1

C600=.INFO

.ACBY=.INFO+1
.ACIB=.ACBY+1
.ACSB=.ACIB+1
.BDIV=.ACSB+1
.BMUL=.BDIV+1
.BUMP=.BMUL+1
.DEC=.BUMP+1

.FALT=.DEC+2
.FIX=.FALT+1
.FLOT=.FIX+1
.FLUT=.FLOT+1
.IA2D=.FLUT+1
.IA2L=.IA2D+1
.INTR=.IA2L+1
.LODA=.INTR+1
.MSG=.LODA+1
.NRET=.MSG+1
.RBLK=.NRET+1
.SRET=.RBLK+1
.STBY=.SRET+1
.STDA=.STBY+1
.STI=.STDA+1
.STO=.STI+1
.STOB=.STO+1
.STPL=.STOB+1
.WBLK=.STPL+1
.XACB=.WBLK+1
.XSTB=.XACB+1
.DA  =160
DAC =164
DAS =165
DB  =166
DBC =172
DBS =173

.DA =174
.DA3=175
.DB =176
.DB3=177

C160=.DA
C163=.DA3
C166=.DB
C171=.DB3


BINDIVIDE  =JSR @.BDIV
BINMULTIPLY=JSR @.BMUL
BUMPUSER   =JSR @.BUMP
DECIMAL    =JSR @.DEC
FIX        =JSR @.FIX
FLOAT      =JSR @.FLOT
FINDLUT    =JSR @.FLUT
GETBYTE    =JSR @.ACBY
INBYTE     =JSR @.ACIB
INSTBYTE   =JSR @.ACSB
ISA2DIGIT  =JSR @.IA2D
ISA2LETTER =JSR @.IA2L
LOADDA     =JSR @.LODA
OUTBYTE    =JSR @.STOB
OUTTEXT    =JSR @.MSG
PUTBYTE    =JSR @.STBY
READBLOCK  =JSR @.RBLK
STORDA     =JSR @.STDA
STINPUT    =JSR @.STI
STOUTPUT   =JSR @.STO
TRAPFAULT  =JSR @.FALT
WRITBLOCK  =JSR @.WBLK
XGETBYTE   =JSR @.XACB
XPUTBYTE   =JSR @.XSTB


.EOT.; "REX" R7.4 PAGE ZERO DEFINITIONS
........................................................................................................................................................................................................................................................................................

We also found this file in LU0, at decimal address 128512, in our version with the highest order bit dropped (but we kept the same endianness as the original).




; f:\www\nova\LU0\defs-f.bin words=9472/ octal=22400
; SOFTWARE DEFINITIONS FOR "IRIS" R7.5
; 6 October 1981

;                 All Rights Reserved
;     Copyright (C) 1974, Educational Data Systems
;     Copyright (C) 1980, Educational Data Systems
;    This document may not be reproduced without the
; prior written permission of Educational Data Systems

..TXTM.1

; MISCELLANEOUS DEFINITIONS

.DUSR K     =400    ;BYTE SWAP CONSTANT
.DUSR NOP   =100010 ;NO OPERATION
.DUSR SAKEY =136310 ;SAFETY KEY
.DUSR CHM1  =-10    ;DISP. TO CHANNEL -1 (PROCESSOR) *
.DUSR CHM2  =CHM1*2 ;DISP. TO CHANNEL -2 (FOR DSP)
.DUSR CHM3  =CHM1*3 ;DISP. TO CHANNEL -3 (PORT OUTPUT)
.DUSR CHM4  =CHM1*4 ;DISP. TO CHANNEL -4 (PORT INPUT)
.DUSR INFO  =600    ;SYSTEM INFORMATION TABLE
.DUSR BPS   =10200  ;BEGINNING OF PROCESSOR STORAGE
.DUSR MBUS  =20600  ;MINIMUM BEGIN USER STORAGE
.DUSR LSIR  =14000  ;LOCATION FOR SIR (MIN IS BPS+3600)
.DUSR LBZUP =24000  ;LOCATION FOR BZUP
.DUSR LDBUG =25000  ;LOCATION FOR DBUG (=LBZUP+1000)
.DUSR LSYSL =34000  ;LOCATION FOR SYSL

 ; * MODIFY FOFC1, CHAN2 & CHCHX IN REX IF CHM1 CHANGES


; DEFINITIONS FOR FLAGCHANGE SUBROUTINE

.DUSR SET   =140000 ;SET FLAG BIT
.DUSR RESET =100000 ;RESET FLAG BIT
.DUSR TOGGL =040000 ;TOGGLE FLAG BIT
.DUSR SKIPO =020000 ;SKIP IF RESULT IS ONE
.DUSR SKIPZ =010000 ;SKIP IF RESULT IS ZERO



..RDX 10

; DISPLACEMENTS IN TASK QUEUE NODE

 ;    A2   =0 ;REGISTER A2
 ;    A1   =1 ;REGISTER A1
 ;    A0   =2 ;REGISTER A0
 ;    A3   =3 ;REGISTER A3
 ;    PC   =4 ;PROGRAM ADDRESS * 2 + CARRY
.DUSR CPRI =5 ;CURRENT PRIORITY
 ;            ;SPARE
.DUSR TASK =7 ;TASK ENTRY POINTER
.DUSR TCBP =8 ;TASK CONTROL BLOCK POINTER
.DUSR LINK =9 ;LINK POINTER TO NEXT NODE

..RDX 8
.; INFO TABLE DISPLACEMENTS

.DUSR SDAT.= 0 ;SYSTEM CREATION DATE (HOURS AFTER 1-1-76)
.DUSR SPED.= 1 ;AVG CPU SPEED (INSTR/MSEC), NOVA 3 FLAG
.DUSR MILU.= 2 ;MAXIMUM # INSTALLED LOGICAL UNITS
.DUSR NDCH.= 3 ;NUMBER OF DATA CHANNELS PER PORT
.DUSR LPCA.= 4 ;LOCATION OF PORT CONTROL AREA
.DUSR TNAP.= 5 ;TOTAL NUMBER OF ACTIVE PORTS
.DUSR SPCF.= 6 ;SPCECIAL CONDITIONS FLAG
               ;(MSB --> NO DIRTY PAGES)
.DUSR MBUS.= 7 ;MINIMUM BEGINNING OF USER STORAGE
.DUSR TOPW.=10 ;TOP WORD OF CORE TO BE USED
.DUSR ABUF.=11 ;AUXILIARY BUFFER SIZE (NUMBER OF WORDS)
.DUSR TBUF.=12 ;MAG TAPE BUFFER SIZE (NUMBER OF WORDS)
.DUSR NCQN.=13 ;NUMBER OF EXTRA CHARACTER QUEUE NODES
.DUSR NNOD.=14 ;MINIMUM NUMBER OF FREE NODES
.DUSR NSIG.=15 ;NUMBER OF SIGNAL BUFFER NODES
.DUSR NSUB.=16 ;MAXIMUM NUMBER OF DISCSUBS
.DUSR PTSL.=17 ;LONG\SHORT TIME SLICE
.DUSR TLOK.=20 ;MIN.TIME A LOCKED PARTITION IS KEPT LOCKED

.DUSR .TSA.=23 ;TEMPORARY STORAGE "A" POINTER (6 WORDS)
.DUSR .TSB.=24 ;TEMPORARY STORAGE "B" POINTER (6 WORDS)
.DUSR .TSQ.=25 ;TEMPORARY STORAGE "Q" POINTER (6 WORDS)
.DUSR .TSZ.=26 ;TEMPORARY STORAGE "Z" POINTER (6 WORDS)
.DUSR .TSC.=27 ;TEMPORARY STORAGE "C" POINTER (16 WORDS)
.DUSR HRS. =30 ;CPU TIME - HOURS SINCE 1-1-76
.DUSR TSC. =31 ;   PART OF HOUR IN TENTH-SECONDS
.DUSR CPLU.=32 ;CURRENT PROCESSOR LOGICAL UNIT
.DUSR CPDA.=33 ;CURRENT PROCESSOR DISC ADDRESS
.DUSR CPTN.=34 ;CURRENT PROCESSOR TYPE NUMBER
.DUSR SDFT.=35 ;SIZE OF EACH PORT'S DATA FILE TABLE
.DUSR DSCO.=36 ;DISC ADDRESS OF "SCOPE"
.DUSR DBYE.=37 ;DISC ADDRESS OF "BYE"
.DUSR DDSP.=40 ;DISC ADDRESS OF "DSP"
.DUSR DSUB.=41 ;DISC ADDRESS OF "DISCSUBS"
.DUSR DMSG.=42 ;DISC ADDRESS OF "MESSAGES"
.DUSR DCON.=43 ;DISC ADDRESS OF "CONFIG"
.DUSR .TTT.=44 ;POINTER TO TERMINAL TYPE TABLE
.DUSR MASK.=45 ;INITIAL INTERRUPT MASK
.DUSR ..STK=46 ;POINTER TO "CALL" STACK POINTER
.DUSR .RGS.=47 ;POINTER TO REGISTER BUFFER FOR "CALL"
.DUSR .TASQ=50 ;POINTER TO TASK QUEUE POINTER
.DUSR .DBS.=51 ;POINTER TO D(BLOCK IN BSA) CELL
.DUSR .RCV.=52 ;POINTER TO RECOVER ROUTINE
.DUSR .LUT.=53 ;POINTER TO LOGICAL UNIT TBL (SEE PG 12)
.DUSR .TBA.=54 ;POINTER TO MAGNETIC TAPE BUFFER AREA
.DUSR .ELB.=55 ;POINTER TO END OF LAST DISC BUFFER
.DUSR .IHT.=56 ;POINTER TO INTERRUPT HANDLER TBL (SEE PG 5)
.DUSR .SGB.=57 ;POINTER TO SIGNAL BUFFER POINTERS
.DUSR .BPT.=60 ;POINTER TO BUFFER POOL TABLE
.DUSR .UPT.=61 ;POINTER TO USER PARTITION TABLE
.DUSR THTC.=62 ;TEN HERTZ TASK COUNTER
.DUSR OVLA.=63 ;OVERLOAD CONDITION ACCUMULATOR
.DUSR NBBP.=64 ;NUMBER OF BUFFERS IN BUFFER POOL
.DUSR PFRF.=65 ;POWER FAIL RECOVER FLAG
.DUSR BPSP.=66 ;BEGIN PATCH SPACE (AFTER LAST PATCH)
.DUSR ENDP.=67 ;END OF PATCH SPACE (SET BY SIR)


.; PORT CONTROL BLOCK (PCB) DISPLACEMENTS

.DUSR ICW. = 0 ;INPUT CONTROL WORD
.DUSR OCW. = 1 ;OUTPUT CONTROL WORD
.DUSR FBA. = 2 ;FIRST BYTE ADDRESS OF I/O BUFFER -1
.DUSR LBA. = 3 ;LAST BYTE ADDRESS OF I/O BUFFER
.DUSR IBP. = 4 ;INPUT BYTE POINTER
.DUSR OBP. = 5 ;OUTPUT BYTE POINTER
.DUSR LIB. = 6 ;LAST INPUT BYTE POINTER
.DUSR LOB. = 7 ;LAST OUTPUT BYTE POINTER
.DUSR TIB. =10 ;TEMPORARY INPUT CHARACTER BUFFER
.DUSR TOB. =11 ;TEMPORARY OUTPUT CHARACTER BUFFER
.DUSR FLW. =12 ;FLAG WORD (SEE BELOW)
.DUSR ULU. =13 ;USER'S ASSIGNED LOGICAL UNIT NUMBER
.DUSR URA. =14 ;USER'S RETURN ADDRESS
.DUSR ORA. =15 ;OLD RETURN ADDRESS
.DUSR CTU. =16 ;CPU TIME USED (UPPER HALF = HOURS)
.DUSR CTL. =17 ;CPU TIME USED (LOWER HALF = TENTH-SECONDS)
.DUSR ACT. =20 ;ACCOUNT NUMBER, PRIVILEGE LEVEL
.DUSR TON. =21 ;CPU TIME AT LOG-ON (MINUTES)
.DUSR APP. =22 ;ACCOUNT\PROGRAM PRIORITY
.DUSR DQP. =23 ;PRIORITY AT DEQUEUE TIME
.DUSR DQT. =24 ;DEQUEUE TIME (TENTH-SECONDS)
.DUSR DFT. =25 ;POINTER TO DATA FILE TABLE (SEE PAGE 5)
.DUSR PDC. =26 ;PAUSE DELAY COUNTER (TENTH-SECONDS)
.DUSR AHA. =27 ;ACTIVE FILE HEADER DISC ADDRESS
 ;         =30 ;(SPARE)
.DUSR NLP. =31 ;NODE LINK POINTER FOR $TERM STORAGE
.DUSR SND. =32 ;POINTER TO DRIVER'S "SEND" SUBROUTINE
.DUSR OCC. =33 ;OUTPUT COLUMN COUNTER
.DUSR ODC. =34 ;OUTPUT DELAY COUNTER
.DUSR RDE. =35 ;RETURN DELAY, EOM OR TERMINAL TYPE CODE
.DUSR PCW. =36 ;PORT CONTROL WORD FOR $MMUX (SEE PAGE 4)
.DUSR TTN. =37 ;TERMINAL TYPE NUMBER & FLAGS (SEE PAGE 4)


; EACH BIT IN FLW IS A FLAG AS FOLLOWS:

;  BIT*   MEANING
;   15_ BINARY INPUT/OUTPUT MODE (PASS BYTE AS IS)
;   14  X-OFF FLAG (PAUSE OUTPUT TILL X-ON)
;   13  DSP BREAKPOINT IS SET
;   12_ DSP IS ACTIVE ON THIS PORT
;   11  SIGNAL WILL ACTIVATE FROM PAUSE
;   10  A BREAK HAS BEEN DETECTED
;    9_
;    8  PROCESSOR TASK IS ON QUEUE
;    7  OUTPUT IS ACTIVE
;    6_ INPUT IS ACTIVE
;    5  LOG OFF AFTER PAUSE DELAY
;    4  IGNORE CTRL E (LOG-ON MODE)
;    3_ IGNORE CTRL O
;    2  ENABLE XOFF AND XON
;    1 
;    0  ECHO INPUT CHARACTERS

; * NOTE:  BIT 15 IS THE MOST SIGNIFICANT BIT
.; EACH BIT IN PCW IS A FLAG AS FOLLOWS:

;  BIT*   MEANING
;   15_ 0
;   14  THIS PORT ON EDSI MIGHTY-MUX
;   13  0
;   12_ DEVICE CONTROL OUTPUT (1 = HIGH, 0 = LOW)
;   11  NORMAL DEVICE STATUS INPUT (1 = HIGH, 0 = LOW)
;   10  PHANTOM PORT
;    9_ AUTO LOG-OFF ENABLED
;    8  AUTO FREQUENCY SCAN ENABLED
;    7  INHIBIT PARITY CHECK AND GENERATION
;    6_ TWO STOP BITS (NORMAL = ONE)
;    5  \  CHARACTER LENGTH: 11 = 8 BITS, 10 = 7 BITS
;    4  /                    01 = 6 BITS, 00 = 5 BITS
;    3_ EVEN PARITY (IF ENABLED)
;    2  \  CURRENT BAUD RATE:
;    1   } 7 = 9600, 6 = 4800, 5 = 2400, 4 = 1200,
;    0  /  3 = 600,  2 = 300,  1 = 150,  0 = 110.


; FORMAT OF TTN WORD, USED IN $TERMS:

;  BIT*   MEANING
;   15_ SPECIAL DELAY CHARACTERS EXIST - SEE $TERMn
;   14
;   13
;   12_
;   11
;   10
;    9_
;    8
;    7  ESCAPE SEEN IN INPUT, USE TRANSLATION TABLE #1
;    6_ OUTPUT TRANSLATION IN PROGRESS
;    5  INPUT TRANSLATION IN PROGRESS
;    4  EXPECTING CURSOR POSITION ('RD' HAS BEEN SENT)
;    3_ \
;    2   ) TERMINAL TYPE NUMBER (0 - 17 OCTAL)
;    1   )
;    0  /


; * NOTE:  BIT 15 IS THE MOST SIGNIFICANT BIT
.; DFT HAS EIGHT WORDS PER CHANNEL AS FOLLOWS:

.DUSR FLU = 0 ;FILE'S LOGICAL UNIT NUMBER
              ;-1 IN FLU ==> DEVICE (ON LU #0)
.DUSR FDA = 1 ;FILE HEADER DISC ADDRESS
.DUSR CBN = 2 ;CURRENT BLOCK NUMBER
              ;CBN = INIT ENTRY ADDRESS IF DEVICE
              ;CBN = PARTITION ENTRY POINTER IN CH # -1
.DUSR STS = 3 ;CHANNEL STATUS (SEE BELOW)
.DUSR FSZ = 4 ;FILE'S SIZE (# DATA BLOCKS IF CONTIGUOUS)
              ;FSZ = RECORD NUMBER IF NOT CONTIGUOUS FILE
.DUSR WPR = 5 ;NUMBER OF WORDS PER RECORD
.DUSR FRR = 6 ;FIRST REAL RECORD NUMBER
.DUSR CNP = 7 ;CHANNEL NODE POINTER (FOR MODULAR FILES)


; EACH BIT IN CHANNEL STS IS A FLAG AS FOLLOWS:

;  BIT*   MEANING
;   15_ RECORD IS LOCKED (IN CHM1 ==> PROGRAM IS LOCKABLE)
;   14  FILE IS WRITE PROTECTED
;   13  FILE IS CONTIGUOUS
;   12_ FILE IS NOT FORMATTED
;   11  PERIPHERAL DEVICE
;   10  FILE IS INDEXED
;    9_ (RESERVED FOR BYTE NUMBER OVERFLOW)
;    8  \
;    7   \
;    6_   \
;    5     )  DISPLACEMENT OF
;    4     ) RECORD INTO BLOCK
;    3_    ) (NUMBER OF BYTES)
;    2    /
;    1   /
;    0  /


; * NOTE:  BIT 15 IS THE MOST SIGNIFICANT BIT




;THE USER PARTITION TABLE HAS TWO WORDS AS FOLLOWS:

.DUSR BUS. = 0      ;BEGINNING OF THE PARTITION
.DUSR EUS. = BUS.+1 ;END OF USER PARTITION
.; TASK NUMBERS FOR "QUEUE"

.DUSR.PROCE = 0 ;PROCESSOR IN CHANNEL #-1
.DUSR.TENHZ = 1 ;TEN HERTZ TASKS
.DUSR.SIGNA = 2 ;SEND SIGNAL
.DUSR.ESCAP = 3 ;ESCAPE FROM PROCESSOR



; DEFINE SPECIAL FLAGS FOR DISCSUBS

.DUSR X =40000 ;EXTENDED SUBROUTINE (TWO BLOCKS)
.DUSR N =20000 ;INCLUDED WITH ANOTHER IF CORE-RESIDENT
.DUSR D =10000 ;VERSION IS DISC-RESIDENT ONLY
.DUSR A =04000 ;ALTERNATE VERSION FOR CORE RESIDENCY



; DISCSUB NUMBERS FOR "CALL"

.DUSR FAULT = 0+D+X ;PRINT TRAP MESSAGE, ABORT TASK
.DUSR ALLOC = 1     ;ALLOCATE DISC BLOCKS
.DUSR DALLC = 2     ;DEALLOCATE DISC BLOCKS
.DUSR FFILE = 3     ;FIND FILE IN INDEX
.DUSR EXTEN = 4     ;CHANGE TO EXTENDED FILE
.DUSR ALCON = 5     ;ALLOCATE A CONTIGUOUS FILE
.DUSR CDTA  = 6     ;CONVERT DRATSAB TO ASCII
.DUSR CIA   = 7     ;CONVERT INTEGER TO ASCII (ANY RADIX)
.DUSR CSTR  =10     ;COMPARE STRINGS
.DUSR PASSC =11     ;PASSWORD COMPARE
.DUSR ERROR =12     ;ERROR ROUTINE FOR BASIC
.DUSR MESSA =13     ;CANNED MESSAGE TO I/O BUFFER
.DUSR BREAK =14     ;BREAKPOINT SETUP FOR DSP
.DUSR ACNTL =15     ;ACCOUNT LOOKUP
.DUSR DELET =16     ;DELETE A FILE
.DUSR PDELE =17+N   ;DELETE A PROCESSOR OR DRIVER
.DUSR BUILD =20+X   ;BUILD A NEW FILE
.DUSR BILDD =21+N+X ;BUILD A "$" FILE
.DUSR OPEN  =22     ;OPEN A FILE OR A DEVICE
.DUSR OPENU =23+N   ;OPEN A FILE OR A DEVICE FOR UPDATE
.DUSR OPENL =24+N   ;OPEN AND LOCK A FILE OR A DEVICE
.DUSR OPENR =25+N   ;OPEN A FILE OR A DEVICE FOR REFERENCE
.DUSR CLOSE =26     ;CLOSE A CHANNEL
.DUSR CLEAR =27     ;CLEAR A CHANNEL
.DUSR GETRR =30+X   ;GET RECORD FOR READ
.DUSR GETRW =31+N+X ;GET RECORD FOR WRITE
.DUSR FINDI =32     ;FIND AN ITEM (NOT IMPLEMENTED)
.DUSR READI =33     ;READ AN ITEM (SEE PAGE 8)
.DUSR WRITI =34+N   ;WRITE AN ITEM (SEE PAGE 8)
.DUSR WRITN =35+D   ;WRITE A NEW ITEM
.DUSR READC =36     ;READ FROM CONTIGUOUS FILE
.DUSR WRITC =37+N   ;WRITE INTO CONTIGUOUS FILE

 ; (CONTINUED ON NEXT PAGE)
.; DISCSUB NUMBERS (CONTINUED)

.DUSR CHARG =40     ;CHARGE FOR FILE ACCESS
.DUSR SYSCO =41     ;TRANSMIT A SYSTEM COMMAND (CALL 98)
.DUSR CNVDA =42     ;CONVERT DATE TO ASCII
.DUSR CNVAD =43     ;CONVERT ASCII TO DATE
.DUSR CNVDT =44     ;CONVERT DATE AND TIME (CALL 99)
.DUSR RDFHI =45     ;READ FILE HEADER INFO (CALL 97)
.DUSR SPECI =46     ;SPECIAL FUNCTIONS
.DUSR RECOV =47+D   ;RECOVER FROM A STALL OR CRASH
.DUSR PATNF =50     ;PSEUDO DIVIDE ARC TANGENT FUNCTION
.DUSR PLOGF =51     ;PSEUDO DIVIDE NATURAL LOG FUNCTION
.DUSR PSQRF =52     ;PSEUDO DIVIDE SQUARE ROOT FUNCTION
.DUSR PEXPF =53+X   ;PSEUDO DIVIDE EXPONENTIAL FUNCTION
.DUSR PSINF =54+X   ;PSEUDO DIVIDE SINE FUNCTION
.DUSR PCOSF =55+N+X ;PSEUDO DIVIDE COSINE FUNCTION
.DUSR PTANF =56     ;PSEUDO DIVIDE TANGENT FUNCTION
.DUSR LINKP =57     ;LINK PROGRAMS (BASIC'S "CHAIN")
.DUSR DIREC =60     ;SET UP DIRECTORIES FOR INDEXED FILE
.DUSR SEARC =61+X   ;SEARCH INDEXED FILE DIRECTORY
.DUSR SHUFF =62     ;SHUFFLE DIRECTORY BLOCKS
.DUSR DEKEY =63     ;DELETE KEY FROM DIRECTORY
.DUSR RELEA =64+N   ;RELEASE A DIRECTORY BLOCK
.DUSR FIXDI =65+X   ;FIX DIRECTORIES OF MOVED INDEXED FILE
 ;           66      SPARE
.DUSR AFSET =67     ;SET UP ACTIVE FILE FOR SWAP-OUT
.DUSR SIGPA =70     ;SIGNAL PAUSE
.DUSR MRC3  =71     ;MAG TAPE READ STATUS
.DUSR MTASK =72     ;MAG TAPE SUPPLEMENTARY TASKS
.DUSR MRFHD =73     ;MAG TAPE READ FILE HEADER
.DUSR MRFIL =74     ;MAG TAPE READ INPUT FILE
.DUSR MTFPE =75     ;MAG TAPE READ/WRITE TRANSFERS
.DUSR MNEXT =76     ;MAG TAPE GO TO NEXT DRIVE
.DUSR MTAPA =77     ;MAG TAPE ALL OTHER FUNCTIONS
.DUSR RWCTU =100    ;READ/WRITE CASSETTE TAPE UNIT
.DUSR STYL1 =101    ;STRI
.DUSR STYL2 =102+N  ;FIND
.DUSR STYL3 =103    ;REVS
.DUSR STYL4 =104+X  ;EDIT
.DUSR STYL5 =105    ;CALLER
.DUSR STYL6 =106    ;PUSH
.DUSR REOPT =107+X  ;RE-OPTIMIZE INDEXED FILE DIRECTORY
.DUSR STYL7 =110    ;CALL 56
.DUSR STYL8 =111    ;UNLN
.DUSR STYL9 =112    ;LBA
;113 - 117 RESERVED
.DUSR CTNXT =120+X  ;CTU POST-PROCESSING
.DUSR CTUSR =121    ;SEARCH A CTU DIRECTORY
.DUSR CTUWE =122    ;WRITE A CTU DIRECTORY ENTRY
.DUSR RMLCM =123    ;REMOVE LCM IE "UPDATE" REAL DISC
.DUSR FLLCM =124+N  ;FLUSH LCM TO DISC WITHOUT DEACTIVATING



 ; DISCSUB NUMBERS 130 - 137 ARE TO BE
 ; USED FOR CUSTOMER'S OWN SUBROUTINES.
 ; NUMBERS UP TO 777 OCTAL MAY BE USED
 ; IF NSUB IN INFO TABLE IS INCREASED.
.; DEFINE AN ITEM CONTROL BLOCK FOR READITEM - WRITITEM

.DUSR ITRCD =0       ;RECORD NUMBER
.DUSR ITNUM =ITRCD+1 ;ITEM NUMBER
.DUSR ITTYP =ITNUM+1 ;ITEM TYPE
.DUSR ITLEN =ITTYP+1 ;ITEM LENGTH
.DUSR ITDES =ITLEN+1 ;ITEM ADDRESS (DESTINATION OR SOURCE)


; CORE-RESIDENT SUBROUTINE NUMBERS FOR "CALL"

.DUSR SCOPE =@ 0 ;EXIT TO "SCOPE" PROCESSOR
.DUSR RPZER =@ 1 ;RELEASE PARTITION ZERO
.DUSR CHKCH =@ 2 ;CHECK CHANNEL
.DUSR ALLCL =@ 3 ;CLEAR ALL CHANNELS
.DUSR FOFC  =@ 4 ;FIND OPEN FILE (CONTINUE)
.DUSR FOFI  =@ 5 ;FIND OPEN FILE (INITIALIZE)
.DUSR LOADU =@ 6 ;LOAD USER'S ACTIVE FILE
.DUSR DISCB =@ 7 ;READ OR WRITE A GROUP OF BLOCKS
.DUSR UNLOC =@10 ;UNLOCK RECORD
.DUSR WONA  =@11 ;WAIT FOR OUTPUT NOT ACTIVE
.DUSR CHKRP =@12 ;CHECK READ PROTECTION
.DUSR CHKWP =@13 ;CHECK WRITE PROTECTION
.DUSR CHKCP =@14 ;CHECK COPY PROTECTION
.DUSR MOVEW =@15 ;MOVE WORDS
.DUSR MOVBY =@16 ;MOVE BYTES
.DUSR CBSA  =@17 ;CHECK "BSA CHANGED" FLAG
.DUSR CRLA  =@20 ;CONVERT REAL TO LOGICAL DISC ADDRESS
.DUSR CLRA  =@21 ;CONVERT LOGICAL TO REAL DISC ADDRESS
.DUSR CPPPN =@22 ;CONVERT PCB POINTER TO PORT NUMBER
.DUSR CPNPP =@23 ;CONVERT PORT NUMBER TO PCB POINTER


.; HEADER BLOCK DISPLACEMENTS (SEE MANAGER MANUAL)

.DUSR NAME = 0  ;FILENAME STRING (7 WORDS)
.DUSR ACNT = 7  ;PRIV LEVEL, ACCOUNT (GROUP, USER)
.DUSR TYPE = 10 ;FILE TYPE AND PROTECTION
.DUSR NBLK = 11 ;NUMBER OF BLOCKS IN FILE (INCL. HEADER)
.DUSR STAT = 12 ;FILE STATUS (SEE MANAGER MANUAL)
.DUSR NITM = 13 ;NUMBER OF ITEMS PER RECORD       \  ALSO
.DUSR LRCD = 14 ;LENGTH OF EACH RECORD (# WORDS)   ) USED
.DUSR NRPB = 15 ;NUMBER OF RECORDS PER BLOCK       )  BY
.DUSR NRCD = 16 ;NUMBER OF RECORDS IN FILE        /  DSP.
.DUSR COST = 17 ;DIMES CHARGED FOR ACCESS TO FILE
.DUSR CHGS = 20 ;TOTAL CHARGES FOR FILE USAGE (2 WORDS)
.DUSR LDAT = 22 ;LAST ACCESS DATE (HOURS, TENTH-SECONDS)
.DUSR CDAT = 24 ;FILE CREATION DATE (HOURS, TENTH-SECONDS)
.DUSR NTAC = 26 ;NUMBER OF TIMES ACCESSED
.DUSR CATR = 27 ;"CATALOG" RECORD NUMBER
.DUSR CLAS = 30 ;CATALOG CLASSIFICATION (2 WORDS)
 ;        32-34   (SPARE)
.DUSR PPRI = 35 ;PROGRAM'S ASSIGNED PRIORITY
.DUSR SNUM = 36 ;SCO NUMBER OF LAST SCO APPLIED
.DUSR ADAT = 37 ;DATE LAST SCO APPLIED (HOURS AFTER 1-1-76)
.DUSR DASA = 40 ;DECIMAL ACCUMULATOR SAVE AREA (10 WORDS)
.DUSR DSPS = 50 ;STORAGE FOR DSP (20 WORDS)
.DUSR FMAP = 70 ;DATA FILE FORMAT MAP (101 WORDS)
.DUSR HTEM =171 ;TEMP CELL USED BY ALLOC, DALLC & ACNTL
                ;IN AFH, PROGRAM'S LU
.DUSR STAD =172 ;START ADDRESS (DRIVER OR STAND-ALONE)
.DUSR ABLK =173 ;NUMBER OF ACTIVE DATA BLOCKS
.DUSR DSAF =174 ;DEFAULT SIZE OF ACTIVE FILE (# BLOCKS)
.DUSR CORA =175 ;CORE ADDRESS OF FIRST DATA BLOCK
.DUSR UNIT =176 ;LOGICAL UNIT NUMBER WHERE FILE RESIDES
.DUSR DHDR =177 ;REAL DISC ADDRESS OF HEADER BLOCK

 ; 200-377 HOLD REAL DISC ADDRESSES OF DATA BLOCKS

 ; CORE ADDRESSES ARE AT 400 WORD STEPS FROM CORA




; DISPLACEMENTS FOR EACH ENTRY IN "ACCOUNTS" FILE

 ;         0-5  ;ACCOUNT ID STRING
.DUSR APR. = 6  ;ASSIGNED PRIORITY
.DUSR ALU. = 7  ;ASSIGNED LOGICAL UNIT
.DUSR ACN. =10  ;ACCOUNT NUMBER (PRIV, GROUP, USER)
.DUSR CMR. =11  ;CONNECT MINUTES REMAINING
.DUSR CSR. =12  ;CPU SECONDS REMAINING
.DUSR MDB. =13  ;MAX. DISC BLOCKS ALLOTTED
.DUSR DBU. =14  ;DISC BLOCKS NOW IN USE
.DUSR PDB. =15  ;PEAK DISC BLOCK USAGE
.DUSR CHG. =16  ;FILE USE CHARGES (FLOATING 2-WORD BCD)
.; AN LOGICAL UNIT TABLE (LUT) ENTRY.

.DUSR .LFX. = 0 ;A(THIS UNIT'S LUFIX TABLE)
.DUSR .LVR. = .LFX.+1 ;A(THIS UNIT'S LUVAR TABLE)
.DUSR .LLU. = .LVR.+1 ;THIS UNIT'S LOGICAL UNIT NUMBER



; LOGICAL UNIT FIXED INFORMATION TABLE (LUFIX)

.DUSR DINT =-24 ;POINTER TO INTERRUPT HANDLER
.DUSR DMSK =-23 ;DISC CONTROLLER'S MASK BIT
.DUSR DSIZ =-22 ;SIZE OF DRIVER (# WORDS)
.DUSR PFRD =-21 ;POWER FAIL RESTART DELAY
.DUSR EMSK =-20 ;"ANY ERROR" STATUS MASK
 ;          -17 ;"WRITE PROTECTED" MASK
 ;          -16 ;"NO SUCH DISC" MASK
 ;          -15 ;"DATA CHANNEL LATE" MASK
 ;          -14 ;"ADDRESS CHECK ERROR" MASK
 ;          -13 ;"ILLEGAL DISC ADDRESS" MASK
.DUSR IDRV =-12 ;"INITIALIZE DRIVER" SUBROUTINE ENTRY
.DUSR SLUR =-11 ;"SKIP IF LU READY" SUBROUTINE ENTRY
.DUSR SKNB =-10 ;"SKIP IF NOT BUSY" SUBROUTINE ENTRY
.DUSR REDS = -7 ;"READ STATUS" SUBROUTINE ENTRY
.DUSR SEEK = -6 ;"SEEK OR RECALIBRATE" SUBROUTINE ENTRY
.DUSR NSCT = -5 ;NUMBER OF SECTORS (BLOCKS PER TRACK)
.DUSR NTRK = -4 ;NUMBER OF TRACKS PER CYLINDER
.DUSR LRTC = -3 ;LOGICAL-TO-REAL TRACK CONVERSION FACTOR
.DUSR LRCC = -2 ;LOGICAL-TO-REAL CYLINDER CONVERSION FACTOR
.DUSR DFLG = -1 ;DISC FLAG WORD (SEE BELOW)
 ;            0 ;READ/WRITE ENTRY TO DRIVER ROUTINE


 ; NOTE:  BITS ARE USED IN DFLG WORD AS FOLLOWS:
 ;  BIT   15,  CHANGEABLE CARTRIDGE FLAG
 ;  BIT   14   FIXED HEAD DISC (USE ALLOC FOR ACTIVE FILE)
 ;  BIT   13   (UNUSED)
 ;  BIT   12,  (UNUSED)
 ;  BIT   11   SKIP SECTOR BETWEEN TRACKS WITHIN CYLINDER
 ;  BIT   10   SAME SECTOR NEXT TRACK \  NEXT BEST BLOCK
 ;  BIT    9,  NEXT SECTOR NEXT TRACK  ) IF DESIRED IS
 ;  BIT    8   NEXT SECTOR SAME TRACK /  NOT AVAILABLE.
 ;  BIT    7   CANNOT TRANSFER SEQUENTIAL SECTORS
 ;  BIT    6,  SECTORS ARE PHYSICALLY SEQUENTIAL
 ;  BITS  5-0  DEVICE ADDRESS
.; LOGICAL UNIT VARIABLE INFORMATION TABLE (LUVAR)

.DUSR NCYL = 0 ;NUMBER OF CYLINDERS
.DUSR PART = 1 ;PARTITIONING INFORMATION
 ;           2 ;PARTITIONING INFORMATION
 ;           3 ;(RESERVED -- DO NOT USE!!)
.DUSR AVBC = 4 ;AVAILABLE BLOCK COUNT (SET BY SIR)
.DUSR MINB = 5 ;MIN. # OF BLOCKS FOR CREATING NEW FILE
 ;         = 6 ;(SPARE)
.DUSR FUDA = 7 ;FIRST UNUSED REAL DISC ADDRESS (SET BY SIR)
.DUSR ERRC =10 ;DATA CHECK ERROR COUNT
 ;          11 ;ADDRESS CHECK ERROR COUNT
 ;          12 ;DATA CHANNEL LATE COUNT


.EOT.; "IRIS" R7.5 SOFTWARE DEFINITIONS
................................................................................................

We also found this file in LU0, at decimal address 122368, in our version with the highest order bit dropped (but we kept the same endianness as the original).



So, what's next after this?  We will update this page as we learn more.


This page is a part of the "Understanding IRIS" collection.  

No comments:

Post a Comment