## ASOLMS40 Assembler

####

       The  OKI  OLMS-40  series of microprocessors has a unique in-
    struction set in which all registers and addressing are inherent
    to  the  individual  instructions.   Thus  there  is no explicit
    register set nor  any  addressing  modes.   The  internal  4-bit
    registers are the Accumulator (A), and registers W, X, Y, and Z.
    The 8-bit memory pointer DP is accessible by lower nibble as DPL
    and upper nibble DPH.

####

    MICROPROCESSOR SELECTION

       The  selection of one of the four OLMS-40 supported micropro-
    cessor types is achieved by adding one of  these  directives  at
    the beginning of the assembly source file:

            .msm5840        MSM5840  Microprocessor
            .msm5842        MSM5842  Microprocessor
            .msm58421       MSM58421 Microprocessor
            .msm58422       MSM58422 Microprocessor

    MSM58421  and MSM58422 have identical cores with differing peri-
    pherals.

       The  variable .__.CPU.  generated by the assembler will indi-
    cated  the  microprocessor  selection  with  the  value   of   0
    (MSM5840), 1 (MSM5842), 2 (MSM58421), or 3 (MSM58422).

####

    OLMS-40 INSTRUCTION SET

       The  instruction set can be broken up into several categories
    with common traits.

    Load, Store, Read, and Clear

            CLA             Clear Accumulator
            CLL             Clear DPL
            CLH             Clear DPH
            LAI     #4-bit  Load Accumulator with Immediate
            LLI     #4-bit  Load DPL with Immediate
           %LHI     #1-bit  Load DPH with Immediate
            LHI     #3-bit  Load DPH with Immediate
            L               Load Accumulator with Memory
           *LM      #2-bit  Load Accumulator with Memory
                              then Modify DPH
            LAL             Load Accumulator wit DPL
            LLA             Load DPL with Accumulator
            LAW             Load Accumulator with W Register
           *LAX             Load Accumulator with X Register
           *LAY             Load Accumulator with Y Register
           *LAZ             Load Accumulator with Z Register
            SI              Save Accumulator to Memory
                              then increment DPL
           *SMI     #2-bit  Save Accumulator to Memory
                              then Modify DPH and increment DPL
            LWA             Load W Register with Accumulator
           *LXA             Load X Register with Accumulator
           *LYA             Load Y Register with Accumulator
           *LZA             Load Z Register with Accumulator
            LPA             Load Port Pointer with Accumulator
          $%LTI             Load Timer with All Zeros
           *LTI     #8-bit  Load Timer with Immediate
           *RTH             Read Timer H
           *RTL             Read Timer L

           * - MSM5840 Specific Instruction
           % - MSM5842 Specific Instruction
           $ - MSM58421 and MSM58422 Specific Instruction

####

    Exchange

       Several  'SAVE  REGISTERS',  A, AX, L and CH, facilitate tem-
    porary register storage:

           *XA      Exchange Accumulator with Save Register A
           *XAX     Exchange Accumulator with Save Register AX
           *XL      Exchange DPL with Save Register L
           *XCH     Exchange DPH and Carry with Save Register CH
            X       Exchange Accumulator with Memory

           *XM      #2-bit  Exchange Accumulator with Memory
                              then Modify DPH

           * - MSM5840 Specific Instruction

####

    Increment

          $%INA             Increment Accumulator
          $%INL             Increment DPL
          $%INM             Increment Memory
          $%INW             Increment W Register
           *INA             Increment Accumulator - Skip If Zero
           *INL             Increment DPL         - Skip If Zero
           *INM             Increment Memory      - Skip If Zero
           *INW             Increment W Register  - Skip If Zero
           *INX             Increment X Register  - Skip If Zero
           *INY             Increment Y Register  - Skip If Zero
           *INZ             Increment Z Register  - Skip If Zero

           * - MSM5840 Specific Instruction
           % - MSM5842 Specific Instruction
           $ - MSM58421 and MSM58422 Specific Instruction

