@X @~
~V7 56 2 -5
~D10
~H                    MUSS
~
~
~D10
~H            CWU025
~D10
~MMANCHESTER UNIVERSITY  -  CONFIDENTIAL~
~
~
~V2 -16
                                                                      ISSUE 10~
~V2 0
~V9 -1
~P
~V9 1
~YCWU025
~S1~M~LCOMPILER WRITERS UTILITIES
~S1~M~LSection 2 Version 5
~S1~LSection 2.5 Disassembler for MC68000
~S1~L1.1 General Description
~BThis section contains a disassembler, OUT.PROG, for the MC68000 that
produces an assembler-like listing of the code.
~S1~L2. Interfaces
~S1~L2.1 Section Interfaces Used
~BNone
~S1~L2.2 Section Interfaces
~BLibrary Procedures:~
~
   OUT.PROG(SEGMENT.NO,START.BYTE,FINISH.BYTE)~
~S11) OUT.PROG(SEGMENT.NO,START.BYTE,FINISH.BYTE)                      OP~
~BThis produces an assembler-like listing of a portion of code as
defined by its parameters. P1 is the segment number containing the
code, P2 is the starting byte within this segment and P3 the finishing
byte of the portion of code to be output. Output is sent to the
current stream. If P3 is zero then a suitable default is taken.
~S1~L3. Implementation
~S1~L3.1 Outline of Operation
~BImplementation is straightforward and is described by the flowcharts.
~S~L4. Compile Jobs
~BThis section contains the following compile jobs~
~
~NMC68000 disassembler compiled on VAX for ATV/RTC operations (4.1)
~NMC68000 disassembler compiled on ATV/RTV for ATV/RTV operations (4.2)
~X%\
~S1~L4.1 Job to compile MC68000 disassembler on VAX for ATV/RTV operation~
~
::BEGIN COP5 (Compiles on VAX to run on MC68000)~
LIB MUSLX/MUSM~
LIB MUTLX5/MUSM~
LIB LIB02X5/MUSM~
LIB VLIBDIR5/MUSM~
MUSL 0 VOP5 %305 2~
*INFORM %2400;~
**TLSEG 0 %0 %15C000 -1 6~
**FLIP CWU025/MU6C 1 0 ;LB: ;->LB!0A! !2C!->LB!0A!~
CWU02~
**ED~
(F D/::MC68000 /)E~
**DEFINEINPUT 7~
**SELECTINPUT 7~
TRANDIR VOP5 OP5? 0 %4000~
CF VOP5 VOP5/MUSM~
DEL VOP5~
DEL VOP500~
STOP~
~
::END COP5~
~S1~L4.2 Job to compile MC68000 disassembler on ATV/RTV for ATV/RTV operation~
~
::BEGIN COP52(Compile on MC68000)~
DO 0 COP52LOG %200~
LIB FLIP/UTIL~
LIB ED/UTIL~
LIB MUSL/UTIL~
MUSL 0 OPBL00 %305 2~
*INFORM %2400;~
**TLSEG 0 %0 %15C000 -1 6~
**FLIP CWU025/MU6C 1 0 ;LB: ;->LB!0A! !2C!->LB!0A!~
CWU02~
**ED~
(F D/::MC68000 /)E~
**DEFINEINPUT 7~
**SELECTINPUT 7~
DELETELIB FLIP/UTIL~
DELETELIB ED/UTIL~
DELETELIB MUSL/UTIL~
LIB LDMUSL/UTIL~
LOAD OPBL00 OP~
STOP~
~
::END COP52~
~X%%
~Y
~P
~V9 -1
~D15
~HFLOWCHARTS
~
~
~H               CWU025
~V9 -1
~F
@TITLE CWU02(5,11)
@COL 1S-2R-3R-4R-5F
@FLOW 1-2-3-4-5
@BOX 1.0
OURPROG SECTION
@BOX 2.0
IMPORTS
@BOX 3.0
MODULE HEADING
@BOX 4.0
PROCEDURES
OUT.PROG [CWU02.1]
@BOX 5.0
END
@BOX 1.1
::OUTPROG SECTION
@BOX 2.1
;LSPEC OUT.HEX($LO32,$IN)
;LSPEC O.POS()/$IN32
;LSPEC SET.O.POS($IN32)
;LSPEC SPACES($IN)
;LSPEC CAPTION(ADDR [$LO8])
;LSPEC NEWLINES($IN)
;LSPEC OUT.CH($IN)
@BOX 3.1
;MODULE(oUTpROG);
@BOX 4.1
::VAX ;LITERAL SEG.SHIFT = 16
::PTV ;LITERAL SEG.SHIFT = 18
::GEM ;LITERAL SEG.SHIFT = 16
::MC68000 ;LITERAL SEG.SHIFT = 14
;LSPEC OUT.PROG($IN, $IN32, $IN32)
#CWU02.1
@BOX 5.1
*END
**IN -1
@END
@TITLE CWU02.1(5,11)
@COL 1S-2R-3T-5R-6T-12T-7R-8R
@COL 4R-9F-13R-10R-11R
@ROW 13-12
@ROW 5-4
@FLOW 1-2-3N-5-6N-12N-7-8-6
@FLOW 6Y-9
@FLOW 12Y-13-6
@FLOW 3Y-4-5
@BOX 1.0
OUTPROG (SEGMENT, START, FINISH)
@BOX 2.0
NEWLINES 0
@BOX 3.0
FINISH NOT SPECIFIED?
@BOX 4.0
SET FINISH DEFAULT
@BOX 5.0
SET UP SEGMENT ACCESS
@BOX 6.0
OUTCODE COMPLETE?
@BOX 7.0
DETERMINE POSITION FOR COLUMN
PROCESS INSTRUCTION ACCORDING
TO BITS 12, 15 OF NEXT 16 BIT WORD
0      [1]
1,2,3  [2]
4      [3]
5      [4]
6      [5]
7      [6]
8      [7]
9      [8]
10     NOT USED
11     [9]
12     [10]
13     [11]
14     [12]
15     NOT USED
@BOX 8.0
OUTPUT INSTRUCTION IN HEX
IN COLUMN
NEWLINES 1
@BOX 9.0
END
@BOX 10.0
OPERAND PRINTING ROUTINES
OUT.EA[20]
OUT.Z[21]
OUT.CC[22]
OUT.DN[23]
OUT.DN.EA[24]
OUT.RM.EA.EA[25]
OUT.AN[26]
OUT.AN.REF[27]
OUT.FN[28]
@BOX 11.0
BASIC PRINT PROCS[30]
OUT.H16
OUT.H8
OUT.H4
@BOX 12.0
NEXT 4 BYTES ZERO?
@BOX 13.0
ADVANCE CODE POSN
@BOX 1.1
;PROC OUT.PROG (SEG, ST, FIN)
;PSPEC GET($IN32)/$IN
;PSPEC OUT.EA($IN)
;PSPEC OUT.Z($IN)
;PSPEC OUT.CC($IN)
;PSPEC OUT.DN($IN)
;PSPEC OUT.DN.EA($IN)
;PSPEC OUT.RM.EA.EA($IN)
;PSPEC OUT.AN($IN)
;PSPEC OUT.AN.REF($IN)
;PSPEC OUT.FN($LO64)
;PSPEC OUT.H16($IN)
;PSPEC OUT.H8($IN)
;PSPEC OUT.H4($IN)
;$IN W0, W1, CH, OP.Z
;$IN32 SEG.A, COL.POS, T, OST
;PROC GET(P)
;ADDR [$LO8] S
;MAKE($LO8, 2, SEG.A + P + P) => S;
;S^[0] <<- 8 ! S^[1] => GET
;END
;ST + 1 / 2 => ST ;FIN / 2 => FIN ;0 => OP.Z
@BOX 2.1
;NEWLINES(0)
@BOX 3.1
;IF FIN = 0
@BOX 4.1
;ST + %40 => FIN
@BOX 5.1
;SEG <<- SEG.SHIFT => SEG.A
@BOX 6.1
;IF FIN < ST
@BOX 7.1
;SPACES(16) ;O.POS()=>T ;SPACES(32) ;O.POS() => COL.POS
;SET.O.POS(T)
;SWITCH GET(1 +> ST - 1 => OST) => W0 ->> 12 \
   OP0, OP1, OP2, OP3, OP4, OP5, OP6, OP7,
   OP8, OP9,OP10,OP11,OP12,OP13,OP14,OP15
