MegaProcessor

Check-in [eb9ed1ec92]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Flagged all opcode-instructions that still return dummy byte values.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1:eb9ed1ec921d94fd80df1f1135fbe3035df3b05b
User & Date: jos 2015-10-06 17:12:45
Context
2015-10-09
10:11
Added table with postbytes for instructions 0xd8..0xdb (shifts/rotates) Have script `tools/gen_bitops.lua` leave a signature in its output. check-in: 37476051d2 user: jos tags: trunk
2015-10-06
17:12
Flagged all opcode-instructions that still return dummy byte values. check-in: eb9ed1ec92 user: jos tags: trunk
16:55
Fixed small typo for postbyte range 0xb0..0xb3. check-in: 6bcf6e60d4 user: jos tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to opcodes.lua.

10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
..
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
...
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
...
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
...
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
...
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
...
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
    -- TODO process f2 to determine value of 2nd returnvalue;

    return( 0x40 + isReg2(f2,f3) );
end

function do_ADDI(f1, f2, f3)
    -- TODO process f2 to determine value of 2nd returnvalue;
    return 0xf6, 0x00 ;
end

function do_ADDQ(f1, f2, f3)
    local dstReg = isReg(f2);
    local srcOp = isQuickOp(f3); -- value 0,1,2,3 for #2,#1,#-2,#-1
    local retVal = 0x50 + 4*srcOp + dstReg;
    return retVal ; 
................................................................................
    return( 0x10 + isReg2(f2,f3) );
end

function do_ANDI(f1, f2, f3)
    if( f2:lower() ~= 'ps' ) then
        Error("This instruction is for PS only");
    end
    return 0xf4, 0x00 ;
end

function do_ASL(f1, f2, f3)
    local b1,b2 = 0xdc, 0x40;
    -- process f3 to select 0x40..0x4f, 0x50..0x5f, 0x60..0x63
    return b1, b2 ;
end

function do_ASL_WT(f1, f2, f3)
    local b1 = 0xd8 + isReg(f2);
    local b2 = 0x68 + isReg(f3);
    return b1, b2 ;
end

function do_ASR(f1, f2, f3)
    local b1,b2 = 0x40, 0x00;
    return b1, b2 ;
end

function do_ASR_WT(f1, f2, f3)
    local b1 = 0xd8 + isReg(f2);
    local b2 = 0x78 + isReg(f3);
    return b1, b2 ;
end

function do_BCC(f1, f2, f3)
    return 0xe4, 0x00 ;
end

function do_BCHG(f1, f2, f3)
    local reg = isReg(f2);
    local b1 = 0xdc + reg; -- evaluate f2 (R0..R3) to select dc..df
    local b2 = 0x40; -- evaluate f3 to select 40..4f 60..63
    if( f3:sub(1,1) == "#" ) then 
................................................................................
    else
        b2 = 0x20 + isReg(f3);
    end
    return b1, b2;
end

function do_BCS(f1, f2, f3)
    return 0xe5, 0x00;
end

function do_BEQ(f1, f2, f3)
    return 0xe7, 0x00  ;
end

function do_BGE(f1, f2, f3)
    return 0xec, 0x00  ;
end

function do_BGT(f1, f2, f3)
    return 0xee, 0x00  ;
end

function do_BHI(f1, f2, f3)
    return 0xe2, 0x00  ;
end

function do_BLE(f1, f2, f3)
    return 0xef, 0x00  ;
end

function do_BLS(f1, f2, f3)
    return 0xe3, 0x00  ;
end

function do_BLT(f1, f2, f3)
    return 0xed, 0x00  ;
end

function do_BMI(f1, f2, f3)
    return 0xeb, 0x00  ;
end

function do_BNE(f1, f2, f3)
    return 0xe6, 0x00  ;
end

function do_BPL(f1, f2, f3)
    return 0xea, 0x00  ;
end

function do_BSET(f1, f2, f3)
    local reg = isReg(f2);
    local b1 = 0xdc + reg; -- evaluate f2 (R0..R3) to select dc..df
    local b2 = 0xc0; -- evaluate f3 to select c0..cf e0..e3
    if( f3:sub(1,1) == "#" ) then 
................................................................................
    else
        b2 = 0xe0 + isReg(f3);
    end
    return b1, b2;
end

function do_BUC(f1, f2, f3)
    return 0xe0, 0x00  ;
end

function do_BUS(f1, f2, f3)
    return 0xe1, 0x00  ;
end

function do_BVC(f1, f2, f3)
    return 0xe8, 0x00  ;
end

function do_BVS(f1, f2, f3)
    return 0xe9, 0x00  ;
end

