Top secrets sources NedoPC pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

        cpu     kenbak
        page    0

        org     4               ; locations 0..3 are registers

dest:

        ; the original machine instructions, which carry the
        ; indirect flag in the instruction's mnemonic:

        irp     instr,jpd,jpi,jmd,jmi
        instr   a,nz,dest
        instr   b,non-zero,dest
        instr   x,z,dest
        instr   unconditional,zero,dest
        instr   a,n,dest
        instr   b,negative,dest
        instr   x,p,dest
        instr   unconditional,positive,dest
        instr   a,pnz,dest
        instr   b,positive-non-zero,dest
        endm

        irp     instr,jpd,jpi,jmd,jmi
        instr   dest
        endm

        ; more generic variants, that relocate the indirect flag to
        ; the addressing mode, similar to arithmetic/logic instructions:

        irp     instr,jp,jm
        instr   a,nz,dest
        instr   b,non-zero,dest
        instr   x,z,dest
        instr   unconditional,zero,dest
        instr   a,n,dest
        instr   b,negative,dest
        instr   x,p,dest
        instr   unconditional,positive,dest
        instr   a,pnz,dest
        instr   b,positive-non-zero,dest
        instr   a,nz,(dest)
        instr   b,non-zero,(dest)
        instr   x,z,(dest)
        instr   unconditional,zero,(dest)
        instr   a,n,(dest)
        instr   b,negative,(dest)
        instr   x,p,(dest)
        instr   unconditional,positive,(dest)
        instr   a,pnz,(dest)
        instr   b,positive-non-zero,(dest)
        endm

        irp     instr,jp,jm
        instr   dest
        instr   (dest)
        endm

        ; SKP0 and SKP1 will always skip two bytes, it is the programmer's
        ; resposibility that this is either one two-byte insn or two one-byte insns.
        ; One may optionally add a skip target.  While this won't show up in the
        ; machine code, the assembler can verify if actually two bytes are skipped:

        skp0    6,12h
        skp1    6,12h

        skp0    6,12h,next1
        add     a,a
next1:

        skp1    6,12h,next2
        noop
        noop
next2:

        if      mompass>1
        expect  1376
        endif
        skp1    6,12h,next3
        if      mompass>1
        endexpect
        endif
        halt
next3:

        set0    6,12h
        set1    6,12h

        irp     instr,sftl,sftr,rotl,rotr
        irp     reg,a,b
        instr   reg
        instr   1,reg
        instr   4,reg
        endm
        endm