;OP0:
#CWU02.1.1
;->OUT
;OP1: ;OP2: ;OP3:
#CWU02.1.2
;->OUT
;OP4:
#CWU02.1.3
;->OUT
;OP5:
#CWU02.1.4
;->OUT
;OP6:
#CWU02.1.5
;->OUT
;OP7:
#CWU02.1.6
;->OUT
;OP8:
#CWU02.1.7
;->OUT
;OP9:
#CWU02.1.8
;->OUT
;OP11:
#CWU02.1.9
;->OUT
;OP12:
#CWU02.1.10
;->OUT
;OP13:
#CWU02.1.11
;->OUT
;OP14:
#CWU02.1.12
;->OUT
;OP10: ;OP15:
;CAPTION (%"????????")
;OUT:
@BOX 8.1
;SET.O.POS(COL.POS)
;OUT.HEX(OST + OST + SEG.A,8) ;SPACES(2)
;WHILE OST < ST DO
   ;OUT.H16(GET(OST))
   ;OUT.CH(" ")
   ;1 +> OST
;OD
;NEWLINES(1)
@BOX 9.1
;END
@BOX 10.1
#CWU02.1.20
#CWU02.1.21
#CWU02.1.22
#CWU02.1.23
#CWU02.1.24
#CWU02.1.25
#CWU02.1.26
#CWU02.1.27
#CWU02.1.28
@BOX 11.1
#CWU02.1.30
@BOX 12.1
;IF GET(ST) = 0 AND GET(ST + 1) =  0
@BOX 13.1
;2 +> ST
@END
@TITLE CWU02.1.1(5,11)
@COL 8R-9T-10R-11R
@COL 1S-2T-3T-4R-5R-6R-7F
@COL 12R-13T-14R-15R
@ROW 3-12
@ROW 8-4
@FLOW 1-2N-3N-4-5-6-7
@FLOW 2Y-12-13N-14-7
@FLOW 13Y-15-7
@FLOW 3Y-8-9N-10-6
@FLOW 9Y-11-6
@BOX 1.0
OPCODE WITH BITS 12-15 = 0
@BOX 2.0
MOVEP?
@BOX 3.0
BTST, BCLR, BCHG, SET?
@BOX 4.0
PRINT OPCODE
AND SIZE
@BOX 5.0
PRINT IMMEDIATE OPERAND
@BOX 6.0
PRINT ,EA
@BOX 7.0
END
@BOX 8.0
PRINT OPCODE
@BOX 9.0
DYNAMIC BIT?
@BOX 10.0
PRINT BIT NO
@BOX 11.0
PRINT DN
@BOX 12.0
PRINT OPCODE
PRINT SIZE
@BOX 13.0
SOURCE OPERAND A REGISTER?
@BOX 14.0
PRINT  D(AN), DN
@BOX 15.0
PRINT DN, D(AN)
@BOX 1.1
::CWU02.1.1
@BOX 2.1
;IF W0 & %138 = %108
@BOX 3.1
;IF W0 & %100 /= 0 OR W0 & %E00 = %800
@BOX 4.1
;BEGIN
;DATAVEC OPS($LO32)
"ORI" "ANDI" "SUBI" "ADDI"
"????" "EORI" "CMPI" "????"
END
;OUT.FN(OPS[W0 ->> 9])
;OUT.Z(W0)
;END
@BOX 5.1
;GET(ST) => W1
;1 +> ST
;OUT.CH("#")
;ALTERNATIVE W0 ->> 6 & 3 FROM
;OUT.H8(W1)
;OUT.H16(W1)
;BEGIN ;OUT.H16(W1) ;OUT.H16(GET(1+>ST-1)) ;END
;CAPTION(%" ??? ")
;END
@BOX 6.1
;OUT.CH(",")
;OUT.CH(" ")
;OUT.EA(W0)
@BOX 7.1
::END
@BOX 8.1
;BEGIN
;DATAVEC OPS($LO32)
"BTST" "BCHG" "BCLR" "BSET"
;END
;OUT.FN(OPS[W0 ->> 6 & 3])
;OUT.CH(" ")
;END
@BOX 9.1
;IF W0 & %100 /= 0
@BOX 10.1
;OUT.CH("#")
;OUT.H16(GET(1 +> ST -1))
@BOX 11.1
;OUT.DN(W0 ->> 9)
@BOX 12.1
;OUT.FN("MOVEP")
;IF W0 & %40 = 0 THEN
   ;OUT.CH("W")
;ELSE
   ;OUT.CH("L")