function do_CLR(f1, f2, f3)  -- alias for XOR Rx,Rx (xoring register with itself)
    local retVal = { [0]=0x20, 0x25, 0x2a, 0x2f };
    return( retVal[ isReg(f2) ] );
end

................................................................................
        else 
            return 0x80 + (ourNr + 2*(ourNr2-2)) ;
        end
    end
end

function do_LSL(f1, f2, f3)
    return 0xff, 0xfe ;
end

function do_LSL_WT(f1, f2, f3)
    local b1 = 0xd8 + isReg(f2);
    local b2 = 0x28 + isReg(f3);
    return b1, b2 ;
end

function do_LSR(f1, f2, f3)
    return 0xff,0xfc ;
end

function do_LSR_WT(f1, f2, f3)
    local b1 = 0xd8 + isReg(f2);
    local b2 = 0x38 + isReg(f3);
    return b1, b2 ;
end
................................................................................
    return( 0x30 + isReg2(f2,f3) );
end

function do_ORI(f1, f2, f3)
    if( f2:lower() ~= 'ps' ) then
        Error("This instruction is for PS only");
    end
    return 0xf5, 0x00 ;
end

function do_NOP(f1, f2, f3)
  return 0xff  ;
end

function do_NOP_X(f1, f2, f3)
................................................................................

function do_RETI(f1, f2, f3)
    return 0xc7 ;
end

function do_ROL(f1, f2, f3)
    local b1,b2 = 0xdc, 0x80;
    return b1, b2 ;
end

function do_ROL_WT(f1, f2, f3)
    local b1 = 0xd8 + isReg(f2);
    local b2 = 0xa8 + isReg(f3);
    return b1, b2 ;
end

function do_ROR(f1, f2, f3)
    local b1,b2 = 0xd8, 0x00;
    return b1, b2 ;
end

function do_ROR_WT(f1, f2, f3)
    local b1 = 0xd8 + isReg(f2);
    local b2 = 0xb8 + isReg(f3);
    return b1, b2 ;
end

function do_ROXL(f1, f2, f3)
    return 0xff, 0x01 ;
end

function do_ROXL_WT(f1, f2, f3)
    local b1 = 0xd8 + isReg(f2);
    local b2 = 0xe8 + isReg(f3);
    return b1, b2 ;
end

function do_ROXR(f1, f2, f3)
    return 0xff, 0x04 ;
end

function do_ROXR_WT(f1, f2, f3)
    local b1 = 0xd8 + isReg(f2);
    local b2 = 0xf8 + isReg(f3);
    return b1, b2 ;
end







|







 







|





|










|









|







 







|



|



|



|



|



|



|



|



|



|



|







 







|



|



|



|







 







|









|







 







|







 







|










|









|









|







10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
..
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
...
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
...
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
...
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
...
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
...
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
    -- TODO process f2 to determine value of 2nd returnvalue;

    return( 0x40 + isReg2(f2,f3) );
end

function do_ADDI(f1, f2, f3)
    -- TODO process f2 to determine value of 2nd returnvalue;
    return 0xf6, 0x00 ; -- TODO
end

function do_ADDQ(f1, f2, f3)
    local dstReg = isReg(f2);
    local srcOp = isQuickOp(f3); -- value 0,1,2,3 for #2,#1,#-2,#-1
    local retVal = 0x50 + 4*srcOp + dstReg;
    return retVal ; 
................................................................................
    return( 0x10 + isReg2(f2,f3) );
end

function do_ANDI(f1, f2, f3)
    if( f2:lower() ~= 'ps' ) then
        Error("This instruction is for PS only");
    end
    return 0xf4, 0x00 ; -- TODO
end

function do_ASL(f1, f2, f3)
    local b1,b2 = 0xdc, 0x40;
    -- process f3 to select 0x40..0x4f, 0x50..0x5f, 0x60..0x63
    return b1, b2 ; -- TODO
end

function do_ASL_WT(f1, f2, f3)
    local b1 = 0xd8 + isReg(f2);
    local b2 = 0x68 + isReg(f3);
    return b1, b2 ;
end

function do_ASR(f1, f2, f3)
    local b1,b2 = 0x40, 0x00;
    return b1, b2 ; -- TODO
end

function do_ASR_WT(f1, f2, f3)
    local b1 = 0xd8 + isReg(f2);
    local b2 = 0x78 + isReg(f3);
    return b1, b2 ;
end

function do_BCC(f1, f2, f3)
    return 0xe4, 0x00 ; -- TODO
end

function do_BCHG(f1, f2, f3)
    local reg = isReg(f2);
    local b1 = 0xdc + reg; -- evaluate f2 (R0..R3) to select dc..df
    local b2 = 0x40; -- evaluate f3 to select 40..4f 60..63
    if( f3:sub(1,1) == "#" ) then 