####

    Decrement

          $%DCA             Decrement Accumulator
          $%DCL             Decrement DPL
          $%DCM             Decrement Memory
           *DCA             Decrement Accumulator - Skip If Zero
           *DCL             Decrement DPL         - Skip If Zero
           *DCM             Decrement Memory      - Skip If Zero
           *DCW             Decrement W Register  - Skip If Zero
           *DCX             Decrement X Register  - Skip If Zero
           *DCY             Decrement Y Register  - Skip If Zero
           *DCZ             Decrement Z Register  - Skip If Zero
           *DCH             Decrement DPH - Skip if all 1's and C=0

           * - MSM5840 Specific Instruction
           % - MSM5842 Specific Instruction
           $ - MSM58421 and MSM58422 Specific Instruction

####

    Logical

            CAO             Complement Accumulator of One
           *AND             And Accumulator with Memory
           *OR              Or Accumulator with Memory
           *EOR             Exclusive Or Accumulator with Memory
            RAL             Rotate Accumulator Left Through Carry

           * - MSM5840 Specific Instruction

####

    Arithmetic

            AC              Add Memory to Accumulator with Carry
           *ACS             Add Memory to Accumulator with Carry,
                              Skip if Carry
            AS              Add Memory to Accumulator,
                              Skip if Carry
            AIS     #4-bit  Add Immediate to Accumulator,
                              Skip if Carry
            DAS             Decimal adjust Accumulator
                              in Subtraction
           $CM              Compare Accumulator with Memory
          %*CM              Compare Accumulator with Memory,
                              Skip if Equal
           *AWS             Add W Register to Accumulator,
                              Skip if Carry
           *AXS             Add X Register to Accumulator,
                              Skip if Carry
           *AYS             Add Y Register to Accumulator,
                              Skip if Carry
           *AZS             Add Z Register to Accumulator,
                              Skip if Carry

           * - MSM5840 Specific Instruction
           % - MSM5842 Specific Instruction
           $ - MSM58421 and MSM58422 Specific Instruction

####

    Bit Set, Reset, and Test

           *SPB     #2-bit  Set Port Bit
           *RPB     #2-bit  Reset Port Bit
            SMB     #2-bit  Set Memory Bit
            RMB     #2-bit  Rest Memory Bit
          $%TAB     #2-bit  Test Acumulator Bit
          $%TMB     #2-bit  Test Memory Bit
           $THB             Test H Port Bit
          $%TTM             Test Timer Flag
          $%TC              Test Carry Flag
           *TAB     #2-bit  Test Acumulator Bit, Skip if One
           *TMB     #2-bit  Test Memory Bit, Skip if One
           *TKB     #2-bit  Test K Port Bit, Skip if One
          %*THB     #1-bit  Test H Port Bit, Skip if One
           *TI              Test Interrupt Flag, Skip if One
           *TTM             Test Timer Flag, Skip if One
           *TC              Test Carry Flag, Skip if One
            SC              Set Carry Flag
            RC              Reset Carry Flag

           * - MSM5840 Specific Instruction
           % - MSM5842 Specific Instruction
           $ - MSM58421 and MSM58422 Specific Instruction

####

    Branch and Subroutine

           %J       10-bit  Jump
          $*J       11-bit  Jump
            JC      6-bit   Jump in Current Page
            JA              Jump with Accumulator
           %CAL     10-bit  Call Subroutine
          $*CAL     11-bit  Call Subroutine
            RT              Return from Subroutine

           * - MSM5840 Specific Instruction
           % - MSM5842 Specific Instruction
           $ - MSM58421 and MSM58422 Specific Instruction

####

    Input and Output

           *OBS             Output Byte String
            OTD             Output Table Data
            OA              Output Accumulator to Port A
            OB              Output Accumulator to Port B
            OP              Output Accumulator to Port P
                              designated Port Pointer
           *OAB             Output Memory and Accumulator
                              to Ports a and b
            OPM             Output Memory to Port P
                              designated Port Pointer
            IA              Input Port A into Accumulator
            IB              Input Port B into Accumulator
            IK              Input Port K into Accumulator
           *IAB             Input Ports A and B
                              into Memory and Accumulator

           * - MSM5840 Specific Instruction

####

    Control

           *EI              Enable Interrupt
           *DI              Disable Interrupt
           *ET              Enable Timer
           *DT              Disable Timer
           *ECT             Enable Counter
           *DCT             Disable Counter
           *HLT             Halt
           *EXP             Exchange Program
            NOP             No Operation

           * - MSM5840 Specific Instruction

##### Go to the Documentation Index

... Exit the ASxxxx Documentation

... Home Page

###### Last Updated: July 2026