;FI
;OUT.CH(" ")
@BOX 13.1
;GET(ST) => W1
;1 +> ST
;IF W0 & %80 /= 0
@BOX 14.1
;OUT.H16(W1)
;OUT.AN.REF(W0)
;OUT.CH(",")
;OUT.CH(" ")
;OUT.DN(W0 ->> 9)
@BOX 15.1
;OUT.DN(W0 ->> 9)
;OUT.CH(",")
;OUT.CH(" ")
;OUT.H16(W1)
;OUT.AN.REF(W0)
@END
@TITLE CWU02.1.2(5,6)
@COL 1S-2R-3R-4F
@FLOW 1-2-3-4
@BOX 1.0
OPCODE WITH BITS 12-15 = 1,2,3
@BOX 2.0
PRINT MOVE B/W/L
@BOX 3.0
PRINT EA,EA
@BOX 4.0
END
@BOX 1.1
::CWU02.1.2
@BOX 2.1
;BEGIN
;OUT.FN("MOVE")
;DATAVEC OP.ZS($LO8)
3 0 2 1
END
;DATAVEC Z($LO8)
"?" "B" "L" "W"
END
;OUT.CH(Z[W0 ->> 12 & 3  => T])
;OP.ZS[T] => OP.Z
;OUT.CH(" ")
;END
@BOX 3.1
;OUT.EA(W0)
;OUT.CH(",")
;OUT.CH(" ")
;OUT.EA(W0 ->> 9 & 7 ! (W0 ->> 3 & %38) )
@BOX 4.1
::END
@END
@TITLE CWU02.1.3(5,6)
@COL 1S-2T-3R-4F
@COL 5R-6R
@ROW 3-5
@FLOW 1-2N-3-4
@FLOW 2Y-5-6-4
@BOX 1.0
OPCODE WITH BITS 12-15 = 4
@BOX 2.0
CHK OR LEA?
@BOX 3.0
PROCESS ACCORDING TO BITS 9-11
0  [CWU02.1.3.0]
1  [CWU02.1.3.1]
2  [CWU02.1.3.2]
3  [CWU02.1.3.3]
4  [CWU02.1.3.4]
5  [CWU02.1.3.5]
6  [CWU02.1.3.6]
7  [CWU02.1.3.7]
@BOX 4.0
END
@BOX 5.0
PRINT OPCODE
@BOX 6.0
PRINT OPERANDS
@BOX 1.1
::CWU02.1.3
@BOX 2.1
;IF W0 & %100 /= 0
@BOX 3.1
;ALTERNATIVE W0 ->> 9 & 7 FROM
;BEGIN
#CWU02.1.3.0
;END
;BEGIN
#CWU02.1.3.1
;END
;BEGIN
#CWU02.1.3.2
;END
;BEGIN
#CWU02.1.3.3
;END
;BEGIN
#CWU02.1.3.4
;END
;BEGIN
#CWU02.1.3.5
;END
;BEGIN
#CWU02.1.3.6
;END
;BEGIN
#CWU02.1.3.7
;END
;END
@BOX 4.1
::END
@BOX 5.1
;IF W0 & %C0 = %80 THEN
   ;OUT.FN("CHK ")
;ELSE IF W0 & %C0 = %C0 THEN
   ;OUT.FN("LEA ")
;ELSE
   ;OUT.FN("???? ")
;FI FI
@BOX 6.1
;IF W0 & %40 = 0 THEN
   ;OUT.DN.EA(W0 & %FEFF)
;ELSE
   ;OUT.EA(W0)
   ;OUT.CH(",")
   ;OUT.CH(" ")
   ;OUT.AN(W0 ->> 9)
;FI
@END
@TITLE CWU02.1.3.0(5,6)
@COL 1S-2T-3R-4R-5F
@COL 6R
@ROW 3-6
@FLOW 1-2N-3-4-5
@FLOW 2Y-6-4
@BOX 1.0
PROCESS OPCODE WITH
BITS 12 -> 15 = 4 AND
BITS 9 -> 11 = 0
@BOX 2.0
BITS 6, 7 /= 3
@BOX 3.0
PRINT MOVE SR,
@BOX 4.0
PRINT EA
@BOX 5.0
END
@BOX 6.0
PRINT NEGX OPCODE
@BOX 1.1
::CWU02.1.3.0
@BOX 2.1
;IF W0 & %C0 /= %C0
@BOX 3.1
;OUT.FN("MOVE SR,")
;OUT.CH(" ")
@BOX 4.1
;OUT.EA(W0)
@BOX 5.1
::END
@BOX 6.1
;OUT.FN("NEGX")
;OUT.Z(W0)
@END
@TITLE CWU02.1.3.1(5,6)
@COL 1S-2R-3R-4F
@FLOW 1-2-3-4
@BOX 1.0
PROCESS OPCODE WITH
BITS 12 -> 15 = 4 AND
BITS 9 -> 11 = 1
@BOX 2.0
PRINT CLRZ
@BOX 3.0
PRINT EA
@BOX 4.0
END
@BOX 1.1
::CWU02.1.3.1
@BOX 2.1
;OUT.FN("CLR")
;OUT.Z(W0)
@BOX 3.1
;OUT.EA(W0)
@BOX 4.1
::END
@END
@TITLE CWU02.1.3.2(5,6)
@COL 1S-2T-3R-4R-5F
@COL 6R-7R
@ROW 3-6
@FLOW 1-2N-3-4-5
@FLOW 2Y-6-7-5
@BOX 1.0
PROCESS OPCODE WITH
BITS 12 -> 15 = 4 and
BIT 9 9 -> 11 = 2
@BOX 2.0
BITS 6, 7 /= 3?
@BOX 3.0
PRINT MOVE
@BOX 4.0
PRINT EA, CCR
@BOX 5.0
END
@BOX 6.0
PRINT NEGZ
@BOX 7.0
PRINT EA
@BOX 1.1
::CWU02.1.3.2
@BOX 2.1
;IF W0 & %C0 /= %C0
@BOX 3.1
;OUT.FN("MOVE ")
@BOX 4.1
;OUT.EA(W0)
;OUT.FN(", CCR")
@BOX 5.1
::END
@BOX 6.1
;OUT.FN("NEG")
;OUT.Z(W0)
@BOX 7.1
;OUT.EA(W0)
@END
@TITLE CWU02.1.3.3(5,6)
@COL 1S-2T-3R-4R-5F
@COL 6R-7R
@ROW 3-6
@FLOW 1-2N-3-4-5
@FLOW 2Y-6-7-5
@BOX 1.0
PROCESS OPCODE WITH
BITS 12 -> 15 = 4 and
BITS 9 -> 11 = 2
@BOX 2.0
BITS 6, 7 = 3?
@BOX 3.0
PRINT MOVE
@BOX 4.0
PRINT EA,SR
@BOX 5.0
END
@BOX 6.0
PRINT NOTZ
@BOX 7.0
PRINT EA
@BOX 1.1
::CWU02.1.3.3
@BOX 2.1
;IF W0 & %C0 /= %C0
@BOX 3.1
;OUT.FN("MOVE ")
@BOX 4.1
;OUT.EA(W0)
;OUT.FN(", SR")
@BOX 5.1
::END
@BOX 6.1
;OUT.FN("NOT")
;OUT.Z(W0)
@BOX 7.1
;OUT.EA(W0)
@END
@TITLE CWU02.1.3.4(5,6)
@COL 7R-8R
@COL 1S-2T-3T-4R-5R-6F
@COL 9R-10R
@ROW 7-4-9
@FLOW 1-2N-3N-4-5-6
@FLOW 2Y-9-10-6
@FLOW 3Y-7-8-6
@BOX 1.0
PROCESS OPCODE WITH
BITS 12 -> 15 = 4 AND
BITS 9 -> 11 = 4
@BOX 2.0
SWAP
EXTW
EXTL?
@BOX 3.0
MOVE.M
@BOX 4.0
PRINT NBCD/PEA
@BOX 5.0
PRINT EA
@BOX 6.0
END
@BOX 7.0
PRINT MOVEMZ
@BOX 8.0
PRINT REG.LIST, EA
@BOX 9.0
PRINT OPCODE
@BOX 10.0
PRINT DN
@BOX 1.1
::CWU02.1.3.4
@BOX 2.1
;IF W0 & %38 = 0 AND
   W0 & %C0 /= 0
@BOX 3.1
;IF W0 & %80 /= 0
@BOX 4.1
;IF W0 & %40 = 0 THEN
   ;OUT.FN("NBCD ")
;ELSE
   ;OUT.FN("PEA ")
;FI
@BOX 5.1
;OUT.EA(W0)
@BOX 6.1
::END
@BOX 7.1
;IF W0 & %40 = 0 THEN
   ;OUT.FN("MOVEMW ")
;ELSE
   ;OUT.FN("MOVEML ")
;FI
@BOX 8.1
;OUT.H16(GET(1+>ST-1))
;OUT.CH(",")
;OUT.CH(" ")
@BOX 9.1
;BEGIN
;DATAVEC OPS($LO64)
"????? "
"SWAP "
"EXTW "
"EXTL "
END
;OUT.FN(OPS[W0 ->> 6 & 3])
;END
@BOX 10.1
;OUT.DN(W0)
@END
@TITLE CWU02.1.3.5(5,6)
@COL 1S-2T-3R-4R-5F
@COL 6R
@ROW 3-6
@FLOW 1-2N-3-4-5
@FLOW 2Y-6-4
@BOX 1.0
PROCESS OPCODE WITH
BITS 12 -> 15 = 4 AND
BITS 9 -> 11 = 2
@BOX 2.0
BITS 6, 7 /= 3?
@BOX 3.0
PRINT TAS
@BOX 4.0
PRINT EA
@BOX 5.0
END
@BOX 6.0
PRINT TSTZ
@BOX 1.1
::CWU02.1.3.5
@BOX 2.1
;IF W0 & %C0 & 3 /= 3
@BOX 3.1
;OUT.FN("TAS ")
@BOX 4.1
;OUT.EA(W0)
@BOX 5.1
::END
@BOX 6.1
;OUT.FN("TST")
;OUT.Z(W0)
@END
@TITLE CWU02.1.3.6(5,6)
@COL 1S-2R-3R-4F
@FLOW 1-2-3-4
@BOX 1.0
PROCESS OPCODE WITH
BITS 12 -> 15 = 4 AND
BITS 10 -> 11 = 6
@BOX 2.0
PRINT MOVEMZ
@BOX 3.0
PRINT EA, REGLIST
@BOX 4.0
END
@BOX 1.1
::CWU02.1.3.6
@BOX 2.1
;IF W0 & %40 = 0 THEN
   ;OUT.FN("MOVEMW ")
;ELSE
   ;OUT.FN("MOVEML ")
;FI
@BOX 3.1
;OUT.EA(W0)
;OUT.CH(",")
;OUT.CH(" ")
;OUT.H.16(GET(1+>ST-1))
@BOX 4.1
::END
@END
@TITLE CWU02.1.3.7(5,6)
@COL 11R-12R-13R
@COL 1S-2T-3T-4T-5R-6T-7R-8T-9R-10F
@COL 14R-15T-16R-17R-18R
@ROW 11-4
@ROW 3-14
@ROW 13-7-17
@FLOW 1-2N-3N-4N-5-6N-7-8N-9-10
@FLOW 2Y-14-15N-16-10
@FLOW 15Y-10
@FLOW 3Y-11-12-10
@FLOW 4-17-18-10
@FLOW 6Y-13-10
@FLOW 8Y-10
@BOX 1.0
PROCESS OPCODE WITH
BITS 12 -> 15 = 4 AND
BITS 9 -> 11 = 7
@BOX 2.0
NO EXPLICIT OPERAND BITS IN
FIRST 16 BITS OF INSTR?
@BOX 3.0
JSR/JMP?
@BOX 4.0
TRAP?
@BOX 5.0
PRINT OP.CODE
@BOX 6.0
LINK?
@BOX 7.0
PRINT AN
@BOX 8.0
NOT MOVE TO USP?
@BOX 9.0
PRINT, USP
@BOX 10.0
END
@BOX 11.0
PRINT OPCODE
@BOX 12.0
PRINT EA
@BOX 13.0
PRINT AN, #DISP
@BOX 14.0
PRINT OP.CODE
@BOX 15.0
NOT STOP
@BOX 16.0
PRINT #IMM
@BOX 17.0
PRINT OPCODE
@BOX 18.0
PRINT #VEC
@BOX 1.1
::CWU02.1.3.7
@BOX 2.1
;IF W0 & %1F0 = %70
@BOX 3.1
;IF W0 & %380 = %280
@BOX 4.1
;IF W0 & %30 = 0
@BOX 5.1
;BEGIN
;DATAVEC OPS($LO64)
"LINK "
"UNLK "
"MOVE "
"MOVE USP"
END
;OUT.FN(OPS[W0->> 3 - 2 & 3 => T])
;IF T = 3 THEN
   ;OUT.CH(",")
   ;OUT.CH(" ")
;FI
;END
@BOX 6.1
;IF T = 0
@BOX 7.1
;OUT.AN(W0)
@BOX 8.1
;IF T /= 2
@BOX 9.1
;OUT.FN(", USP")
@BOX 10.1
::END
@BOX 11.1
;IF W0 & %40 = 0 THEN
   ;OUT.FN("JSR ")