................................................................................
    else
        b2 = 0x20 + isReg(f3);
    end
    return b1, b2;
end

function do_BCS(f1, f2, f3)
    return 0xe5, 0x00; -- TODO
end

function do_BEQ(f1, f2, f3)
    return 0xe7, 0x00  ; -- TODO
end

function do_BGE(f1, f2, f3)
    return 0xec, 0x00  ; -- TODO
end

function do_BGT(f1, f2, f3)
    return 0xee, 0x00  ; -- TODO
end

function do_BHI(f1, f2, f3)
    return 0xe2, 0x00  ; -- TODO
end

function do_BLE(f1, f2, f3)
    return 0xef, 0x00  ; -- TODO
end

function do_BLS(f1, f2, f3)
    return 0xe3, 0x00  ; -- TODO
end

function do_BLT(f1, f2, f3)
    return 0xed, 0x00  ; -- TODO
end

function do_BMI(f1, f2, f3)
    return 0xeb, 0x00  ; -- TODO
end

function do_BNE(f1, f2, f3)
    return 0xe6, 0x00  ; -- TODO
end

function do_BPL(f1, f2, f3)
    return 0xea, 0x00  ; -- TODO
end

function do_BSET(f1, f2, f3)
    local reg = isReg(f2);
    local b1 = 0xdc + reg; -- evaluate f2 (R0..R3) to select dc..df
    local b2 = 0xc0; -- evaluate f3 to select c0..cf e0..e3
    if( f3:sub(1,1) == "#" ) then 
................................................................................
    else
        b2 = 0xe0 + isReg(f3);
    end
    return b1, b2;
end

function do_BUC(f1, f2, f3)
    return 0xe0, 0x00  ; -- TODO
end

function do_BUS(f1, f2, f3)
    return 0xe1, 0x00  ; -- TODO
end

function do_BVC(f1, f2, f3)
    return 0xe8, 0x00  ; -- TODO
end

function do_BVS(f1, f2, f3)
    return 0xe9, 0x00  ; -- TODO
end

function do_CLR(f1, f2, f3)  -- alias for XOR Rx,Rx (xoring register with itself)
    local retVal = { [0]=0x20, 0x25, 0x2a, 0x2f };
    return( retVal[ isReg(f2) ] );
end

................................................................................
        else 
            return 0x80 + (ourNr + 2*(ourNr2-2)) ;
        end
    end
end

function do_LSL(f1, f2, f3)
    return 0xff, 0xfe ; -- TODO
end

function do_LSL_WT(f1, f2, f3)
    local b1 = 0xd8 + isReg(f2);
    local b2 = 0x28 + isReg(f3);
    return b1, b2 ;
end

function do_LSR(f1, f2, f3)
    return 0xff,0xfc ; -- TODO
end

function do_LSR_WT(f1, f2, f3)
    local b1 = 0xd8 + isReg(f2);
    local b2 = 0x38 + isReg(f3);
    return b1, b2 ;
end
................................................................................
    return( 0x30 + isReg2(f2,f3) );
end

function do_ORI(f1, f2, f3)
    if( f2:lower() ~= 'ps' ) then
        Error("This instruction is for PS only");
    end
    return 0xf5, 0x00 ; -- TODO
end

function do_NOP(f1, f2, f3)
  return 0xff  ;
end

function do_NOP_X(f1, f2, f3)
................................................................................

function do_RETI(f1, f2, f3)
    return 0xc7 ;
end

function do_ROL(f1, f2, f3)
    local b1,b2 = 0xdc, 0x80;
    return b1, b2 ; -- TODO
end

function do_ROL_WT(f1, f2, f3)
    local b1 = 0xd8 + isReg(f2);
    local b2 = 0xa8 + isReg(f3);
    return b1, b2 ;
end

function do_ROR(f1, f2, f3)
    local b1,b2 = 0xd8, 0x00;
    return b1, b2 ; -- TODO
end

function do_ROR_WT(f1, f2, f3)
    local b1 = 0xd8 + isReg(f2);
    local b2 = 0xb8 + isReg(f3);
    return b1, b2 ;
end

function do_ROXL(f1, f2, f3)
    return 0xff, 0x01 ; -- TODO
end

function do_ROXL_WT(f1, f2, f3)
    local b1 = 0xd8 + isReg(f2);
    local b2 = 0xe8 + isReg(f3);
    return b1, b2 ;
end

function do_ROXR(f1, f2, f3)
    return 0xff, 0x04 ; -- TODO
end

function do_ROXR_WT(f1, f2, f3)
    local b1 = 0xd8 + isReg(f2);
    local b2 = 0xf8 + isReg(f3);
    return b1, b2 ;
end