home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / d / k12ipg.pal < prev    next >
Text File  |  2020-01-01  |  11KB  |  349 lines

  1. /    IPL GENERATING PROGRAM
  2.  
  3. /    LAST EDIT:    08-OCT-1991    12:00:00    CJL
  4.  
  5. /    MUST BE ASSEMBLED WITH '/F' SWITCH SET.
  6.  
  7. /    THIS  IS  A  UTILITY  NAMED  IPLGEN  (AKA  K12IPG) TO CREATE  FIELD0.IPL  (AKA
  8. /    K12FL0.IPL)  AND  FIELD1.IPL (AKA K12FL1.IPL).  THESE FILES ARE IN TURN  MEANT
  9. /    FOR USE WITH THE DIRECT LOADING PROGRAM IPLOAD (AKA K12IPL).  FUTURE  VERSIONS
  10. /    OF K12MIT.SV MAY "GROW" TO USE FIELD TWO, IN WHICH CASE THIS PROGRAM WILL HAVE
  11. /    TO BE CHANGED.
  12.  
  13. /    THIS PROGRAM ALWAYS RESIDES IN THE NEXT FIELD  BEYOND  K12MIT.SV,  AND CREATES
  14. /    FILES FOR ALL FIELDS LOWER THAN ITS LOADING FIELD.   THIS CURRENTLY REQUIRES A
  15. /    12K MACHINE TO ENCODE ALL LOCATIONS 00000-07577 AND 10000-17577.
  16.  
  17. /    USAGE:
  18.  
  19. /    SINCE K12MIT.SV IS A COMPLETE IMAGE FILE, IT MUST BE  LOADED  FIRST  IN  IMAGE
  20. /    MODE, AND THEN OVERLAYED WITH THE BINARY OF THIS ASSEMBLY:
  21.  
  22. /    .PAL IPLGEN<IPLGEN/E/F            ASSEMBLE IPLGEN PROGRAM.
  23.  
  24. /    .LOAD K12MIT.SV/I$*IPLGEN/G=20200    LOAD K12MIT.SV IN IMAGE MODE;  THE $
  25. /                        INDICATES USING <ESC> TO TERMINATE
  26. /                        THE LINE; THEN LOAD IPLGEN AND START.
  27.  
  28. /    THE  FILES  SYS:FIELD0.IP AND SYS:FIELD1.IP WILL BE CREATED  AND  THE  PROGRAM
  29. /    EXITS TO THE KEYBOARD MONITOR.  THE RESULTANT FILES  MAY  BE EDITED AS LONG AS
  30. /    THE  RULES  OF  .IPL FORMAT ENCODING ARE OBEYED (ADDITIONAL LOWER-CASE  LEADER
  31. /    COMMENTS  SHOULD  BE ADDED AT THE BEGINNING, AND UNRESTRICTED COMMENTS AT  THE
  32. /    END).
  33.  
  34. /    ERROR MESSAGES:
  35.  
  36. /    ERROR NUMBER        PROBABLE CAUSE
  37.  
  38. /    5            ERROR WHILE ATTEMPTING TO ENTER OUTPUT FILE.
  39.  
  40. /    6            OUTPUT FILE LARGER THAN AVAILABLE FILE SPACE.
  41.  
  42. /    7            ERROR WHILE CLOSING THE OUTPUT FILE.
  43.  
  44. /    8            I/O ERROR WHILE ENCODING FILE DATA.
  45. /    EQUATED SYMBOLS.
  46.  
  47.     CLOSE=    4            /CLOSE OUTPUT FILE
  48.     DFIELD=    2            /PROGRAM LOADS INTO FIELD TWO (ALSO OUTPUT COUNT)
  49.     DFLD=    DFIELD^10        /PROGRAM FIELD FOR CDF INSTRUCTIONS
  50.     ENTER=    3            /ENTER TENTATIVE FILE
  51.     NL0001=    CLA IAC            /LOAD AC WITH 0001
  52.     NL0002=    CLA CLL CML RTL        /LOAD AC WITH 0002
  53.     NL7777=    CLA CMA            /LOAD AC WITH 7777
  54.     SBOOT=    7600            /MONITOR EXIT
  55.     SYSENTR=7607            /CALL SYS: HANDLER HERE
  56.     USERROR=7            /USER SIGNALLED ERROR
  57.     USRENT=    7700            /USR ENTRY POINT WHEN NON-RESIDENT
  58.     USRFLD=    10            /USR FIELD
  59.     WRITE=    4000            /I/O WRITE BIT
  60.     FIELD    DFIELD            /WHERE WE LOAD
  61.  
  62.     *20                /GET PAST AUTO-INDEX AREA
  63.  
  64. BUFPTR,    .-.                /OUTPUT BUFFER POINTER
  65. DANGCNT,.-.                /DANGER COUNT FOR OUTPUT FILE
  66. FCNT,    -DFIELD                /FIELD, FILE COUNTER
  67. FNAME,    FILENAM    FIELD0.IP        /OUTPUT FILE NAME FIELD
  68. LATEST,    .-.                /LATEST OUTPUT CHARACTER
  69. OUTRECO,.-.                /OUTPUT RECORD
  70. SCRCASE,.-.                /CURRENT MESSAGE CASE
  71. SCRCHAR,.-.                /LATEST MESSAGE CHARACTER
  72. SCRPTR,    .-.                /MESSAGE POINTER
  73. TEMPTR,    .-.                /TEMPORARY OUTPUT POINTER
  74. WRDADR,    .-.                /WORD ADDRESS
  75. WRDCNT,    .-.                /WORD COUNTER
  76.  
  77. DSETUP,    .-.                /DATA FIELD SETUP
  78. DATFLD,    CDF    00+.-.            /WILL BE LATEST DATA FIELD
  79.     JMP I    DSETUP            /RETURN TO CALLER
  80.     PAGE                /START AT THE BEGINNING
  81.  
  82. BEGIN,    NOP                /IN CASE WE'RE CHAINED TO
  83. LOOP,    TAD    (FNAME)            /POINT TO
  84.     DCA    ENTAR1            /STORED FILENAME
  85.     DCA    ENTAR2            /CLEAR SECOND ARGUMENT
  86.     NL0001                /SYS: IS ALWAYS DEVICE ONE
  87.     CDF    DFLD            /INDICATE OUR CALLING FIELD
  88.     CIF    USRFLD            /GOTO USR FIELD
  89.     JMS I    (USRENTRY)        /CALL USR ROUTINE
  90.     ENTER                /ENTER TENTATIVE FILENAME
  91. ENTAR1,    .-.                /WILL POINT TO FILENAME
  92. ENTAR2,    .-.                /WILL BE ZERO
  93.     JMP    ENTERR            /ENTER ERROR
  94.     TAD    ENTAR1            /GET RETURNED FIRST RECORD
  95.     DCA    OUTRECORD        /STORE IT
  96.     TAD    ENTAR2            /GET RETURNED EMPTY LENGTH
  97.     IAC                /ADD 2-1 FOR OS/278 CRAZINESS
  98.     DCA    DANGCNT            /STORE AS DANGER COUNT
  99.     NL7777                /INDICATE INITIALIZATION
  100.     JMS I    [PUTBYTE]        /INITIALIZE OUTPUT FILE
  101.     JMS    LEADER            /OUTPUT LEADER
  102.     JMS I    (DOFLD)            /OUTPUT LATEST FIELD'S DATA
  103.     JMS    TRAILER            /OUTPUT TRAILER
  104.     TAD    ("Z&37)            /GET <^Z>
  105. CLOSLUP,JMS I    [PUTBYTE]        /OUTPUT A BYTE (^Z OR NULL)
  106.     TAD    BUFPTR            /GET THE OUTPUT BUFFER POINTER
  107.     TAD    (-OUTBUFFER)        /COMPARE TO RESET VALUE
  108.     SZA CLA                /SKIP IF IT MATCHES
  109.     JMP    CLOSLUP            /ELSE KEEP GOING
  110.     NL0001                /GET SYS:'S DEVICE NUMBER
  111.     CDF    DFLD            /INDICATE OUR CALLING FIELD
  112.     CIF    USRFLD            /GOTO USR FIELD
  113.     JMS I    (USRENTRY)        /CALL USR ROUTINE
  114.     CLOSE                /CLOSE OUTPUT FILE
  115.     FNAME                /POINTER TO FILENAME
  116. OUTCNT,    .-.                /WILL BE ACTUAL COUNT
  117.     JMP    CLSERR            /CLOSE ERROR
  118.     ISZ    FNAME+2            /BUMP THE FILENAME
  119.     TAD    DATFLD            /GET CURRENT DATA FIELD
  120.     TAD    (10)            /BUMP TO NEXT FIELD
  121.     DCA    DATFLD            /STORE BACK
  122.     ISZ    FCNT            /DONE ALL FIELDS YET?
  123.     JMP    LOOP            /NO, GO DO IT AGAIN
  124.     CIF CDF    00            /YES, GOTO MONITOR FIELD
  125.     JMP I    [SBOOT]            /EXIT TO MONITOR
  126. /    ERROR WHILE OUTPUTTING THE FILE.
  127.  
  128. PROCERR,NL0002                /SET INCREMENT
  129.     SKP                /DON'T USE NEXT
  130.  
  131. /    ERROR WHILE CLOSING THE OUTPUT FILE.
  132.  
  133. CLSERR,    NL0001                /SET INCREMENT
  134.     SKP                /DON'T CLEAR IT
  135.  
  136. /    OUTPUT FILE TOO LARGE ERROR.
  137.  
  138. SIZERR,    CLA                /CLEAN UP
  139.     TAD    (3)            /SET INCREMENT
  140.     SKP                /DON'T USE NEXT
  141.  
  142. /    ENTER ERROR.
  143.  
  144. ENTERR,    NL0002                /SET INCREMENT
  145.     TAD    (3)            /ADD ON OFFSET
  146.     DCA    ERRNUMBER        /STORE ERROR NUMBER
  147.     CDF    DFLD            /ENSURE OUR FIELD
  148.     CIF    USRFLD            /GOTO USR FIELD
  149.     JMS I    (USRENTRY)        /CALL USR ROUTINE
  150.     USERROR                /USER ERROR
  151. ERRNUMB,.-.                /WILL BE PASSED ERROR NUMBER
  152. /    LEADER ROUTINE.
  153.  
  154. LEADER,    .-.                /LEADER ROUTINE
  155.     JMS I    (SCRIBE)        /CALL SCRIBE ROUTINE
  156.     LEADMSG                /FOR LEADER MESSAGE
  157.     TAD    DATFLD            /GET CURRENT FIELD
  158.     RTR;RAR                /MOVE DOWN
  159.     AND    (7)            /JUST FIELD NUMBER
  160.     TAD    (NTABLE)        /POINT TO TABLE ELEMENT
  161.     DCA    MSGPTR            /STASH THE POINTER
  162.     TAD I    MSGPTR            /GET THE MESSAGE ADDRESS
  163.     DCA    MSGPTR            /STORE IN-LINE
  164.     JMS I    (SCRIBE)        /CALL SCRIBE ROUTINE
  165. MSGPTR,    .-.                /WILL POINT TO CORRECT MESSAGE
  166.     JMP I    LEADER            /RETURN
  167.  
  168. /    TRAILER ROUTINE.
  169.  
  170. TRAILER,.-.                /TRAILER ROUTINE
  171.     JMS I    (SCRIBE)        /CALL SCRIBE ROUTINE
  172.     SAVEMSG                /END OF FILE MESSAGE
  173.     JMS    OUTFLD            /OUTPUT FIELD DIGIT
  174.     JMS I    (SCRIBE)        /CALL SCRIBE ROUTINE
  175.     SVMSG                /.SV BRIDIGING MESSAGE
  176.     JMS    OUTFLD            /OUTPUT FIELD DIGIT
  177.     JMS I    (SCRIBE)        /CALL SCRIBE ROUTINE
  178.     SV0MSG                /0000 BRIDGING MESSAGE
  179.     JMS    OUTFLD            /OUTPUT FIELD DIGIT
  180.     JMS I    (SCRIBE)        /CALL SCRIBE ROUTINE
  181.     SVEMSG                /FINISHING MESSAGE
  182.     JMP I    TRAILER            /RETURN
  183.  
  184. OUTFLD,    .-.                /OUTPUT FIELD DIGIT ROUTINE
  185.     TAD    DATFLD            /GET OUTPUT FIELD
  186.     RTR;RAR                /MOVE OVER
  187.     AND    (7)            /JUST FIELD DIGIT
  188.     TAD    ("0&177)        /MAKE IT ASCII
  189.     JMS I    [PUTBYTE]        /OUTPUT IT
  190.     JMP I    OUTFLD            /RETURN
  191.  
  192.     PAGE
  193. DOFLD,    .-.                /DO LATEST FIELD ROUTINE
  194.     DCA    WRDADR            /CLEAR WORD ADDRESS
  195.     TAD    (-7600)            /SETUP THE
  196.     DCA    WRDCNT            /WORD COUNT
  197. WRDLUP,    JMS    DSETUP            /GOTO DATA FIELD
  198.     TAD I    WRDADR            /GET A WORD
  199.     DCA    DSETUP            /SAVE IT
  200.     CDF    DFLD            /BACK TO OUR FIELD
  201.     TAD    DSETUP            /GET THE WORD AGAIN
  202.     RTR;RTR;RTR            /WANT HIGH-ORDER HALF FIRST
  203.     JMS    DOBYTE            /OUTPUT HIGH-ORDER BYTE
  204.     TAD    DSETUP            /GET THE WORD AGAIN
  205.     JMS    DOBYTE            /OUTPUT LOW-ORDER BYTE
  206.     ISZ    WRDADR            /BUMP TO NEXT ADDRESS
  207.     TAD    WRDADR            /GET LATEST ADDRESS
  208.     AND    (37)            /JUST LOW-ORDER BITS
  209.     SNA CLA                /SKIP IF NOT AT GOOD BOUNDARY
  210.     JMS    PUTCRLF            /ELSE OUTPUT LINE BREAK
  211.     ISZ    WRDCNT            /DONE ALL WORD YET?
  212.     JMP    WRDLUP            /NO, KEEP GOING
  213.     JMP I    DOFLD            /YES, RETURN TO CALLER
  214.  
  215. DOBYTE,    .-.                /OUTPUT A SIX-BIT BYTE ROUTINE
  216.     AND    (77)            /JUST SIX BITS
  217.     TAD    (41)            /ADD ON OFFSET TO MAKE IT PRINTABLE
  218.     JMS I    [PUTBYTE]        /OUTPUT IT
  219.     JMP I    DOBYTE            /RETURN
  220. /    <CR>/<LF> ROUTINE.
  221.  
  222. PUTCRLF,.-.                /OUTPUT <CR>/<LF> ROUTINE
  223.     TAD    ("M&37)            /GET A <CR>
  224.     JMS I    [PUTBYTE]        /OUTPUT IT
  225.     TAD    ("J&37)            /GET A <LF>
  226.     JMS I    [PUTBYTE]        /OUTPUT IT
  227.     JMP I    PUTCRLF            /RETURN
  228.  
  229. /    MESSAGE PRINT ROUTINE.
  230.  
  231. SCRIBE,    .-.                /MESSAGE PRINT ROUTINE
  232.     TAD I    SCRIBE            /GET IN-LINE POINTER ARGUMENT
  233.     DCA    SCRPTR            /STASH THE POINTER
  234.     ISZ    SCRIBE            /BUMP PAST ARGUMENT
  235.     TAD    (140)            /INITIALIZE TO
  236.     DCA    SCRCASE            /LOWER-CASE
  237. SCRLUP,    TAD I    SCRPTR            /GET LEFT HALF-WORD
  238.     RTR;RTR;RTR            /MOVE OVER
  239.     JMS    SCRPRNT            /PRINT IT
  240.     TAD I    SCRPTR            /GET RIGHT HALF-WORD
  241.     JMS    SCRPRNT            /PRINT IT
  242.     ISZ    SCRPTR            /BUMP TO NEXT PAIR
  243.     JMP    SCRLUP            /KEEP GOING
  244.  
  245. SCRPRNT,.-.                /CHARACTER PRINT ROUTINE
  246.     AND    (77)            /JUST SIX BITS
  247.     SNA                /END OF MESSAGE?
  248.     JMP I    SCRIBE            /YES, RETURN TO ORIGINAL CALLER
  249.     DCA    SCRCHAR            /NO, SAVE FOR NOW
  250.     TAD    SCRCHAR            /GET IT BACK
  251.     TAD    (-"%!200)        /IS IT "%"?
  252.     SNA                /SKIP IF NOT
  253.     JMP    SCRCRLF            /JUMP IF IT MATCHES
  254.     TAD    (-"^+100+"%)        /IS IT "^"
  255.     SNA CLA                /SKIP IF NOT
  256.     JMP    SCRFLIP            /JUMP IF IT MATCHES
  257.     TAD    SCRCHAR            /GET THE CHARACTER
  258.     AND    (40)            /DOES CASE MATTER?
  259.     SNA CLA                /SKIP IF NOT
  260.     TAD    SCRCASE            /ELSE GET PREVAILING CASE
  261.     TAD    SCRCHAR            /GET THE CHARACTER
  262.         JMS I    [PUTBYTE]        /OUTPUT THE CHARACTER
  263.     JMP I    SCRPRNT            /RETURN
  264.  
  265. SCRCRLF,JMS    PUTCRLF            /OUTPUT <CR>/<LF>
  266.     JMP I    SCRPRNT            /RETURN
  267.  
  268. SCRFLIP,TAD    SCRCASE            /GET CURRENT CASE
  269.     CIA                /INVERT IT
  270.     TAD    (140+100)        /ADD SUM OF POSSIBLE VALUES
  271.     DCA    SCRCASE            /STORE NEW INVERTED CASE
  272.     JMP I    SCRPRNT            /RETURN
  273.     PAGE
  274. PUTBYTE,.-.                /OUTPUT A BYTE ROUTINE
  275.     SPA                /ARE WE INITIALIZING?
  276.     JMP    PUTINITIALIZE        /YES
  277.     AND    (177)            /JUST IN CASE
  278.     DCA    LATEST            /SAVE LATEST CHARACTER
  279.     TAD    LATEST            /GET LATEST CHARACTER
  280.     JMP I    PUTNEXT            /GO WHERE YOU SHOULD GO
  281.  
  282. PUTNEXT,.-.                /EXIT ROUTINE
  283.     JMP I    PUTBYTE            /RETURN TO MAIN CALLER
  284.  
  285. PUTINIT,CLA                /CLEAN UP
  286.     TAD    OUTRECORD        /GET STARTING RECORD OF TENTATIVE FILE
  287.     DCA    PUTRECORD        /STORE IN-LINE
  288.     DCA I    (OUTCNT)        /CLEAR ACTUAL FILE LENGTH
  289. PUTNEWR,TAD    (OUTBUFFER)        /SETUP THE
  290.     DCA    BUFPTR            /BUFFER POINTER
  291. PUTLOOP,JMS    PUTNEXT            /GET A CHARACTER
  292.     DCA I    BUFPTR            /STORE IT
  293.     TAD    BUFPTR            /GET POINTER VALUE
  294.     DCA    TEMPTR            /SAVE FOR LATER
  295.     ISZ    BUFPTR            /BUMP TO NEXT
  296.     JMS    PUTNEXT            /GET A CHARACTER
  297.     DCA I    BUFPTR            /STORE IT
  298.     JMS    PUTNEXT            /GET A CHARACTER
  299.     RTL;RTL                /MOVE UP
  300.     AND    (7400)            /ISOLATE HIGH NYBBLE
  301.     TAD I    TEMPTR            /ADD ON FIRST BYTE
  302.     DCA I    TEMPTR            /STORE COMPOSITE
  303.     TAD    LATEST            /GET LATEST CHARACTER
  304.     RTR;RTR;RAR            /MOVE UP AND
  305.     AND    (7400)            /ISOLATE LOW NYBBLE
  306.     TAD I    BUFPTR            /ADD ON SECOND BYTE
  307.     DCA I    BUFPTR            /STORE COMPOSITE
  308.     ISZ    BUFPTR            /BUMP TO NEXT
  309.     TAD    BUFPTR            /GET LATEST POINTER VALUE
  310.     TAD    (-2^200-OUTBUFFER)    /COMPARE TO LIMIT
  311.     SZA CLA                /SKIP IF AT END
  312.     JMP    PUTLOOP            /KEEP GOING
  313.     ISZ    DANGCNT            /TOO MANY RECORDS?
  314.     SKP                /SKIP IF NOT
  315.     JMP I    (SIZERR)        /JUMP IF SO
  316.     CDF    DFLD            /SET OUR FIELD
  317.     CIF    00            /GOING TO SYSTEM FIELD
  318.     JMS I    (SYSENTRY)        /CALL I/O HANDLER
  319.     2^100+DFLD+WRITE        /WRITE SOME PAGES FROM OUTPUT BUFFER
  320.     OUTBUFFER            /BUFFER ADDRESS
  321. PUTRECO,.-.                /WILL BE LATEST RECORD NUMBER
  322.     JMP I    (PROCERR)        /OUTPUT ERROR!
  323.     ISZ I    (OUTCNT)        /BUMP ACTUAL LENGTH
  324.     ISZ    PUTRECORD        /BUMP TO NEXT RECORD
  325.     JMP    PUTNEWRECORD        /KEEP GOING
  326.     PAGE
  327. /    TEXT MESSAGES.
  328.  
  329. LEADMSG,TEXT    "LEADER FOR DIRECT LOAD FILE WHICH MUST BE IN LOWER CASE%"
  330.     TEXT    "%FILE CONTAINS KERMIT DATA IN IPL ENCODED FORMAT%%"
  331.     TEXT    "THIS FILE CONTAINS DATA FOR FIELD"
  332. ONEMSG,    TEXT    " ONE%%^"
  333. SAVEMSG,TEXT    "END OF DATA%%^A^FTER THE PROGRAM EXITS BACK TO THE MONITOR, "
  334.     TEXT    "YOU SHOULD SAVE THE DATA WITH:%%.^SAVE SYS FIELD^"
  335. SVMSG,    TEXT    ".^SV "
  336. SV0MSG,    TEXT    "0000-"
  337. SVEMSG,    TEXT    "7577=0%"
  338. ZEROMSG,TEXT    " ZERO%%"
  339. /    DIGIT MESSAGE POINTER TABLE.
  340.  
  341. NTABLE,    ZEROMSG                /POINTER TO ZERO MESSAGE
  342.     ONEMSG                /POINTER TO ONE MESSAGE
  343.  
  344.     PAGE                /GET TO A GOOD BOUNDARY
  345.  
  346.     OUTBUFF=.            /OUTPUT BUFFER HERE
  347.  
  348.     $                /THAT'S ALL FOLK!
  349.