;ELSE
   ;OUT.FN("JMP ")
;FI
@BOX 12.1
;OUT.EA(W0)
@BOX 13.1
;OUT.AN(W0)
;OUT.FN(", #")
;OUT.H16(GET(1+>ST-1))
@BOX 14.1
;BEGIN
;DATAVEC OPS($LO64)
"RESET"
"NOP"
"STOP "
"RTE"
"?????"
"RTS"
"TRAPV"
"RTR"
END
;OUT.FN(OPS[W0 & 7])
;END
@BOX 15.1
;IF W0 & 7 /= 2
@BOX 16.1
;OUT.CH("#")
;OUT.H.16(GET(1+>ST-1))
@BOX 17.1
;OUT.FN("TRAP ")
@BOX 18.1
;OUT.CH("#")
;OUT.H4(W0 & %F)
@END
@TITLE CWU02.1.4(5,9)
@COL 1S-2T-3R-4T-5F
@COL 6T-7R-8R-9R-10R
@ROW 3-6
@FLOW 1-2N-3-4-5
@FLOW 2Y-6N-7-8-5
@FLOW 6Y-9-10-5
@BOX 1.0
OPCODE WITH BITS 12 - 15 = 5
@BOX 2.0
DBCC, SCC?
@BOX 3.0
PRINT ADDQ, SUBQ
PRINT SIZE
@BOX 4.0
PRINT OPERANDS
@BOX 5.0
END
@BOX 6.0
DBCC?
@BOX 7.0
PRINT OPCODE
@BOX 8.0
PRINT OPERANDS
@BOX 9.0
PRINT OPCODE
@BOX 10.0
PRINT OPERANDS
@BOX 1.1
::CWU02.1.4
@BOX 2.1
;IF W0 & %C0 = %C0
@BOX 3.1
;IF W0 & %100 = 0 THEN
   ;OUT.FN("ADDQ")
;ELSE
   ;OUT.FN("SUBQ")
;FI
;OUT.Z(W0)
@BOX 4.1
;IF W0 ->> 9 & 7 => T = 0 THEN
   ;8 => T
;FI
;OUT.CH(T + "0")
;OUT.CH(",")
;OUT.CH(" ")
;OUT.EA(W0)
@BOX 5.1
::END
@BOX 6.1
;IF W0 & %38 = %8
@BOX 7.1
;OUT.CH("S")
;OUT.CC(W0)
;OUT.CH(" ")
@BOX 8.1
;OUT.EA(W0)
@BOX 9.1
;OUT.FN("DB")
;IF W0 & %F00 = %100 THEN
   ;OUT.CH("R")
   ;OUT.CH("A")
;ELSE
   ;;OUT.CC(W0)
;FI
;OUT.CH(" ")
@BOX 10.1
;OUT.DN(W0)
;OUT.FN(", PC + ")
;OUT.H16(GET(1 +> ST - 1))
@END
@TITLE CWU02.1.5(5,7)
@COL 1S-2R-3R-4F
@FLOW 1-2-3-4
@BOX 1.0
OPCODE WITH BITS 12 - 15 = 6
@BOX 2.0
PRINT BCC
 OR BR
 OR BSR
@BOX 3.0
PRINT DISPLACEMENT
PRINT TARGET ADDRESS
@BOX 4.0
END
@BOX 1.1
::CWU02.1.5
;BEGIN
;$IN8 I8
;$IN16 I16
;$IN I
@BOX 2.1
;IF W0 & %F00 = 0 THEN
   ;OUT.FN("BRA")
;ELSE IF W0 & %F00 = %100 THEN
   ;OUT.FN("BSR")
;ELSE
   ;OUT.CH("B")
   ;OUT.CC(W0)
;FI FI
;OUT.CH(" ")
@BOX 3.1
;IF W0 & %FF /= 0 THEN
      ;OUT.H8(W0 & %FF => I8 => I)
;ELSE
    ;OUT.H16(GET(1  +>  ST - 1) & %FFFF => I16 => I)
;FI
;OUT.CH(" ")
;OUT.CH("{")
;OUT.H16(OST *2 + 2 + I)
;OUT.CH("}")
@BOX 4.1
;END
@END
@TITLE CWU02.1.6(5,6)
@COL 1S-2R-3R-4F
@FLOW 1-2-3-4
@BOX 1.0
OPCODE WITH BITS 12 - 15 = 7
@BOX 2.0
PRINT MOVEQ
@BOX 3.0
PRINT #DATA, DN
@BOX 4.0
END
@BOX 1.1
::CWU02.1.6
@BOX 2.1
;OUT.FN("MOVEQ ")
;IF W0 & %100 /= 0 THEN
   ;OUT.CH("?")
;FI
@BOX 3.1
;OUT.CH("#")
;OUT.H8(W0)
;OUT.CH(",")
;OUT.CH(" ")
;OUT.DN(W0 ->> 9)
@BOX 4.1
::END
@END
@TITLE CWU02.1.7(5,6)
@COL 7R-8R
@COL 1S-2T-3T-4R-5R-6F
@COL 9R-10R
@ROW 7-4-9
@FLOW 1-2N-3N-4-5-6
@FLOW 2Y-9-10-6
@FLOW 3Y-7-8-6
@BOX 1.0
OPCODE WITH BITS 12 - 15 = 8
@BOX 2.0
DIVU, DIVS?
@BOX 3.0
SBCD?
@BOX 4.0
PRINT OR
PRINT SIZE
@BOX 5.0
PRINT OPERANDS
@BOX 6.0
END
@BOX 7.0
PRINT OPCODE
@BOX 8.0
PRINT OPERANDS
@BOX 9.0
PRINT OPCODE
@BOX 10.0
PRINT OPERANDS
@BOX 1.1
::CWU02.1.7
@BOX 2.1
;IF W0 & %C0 = %C0
@BOX 3.1
;IF W0 & %1F0 = %100
@BOX 4.1
;OUT.FN("OR")
;OUT.Z(W0)
@BOX 5.1
;OUT.DN.EA(W0)
@BOX 6.1
::END
@BOX 7.1
;OUT.FN("SBCD ")
@BOX 8.1
;OUT.RM.EA.EA(W0)
@BOX 9.1
;IF W0 & %100 = 0 THEN
   ;OUT.FN("DIVU ")
;ELSE
   ;OUT.FN("DIVS ")
