Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #cpudef "Simple_8b_CPU"
- {
- #bits 8
- #tokendef REG
- {
- A = 0b000
- B = 0b001
- C = 0b010
- D = 0b011
- }
- #tokendef ALS
- {
- ADD = 0b000
- SUB = 0b001
- INC = 0b010
- DEC = 0b011
- AND = 0b100
- OR = 0b101
- XOR = 0b110
- CMP = 0b111
- }
- #tokendef FLAGS
- {
- Z = 0b00000001
- ZA = 0b00000010
- ZS = 0b00000100
- O = 0b00001000
- C = 0b00001000
- U = 0b00010000
- G = 0b00100000
- E = 0b01000000
- L = 0b10000000
- }
- NOP -> 0b000000 @ 0b00
- HLT -> 0b000001 @ 0b00
- HALT -> 0b000001 @ 0b00
- RET -> 0b000010 @ 0b00
- RNA -> 0b000011 @ 0b00
- PUSH CD -> 0b000100 @ 0b00
- POP CD -> 0b000101 @ 0b00
- ;------------------------------------------------------------------------------------------
- ;------------------------------------------------------------------------------------------
- ; REG -> REG
- MOV {dest: REG}, {src: REG} -> dest[2:0] @ src[2:0] @ 0b01
- LD {dest: REG}, {src: REG} -> dest[2:0] @ src[2:0] @ 0b01
- ; REG -> MEM IMME
- MOV I, {src: REG} -> 0b100 @ src[2:0] @ 0b01 @ 0x00[7:0]
- LD I, {src: REG} -> 0b100 @ src[2:0] @ 0b01 @ 0x00[7:0]
- ; REG -> MEM ADDR
- MOV ({dest}), {src: REG} -> 0b101 @ src[2:0] @ 0b01 @ dest[15:0]
- LD ({dest}), {src: REG} -> 0b101 @ src[2:0] @ 0b01 @ dest[15:0]
- ; REG -> MEM ADDR CD
- MOV (CD), {src: REG} -> 0b110 @ src[2:0] @ 0b01
- LD (CD), {src: REG} -> 0b110 @ src[2:0] @ 0b01
- ; REG -> MEM ADDR CDB
- MOV (CDB), {src: REG} -> 0b111 @ src[2:0] @ 0b01
- LD (CDB), {src: REG} -> 0b111 @ src[2:0] @ 0b01
- ;------------------------------------------------------------------------------------------
- ; MEM IMME -> REG
- MOV {dest: REG}, {src} -> dest[2:0] @ 0b100 @ 0b01 @ src[7:0]
- LD {dest: REG}, {src} -> dest[2:0] @ 0b100 @ 0b01 @ src[7:0]
- ; MEM IMME -> MEM IMME
- MOV I, {src} -> 0b100 @ 0b100 @ 0b01 @ src[7:0] @ 0x00[7:0]
- LD I, {src} -> 0b100 @ 0b100 @ 0b01 @ src[7:0] @ 0x00[7:0]
- ; MEM IMME -> MEM ADDR
- MOV ({dest}), {src} -> 0b101 @ 0b100 @ 0b01 @ src[7:0] @ dest[15:0]
- LD ({dest}), {src} -> 0b101 @ 0b100 @ 0b01 @ src[7:0] @ dest[15:0]
- ; MEM IMME -> MEM ADDR CD
- MOV (CD), {src} -> 0b110 @ 0b100 @ 0b01 @ src[7:0]
- LD (CD), {src} -> 0b110 @ 0b100 @ 0b01 @ src[7:0]
- ; MEM IMME -> MEM ADDR CDB
- MOV (CDB), {src} -> 0b111 @ 0b100 @ 0b01 @ src[7:0]
- LD (CDB), {src} -> 0b111 @ 0b100 @ 0b01 @ src[7:0]
- ;------------------------------------------------------------------------------------------
- ; MEM ADDR -> REG
- MOV {dest: REG}, ({src}) -> dest[2:0] @ 0b101 @ 0b01 @ src[15:0]
- LD {dest: REG}, ({src}) -> dest[2:0] @ 0b101 @ 0b01 @ src[15:0]
- ; MEM ADDR -> MEM IMME
- MOV I, ({src}) -> 0b100 @ 0b101 @ 0b01 @ src[15:0] @ 0x00[7:0]
- LD I, ({src}) -> 0b100 @ 0b101 @ 0b01 @ src[15:0] @ 0x00[7:0]
- ; MEM ADDR -> MEM ADDR
- MOV ({dest}), ({src}) -> 0b101 @ 0b101 @ 0b01 @ src[15:0] @ dest[15:0]
- LD ({dest}), ({src}) -> 0b101 @ 0b101 @ 0b01 @ src[15:0] @ dest[15:0]
- ; MEM ADDR -> MEM ADDR CD
- MOV (CD), ({src}) -> 0b110 @ 0b101 @ 0b01 @ src[15:0] @ dest[15:0]
- LD (CD), ({src}) -> 0b110 @ 0b101 @ 0b01 @ src[15:0] @ dest[15:0]
- ; MEM ADDR -> MEM ADDR CDB
- MOV (CDB), ({src}) -> 0b111 @ 0b101 @ 0b01 @ src[15:0] @ dest[15:0]
- LD (CDB), ({src}) -> 0b111 @ 0b101 @ 0b01 @ src[15:0] @ dest[15:0]
- ;------------------------------------------------------------------------------------------
- ; MEM ADDR CD -> REG
- MOV {dest: REG}, (CD) -> dest[2:0] @ 0b110 @ 0b01
- LD {dest: REG}, (CD) -> dest[2:0] @ 0b110 @ 0b01
- ; MEM ADDR CD -> MEM IMME
- MOV I, (CD) -> 0b100 @ 0b110 @ 0b01 @ 0x00[7:0]
- LD I, (CD) -> 0b100 @ 0b110 @ 0b01 @ 0x00[7:0]
- ; MEM ADDR CD -> MEM ADDR
- MOV {dest}, (CD) -> 0b101 @ 0b110 @ 0b01 @ dest[15:0]
- LD {dest}, (CD) -> 0b101 @ 0b110 @ 0b01 @ dest[15:0]
- ; MEM ADDR CD -> MEM ADDR CD
- MOV (CD), (CD) -> 0b110 @ 0b110 @ 0b01
- LD (CD), (CD) -> 0b110 @ 0b110 @ 0b01
- ; MEM ADDR CD -> MEM ADDR CDB
- MOV (CDB), (CD) -> 0b111 @ 0b110 @ 0b01
- LD (CDB), (CD) -> 0b111 @ 0b110 @ 0b01
- ;------------------------------------------------------------------------------------------
- ; MEM ADDR CDB -> REG
- MOV {dest: REG}, (CDB) -> dest[2:0] @ 0b111 @ 0b01
- LD {dest: REG}, (CDB) -> dest[2:0] @ 0b111 @ 0b01
- ; MEM ADDR CDB -> MEM IMME
- MOV I, (CDB) -> 0b100 @ 0b111 @ 0b01 @ 0x00[7:0]
- LD I, (CDB) -> 0b100 @ 0b111 @ 0b01 @ 0x00[7:0]
- ; MEM ADDR CDB -> MEM ADDR
- MOV {dest}, (CDB) -> 0b101 @ 0b111 @ 0b01 @ dest[15:0]
- LD {dest}, (CDB) -> 0b101 @ 0b111 @ 0b01 @ dest[15:0]
- ; MEM ADDR CDB -> MEM ADDR CD
- MOV (CD), (CDB) -> 0b110 @ 0b111 @ 0b01
- LD (CD), (CDB) -> 0b110 @ 0b111 @ 0b01
- ; MEM ADDR CDB -> MEM ADDR CDB
- MOV (CDB), (CDB) -> 0b111 @ 0b111 @ 0b01
- LD (CDB), (CDB) -> 0b111 @ 0b111 @ 0b01
- ;------------------------------------------------------------------------------------------
- ;------------------------------------------------------------------------------------------
- ; ALI - REG
- {al: ALS} {src: REG} -> al[2:0] @ src[2:0] @ 0b10
- ;------------------------------------------------------------------------------------------
- ; ALI - MEM IMME
- {al: ALS} {src} -> al[2:0] @ 0b100 @ 0b10 @ src[7:0]
- ;------------------------------------------------------------------------------------------
- ; ALI - MEM ADDR
- {al: ALS} ({src}) -> al[2:0] @ 0b101 @ 0b10 @ src[15:0]
- ;------------------------------------------------------------------------------------------
- ; ALI - MEM ADDR CD
- {al: ALS} (CD) -> al[2:0] @ 0b110 @ 0b10
- ;------------------------------------------------------------------------------------------
- ; ALI - MEM ADDR CDB
- {al: ALS} (CDB) -> al[2:0] @ 0b111 @ 0b10
- ;------------------------------------------------------------------------------------------
- ;------------------------------------------------------------------------------------------
- ; JMP Relative
- JPR A -> 0b000 @ 0b000 @ 0b11
- JR A -> 0b000 @ 0b000 @ 0b11
- JPR B -> 0b000 @ 0b001 @ 0b11
- JR B -> 0b000 @ 0b001 @ 0b11
- JPR CD -> 0b000 @ 0b010 @ 0b11
- JR CD -> 0b000 @ 0b010 @ 0b11
- ;------------------------------------------------------------------------------------------
- ; JMP Normal
- JMP CD -> 0b000 @ 0b011 @ 0b11
- JP CD -> 0b000 @ 0b011 @ 0b11
- JMP CDB -> 0b000 @ 0b100 @ 0b11
- JP CDB -> 0b000 @ 0b100 @ 0b11
- JMP {src} -> 0b000 @ 0b101 @ 0b11 @ src[15:0]
- JP {src} -> 0b000 @ 0b101 @ 0b11 @ src[15:0]
- ;------------------------------------------------------------------------------------------
- ; JMP Address
- JMP (CD) -> 0b000 @ 0b110 @ 0b11
- JP (CD) -> 0b000 @ 0b110 @ 0b11
- JMP (CDB) -> 0b000 @ 0b111 @ 0b11
- JP (CDB) -> 0b000 @ 0b111 @ 0b11
- ;------------------------------------------------------------------------------------------
- ;------------------------------------------------------------------------------------------
- ; JMP Relative Conditional
- JPR{fl: FLAGS} A -> 0b100 @ 0b000 @ 0b11 @ fl[7:0]
- JR{fl: FLAGS} A -> 0b100 @ 0b000 @ 0b11 @ fl[7:0]
- JPR{fl: FLAGS} B -> 0b100 @ 0b001 @ 0b11 @ fl[7:0]
- JR{fl: FLAGS} B -> 0b100 @ 0b001 @ 0b11 @ fl[7:0]
- JPR{fl: FLAGS} CD -> 0b100 @ 0b010 @ 0b11 @ fl[7:0]
- JR{fl: FLAGS} CD -> 0b100 @ 0b010 @ 0b11 @ fl[7:0]
- ;------------------------------------------------------------------------------------------
- ; JMP Normal Conditional
- JMP{fl: FLAGS} CD -> 0b100 @ 0b011 @ 0b11 @ fl[7:0]
- JP{fl: FLAGS} CD -> 0b100 @ 0b011 @ 0b11 @ fl[7:0]
- JMP{fl: FLAGS} CDB -> 0b100 @ 0b100 @ 0b11 @ fl[7:0]
- JP{fl: FLAGS} CDB -> 0b100 @ 0b100 @ 0b11 @ fl[7:0]
- JMP{fl: FLAGS} {src} -> 0b100 @ 0b101 @ 0b11 @ src[15:0] @ fl[7:0]
- JP{fl: FLAGS} {src} -> 0b100 @ 0b101 @ 0b11 @ src[15:0] @ fl[7:0]
- ;------------------------------------------------------------------------------------------
- ; JMP Address Conditional
- JMP{fl: FLAGS} (CD) -> 0b100 @ 0b110 @ 0b11 @ fl[7:0]
- JP{fl: FLAGS} (CD) -> 0b100 @ 0b110 @ 0b11 @ fl[7:0]
- JMP{fl: FLAGS} (CDB) -> 0b100 @ 0b111 @ 0b11 @ fl[7:0]
- JP{fl: FLAGS} (CDB) -> 0b100 @ 0b111 @ 0b11 @ fl[7:0]
- ;------------------------------------------------------------------------------------------
- ;------------------------------------------------------------------------------------------
- ; CALL Relative
- CALLR A -> 0b000 @ 0b000 @ 0b11
- CLR A -> 0b000 @ 0b000 @ 0b11
- CALLR B -> 0b000 @ 0b001 @ 0b11
- CLR B -> 0b000 @ 0b001 @ 0b11
- CALLR CD -> 0b000 @ 0b010 @ 0b11
- CLR CD -> 0b000 @ 0b010 @ 0b11
- ;------------------------------------------------------------------------------------------
- ; CALL Normal
- CALL CD -> 0b000 @ 0b011 @ 0b11
- CL CD -> 0b000 @ 0b011 @ 0b11
- CALL CDB -> 0b000 @ 0b100 @ 0b11
- CL CDB -> 0b000 @ 0b100 @ 0b11
- CALL {src} -> 0b000 @ 0b101 @ 0b11 @ src[15:0]
- CL {src} -> 0b000 @ 0b101 @ 0b11 @ src[15:0]
- ;------------------------------------------------------------------------------------------
- ; CALL Address
- CALL (CD) -> 0b000 @ 0b110 @ 0b11
- CL (CD) -> 0b000 @ 0b110 @ 0b11
- CALL (CDB) -> 0b000 @ 0b111 @ 0b11
- CL (CDB) -> 0b000 @ 0b111 @ 0b11
- ;------------------------------------------------------------------------------------------
- ;------------------------------------------------------------------------------------------
- ; CALL Relative Conditional
- CALLR{fl: FLAGS} A -> 0b000 @ 0b000 @ 0b11 @ fl[7:0]
- CLR{fl: FLAGS} A -> 0b000 @ 0b000 @ 0b11 @ fl[7:0]
- CALLR{fl: FLAGS} B -> 0b000 @ 0b001 @ 0b11 @ fl[7:0]
- CLR{fl: FLAGS} B -> 0b000 @ 0b001 @ 0b11 @ fl[7:0]
- CALLR{fl: FLAGS} CD -> 0b000 @ 0b010 @ 0b11 @ fl[7:0]
- CLR{fl: FLAGS} CD -> 0b000 @ 0b010 @ 0b11 @ fl[7:0]
- ;------------------------------------------------------------------------------------------
- ; CALL Normal Conditional
- CALL{fl: FLAGS} CD -> 0b000 @ 0b011 @ 0b11 @ fl[7:0]
- CL{fl: FLAGS} CD -> 0b000 @ 0b011 @ 0b11 @ fl[7:0]
- CALL{fl: FLAGS} CDB -> 0b000 @ 0b100 @ 0b11 @ fl[7:0]
- CL{fl: FLAGS} CDB -> 0b000 @ 0b100 @ 0b11 @ fl[7:0]
- CALL{fl: FLAGS} {src} -> 0b000 @ 0b101 @ 0b11 @ src[15:0] @ fl[7:0]
- CL{fl: FLAGS} {src} -> 0b000 @ 0b101 @ 0b11 @ src[15:0] @ fl[7:0]
- ;------------------------------------------------------------------------------------------
- ; CALL Address Conditional
- CALL{fl: FLAGS} (CD) -> 0b000 @ 0b110 @ 0b11 @ fl[7:0]
- CL{fl: FLAGS} (CD) -> 0b000 @ 0b110 @ 0b11 @ fl[7:0]
- CALL{fl: FLAGS} (CDB) -> 0b000 @ 0b111 @ 0b11 @ fl[7:0]
- CL{fl: FLAGS} (CDB) -> 0b000 @ 0b111 @ 0b11 @ fl[7:0]
- ;------------------------------------------------------------------------------------------
- ;------------------------------------------------------------------------------------------
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement