


                       * IPL VERSION 0.2 - JULY 2 2008                                   PAGE  0001  


  00001                * IPL VERSION 0.2 - JULY 2 2008
  00002                *
  00003                * IPL IS REQUIRED TO LOAD AND START, AFTER BOOTING THE SYSTEM, A PARTICULAR 
  00004                * PROGRAM FROM DISK. THAT PROGRAM NORMALLY IS THE OPERATING SYSTEM KERNEL
  00005                * STORED ON THE DISK AS A RELOCATABLE LOAD MODULE (LM). 
  00006                * THE ORIGINAL P800-DISK-IPL IS NOT AVAILABLE; THIS PROGRAM IS AN ATTEMPT TO 
  00007                * SUPPLY A REPLACEMENT IN ORDER TO GET THE SYSTEM STARTED FROM DISK.
  00008                * LOADED AND STARTED BY THE DISK BOOT PROGRAM FROM DISK LOGICAL SECTOR 1 
  00009                * (== PHYSICAL SECTOR 3), IPL LOADS A RELOCATABLE LM FROM DISK FROM A PREDEFINED 
  00010                * LOCATION AND STARTS THAT LM AFTER LOADING. 
  00011                * THE LM MUST BE STORED IN CONSECUTIVE  GRANULES, STARTING WITH GRANULE 2, 
  00012                * WHICH IS ON LOGICAL==PHYSICAL SECTOR /10 (16).
  00013                * THE 1ST SECTOR OF THE LM IS SECTOR /12 (/16 PHYSICAL) ON DISK AND CONTAINS THE 
  00014                * REMAINING LOAD INFO OF THE LM:
  00015                * - START ADDRESS, 
  00016                * - NUMBER OF SECTORS TO LOAD,
  00017                * - AND PROGRAM LENGTH IN WORDS, SPECIFIED IN BYTES (SO BIT 15 IS ALWAYS 0).
  00018                * THE DISK PARAMETERS OF THE USED DISK TO LOAD FROM, ARE EXTRACTED FROM THE 
  00019                * DISK BOOT PROGRAM (LOCATED IN MEMORY AT THE ADDRESSES 0../3E. 
  00020                * FOR THAT, IPL STARTS BY LOADING THE FOLLOWING REGISTERS WITH INFO FROM THE 
  00021                * DISK BOOTSTRAP:
  00022                * A1 32 CIO   A5,S,0
  00023                * A2 34 SST   A5,0
  00024                * A3 36 RB(4) *-2
  00025                * A4 38 ABR   A4
  00026                * A5 3A DATA  /4E66 MPX CONTROL WORD1 (INPUT 410 BYTES IN WORD MODE)
  00027                * A6 3C DATA  /7E00 MPX CONTROL WORD2 (END ADDRESS OF SECTOR BUFFER LOADED BY BOOT)
  00028                * A7 3E DATA  /0002 DISK DEVICE ADDRESS (DEVICE NUMBER 0)
  00029                *
  00030                * THE IPL PROGRAM ITSELF IS A RELOCATABLE PROGRAM IN ORDER TO CHANGE ITS LOAD 
  00031                * LOCATION DEPENDENT ON THE MEMORY SIZE OF THE USED COMPUTER. ITS LOAD LOCATION 
  00032                * IS DETERMINED BY THE BOOT PROGRAM (WORD /3C CONTAINS THE END ADDRESS OF THE AREA 
  00033                * WHERE IPL IS LOADED). NORMALLY THE IPL PROGRAM IS LOADED SOMEWHERE IN THE 
  00034                * HIGH END OF MEMORY; THE ONLY CONDITION IS THAT A WORKAREA OF ABOUT 240 WORDS 
  00035                * MUST BE AVAILABLE ABOVE THE IPL PROGRAM TO CONTAIN A 205 WORD DISK SECTOR 
  00036                * BUFFER AND OTHER WORKING SPACE USED BY IPL. 
  00037                * THE IPL PROGRAM ITSELF IS ONE DISK SECTOR LONG (205 WORDS OF WHICH 200 WITH 



                       * IPL VERSION 0.2 - JULY 2 2008                                   PAGE  0002  


  00038                * CODE MAXIMUM) AND SHOULD OF COURSE NOT BE OVER WRITTEN BY THE PROGRAM IT LOADS
  00039                * (FOR A 16KW MEMORY, THE CONTENT OF /3C IN THE BOOT PROGRAM MUST NOT BE LARGER 
  00040                * THAN /7E00; THE AREA /7E00 .. /7FFE IS USED THEN BY IPL AS WORKAREA).
  00041                * SO THE IPL PROGRAM MUST BE RELOCATABLE, BUT BECAUSE THE BOOT PROGRAM, WHICH
  00042                * LOADS IPL, DOES NOT RELOCATE, THE IPL PROGRAM MUST BE WRITTEN IN SUCH A WAY
  00043                * THAT IS DOES NOT NEED  RELOCATION; IN OTHER WORDS IT SHOULD NOT CONTAIN 
  00044                * ANY RELOCATIONAL DATA AND OPERAND ADDRESSES.
  00045                *
  00046                * IPL WORK AREA (WITH A14 AS POINTER TO THIS WORKAREA):
  00047                * THE IPL PROGRAM STARTS AT THE 3RD WORD OF LOGICAL DISK SECTOR 1 (PHYSICAL DISK
  00048                * SECTOR 3). BEHIND THE 200 CODE/DATA WORDS ARE 3 EMPTY WORDS (THE LAST 3
  00049                * TRAILER WORDS OF THE SECTOR). THE LAST WORD OF THOSE 3 (WHICH IS THE LAST WORD
  00050                * LOADED BY BOOT) IS THE START LOCATION OF THE WORKAREA. IN IPL, A14 IS ALWAYS
  00051                * POINTING TO THAT WORD AND IT IS USED AS REFERENCE IN MEMORY FOR THE CODE AND 
  00052                * DATA WITHIN IPL.
  00053                *
  00054                * MODIFICATIONS:
  00055                * VERSION 0.2  ADAPTED TO 'LOAD MODULES' WITH LENGTH SPECIFIED IN BYTES (WORD 3)
  00056                *
  00057                ****************************************************************************
  00058                * THIS IPL IS MEANT TO BE A FUNCTIONAL REPLACEMENT OF THE ORIGINAL P800 DISK
  00059                * IPL PROGRAM; ITS CODE IS DIFFERENT, BUT ITS OPERATION IS EXPECTED TO BE
  00060                * SIMILAR AS THE ORIGINAL ONE.
  00061                *
  00062                * PHILIPS P800 16 BIT COMPUTER SOFTWARE.
  00063                * THE PROGRAM IS CREATED BY: THEO ENGEL (THEO.ENGEL@HETNET.NL)
  00064                ****************************************************************************














                       * IPL VERSION 0.2 - JULY 2 2008                                   PAGE  0003  


  00065                       EJECT
  00066                       IDENT       IPL
  00067                       AORG        /7C6C                ***REMOVE***
  00068                BA     EQU         /40
  00069                S      EQU         1
  00070                H      EQU         0
  00071                ASR    EQU         /10                  DEVICE ADDRESS OF THE ASR 
  00072                PTR    EQU         /20                  DEVICE ADDRESS OF THE PTR
  00073                * THE 1ST 4 WORDS OF THE LOAD MODULE, I.E. START ADDRESS, NUMBER OF SECTORS TO
  00074                * LOAD, PROGRAM LENGTH, AND A RESERVED WORD, ARE NOT LOADED INTO MEMORY. SO THE
  00075                * 1ST WORD LOADED INTO MEMORY IS WORD 4 OF THE LOAD MODULE. FOR NON-IPLED
  00076                * LOAD MODULES, THESE 4 WORDS ARE LOADED INTO MEMORY.
  00077                * 
  00078                RELOC  EQU         BA-8                 RELOCATOR FOR THE LM TO LOAD: COMPENSATES FOR SKIPPING THE 1ST 4 WORDS
  00079                *
  00080                * START ADDRESS
  00081  7C6C  BBC0    IPL    ML          7,/32                LOAD A1-A7 FROM THE BOOTSTAP
         7C6E  0032 A  
  00082  7C70  8698           LDR         A14,A6               A14 IS POINTER TO IPL WORK AREA + DISK IO ROUTINE
  00083  7C72  859A           LDR         A13,A14
  00084  7C74  95A0           ADKL        A13,LST              A13 IS LINKSTACK POINTER
         7C76  001C A  
  00085  7C78  819A           LDR         A9,A14               **
  00086  7C7A  91A0           ADKL        A9,ASCOUT            ** A9 IS POINTER TO THE PRINT ASCII ROUTINE
         7C7C  FFE8 A  
  00087  7C7E  871C           LDR         A7,A7
  00088  7C80  515C           RF(1)       DBOOT                DISK BOOTSTRAP WAS REQUESTED
  00089                *************************************************************
  00090                * THE PAPERTAPE BOOTSTRAP (EMBEDDED IN IPL) WAS REQUESTED   *
  00091                *************************************************************
  00092                * MODE IS ALREADY AND STILL IS INHIBITED
  00093  7C82  41E0           CIO         A1,S,PTR
  00094  7C84  4A20    SEARCH INR         A2,0,PTR             SKIP LEADER AND SEARCH
  00095  7C86  5C04           RB(4)       *-2                  FOR A RUBOUT
  00096  7C88  227F           ANK         A2,/7F
  00097  7C8A  5808           RB(0)       SEARCH
  00098  7C8C  0704           LDK         A7,4                 READ 4 BYTES: WORDCOUNT AND BEGINADDR-2



                       * IPL VERSION 0.2 - JULY 2 2008                                   PAGE  0004  


  00099  7C8E  0440           LDK         A4,/40               /40=WORDCOUNT ADDRESS, /42=BEGIN ADDRESS - 2
  00100  7C90  4A20    INPUT  INR         A2,0,PTR
  00101  7C92  5C04           RB(4)       *-2
  00102  7C94  E231           SCR         A2,A4                STORE BYTE
  00103  7C96  1401           ADK         A4,1                 INCR ADDR POINTER
  00104  7C98  1F01           SUK         A7,1                 DECR BYTE COUNT
  00105  7C9A  590C           RB(1)       INPUT                READ NEXT BYTE IF > 0
  00106  7C9C  520E           RF(2)       CODE                 < 0
  00107                * A7=0 => PREPARE FOR READING CODE
  00108                * THE WORKSPACE AT ADDRESS /40 IS MADE FREE BEFORE CODE IS READ.
  00109                * SO THE ADDRESSES /40 AND /42 CAN BE USED BY THE CODE READ BY THE BOOTSTRAP
  00110  7C9E  BA40           ML          4,/3C                A1=/3C A2=/3E A3=/40=WC A4=/42=BA-2
         7CA0  003C A  
  00111  7CA2  0100           LDK         A1,0                 A1 = CHECKSUM = 0 AS START VALUE
  00112  7CA4  3B41           SLL         A3,1                 WORD COUNT BECOMES BYTE COUNT
  00113  7CA6  1402           ADK         A4,2                 A4=BEGIN ADDRESS
  00114  7CA8  8610           LDR         A6,A4                A6=BEGIN ADDRESS
  00115  7CAA  5F1C           RB          INPUT
  00116                *
  00117  7CAC  E104    CODE   ECR         A1,A1                A1 = CHECKSUM
  00118  7CAE  B108           XRR         A1,A2
  00119  7CB0  1B01           SUK         A3,1                 BYTECOUNT = BYTECOUNT - 1
  00120  7CB2  5C24           RB(4)       INPUT                READY?
  00121                * PAPERTAPE LOAD READY. JUMP OVER A6 TO PROGRAM
  00122                * BUT 1ST PRINT A SMALL MESSAGE
  00123  7CB4  4AE0           SST         A2,PTR
  00124  7CB6  5C04           RB(4)       *-2                  PTR TO INACTIVE MODE
  00125  7CB8  0149    LR     LDK         A1,'I'
  00126  7CBA  F587           CFR         A13,A9
  00127  7CBC  0150           LDK         A1,'P'
  00128  7CBE  F587           CFR         A13,A9
  00129  7CC0  014C           LDK         A1,'L'
  00130  7CC2  F587           CFR         A13,A9
  00131  7CC4  010D           LDK         A1,/0D
  00132  7CC6  F587           CFR         A13,A9
  00133  7CC8  010A           LDK         A1,/0A
  00134  7CCA  F587           CFR         A13,A9



                       * IPL VERSION 0.2 - JULY 2 2008                                   PAGE  0005  


  00135  7CCC  8F18           ABR         A6                   YES, JUMP TO BEGIN/START ADDRESS
  00136                *
  00137                * END OF DISK IPL, PRINT MESSAGE AND JUMP TO PROGRAM
  00138  7CCE  865A    EXIT   LD          A6,SA,A14            GET RELOCATED START ADDRESS 
         7CD0  0012 A  
  00139  7CD2  5F1C           RB          LR
  00140  7CD4                 RES         5


































                       * IPL VERSION 0.2 - JULY 2 2008                                   PAGE  0006  


  00141                       EJECT
  00142                **************************************************************
  00143                * DISK IPL                                                   *
  00144                **************************************************************
  00145  7CDE  8420    DBOOT  LDKL        A4,/F036             REPLACE ABR A4 BY RTN A13 (A13 USED AS SUBR LINK STACK POINTER)
         7CE0  F036 A  
  00146  7CE2  9620           ADKL        A6,/1FE              END OF THE SECTOR BUFFER USED BY IPL
         7CE4  01FE A  
  00147  7CE6  273F           ANK         A7,/3F               ISOLATE DEVICE ADDRESS
  00148  7CE8  911C           ADR         A1,A7                CIO WITH DEVICE ADDRESS OF USED DISK
  00149  7CEA  921C           ADR         A2,A7                SST WITH DEVICE ADDRESS OF USED DISK
  00150  7CEC  BBBB           MSR         7,A14                FILL THE 1ST 7 WORDS OF THE IPL WORK AREA
  00151  7CEE  3F42           SLL         A7,2
  00152  7CF0  1780           ADK         A7,/80
  00153  7CF2  875B           ST          A7,MPXAD,A14         SAVE MPX CHANNEL ADDRESS OF THE USED DISK
         7CF4  000E A  
  00154                * SEEK TO CYLINDER 0
  00155  7CF6  0503           LDK         A5,3                 
  00156  7CF8  F59B           CFR         A13,A14               DO DISK IO
  00157                *
  00158                * LOAD THE 1ST CODE SECTOR OF THE LOAD MODULE 
  00159                * THE LOAD MODULE STARTS IN GRANUNE 2: PHYSICAL SECTOR /10 == LOGICAL SECTOR /10
  00160                * THE 1ST CODE SECTOR IS THE 2ND LOGICAL SECTOR (WHEN COUNTING IS STARTED WITH 0)
  00161                * IN THE LOAD MODULE FILE, WHICH IS PHYSICAL SECTOR /16
  00162  7CFA  B95A           ML          2,CW1,A14
         7CFC  0008 A  
  00163  7CFE  B97B           MS*         2,MPXAD,A14          STORE MULTIPLEX WORDS
         7D00  000E A  
  00164                * READ PHYSICAL SECTOR /16 IN CYLINDER 0
  00165  7D02  0558           LDK         A5,/58               10110 00
  00166  7D04  F59B           CFR         A13,A14              DO DISK IO
  00167  7D06  1ECA           SUK         A6,202
  00168  7D08  1ECA           SUK         A6,202
  00169  7D0A  865B           ST          A6,SCODE,A14         SAVE CODE ENTRY POINTER (A6) INTO SECTOR BUFFER
         7D0C  0010 A  
  00170  7D0E  B9B8           MLR         3,A6                 A1=START ADDRESS, A2=NUMBER OF SECTORS, A3=LENGTH IN BYTES
  00171  7D10  9120           ADKL        A1,RELOC             RELOCATE START ADDRESS



                       * IPL VERSION 0.2 - JULY 2 2008                                   PAGE  0007  


         7D12  0038 A  
  00172  7D14  B9DB           MS          3,SA,A14             AND STORE IN WORK AREA
         7D16  0012 A  
  00173  7D18  0212           LDK         A2,/12
  00174  7D1A  825B           ST          A2,SNBR,A14          INITIAL LOGICAL LOADED SECTOR 
         7D1C  0018 A  
  00175  7D1E  82A0           LDKL        A10,BA               START LOADING AND RELOCATION IN MEMORY HERE
         7D20  0040 A  
  00176  7D22  0708           LDK         A7,8                 A7 IS CURRENT INDEX INTO SECTOR BUFFER
  00177  7D24  849C           LDR         A12,A7               A12 IS CURRENT LOADED NUMBER OF BYTES (OF WHICH THE 1ST 8 ARE SKIPPED)
  00178  7D26  839C           LDR         A11,A7               A11 IS CURRENT RELOCATED NUMBER OF BYTES
  00179                *
  00180                * READING, LOADING AND RELOCATION LOOP
  00181                *
  00182                *
  00183                * LOAD THE SECTOR AS BUFFERED IN THE SECTOR BUFFER
  00184  7D28  012E    LOOP   LDK         A1,'.'               **
  00185  7D2A  F587           CFR         A13,A9               ** PRINT DOT TO SHOW ACTIVITY
  00186  7D2C  820A           LDR         A2,A10               START LOADING THE SECTOR (A2=MEMORY POINTER)
  00187  7D2E  80DA    LNW    LD          A8,SCODE,A14         POINTER TO CODE IN SECTOR BUFFER
         7D30  0010 A  
  00188  7D32  909C           ADR         A8,A7                INDEX THE POINTER 
  00189  7D34  8122           LDR*        A1,A8                GET WORD FROM SECTOR BUFFER
  00190  7D36  8129           STR         A1,A2                AND STORE INTO LOAD AREA
  00191  7D38  1202           ADK         A2,2                 INCR LOAD AREA POINTER
  00192  7D3A  1702           ADK         A7,2                 INCR SECTOR BUFFER INDEX
  00193  7D3C  94A0           ADKL        A12,2                INCR NUMBER OF WORDS LOADED IN MEMORY 
         7D3E  0002 A  
  00194  7D40  ECDA           CW          A12,LLM,A14          ALL REQUESTED WORDS LOADED?
         7D42  0016 A  
  00195  7D44  5008           RF(0)       RTAB                 YES, PROGRAM LOAD READY
  00196  7D46  EF20           CWK         A7,376               188*2 END OF CODE PART IN SECTOR?
         7D48  0178 A  
  00197  7D4A  5002           RF(0)       RTAB                 SECTOR LOAD READY, START RELOCATING THE SECTOR
  00198  7D4C  5F20           RB          LNW                  LOAD NEXT WORD
  00199                * SKIP TO THE 12 WORD RELOCATION TABLE IN SECTOR BUFFER
  00200  7D4E  8720    RTAB   LDKL        A7,376               188*2 A7 POINTS TO SECTOR RELOCATION TABLE



                       * IPL VERSION 0.2 - JULY 2 2008                                   PAGE  0008  


         7D50  0178 A  
  00201  7D52  03BC           LDK         A3,188               RELOCATE 188 WORDS MAXIMUM
  00202  7D54  8220           LDKL        A2,0                 1ST SECTOR ?
         7D56  0000 A  
  00203                FLAG   EQU         *-2                  FLAG=0 FOR 1ST SECTOR AND NE 0 FOR SUBSEQUENT SECTORS
  00204  7D58  5412           RF(4)       REL                  NO 
  00205                * SKIP FOR THE 1ST SECTOR THE 1ST 4 RELOCATION BITS
  00206  7D5A  961C           ADR         A6,A7                POINTER TO SECTOR RELOCATION TABLE
  00207  7D5C  1702           ADK         A7,2                 INCR INDEX FOR ACCESSING NEXT WORD
  00208  7D5E  8138           LDR*        A1,A6                GET 1ST WORD WITH 16 RELOCATION BITS
  00209  7D60  020C           LDK         A2,12                SET RELOCATION BIT COUNTER TO 16-4
  00210  7D62  03B8           LDK         A3,184               RELOCATE 188-4 WORDS MAXIMUM
  00211  7D64  3944           SLL         A1,4                 DELETE THE 1ST 4 BITS
  00212  7D66  8241           ST          A2,FLAG              FLAG IS NOW NONZERO; THE 1ST SECTOR WAS PROCESSED
         7D68  7D56 A  
  00213  7D6A  570C           RF          CNW
  00214                *
  00215                * RELOCATE THE LOADED SECTOR
  00216  7D6C  0210    REL    LDK         A2,16                RELOCATION BIT COUNTER 16..1
  00217  7D6E  80DA           LD          A8,SCODE,A14         POINTER TO CODE IN SECTOR BUFFER
         7D70  0010 A  
  00218  7D72  909C           ADR         A8,A7                INDEX THE POINTER
  00219  7D74  1702           ADK         A7,2                 INCR INDEX FOR ACCESSING NEXT WORD
  00220  7D76  8122           LDR*        A1,A8                GET WORD WITH 16 RELOCATION BITS
  00221  7D78  521A    CNW    RF(2)       RELW                 A 1 BIT, SO RELOCATE
  00222  7D7A  92A0    RL     ADKL        A10,2                INCR POINTER TO NEXT MEMORY WORD TO RELOCATE
         7D7C  0002 A  
  00223  7D7E  93A0           ADKL        A11,2                PROGRAM LENGHT RELOCATED
         7D80  0002 A  
  00224  7D82  EBDA           CW          A11,LLM,A14          ALL REQUESTED WORDS RELOCATED?
         7D84  0016 A  
  00225  7D86  58BA           RB(0)       EXIT                 YES, PROGRAM LOAD AND RELOCATION READY; GOTO STARTADDRESS
  00226  7D88  1B01           SUK         A3,1                 END OF SECTOR RELOCATION TABLE?
  00227  7D8A  5012           RF(0)       READ                 SECTOR RELOCATION READY, READ AND LOAD NEXT SECTOR
  00228  7D8C  1A01           SUK         A2,1                 END OF RELOCATION WORD?
  00229  7D8E  5824           RB(0)       REL                  YES, GET NEXT RELOCATION WORD 
  00230  7D90  3941           SLL         A1,1                 GET NEXT RELOCATION BIT



                       * IPL VERSION 0.2 - JULY 2 2008                                   PAGE  0009  


  00231  7D92  5F1C           RB          CNW
  00232                * RELOCATE A WORD IN MEMORY
  00233  7D94  842A    RELW   LDR*        A4,A10
  00234  7D96  9420           ADKL        A4,RELOC
         7D98  0038 A  
  00235  7D9A  842B           STR         A4,A10
  00236  7D9C  5F24           RB          RL
  00237                *
  00238                * GET NEXT SECTOR FROM DISK
  00239  7D9E  855A    READ   LD          A5,SNBR,A14          LOGICAL SECTOR NUMBER
         7DA0  0018 A  
  00240  7DA2  1501           ADK         A5,1                 A5 = REQUESTED LOGICAL SECTOR
  00241  7DA4  855B           ST          A5,SNBR,A14          A5 = REQUESTED LOGICAL SECTOR
         7DA6  0018 A  
  00242  7DA8  2520           ANK         A5,/20               END OF CYLINDER?
  00243  7DAA  500A           RF(0)       CVSN                 NO
  00244                * IN CASE AN SECTOR 32 IS REQUESTED, SEEK TO NEXT CYLINDER
  00245  7DAC  050E           LDK         A5,/E                SEEK +1 (1110)
  00246  7DAE  F59B           CFR         A13,A14               DO DISK IO
  00247  7DB0  0500           LDK         A5,0                 
  00248  7DB2  855B           ST          A5,SNBR,A14          RESET LOGICAL SECTOR NUMBER TO 0 
         7DB4  0018 A  
  00249                * CONVERT TO PHYSICAL SECTOR NUMBER
  00250  7DB6  855A    CVSN   LD          A5,SNBR,A14          
         7DB8  0018 A  
  00251  7DBA  8614           LDR         A6,A5
  00252  7DBC  2610           ANK         A6,/10               A6 = HEAD
  00253  7DBE  250F           ANK         A5,/F                A5 = LOGICAL SECTOR IN TRACK
  00254  7DC0  8114           LDR         A1,A5
  00255  7DC2  3D41           SLL         A5,1                 *2
  00256  7DC4  9504           ADR         A5,A1                *3
  00257  7DC6  ED20           CWK         A5,16
         7DC8  0010 A  
  00258  7DCA  550A           RF(5)       ADH                  <= 16
  00259  7DCC  1D10           SUK         A5,16
  00260  7DCE  ED20           CWK         A5,16
         7DD0  0010 A  



                       * IPL VERSION 0.2 - JULY 2 2008                                   PAGE  0010  


  00261  7DD2  5502           RF(5)       ADH                  <= 16
  00262  7DD4  1D10           SUK         A5,16
  00263  7DD6  9518    ADH    ADR         A5,A6                + HEAD => A5 = PHYSICAL SECTOR NUMBER
  00264  7DD8  B95A           ML          2,CW1,A14
         7DDA  0008 A  
  00265  7DDC  B97B           MS*         2,MPXAD,A14          STORE MULTIPLEX WORDS
         7DDE  000E A  
  00266                * READ PHYSICAL SECTOR 
  00267  7DE0  3D42           SLL         A5,2
  00268  7DE2  F59B           CFR         A13,A14              DO DISK IO
  00269  7DE4  0700           LDK         A7,0                 RESET SECTOR BUFFER INDEX
  00270  7DE6  5FC0           RB          LOOP                 LOAD AND RELOCATE NEXT SECTOR INTO MEMORY
  00271                *
  00272                ASCOUT EQU         -24                   !!!! THIS IS AN OFFSET TO WAREA !!!!
  00273  7DE8  0200           LDK         A2,0                 OUTPUT MODE
  00274  7DEA  42D0           CIO         A2,S,ASR             START
  00275  7DEC  5C04           RB(4)       *-2
  00276  7DEE  4110           OTR         A1,0,ASR             PRINT BYTE
  00277  7DF0  5C04           RB(4)       *-2
  00278  7DF2  4290           CIO         A2,H,ASR             STOP
  00279  7DF4  4AD0           SST         A2,ASR               WAIT TILL ACCEPTED
  00280  7DF6  5C04           RB(4)       *-2
  00281  7DF8  F036           RTN         A13
  00282  7DFA  0000 A         DATA        0                    SPARE WORD, AT ADDRESS 7DFA !!
  00283                ***************** IPL CODE STOPS HERE (200 WORDS) ************************
















                       * IPL VERSION 0.2 - JULY 2 2008                                   PAGE  0011  


  00284                       EJECT
  00285                *      DATA 0       1ST WORD OF LAST 3 WORDS OF IPL SECTOR
  00286                *      DATA 0       2ND WORD OF LAST 3 WORDS OF IPL SECTOR
  00287                * WORK AREA
  00288                WAREA  EQU         0                    <= POINTED TO BY A14 (LAST BOOT LOADED WORD OF IPL SECTOR)
  00289                DIO    EQU         0                    DO DISK IO
  00290                *      CIO    A5,S,DA DISK IO ROUTINE
  00291                *      SST    A5,DA
  00292                *      RB(4)  *-2
  00293                *      RTN    A13
  00294                CW1    EQU         8                    DATA   /4E66 MPX CONTROL WORD1 (INPUT 410 BYTES IN WORD MODE)
  00295                CW2    EQU         /A                   DATA   /7FFE MPX CONTROL WORD2 (END ADDRESS OF SECTOR BUFFER USED BY IPL)
  00296                DA     EQU         /C                   DEVICE ADDRESS USED BY DISK. 
  00297                * DA (DEVICE ADDRESS HAS POSSIBLY THE MS-BIT=1, INDICATING REQUEST FOR PAPERTAPE BOOT
  00298                MPXAD  EQU         /E                   MPX CHANNEL ADDRESS OF THE USED DISK UNIT
  00299                SCODE  EQU         /10                  CODE ENTRY POINTER INTO SECTOR BUFFER
  00300                SA     EQU         /12                  RELOCATED START ADDRESS
  00301                NSEC   EQU         /14                  NUMBER OF SECTORS IN LOAD MODULE
  00302                LLM    EQU         /16                  NUMBER OF BYTES IN LOAD MODULE
  00303                SNBR   EQU         /18                  LOGICAL SECTOR READ FROM DISK
  00304                LST    EQU         SNBR+4               SUBR LINK STACK
  00305                       END         IPL



















                       * IPL VERSION 0.2 - JULY 2 2008                                   PAGE  0012  


  SYMBOL TABLE

  A0     0000 Z   A1     0002 Z   A10    0005 Z   A11    0007 Z   A12    0009 Z 
  A13    000B Z   A14    000D Z   A15    000F Z   A2     0004 Z   A3     0006 Z 
  A4     0008 Z   A5     000A Z   A6     000C Z   A7     000E Z   A8     0001 Z 
  A9     0003 Z   ADH    7DD6 A   ASCOUT FFE8 A   ASR    0010 A   BA     0040 A 
  CNW    7D78 A   CODE   7CAC A   CVSN   7DB6 A   CW1    0008 A   CW2    000A A 
  DA     000C A   DBOOT  7CDE A   DIO    0000 A   EXIT   7CCE A   FLAG   7D56 A 
  H      0000 A   INPUT  7C90 A   IPL    7C6C A   LLM    0016 A   LNW    7D2E A 
  LOOP   7D28 A   LR     7CB8 A   LST    001C A   MPXAD  000E A   NSEC   0014 A 
  P      0000 Z   PTR    0020 A   READ   7D9E A   REL    7D6C A   RELOC  0038 A 
  RELW   7D94 A   RL     7D7A A   RTAB   7D4E A   S      0001 A   SA     0012 A 
  SCODE  0010 A   SEARCH 7C84 A   SNBR   0018 A   WAREA  0000 A 

  P8ASM, version 0.7. End of assembly, 0 errors.