;FI
@BOX 10.1
;OUT.DN.EA(W0 & %FEFF)
@END
@TITLE CWU02.1.8(5,7)
@COL 7R-8R
@COL 1S-2T-3T-4R-5R-6F
@COL 9R-10R
@ROW 7-4-9
@FLOW 1-2N-3N-4-5-6
@FLOW 2Y-7-8-6
@FLOW 3Y-9-10-6
@BOX 1.0
OPCODE WITH BITS 12 - 15 = 9
@BOX 2.0
SUBA?
@BOX 3.0
SUB?
@BOX 4.0
PRINT SUBX
PRINT SIZE
@BOX 5.0
PRINT OPERANDS
@BOX 6.0
END
@BOX 7.0
PRINT SUBA
@BOX 8.0
PRINT EA.L/W,AN
@BOX 9.0
PRINT SUB
PRINT SIZE
@BOX 10.0
PRINT OPERANDS
@BOX 1.1
::CWU02.1.8
@BOX 2.1
;IF W0 & %C0 = %C0
@BOX 3.1
;IF W0 & %130 /= %100
@BOX 4.1
;OUT.FN("SUBX")
;OUT.Z(W0)
@BOX 5.1
;OUT.RM.EA.EA(W0)
@BOX 6.1
::END
@BOX 7.1
;OUT.FN("SUBA ")
@BOX 8.1
;IF W0 & %100 = 0 THEN
   ;1 => OP.Z
;ELSE
   ;2 => OP.Z
;FI
;OUT.EA(W0)
;OUT.CH(".")
;IF W0 & %100 =  0THEN
   ;OUT.CH("W")
;ELSE
   ;OUT.CH("L")
;FI
;OUT.CH(",")
;OUT.CH(" ")
;OUT.AN(W0 ->> 9)
@BOX 9.1
;OUT.FN("SUB")
;OUT.Z(W0);
@BOX 10.1
;OUT.DN.EA(W0)
@END
@TITLE CWU02.1.9(5,7)
@COL 12R-13R-7R-8R
@COL 1S-2T-11T-3T-4R-5R-6F
@COL 9R-10R
@ROW 12-3
@ROW 7-4-9
@FLOW 1-2N-11N-3N-4-5-6
@FLOW 2Y-9-10-6
@FLOW 3Y-7-8-6
@FLOW 11Y-12-13-6
@BOX 1.0
OPCODE WITH BITS 12 - 15 = 11
@BOX 2.0
CMP?
@BOX 3.0
EOR?
@BOX 4.0
PRINT CMPM
PRINT SIZE
@BOX 5.0
PRINT OPERANDS
@BOX 6.0
END
@BOX 7.0
PRINT EOR
PRINT SIZE
@BOX 8.0
PRINT DN, EA
@BOX 9.0
PRINT CMP
PRINT SIZE
@BOX 10.0
PRINT OPERANDS
@BOX 11.0
CMPA
@BOX 12.0
PRINT CMPA
@BOX 13.0
PRINT OPERAND
AND ITS SIZE
@BOX 1.1
::CWU02.1.9
@BOX 2.1
;IF W0 & %100 = 0
@BOX 3.1
;IF W0 & %38 /= 8
@BOX 4.1
;OUT.FN("CMPM")
;OUT.Z(W0)
@BOX 5.1
;OUT.EA(W0 & 7 ! %18)
;OUT.CH(",")
;OUT.CH(" ")
;OUT.EA(W0 ->> 9 & 7 ! %18)
@BOX 6.1
::END
@BOX 7.1
;OUT.FN("EOR")
;OUT.Z(W0)
@BOX 8.1
;OUT.DN.EA(W0)
@BOX 9.1
;OUT.FN("CMP")
;OUT.Z(W0)
@BOX 10.1
;OUT.DN.EA(W0)
@BOX 11.1
;IF W0 & %C0 = %C0
@BOX 12.1
;OUT.FN("CMPA ")
@BOX 13.1
;OUT.EA(W0)
;OUT.CH(".")
;IF W0 & %100 = 0 THEN
    ;OUT.CH("W")
;ELSE
   ;OUT.CH("L")
;FI
;OUT.CH(",")
;OUT.CH(" ")
;OUT.AN(W0 ->> 9)
@END
@TITLE CWU02.1.10(5,6)
@COL 8R-9R-10R-11R
@COL 1S-2T-3T-4T-5R-6R-7F
@COL 12R-13R
@ROW 8-4-12
@FLOW 1-2N-3N-4N-5-6-7
@FLOW 2Y-8-9-7
@FLOW 3Y-12-13-7
@FLOW 4Y-10-11-7
@BOX 1.0
OPCODE WITH BITS 12 - 15 = 12
@BOX 2.0
MULU/MULS?
@BOX 3.0
AND?
@BOX 4.0
ABCD?
@BOX 5.0
PRINT EXG
@BOX 6.0
PRINT OPERANDS
@BOX 7.0
END
@BOX 8.0
PRINT MULU/MULS
@BOX 9.0
PRINT OPERANDS
@BOX 10.0
PRINT ABCD
@BOX 11.0
PRINT OPERANDS
@BOX 12.0
PRINT AND
@BOX 13.0
PRINT OPERANDS
@BOX 1.1
::CWU02.1.10
@BOX 2.1
;IF W0 & %C0 = %C0
@BOX 3.1
;IF W0 & %100 = 0 OR W0 & %38 > 8
@BOX 4.1
;IF W0 & %C0 = 0
@BOX 5.1
;OUT.FN("EXG ")
@BOX 6.1
;IF W0 & %48 = %48 THEN
   ;OUT.AN(W0 ->> 9)
;ELSE
   ;OUT.DN(W0 ->> 9)
;FI
;IF W0 & 8 = 0 THEN
   ;OUT.DN(W0)
;ELSE
   ;OUT.AN(W0)
;FI
@BOX 7.1
::END
@BOX 8.1
;IF W0 & %100 = 0 THEN
   ;OUT.FN("MULU ")
;ELSE
   ;OUT.FN("MULS ")
