User Tools

Site Tools


its_midas

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

its_midas [2022/05/24 01:49]
ldbeth created
its_midas [2022/05/24 02:09]
ldbeth
Line 3: Line 3:
 [[http://pdp10.nocrew.org]] has useful information on the instruction set. I recommend getting familiarized with //DECsystem-10/DECSYSTEM-20 Processor Reference Manual// first. [[http://pdp10.nocrew.org]] has useful information on the instruction set. I recommend getting familiarized with //DECsystem-10/DECSYSTEM-20 Processor Reference Manual// first.
  
-The ''MIDAS'' is a macro assembler+The ''MIDAS'' is a macro assembler, it does not check whether you provide correct number of arguments to opcode. 
 + 
 +Notice that almost all numbers in MIDAS are treated as octal. To specify a decimal number such as nineteen, use ''19.'' (appending a dot). 
 + 
 +You can lookup '':info midas'' for more details about the assembler. 
 + 
 +===== PDP-10 Instruction format ===== 
 + 
 +Unlike some CISC instruction set, every instruction of PDP-10 is of the same 36-bit format (except for I/O instructions that are not available when the program is been supervised by an OS). 
 + 
 +<code> 
 + 000000000 0111 1 1111 112222222222333333 
 + 012345678 9012 3 4567 890123456789012345 
 + ________________________________________ 
 +|            | |    |                  | 
 +|   OP    | AC |I| X  |        Y         | 
 +|_________|____|_|____|__________________| 
 + 
 +        OP  = operation code 
 +        AC  = accumulator field 
 +        I   = indirect bit 
 +        X   = index field 
 +        Y   = address field 
 +        DEV = device code 
 +        IOP = input-output operation code 
 +</code> 
 + 
 +===== Addressing ===== 
 + 
 +Every instruction takes a register argument, and another address argument ''E''
 + 
 +Indirect addressing even applies to immediate variant of instructions. For example, the ''movei'' below would actually set register ''a'' to ''12''
 + 
 +<code> 
 +start:  movei  a,@add 
 + 
 +... 
 +add:    addi   b,12 
 +</code> 
 + 
 +<code> 
 +IFETCH: MA <- PC 
 +        OP <- Bits  0:8  of C(MA); 
 +        AC <- Bits  9:12 of C(MA); 
 +EACOMP: I  <- Bit  13    of C(MA); 
 +        X  <- Bits 14:17 of C(MA); 
 +        Y  <- Bits 18:35 of C(MA); 
 +        E  <- Y; 
 +        IF NOT(X=0) then E <- E+C(X); 
 +        IF I=0 then go to done; 
 +        MA <- E; 
 +        GO TO EACOMP; 
 +DONE: 
 +</code> 
 + 
 +===== Print first 500 primes ===== 
 + 
 +The ''$'' actually stands for ''^@'' (Control At). 
 + 
 +<code> 
 +; -*- MIDAS -*- 
 +        TITLE   PRIME 
 +L==500. ; Decimal 500 
 +J=1 
 +N=2 
 +K=3 
 +A=4 
 +R=5 
 +PRIME:  BLOCK   L 
 +BUF:    BLOCK   30 
 +PDL:    BLOCK   10 
 +START:  MOVE    J,[-L-1,,PRIME-1]       ; setup J 
 +        MOVEI   N,2 
 +        PUSH    J,N 
 +        MOVEI   N,    ; N <- 3 
 +P2:     PUSH    J,N 
 +        HLRO    A,J 
 +        AOJE    A,PRIN  ; found 
 +P4:     ADDI    N,2 
 +        MOVEI   K,1 
 +P6:     MOVE    A,N 
 +        IDIV    A,PRIME(K) 
 +        JUMPE   R,P4    ; Goto P4 if remainder is zero 
 +        CAMG    A,PRIME(K)      ; if Q <= P[K] 
 +        JRST    P2              ; Goto P2 
 +        ADDI    K,1 
 +        JRST    P6 
 +PRIN:   .OPEN   1,[.UAO,,'TTY] 
 +         .LOSE  %LSSYS 
 +        MOVE    J,[-10,,PDL-1] 
 +        MOVE    A,[440700,,TITL] 
 +        PUSHJ   J,OUT 
 +        MOVEI   K,    ; Setup line 
 +CONV:   MOVE    N,[440700,,BUF] 
 +NUM:    MOVE    A,PRIME(K) 
 +        IDIVI   A,1000. 
 +        PUSHJ   J,DPC 
 +        IDIVI   A,100. 
 +        PUSHJ   J,DPC 
 +        IDIVI   A,10. 
 +        PUSHJ   J,DPC 
 +        CAIL    K,450. 
 +        JRST    PUTL 
 +        MOVEI   A,40 
 +        IDPB    A,N 
 +        ADDI    K,50. 
 +        JRST    NUM 
 +PUTL:   MOVE    A,[440700,,BUF] 
 +        PUSHJ   J,OUT 
 +        ADDI    K,1 
 +        CAIL    K,L 
 +        .LOGOUT 1, 
 +        SUBI    K,450. 
 +        JRST    CONV 
 + 
 +DPC:    ADDI    A,60 
 +        IDPB    A,N 
 +        MOVE    A,R 
 +        POPJ    J, 
 +OUT:    ILDB    N,A 
 +        JUMPE   N,EXIT 
 +        .IOT    1,N 
 +        JRST    OUT 
 +EXIT:   .IOT    1,[^M] 
 +        .IOT    1,[^J] 
 +        POPJ    J, 
 +TITL:   ASCIZ   $FIRST FIVE HUNDRED PRIMES$ 
 +END     START 
 +</code> 
its_midas.txt · Last modified: 2022/05/24 02:09 by ldbeth