Contents   Index   Previous   Next

Appendix A - Pico-Code Buffer

Pico-Code Instructions

Name

Op Code

Length

Description

DTX

0000

20

DAT = X; X is a signed 16-bit value

DTA

0001

20

DAT = 2 raised to the X-th power; X is a 16-bit value

DSH

0010

4

DAT = DAT >> 1

ACD

0011

4

ACC = ACC + DAT

ACZ

0100

4

ACC = 0

MOV

1000

12

REG X = REG Y; X,Y are 4-bit values

JMP

1001

20

PC = X; X is a 16-bit value

BRZ

1010

20

PC = X (if ACC = 0)

BRN

1011

20

PC = X (if ACC < 0)

JIN

1100

8

PC = REG Y; Y is a 4-bit value

TRD

1101

8

DAT[0] = Tape[REG Y]  (read a bit from the tape)

TWR

1110

8

Tape[REG Y] = DAT[0]  (write a bit to the tape)

RET

1111

4

Return or Halt

 

Note: the following code is in an early stage of development and is subject to change.

 

Micro

Addr.

Op

Data

Description

XOR

0008

ACZ

 

ACC = 0

 

000C

TRD

0

DAT[0] = Tape[0]

 

0010

ACD

 

ACC = ACC + DAT[0] = DAT[0]

 

0014

BRZ

8048

IF ACC = 0 GOTO 8048

 

0028

ACZ

 

ACC = 0

 

002C

DTX

0000

DAT = 0

 

0040

TWR

0

Tape[0] = 0

 

0044

RET

 

 

 

8048

DTX

0001

DAT = 1

 

005C

TWR

0

Tape[0] = 1

 

0060

JMP

0000

GOTO NXT

 

 

 

 

 

QUAD

0200

DTA

0010

DAT = 2^16

 

 

ACZ

 

 

 

 

ACD

 

ACC = 2^16

 

 

MOV

1C

DAT = REG C

 

 

ACD

 

 

 

 

MOV

C0

REG C = REG C + 2^16

 

 

MOV

2C

 

 

 

DTX

4

 

 

 

MOV

04

 

 

 

DTX

1

 

 

 

MOV

31

REG 3 = 1

 

0220

TRD

2

DAT[0] = Tape[2]

 

 

TWR

3

Tape[3] = DAT[0]

 

 

DTX

1

 

 

 

MOV

02

 

 

 

ACD

 

 

 

 

MOV

20

REG 2++

 

 

MOV

03

 

 

 

ACD

 

 

 

 

MOV

30

REG 3++

 

 

DTX

FFFF

 

 

 

MOV

04

 

 

 

ACD

 

 

 

 

MOV

40

REG 4--

 

 

BRZ

0000

IF ACC = 0 GOTO NXT

 

 

JMP

0220

 

 

 

 

 

 

NXT

0000

DTA

0010

DAT = 2^16

 

 

ACZ

 

 

 

 

ACD

 

ACC = 2^16

 

 

MOV

1C

DAT = REG C

 

 

ACD

 

 

 

 

MOV

C0

REG C = REG C + 2^16

 

 

JMP

0100

GOTO DECO

 

 

 

 

 

DECO

0100

DTA

0014

DAT = 2^20

 

 

ACZ

 

 

 

 

ACD

 

 

 

 

MOV

20

REG 2 = 2^20

 

 

DTA

0004

 

 

 

ACD

 

ACC = 2^20 + 16

 

 

MOV

F0

Reg. F:11,1 = ACC

 

 

DTX

0008

 

 

 

MOV

61

REG 6 = 8

 

8500

TRD

C

DAT[0] = Tape[C] = [10,0]

 

 

ACZ

 

 

 

 

ACD

 

ACC = DAT

 

 

BRZ

9000

IF ACC = 0 GOTO 9000

 

 

MOV

16

DAT = 8,4,2,1 – must init REG 6 = 8 ok

 

 

MOV

91

REG 9 = DAT

 

 

DSH

 

DAT >> 1

 

 

MOV

61

REG 6 = 4,2,1,0

 

 

MOV

06

ACC = REG 6

 

 

BRZ

9100

 

 

 

MOV

12

 

 

 

DSH

 

 

 

 

MOV

21

REG 2 >> 1 = 2^19,18,17,16

 

 

MOV

02

ACC = REG 2

 

 

MOV

1F

DAT = REG F

 

 

ACD

 

ACC = REG F + REG 2

 

 

MOV

F0

REG F = ACC

 

9000

MOV

0C

 

 

 

DTX

0001

 

 

 

ACD

 

ACC++

 

 

MOV

C0

REG C++

 

 

JMP

8500

 

 

9100

MOV

0F

do a JIN on 16 bits to left of Tape[F]…

 

 

DTX

FFF0

 

 

 

ACD

 

ACC = REG F – 16

 

 

MOV

70

REG 7 = start of tape

 

 

MOV

37

save start of op-code

 

 

ACZ

 

 

 

 

MOV

20

SUM = 0

 

 

DTX

16

 

 

 

MOV

61

REG 6 = 16

 

9200

TRD

7

DAT[0] = Tape[7]

 

 

MOV

91

REG 9 = curr bit

 

 

MOV

12

REG 2 = SUM

 

 

ACZ

 

 

 

 

ACD

 

 

 

 

ACD

 

ACC = 2*REG 2

 

 

MOV

19

DAT = curr bit

 

 

ACD

 

ACC = ACC + curr bit

 

 

MOV

20

REG 2 = SUM

 

 

MOV

06

 

 

 

DTX

FFFF

 

 

 

ACD

 

ACC = REG 6 – 1

 

 

MOV

60

REG 6--

 

 

BRZ

9300

 

 

 

MOV

07

 

 

 

DTX

1

 

 

 

ACD

 

 

 

 

MOV

70

REG 7++

 

 

JMP

9200

 

 

9300

MOV

73

restore REG 7 to col. 0

 

 

DTX

FFFC

 

 

 

MOV

0C

 

 

 

ACD

 

 

 

 

MOV

C0

REG C = REG C - 4; back to col. 0

 

 

JIN

2

do the JIN