;FI
@BOX 9.1
;1 => OP.Z
;OUT.DN.EA(W0 & %FEFF)
@BOX 10.1
;OUT.FN("ABCD ")
@BOX 11.1
;OUT.RM.EA.EA(W0)
@BOX 12.1
;OUT.FN("AND")
;OUT.Z(W0)
@BOX 13.1
;OUT.DN.EA(W0)
@END
@TITLE CWU02.1.11(5,8)
@COL 7R-8R
@COL 1S-2T-3R-4T-5R-6F
@COL 9R-10R
@ROW 7-5-9
@FLOW 1-2N-3-4N-5-6
@FLOW 2Y-9-10-6
@FLOW 4Y-7-8-6
@BOX 1.0
OPCODE WITH BITS 12 - 15 = 13
@BOX 2.0
ADDX?
@BOX 3.0
PRINT ADD
@BOX 4.0
ADDA
@BOX 5.0
PRINT SIZE
PRINT OPERANDS
@BOX 6.0
END
@BOX 7.0
PRINT SIZE
@BOX 8.0
PRINT OPERANDS
@BOX 9.0
PRINT ADDX
@BOX 10.0
PRINT OPERANDS
@BOX 1.1
::CWU02.1.11
@BOX 2.1
;IF W0 & %130 = %100 AND W0 & %C0 /= %C0
@BOX 3.1
;OUT.FN("ADD")
@BOX 4.1
;IF W0 & %C0 = %C0
@BOX 5.1
;OUT.Z(W0)
;OUT.DN.EA(W0)
@BOX 6.1
::END
@BOX 7.1
;IF W0 & %100 = 0 THEN
   ;OUT.CH("W")
   ;1 => OP.Z
;ELSE
   ;OUT.CH("L")
   ;2 => OP.Z
;FI
;OUT.CH(" ")
@BOX 8.1
;OUT.EA(W0)
;OUT.CH(",")
;OUT.CH(" ")
;OUT.AN(W0 ->> 9)
@BOX 9.1
;OUT.FN("ADDX")
;OUT.Z(W0)
@BOX 10.1
;OUT.RM.EA.EA(W0)
@END
@TITLE CWU02.1.12(5,6)
@COL 9R
@COL 1S-2R-3T-4R-5T-6R-7R-8F
@COL 10R
@ROW 9-6-10
@FLOW 1-2-3N-4-5N-6-7-8
@FLOW 3Y-10-8
@FLOW 5Y-9-7
@BOX 1.0
OPCODE WITH BITS 12 - 15 = 14
@BOX 2.0
OPCODE VECTOR
SET DIRECTION CHAR
@BOX 3.0
MEMORY SHIFT?
@BOX 4.0
PRINT OPCODE
PRINT SIZE
@BOX 5.0
COUNT SHIFT
@BOX 6.0
PRINT DN
@BOX 7.0
PRINT ,DN
@BOX 8.0
END
@BOX 9.0
PRINT COUNT
@BOX 10.0
PRINT OPCODE
PRINT EA
@BOX 1.1
::CWU02.1.12
@BOX 2.1
;DATAVEC OPS($LO32)
"AS" "LS" "ROX" "RO"
END
;IF W0 & %100 = 0 THEN
   ;"R" => CH
;ELSE
;"L" => CH
;FI
@BOX 3.1
;IF W0 & %C0 = %C0
@BOX 4.1
;OUT.FN(OPS[W0 ->> 3 & 3] <<- 8 ! CH)
;OUT.Z(W0)
@BOX 5.1
;IF W0 & %20 = 0
@BOX 6.1
;OUT.DN(W0 ->> 9)
@BOX 7.1
;OUT.CH(",")
;OUT.CH(" ")
;OUT.DN(W0)
@BOX 8.1
::END
@BOX 9.1
;IF W0 ->> 9 & 7 => T = 0 THEN
   ;8 => T
;FI
;OUT.CH(T + "0")
@BOX 10.1
;OUT.FN(OPS[W0 ->> 9 & 3] <<- 8 ! CH)
;OUT.CH(" ")
;OUT.EA(W0)
@END
@TITLE CWU02.1.20(5,6)
@COL 1S-2R-3F
@FLOW 1-2-3
@BOX 1.0
OUT.EA(EA)
@BOX 2.0
PRINT EA
@BOX 3.0
END
@BOX 1.1
;PROC OUT.EA(EA)
;$IN W1
@BOX 2.1
;ALTERNATIVE EA ->> 3 & 7 FROM
;BEGIN ;OUT.DN(EA) ;END
;BEGIN ;OUT.AN(EA) ;END
;BEGIN ;OUT.AN.REF(EA) ;END
;BEGIN ;OUT.AN.REF(EA) ;OUT.CH("+") ;END
;BEGIN ;OUT.CH("-") ;OUT.AN.REF(EA) ;END
;BEGIN ;OUT.H16(GET(1+>ST-1)) ;OUT.AN.REF(EA) ;END
::ADDRESS REGISTER INDIRECT WITH INDEX
;BEGIN
   ;GET(1 +> ST -1) => W1
   ;OUT.H8(W1)
   ;OUT.CH("(")
   ;OUT.CH("A")
   ;OUT.CH(EA & 7 + "0")
   ;OUT.CH(",")
   ;OUT.CH(" ")
;IF W1 & %8000 = 0 THEN
   ;OUT.DN(W1 ->> 12)
;ELSE
   ;OUT.AN(W1 ->> 12)
;FI
;OUT.CH(".")
;IF W1 & %800 = 0 THEN
   ;OUT.CH("W")
;ELSE
   ;OUT.CH("L")
;FI
;OUT.CH(")")
;END
::EA.MODE 7
;BEGIN
   ;IF EA & 7 > 4 THEN
      ;CAPTION(%"?????")
   ;ELSE
      ;ALTERNATIVE EA & 7 FROM
         ;BEGIN
            ;OUT.CH("@")
            ;OUT.H16(GET(1+>ST-1))
         ;END
         ;BEGIN
            ;OUT.CH("@")
            ;OUT.H16(GET(ST))
            ;OUT.H16(GET(ST + 1))
            ;2 +> ST
         ;END
         ;BEGIN
            ;CAPTION(%"PC + ")
            ;OUT.H16(GET(1+>ST-1))
         ;END
         ;BEGIN
            ;CAPTION(%"PC + ")
            ;GET(1+>ST-1) => W1
            ;IF W1 & %8000 = 0 THEN
               ;OUT.DN(W1 ->> 12)
            ;ELSE
               ;OUT.AN(W1 ->> 12)
            ;FI
            ;OUT.CH(".")
            ;IF W1 & %800 = 0 THEN
               ;OUT.CH("W")
            ;ELSE
               ;OUT.CH("L")
            ;FI
            ;CAPTION(%" + ")
            ;OUT.H8(W1)
         ;END
         ;BEGIN
            ;GET(1 +> ST -1) => W1
            ;OUT.CH("#")
            ;ALTERNATIVE OP.Z & 3 FROM
                ;OUTH8(W1)
                ;OUTH16(W1)
                ;BEGIN
                   ;OUT.H16(W1)
                   ;OUT.H16(GET(1 +> ST - 1))
                ;END
                ;CAPTION(%"???")
            ;END
            ;END
      ;END
   ;FI
