home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / extra / mac80.mac < prev    next >
Text File  |  2020-01-01  |  8KB  |  412 lines

  1. ;MAC80 - An 8085 cross assembler for the DECsystem-10
  2.  
  3. ;    Copyright 1976,1977,1978,1983
  4. ;    Bruce Tanner / Cerritos College
  5. ;    11110 Alondra Blvd.
  6. ;    Norwalk, CA 90650
  7.  
  8.  
  9.     SEARCH M80UNV,JOBDAT,MACTEN
  10.     TITLE.    (M80,MAC80,8085 Cross Assembler)
  11.     M80TTL
  12.     M80137
  13.  
  14.     SUBTTL    COMMAND SCANNER
  15.  
  16.     TWOSEG
  17.     RELOC    400000
  18.  
  19. MAC80:    TDZA    F,F        ;CLEAR FLAGS
  20.     MOVSI    F,FL.CCL    ;CCL ENTRY
  21.     SETZM    SVJBFF        ;ZERO AT START
  22. START::    RESET            ;RESET ALL I/O
  23.     MOVE    P,PDP        ;SET UP PDL
  24.     SKIPE    T1,SVJBFF    ;1ST TIME THRU?
  25.     JRST    .+4        ;NO--RESET .JBFF
  26.     MOVE    T1,.JBFF    ;YES--GET .JBFF
  27.     MOVEM    T1,SVJBFF    ;AND SAVE IT
  28.     JRST    .+4        ;AND SKIP THE CORE CONTRACTION
  29.     MOVEM    T1,.JBFF    ;RESET FIRST FREE
  30.     CORE    T1,        ;SHRINK CORE BACK DOWN
  31.       JRST    CORERR        ;IMPROBABLE
  32.     SETZB    P2,LOOKIT    ;TEMP (P2) & 1ST LOC OF TEMP STORAGE
  33.     MOVE    T1,[FILNAM,,FILNAM+1]    ;REST OF TEMP STORAGE
  34.     BLT    T1,ENDLOW    ;BBLLLIIIITTTTT!
  35.     SETZM    SYMTAB##    ;START OF STORAGE
  36.     MOVE    T1,[SYMTAB,,SYMTAB+1]
  37.     BLT    T1,ENDHGH##    ;BLIT
  38.     MOVE    P1,[POINT 6,P2]    ;TEMP POINTER
  39.     TLNE    F,FL.CCL    ;CCL INPUT?
  40.     JRST    CCLIN        ;YES
  41. STAR:    OUTSTR    ASTER        ;HERE IF TTY INPUT
  42.     PUSHJ    P,INCH        ;GET CHAR
  43.     CAIL    I,40        ;SPECIAL CHAR?
  44.     JRST    LOOP1        ;NO--PROCESS
  45.     CAIN    I,"Z"-100    ;TTY EOF?
  46.     EXIT    1,        ;YES
  47.     CLRBFI            ;CLEAR BUFFER
  48.     JRST    STAR        ;& TRY AGAIN
  49. INITMP:    SETZ    P2,        ;CLEAR P2
  50.     MOVE    P1,[POINT 6,P2]    ;RESTORE BYTE POINTER
  51.  
  52. LOOP:    PUSHJ    P,INCH        ;GET CHARACTER FROM WHEREVER
  53.     JUMPE    I,XIT        ;NULL--END OF THE LINE.
  54. LOOP1:    CAIN    I,40        ;SPACE?
  55.     JRST    LOOP        ;YES, IGNORE
  56.     CAIN    I,":"
  57.     JRST    LOADEV        ;IF COLON-LOAD THE DEVICE
  58.     CAIE    I,"="
  59.     CAIN    I,"_"
  60.     JRST    BACK        ;IF _ OR = STORE REL OR LIST FILE NAME
  61.     CAIN    I,","
  62.     JRST    LODRL1        ;IF , STORE REL FILE NAME
  63.     CAIN    I,"!"
  64.     JRST    RUNAME        ;IF ! RUN THE PROGRAM
  65.     CAIN    I,"."
  66.     JRST    LODFIL        ;IF . LOAD THE FILE NAME
  67.     CAIN    I,"["
  68.     JRST    LODPPN        ;IF [ STORE EXT & PROCESS PPN
  69.     CAIE    I,")"
  70.     CAIN    I,"]"
  71.     JRST    LOOP        ;IGNORE ]
  72.     CAIGE    I,40
  73.     JRST    DONE        ;IF BREAK, WE'RE DONE
  74.     CAIE    I,"("
  75.     CAIN    I,"/"
  76.     JRST    SWITCH        ;IF A SWITCH, SAVE IT
  77.     SUBI    I,40        ;CONVERT TO SIXBIT
  78.     TLNE    P1,770000    ;> 6 CHAR?
  79.     IDPB    I,P1        ;NO STUFF
  80.     JRST    LOOP        ;LOOP
  81.  
  82. LOADEV:    SKIPE    DEVICE        ;IF DEVICE ALREADY FULL
  83.     JRST    TWODEV        ;HOLLER
  84.     MOVEM    P2,DEVICE    ;STORE DEVICE
  85.     JRST    INITMP        ;INIT TEMP & LOOP
  86.  
  87. LODFIL:    SKIPE    FILNAM        ;FILE NAME ALREADY THERE?
  88.     JRST    TWOFIL        ;YES
  89.     MOVEM    P2,FILNAM    ;STORE FILE NAME
  90.     JRST    INITMP        ;& LOOP
  91.  
  92. SWITCH:    PUSHJ    P,INCH        ;GET THE SWITCH
  93.     CAILE    I,140        ;LC?
  94.     SUBI    I,40        ;FORCE UPPER CASE SWITCH
  95.     CAIN    I,"C"        ;CREF?
  96.      JRST    [SETOM    CREFSW        ;YES
  97.         TRO    F,FR.LST    ;CREF IMPLIES LIST
  98.         JRST    LOOP]
  99.     CAIN    I,"S"        ;SYMBOLS?
  100.     SETOM    SYMBSW        ;YES
  101.     JRST    LOOP
  102.  
  103. BACK:    TRNN    F,FR.LST    ;IF LISTING,
  104.     JRST    LODRL1+1    ;LOAD REL FILE
  105.     SKIPN    T1,FILNAM    ;SKIP & LOAD IF FILE NAME THERE
  106.     MOVE    T1,P2        ;ELSE LOAD TEMP
  107.     MOVEM    T1,LSTNAM    ;LOAD LIST FILE NAME
  108.     SETZM    FILNAM        ;CLEAR OLD FILE NAME
  109.     CAME    P2,LSTNAM    ;DID WE LOAD TEMP ALREADY?
  110.     MOVEM    P2,LSTEXT    ;NO-TEMP CONTAINS LST EXT.
  111.     MOVE    T1,DEVICE    ;LOAD THE DEVICE
  112.     MOVEM    T1,LSTDEV    ;TRANSFER
  113.     SETZM    DEVICE        ;AND CLEAR DEVICE
  114.     JRST    INITMP        ;LOOP
  115.  
  116. LODRL1:    TRO    F,FR.LST    ;COMMA INPLIES LIST FILE
  117.     SKIPN    T1,FILNAM    ;SKIP & LOAD IF FILE NAME THERE
  118.     MOVE    T1,P2        ;ELSE LOAD TEMP
  119.     MOVEM    T1,RELNAM    ;LOAD RELFILE NAME
  120.     SETZM    FILNAM        ;CLEAR FILE NAME
  121.     CAME    P2,RELNAM    ;DID WE LOAD TEMP?
  122.     MOVEM    P2,RELEXT    ;NO-LOAD RELFILE EXT.
  123.     SKIPN    T1,DEVICE
  124.     MOVE    T1,[SIXBIT/DSK/]
  125.     MOVEM    T1,OBJDEV
  126.     SETZM    DEVICE
  127.     JRST    INITMP        ;LOOP
  128.  
  129. LODPPN:    SETZ    T1,
  130.     SKIPE    PPN
  131.     JRST    TWOPPN
  132.     PUSHJ    P,GETOCT
  133.     CAIE    I,","
  134.     JRST    ILLDEL
  135.     HRLZM    T1,PPN
  136.     SETZ    T1,
  137.     PUSHJ    P,GETOCT
  138.     HRRM    T1,PPN
  139.     JRST    LOOP1
  140.  
  141. DONE:    PUSHJ    P,INCH
  142.     CAIN    I,CR
  143.     PUSHJ    P,INCH
  144.     SKIPN    T1,DEVICE    ;IF DEVICE IS OMITTED...
  145.     HRLZI    T1,'DSK'    ;... "DSK" IS ASSUMED
  146.     MOVEM    T1,DEVICE    ;STORE THE DEVICE
  147.     SKIPE    FILNAM        ;IF THERE IS A FILE NAME
  148.     JRST    TSTEXT        ;SEE IF THERE IS AN EXTENSION
  149.     SKIPN    T1,P2        ;IS THERE SOMETHING IN TEMP?
  150.     JRST    START        ;NO - BAD SYNTAX
  151.     MOVEM    T1,FILNAM    ;MOVE WHATEVER
  152.     JRST    DO.IO        ;AND START DOING THE I/O
  153. TSTEXT:    SKIPN    FILEXT        ;ALREADY FILE EXTENSION?
  154.     HLLZM    P2,FILEXT    ;NO--STORE TEMP
  155. DO.IO:    MOVEI    T1,0        ;ASCII
  156.     SETZ    T4,
  157.     MOVE    T2,DEVICE    ;INPUT DEVICE
  158.     HRRZI    T3,IBUF
  159.     OPEN    SRC,T1
  160.       JRST    NODEV
  161.     MOVEI    T1,0        ;ASCII
  162.     SETZ    T4,
  163.     MOVE    T2,DEVICE    ;INPUT DEVICE
  164.     HRRZI    T3,MBUF
  165.     OPEN    LIB,T1
  166.       JRST    NODEV
  167. RELOOK:    MOVE    T1,FILNAM
  168.     MOVE    T2,FILEXT
  169.     SETZ    T3,
  170.     MOVE    T4,PPN
  171.     LOOKUP    SRC,T1
  172.       JRST    NOFILE
  173.     TRNN    F,FR.LST    ;NEED A LIST FILE?
  174.     JRST    NOLST        ;NO
  175.     SETZ    T1,
  176.     SKIPN    T2,LSTDEV
  177.     MOVSI    T2,'DSK'
  178.     HRLZI    T3,LBUF
  179.     OPEN    LST,T1
  180.       JRST    NODEV
  181.     SKIPN    T1,LSTNAM
  182.     MOVE    T1,FILNAM
  183.     SKIPN    T2,LSTEXT
  184.     MOVSI    T2,'LST'
  185.     SETZB    T3,T4
  186.     ENTER    LST,T1        ;MAKE THE LISTFILE
  187.       JRST    ENTERR
  188. NOLST:    SKIPN    SYMBSW        ;IF NO SYMBOL FILE
  189.     JRST    NOSYM        ;SKIP THIS
  190.     SETZ    T1,
  191.     SKIPN    T2,SYMDEV
  192.     MOVSI    T2,'DSK'
  193.     HRLZI    T3,SBUF
  194.     OPEN    SYM,T1
  195.       JRST    NODEV
  196.     SKIPN    T1,SYMNAM
  197.     MOVE    T1,FILNAM
  198.     SKIPN    T2,SYMEXT
  199.     MOVSI    T2,'SYM'
  200.     SETZB    T3,T4
  201.     ENTER    SYM,T1        ;MAKE THE SYMBOL FILE
  202.       JRST    ENTERR
  203. NOSYM:    TLNN    F,FL.CCL
  204.     JRST    MAC80A##
  205.     OUTSTR    [ASCIZ/MAC80:    /]
  206.     MOVE    T1,FILNAM    ;GET THE FILENAME
  207.     PUSHJ    P,TYPE        ;TYPE IT
  208.     OUTSTR    [ASCIZ/
  209. /]
  210.     SETZ    P2,
  211.     MOVEM    P3,TMPPTR    ;SAVE TMPCOR BUFFER POINTER
  212.     JRST    MAC80A
  213.  
  214. GETOCT:    PUSHJ    P,INCH
  215.     CAIN    I,40
  216.     JRST    GETOCT
  217.     CAIG    I,"7"
  218.     CAIGE    I,"0"
  219.     POPJ    P,
  220.     IMULI    T1,10
  221.     ADDI    T1,-60(I)
  222.     JRST    GETOCT
  223. OPNOBJ::PUSH    P,T2
  224.     PUSH    P,T3
  225.     PUSH    P,T4
  226.     SETZ    T4,
  227.     SKIPN    T2,OBJDEV    ;DEVICE
  228.     MOVSI    T2,'DSK'
  229.     MOVSI    T3,OBUF
  230.     OPEN    OBJ,T1
  231.       JRST    NODEV
  232.     SKIPN    T1,RELNAM
  233.     MOVE    T1,FILNAM
  234.     SKIPN    T2,RELEXT
  235.     MOVSI    T2,'HEX'
  236.     SETZB    T3,T4
  237.     ENTER    OBJ,T1
  238.       JRST    ENTERR
  239.     POP    P,T4
  240.     POP    P,T3
  241.     POP    P,T2
  242.     POPJ    P,
  243.  
  244. RUNAME:    PUSHJ    P,INCH
  245.     CAIN    I,15
  246.     PUSHJ    P,INCH
  247.     MOVEI    T1,T2
  248.     HRLI    T1,1
  249.     SKIPN    T2,DEVICE
  250.     MOVSI    T2,'SYS'
  251.     MOVE    T3,P2
  252.     SETZB    T4,T4+1
  253.     SETZB    T4+2,T4+3
  254.     RUN    T1,
  255.     HALT
  256.  
  257. INCH:    TLNN    F,FL.CCL    ;CCL INPUT?
  258.     JRST    .+3        ;NO, SKIP
  259.     ILDB    I,P3        ;GET TMPCOR CHAR
  260.     JRST    .+2        ;JUST IN CASE...
  261.     INCHWL    I        ;GET TTY CHAR.
  262.     CAIL    I,140        ;IF LOWER CASE,
  263.     SUBI    I,40        ;CONVERT TO UPPER CASE
  264.     POPJ    P,        ;RETURN
  265.  
  266. TYPE:    MOVE    T2,[POINT 6,T1]
  267.     TLNN    T2,770000
  268.     POPJ    P,
  269.     ILDB    T3,T2
  270.     JUMPE    T3,.-2
  271.     ADDI    T3,40
  272.     OUTCHR    T3
  273.     JRST    TYPE+1
  274.  
  275. NODEV:    MOVE    T1,T2
  276.     OUTSTR    [ASCIZ/Cannot OPEN device /]
  277.     PUSHJ    P,TYPE
  278.     OUTSTR    [BYTE (7) 15,12,0,0,0]
  279.     JRST    START
  280.  
  281. ENTERR:    OUTSTR    [ASCIZ/ENTER error for file /]
  282.     PUSH    P,T2
  283.     PUSHJ    P,TYPE
  284.     POP    P,T2
  285.     HLRZ    T1,T2
  286.     JUMPE    T1,.+3
  287.     OUTCHR    ["."]
  288.     PUSHJ    P,TYPE
  289.     OUTSTR    [BYTE (7) 15,12,0]
  290.     JRST    START
  291.  
  292. NOFILE::SKIPE    FILEXT
  293.     JRST    .+4
  294.     MOVSI    T1,'M80'
  295.     MOVEM    T1,FILEXT
  296.     JRST    RELOOK
  297.     MOVE    T1,FILNAM
  298.     OUTSTR    [ASCIZ/No such file /]
  299.     PUSHJ    P,TYPE
  300.     MOVE    T1,FILEXT
  301.     JUMPE    T1,.+3
  302.     OUTCHR    ["."]
  303.     PUSHJ    P,TYPE
  304.     OUTSTR    [BYTE (7) 15,12,0,0,0]
  305.     JRST    START
  306. TWODEV:    OUTSTR    [ASCIZ/Two devices
  307. /]
  308.     JRST    CSTART
  309.  
  310. TWOFIL:    OUTSTR    [ASCIZ/Two file names
  311. /]
  312.     JRST    CSTART
  313.  
  314. TWOPPN:    OUTSTR    [ASCIZ/Two PPNs
  315. /]
  316.     JRST    CSTART
  317.  
  318. ILLDEL:    OUTSTR    [ASCIZ/Illegal delimiter in PPN
  319. /]
  320.  
  321. CSTART:    TLNN    F,FL.CCL    ;CCL INPUT?
  322.     CLRBFI            ;SHOULDN'T BE
  323.     JRST    START        ;RESTART SCAN
  324.  
  325. CORERR:    OUTSTR    [ASCIZ/?Cannot shrink core
  326. /]
  327.     JRST    CSTART
  328.  
  329. ASTER:    ASCIZ /
  330. */
  331.  
  332. XIT:    EXIT    1,        ;EXIT GRACEFULLY
  333.     EXIT            ;NO SO GRACEFULLY
  334. CCLIN:    SKIPE    P3,TMPPTR    ;WAS THERE A TMPCOR BUFFER POINTER?
  335.     JRST    INITMP        ;YES--LOADED & GONE
  336.     MOVE    T1,[2,,TMPBLK]    ;NO, GET TMPCOR FILE (1 IS READ)
  337.     TMPCOR    T1,
  338.     PUSHJ    P,NOTEMP
  339.     MOVE    P3,[POINT 7,TBUF]
  340.     JRST    INITMP
  341.  
  342. NOTEMP:    MOVEI    T1,17        ;NO TMPCOR--TRY DISK
  343.     MOVSI    T2,'DSK'
  344.     SETZB    T3,T4
  345.     OPEN    TMPC,T1        ;OPEN DISK
  346.       JRST    NODEV
  347.     PJOB    T1,        ;GET JOB NUMBER
  348.     SETZ    T3,
  349.     IDIVI    T1,12        ;AND CONVERT
  350.     TRO    T2,20        ;TO TMPDISK FILE NAME
  351.     LSHC    T2,-6        ;BY THE TRIED & TRUE METHOD
  352.     TLNN    T3,77
  353.     JRST    .-4
  354.     MOVE    T1,T3
  355.     HRRI    T1,'MAC'
  356.     MOVSI    T2,'TMP'    ;NNNMAC.TMP
  357.     SETZB    T3,T4
  358.     LOOKUP    TMPC,T1        ;LOOKUP
  359.       JRST    MAC80        ;NO CCL FILE, ASSUME TTY INPUT
  360.     INPUT    TMPC,TMPBLK+1    ;PUT INTO TMPCOR BUFFER
  361.     SETZ    T1,
  362.     RENAME    TMPC,T1        ;DELETE TMPDSK FILE
  363.      OUTSTR    NOREN        ;FAILURE
  364.     RELEAS    TMPC,
  365.     POPJ    P,        ;BACK
  366.  
  367.  
  368. NOREN:    ASCIZ/Cannot delete temp disk file
  369. /
  370.  
  371. PDP:    IOWD 100,PDL
  372.  
  373. TMPBLK:    SIXBIT    /MAC/
  374.     IOWD 30,TBUF
  375.     0
  376.  
  377.     XLIST
  378.     LIT
  379.     LIST
  380.     RELOC    0
  381.  
  382. TBUF:    BLOCK 30    ;DONT CLEAR TMPCOR BUFFER
  383. TMPPTR:    BLOCK 1        ;HOLDS TMPCOR BYTE POINTER
  384. SVJBFF:    BLOCK 1        ;SAVE .JBFF
  385.             ;CLEAR REST OF TABLE SPACE
  386. LOOKIT:
  387. FILNAM::BLOCK 1
  388. FILEXT::BLOCK 1
  389.     BLOCK 1
  390. PPN::    BLOCK 1
  391. OBJDEV::BLOCK 1
  392. RELNAM:    BLOCK 1
  393. RELEXT:    BLOCK 1
  394. LSTNAM:    BLOCK 1
  395. LSTEXT:    BLOCK 1
  396. SYMNAM:    BLOCK 1
  397. SYMEXT:    BLOCK 1
  398. DEVICE:    BLOCK 1
  399. LSTDEV:    BLOCK 1
  400. SYMDEV:    BLOCK 1
  401. PDL:    BLOCK 40    ;PDL STORAGE
  402. IBUF::    BLOCK 3
  403. OBUF::    BLOCK 3        ;BUFFER HEADERS
  404. LBUF::    BLOCK 3        ;LISTING FILE
  405. SBUF::    BLOCK 3        ;SYMBOL FILE
  406. MBUF::    BLOCK 3        ;MACLIB
  407. CREFSW::BLOCK 1        ;NON-ZERO IF CROSS REFERENCE LISTING REQUESTED
  408. SYMBSW::BLOCK 1        ;NON-ZERO IF SYMBOL TABLE DUMP REQUESTED
  409. ENDLOW:    BLOCK 1        ;TOP OF STORAGE
  410.  
  411.     END    MAC80