;DF.BLK = 0 .MACRO E.VEN,?L1,?L2 .IF DF DF.BLK .EMIT <.EVEN> .IFF L1: .EVEN L2: .=L1 .IIF NE .EMIT <.BYTE 0> .ENDC .ENDM E.VEN .MACRO B.LKW REPT=1 .IF DF DF.BLK .EMIT <.BLKW REPT> .IFF .REPT REPT .EMIT <.WORD 0> .ENDR .ENDC .ENDM B.LKW .MACRO B.LKB REPT=1 .IF DF DF.BLK .EMIT <.BLKB REPT> .IFF .REPT REPT .EMIT <.BYTE 0> .ENDR .ENDC .ENDM B.LKB .MACRO Stack C D E F G H I J MAVAL.=0 .IRP MANAM., SP.'MANAM.=MAVAL. MAVAL.=MAVAL.+^O<2> .ENDR .ENDM Stack ; ; Low memory syscom variables ; ;SY.DEV =: ^O<40> ; .BYTE = system device unit number ;SY.COD =: ^O<41> ; .BYTE = LMD - low media code ;SY.EXI =: ^O<42> ; .WORD = batch diagnostic managed exit path ;$JSW =: ^O<52> ; .WORD job status word ; SCMAN$ =: ^O<1> ; Manual control flag (SMI/CMI) ; ;SCXMA$ =: ^O<10000> ; XM-monitor app (XXDP V2) ; ; EN.DAT - XXDP/DOSbatch date ; ; DATE = (YEAR*1000.) + day-in-year ;ENDAT$ =: ^O<077777> ; date field mask ;ENCTG$ =: ^O<100000> ; contiguous file flag ; ; XXDP disk structure ; ; ; HOMBLK - XXDP MFD block ; ;HBBLK. =: ^O<1> ; block 1 (for DL:) ;HBBAS. =: ^O<1000> ; disk byte address ;HB.NXT =: ^O<0> ;0 ; next block (always zero) ;HB.UFD =: ^O<2> ; ; first UFD directory block ;HB.DBC =: ^O<4> ; ; directory block count ;HB.MAP =: ^O<6> ; ; first map block ;HB.MBC =: ^O<10> ; ; map block count ;HB.MFD =: ^O<12> ; ; MFD block (self-reference to block 1) ;HB.VER =: ^O<14> ; ; XXDP version (never seen used) ; DBXV2. =: ^O<1002> ;0 ; XXDP V2 version code ;HB.TOT =: ^O<16> ; ; total blocks ;HB.RES =: ^O<20> ; ; reserved blocks ;HB.INT =: ^O<22> ; ; interleave factor ;HB.BOO =: ^O<24> ;0 ; boot block ;HB.MON =: ^O<26> ;30 ; monitor block ;HB.REF =: ^O<30> ; ; MFD refreshed flag (not-0 = yes) ;HBBBS. =: ^O<30> ; block size ; ; MFD (variety 2) block ; ;MF.UFD =: ^O<2> ; First UFD block ;MF.MON =: ^O<26> ; First block of monitor core image ;H2.UFD =: ^O<0> ; First UFD directory block ;H2.DBC =: ^O<2> ; Directory block count ;H2.MAP =: ^O<4> ; First map block ;H2.MBC =: ^O<6> ; Map block count ;H2.MFD =: ^O<10> ; MFD block (self-reference to block 1) ;H2.VER =: ^O<12> ; XXDP version (never seen used) ; DBXV2. =: ^O<1002> ; XXDP V2 version code ;H2.TOT =: ^O<14> ; Total blocks ;H2.RES =: ^O<16> ; Reserved blocks ;H2.INT =: ^O<20> ; Interleave factor ;H2.BOO =: ^O<22> ; Boot block ;H2.MON =: ^O<24> ; Monitor block ;H2.REF =: ^O<26> ; ; MFD refreshed flag (not-0 = yes) ; ; Directory entry ; EN.FIL =: ^O<0> ;fil ; rad50 filename (0=>deleted) EN.NAM =: ^O<2> ;nam ; EN.TYP =: ^O<4> ;typ ; EN.DAT =: ^O<6> ; ; file date and contiguous flag EN.ACT =: ^O<10> ; ; ACT-11 use only, logical end. Not used in XXDP EN.STA =: ^O<12> ; ; start block EN.LEN =: ^O<14> ; ; length in blocks EN.LST =: ^O<16> ; ; last block in use EN.FLG =: ^O<20> ; ; flags (ACT-11 use only, logical 52. Not used in XXDP ??) EN.BBS =: ^O<22> ;18. ; UFDFLC =: ^D<510/EN.BBS> ; File entries count on UFD block ;DFNLEN =: ^D<9> ; Filename Size (without point) ; ; XXDP tape structure ; ; RK05 device structure ; Registers DKCSR. =: ^O<177404> ; csr DK.STS =: ^O<-4> ; drive status register ; ; Status ; DK.RDY =: ^O<100> DK.ERR =: ^O<-2> ; error register DK.CSR =: ^O<0> ; control status register ; ; CSR definitions ; DKERR$ =: ^O<100000> ; Error DKHER$ =: ^O<40000> ; Hard error DKRDY$ =: ^O<200> ; Operation complete ("drive ready") DKWL. =: ^O<7*2> ; 16 ; Write Lock DKDRS. =: ^O<6*2> ; 14 ; Drive Reset DKRDC. =: ^O<5*2> ; 12 ; Read Check DKSIK. =: ^O<4*2> ; 10 ; Seek DKWRC. =: ^O<3*2> ; 06 ; Write Check DKRID. =: ^O<2*2> ; 04 ; Read DKWRT. =: ^O<1*2> ; 02 ; Write DKRST. =: ^O<0*2> ; 00 ; Controller Reset DKGO$ =: ^O<1> ; Go DK.WC =: ^O<2> ; word count (negative, increment until 0) DK.BUF =: ^O<4> ; current bus address register DK.DA =: ^O<6> ; disk address register ; ; Disk Addr ; DKSECC =: ^D<12> ; Sectors on track DKSEC. =: ^O<17> ; sector address bits (3..0) DKHID. =: ^O<20> ; head (4) DKCYL. =: ^O<40> ; cylinder (n*DKCYL.) (12..5) DKDN. =: ^C<^O<160000>> ; disk No (mask) (15..13) ; ; TA-11 cassette ; ; Registers TACSR. =: ^O<177500> TAERR$ =: ^O<100000> ; Error TACRC$ =: ^O< 40000> ; Block check. CRC error for READ and SFB TALOT$ =: ^O< 20000> ; BOT or EOT leader TAWLK$ =: ^O< 10000> ; Write lock TAGAP$ =: ^O< 4000> ; File GAP. Set ERROR only on READ and SFB TATIM$ =: ^O< 2000> ; Timing error - program's response to TRANSFER REQUEST was not quick enough TAOFL$ =: ^O< 1000> ; Selected cassette not present or no power in the cassette trasnport TAUSL$ =: ^O< 400> ; Unit select - 0 or 1 TATRQ$ =: ^O< 200> ; Transfer request TAINT$ =: ^O< 100> ; Interrupt enabled TARDY$ =: ^O< 40> ; Ready to accept and execute command TAILB$ =: ^O< 20> ; Initiate last byte sequence - used to termninate ; WRITE command - write CRC ; READ command - read and check CRC ; For N byte block - ILBS is set ont response to n+1 TRANSFER REQUEST TARWD. =: ^O<7*2> ; 1110 16 ; Rewind TASFB. =: ^O<6*2> ; 1100 14 ; Space forward block TASFF. =: ^O<5*2> ; 1010 12 ; Space forward file TASRB. =: ^O<4*2> ; 1000 10 ; Space reverse block TASRF. =: ^O<3*2> ; 0110 06 ; Space reverse file TARID. =: ^O<2*2> ; 0100 04 ; Read TAWRT. =: ^O<1*2> ; 0010 02 ; Write TAWFG. =: ^O<0*2> ; 0000 00 ; Write File GAP TAGO$ =: ^O<1> ; Go TA.DB =: ^O<2> ; low byte ; ; TC-11 DECTape ; TCST =: ^O<177340> TCEZ$ =: ^O<100000> ; 15 - End Zone TCPE$ =: ^O< 40000> ; 14 - Parity error TCMTE$ =: ^O< 20000> ; 13 - Mark track error TCBME$ =: ^O< 2000> ; 10 - Block missed error TCDME$ =: ^O< 1000> ; 10 - Data missed error TCCM =: ^O<177342> TCERR$ =: ^O<100000> ; 15 Error CM.REV =: ^O<4000> ; 11 Direction of type motion TCRDY$ =: ^O<200> ; 07 Ready TCIE$ =: ^O<100> ; 06 Interrupt enabled TCMSK$ =: ^O<7*2> ; command mask TCWAL$ =: ^O<7*2> ; 321 Write all TCWDA$ =: ^O<6*2> ; 321 Write data TCWRT$ =: ^O<5*2> ; 321 Writing timing and mark track TCSST$ =: ^O<4*2> ; 321 Stop selected transoprt TCRAL$ =: ^O<3*2> ; 321 Read all TCRDA$ =: ^O<2*2> ; 321 Read data TCRNU$ =: ^O<1*2> ; 321 Read block number TCSAT$ =: ^O<0*2> ; 321 Stop all transports TCDO$ =: ^O<1> ; Go TCWC =: ^O<177344> TCBA =: ^O<177346> TCDT =: ^O<177350>