;END
;END
@BOX 3.1
;END
@END
@TITLE CWU02.1.21(5,6)
@COL 1S-2R-3F
@FLOW 1-2-3
@BOX 1.0
OUT.Z(SIZE)
SIZE IN BITS 6, 7
OUT.CH
@BOX 2.0
PRINT B OR W OR L
@BOX 3.0
END
@BOX 1.1
;PROC OUT.Z(Z)
;$IN CH
@BOX 2.1
;ALTERNATIVE Z ->> 6 & 3 => OP.Z FROM
   ;"B" => CH
   ;"W" => CH
   ;"L" => CH
   ;"?" => CH
;END
;OUT.CH(CH)
;OUT.CH(" ")
@BOX 3.1
;END
@END
@TITLE CWU02.1.22(5,6)
@COL 1S-2R-3F
@FLOW 1-2-3
@BOX 1.0
OUT.CC(CONDITION)
CONDITION IN BITS 8 -> 11
@BOX 2.0
PRINT CONDITION
@BOX 3.0
END
@BOX 1.1
;PROC OUT.CC(CC)
;DATAVEC CHS($LO8)
"T " "F " "HI" "LS" "CC" "CS" "NE" "EQ"
"VC" "VS" "PL" "MI" "GE" "LT" "GT" "LE"
END
@BOX 2.1
;OUT.CH(CHS[CC ->> 7 & %1E => CC])
;IF CHS[CC + 1] /= 0 THEN
    ;OUT.CH(CHS[CC+1])
;FI
@BOX 3.1
;END
@END
@TITLE CWU02.1.23(5,6)
@COL 1S-2R-3F
@FLOW 1-2-3
@BOX 1.0
OUT.DN(REGISTER NO)
@BOX 2.0
PRINT DN
@BOX 3.0
END
@BOX 1.1
;PROC OUT.DN(DN)
@BOX 2.1
;OUT.CH("D")
;OUT.CH(DN & 7 + "0")
@BOX 3.1
;END
@END
@TITLE CWU02.1.24(5,6)
@COL 1S-2R-3F
@FLOW 1-2-3
@BOX 1.0
OUT.DN.EA(DN.EA)
BITS 0-5    EA
BIT 8       0 DN, EA 1 EA, DN
BITS 9=11   DN
@BOX 2.0
PRINT DN, EA IF BIT 8 = 0
PRINT EA.DN IF BIT 8 = 1
@BOX 3.0
END
@BOX 1.1
;PROC OUT.DN.EA(DN.EA)
;$IN DN
@BOX 2.1
;DN.EA ->> 9 => DN
;IF DN.EA & %100 /= 0 THEN
   ;OUT.DN(DN)
   ;OUT.CH(",")
   ;OUT.CH(" ")
   ;OUT.EA(DN.EA)
;ELSE
   ;OUT.EA(DN.EA)
   ;OUT.CH(",")
   ;OUT.CH(" ")
   ;OUT.DN(DN)
;FI
@BOX 3.1
;END
@END
@TITLE CWU02.1.25(5,6)
@COL 1S-2R-3F
@FLOW 1-2-3
@BOX 1.0
OUT.RM.EA.EA(RM.EA.EA)
BITS 0-2   SOURCE REGISTER
BIT    3   RM
BITS 9-11  DESTINATION REGISTER
@BOX 2.0
IF RM = 0 PRINT DN, DNR
IF RM = 1 PRINT -(AN), -(AN)
@BOX 3.0
END
@BOX 1.1
;PROC OUT.RM.EA.EA(P1)
;$IN RS,RD
@BOX 2.1
;P1 & 7 => RS
;P1 ->> 9 & 7 => RD
;IF P1 & %8 = 0 THEN
   ;OUT.DN(RS)
   ;OUT.CH(",")
   ;OUT.CH(" ")
   ;OUT.DN(RD)
;ELSE
   ;CAPTION(%" -(A")
   ;OUTCH(RS + "0")
   ;CAPTION (%"), -(A")
   ;OUT.CH(RD + "0")
   ;OUT.CH(")")
;FI
@BOX 3.1
;END
@END
@TITLE CWU02.1.26(5,6)
@COL 1S-2R-3F
@FLOW 1-2-3
@BOX 1.0
OUT.AN(AN)
@BOX 2.0
PRINT AN
@BOX 3.0
END
@BOX 1.1
;PROC OUT.AN(AN)
@BOX 2.1
;OUT.CH("A")
;OUT.CH(AN & 7 + "0")
@BOX 3.1
;END
@END
@TITLE CWU02.1.27(5,6)
@COL 1S-2R-3F
@FLOW 1-2-3
@BOX 1.0
OUT.AN.REF(AN)
@BOX 2.0
PRINT (AN)
@BOX 3.0
END
@BOX 1.1
;PROC OUT.AN.REF(AN)
@BOX 2.1
;OUT.CH("(")
;OUT.CH("A")
;OUT.CH(AN & 7 + "0")
;OUT.CH(")")
@BOX 3.1
;END
@END
@TITLE CWU02.1.28(5,6)
@COL 1S-2R-3F
@FLOW 1-2-3
@BOX 1.0
OUT.FN(NAME)
@BOX 2.0
PRINT NAME
@BOX 3.0
END
@BOX 1.1
;PROC OUT.FN(NAME)
;$IN I,CH
@BOX 2.1
;64 => I
;WHILE 8 -> I >= 0 DO
   ;NAME ->> I & %FF => CH
   ;IF CH /= 0 THEN
      ;OUT.CH(CH)
   ;FI
;OD
@BOX 3.1
;END
@END
@TITLE CWU02.1.30(5,6)
@COL 1S-2R-3R-4R-5F
@FLOW 1-2-3-4-5
@BOX 1.0
BASIC PRINT ROUTINES
@BOX 2.0
OUT.H4(VALUE)
@BOX 3.0
OUT.H8(VALUE)
@BOX 4.0
OUT.H16(VALUE)
@BOX 5.0
END
@BOX 1.1
::BASIC PRINT ROUTINES
@BOX 2.1
;PROC OUT.H4(V)
;IF V & %F => V < 10 THEN
   ;OUT.CH(V + "0")
;ELSE
   ;OUT.CH(V + "A" -10)
;FI
;END
@BOX 3.1
;PROC OUT.H8(V)
;OUT.H4(V->>4)
;OUT.H4(V)
;END
@BOX 4.1
;PROC OUT.H16(V)
;OUT.H8(V->>8)
;OUT.H8(V)
;END
@BOX 5.1
::END
@END
