Matt Westcott - @gasmanic
DotJS, 30 November 2012
while(true) {
instruction = memory[pos];
do_something(instruction);
pos++;
}
while(true) {
instruction = memory[pos];
do_something(instruction);⇒
pos++;
}
switch (instruction) {
case 0x00:
NOP
case 0x01:
LD BC,nnnn
case 0x02:
LD (BC),A
case 0x03:
INC BC
...
}
ADD A,B
var addtemp = A + B; var lookup = ((A & 0x88) >> 3) | ((B & 0x88) >> 2) | ((addtemp & 0x88) >> 1); A = addtemp; F = (addtemp & 0x100 ? 0x80 : 0) | flagTable1[lookup & 0x07] | flagTable2[A];
ADD A,C
var addtemp = A + C; var lookup = ((A & 0x88) >> 3) | ((C & 0x88) >> 2) | ((addtemp & 0x88) >> 1); A = addtemp; F = (addtemp & 0x100 ? 0x80 : 0) | flagTable1[lookup & 0x07] | flagTable2[A];
ADD A,(HL)
var val = memory[HL]; var addtemp = A + val; var lookup = ((A & 0x88) >> 3) | ((val & 0x88) >> 2) | ((addtemp & 0x88) >> 1); A = addtemp; F = (addtemp & 0x100 ? 0x80 : 0) | flagTable1[lookup & 0x07] | flagTable2[A];
ADD A,B
var addtemp = A + B; var lookup = ((A & 0x88) >> 3) | ((B & 0x88) >> 2) | ((addtemp & 0x88) >> 1); A = addtemp; F = (addtemp & 0x100 ? 0x80 : 0) | flagTable1[lookup & 0x07] | flagTable2[A];
ADD A,C
var addtemp = A + C; var lookup = ((A & 0x88) >> 3) | ((C & 0x88) >> 2) | ((addtemp & 0x88) >> 1); A = addtemp; F = (addtemp & 0x100 ? 0x80 : 0) | flagTable1[lookup & 0x07] | flagTable2[A];
ADD A,(HL)
var val = memory[HL]; var addtemp = A + val; var lookup = ((A & 0x88) >> 3) | ((val & 0x88) >> 2) | ((addtemp & 0x88) >> 1); A = addtemp; F = (addtemp & 0x100 ? 0x80 : 0) | flagTable1[lookup & 0x07] | flagTable2[A];
B →
C →
(HL) →
template_ADD_A(x)
→ "ADD A,B"
→ "ADD A,C"
→ "ADD A,(HL)"
"
window.mainLoop = function() {
while(true) {
instruction = memory[pos];
switch (instruction) {"
+ "
case 0x00:
NOP "
+ "
case 0x01:
LD BC,nnnn "
+ "
case 0x02:
LD (BC),A "
+ "
case 0x03:
INC BC "
...
+ "
}
}
}"
eval("
window.mainLoop = function() {
while(true) {
instruction = memory[pos];
switch (instruction) {"
+ "
case 0x00:
NOP "
+ "
case 0x01:
LD BC,nnnn "
+ "
case 0x02:
LD (BC),A "
+ "
case 0x03:
INC BC "
...
+ "
}
}
}");
window.mainLoop = function() {
while(true) {
instruction = memory[pos];
switch (instruction) {
case 0x00:
NOP
case 0x01:
LD BC,nnnn
case 0x02:
LD (BC),A
case 0x03:
INC BC
...
}
}
}
0000: LD BC,1234 0003: INC B 0004: LD (BC),A 0005: RLCA 0006: INC BC 0007: LD (BC),A 0008: LD BC,5678
while(true) {
instruction = memory[pos];
switch (instruction) {
case 0x00:
NOP
case 0x01:
LD BC,nnnn
case 0x02:
LD (BC),A
case 0x03:
INC BC
case 0x04:
INC B
case 0x05:
DEC B
case 0x06:
LD B,nn
case 0x07:
RLCA
...
}
}
0000: LD BC,1234
0003: INC B
0004: LD (BC),A
0005: RLCA
0006: INC BC
0007: LD (BC),A
0008: LD BC,5678
while(true) {
instruction = memory[pos];
switch (instruction) {
case 0x00:
NOP
case 0x01:
LD BC,nnnn
case 0x02:
LD (BC),A
case 0x03:
INC BC
case 0x04:
INC B
case 0x05:
DEC B
case 0x06:
LD B,nn
case 0x07:
RLCA
...
}
}
0000: LD BC,1234
0003: INC B
0004: LD (BC),A
0005: RLCA
0006: INC BC
0007: LD (BC),A
0008: LD BC,5678
while(true) {
instruction = memory[pos];
switch (instruction) {
case 0x00:
NOP
case 0x01:
LD BC,nnnn
case 0x02:
LD (BC),A
case 0x03:
INC BC
case 0x04:
INC B
case 0x05:
DEC B
case 0x06:
LD B,nn
case 0x07:
RLCA
...
}
}
0000: LD BC,1234
0003: INC B
0004: LD (BC),A
0005: RLCA
0006: INC BC
0007: LD (BC),A
0008: LD BC,5678
while(true) {
instruction = memory[pos];
switch (instruction) {
case 0x00:
NOP
case 0x01:
LD BC,nnnn
case 0x02:
LD (BC),A
case 0x03:
INC BC
case 0x04:
INC B
case 0x05:
DEC B
case 0x06:
LD B,nn
case 0x07:
RLCA
...
}
}
0000: LD BC,1234
0003: INC B
0004: LD (BC),A
0005: RLCA
0006: INC BC
0007: LD (BC),A
0008: LD BC,5678
while(true) {
instruction = memory[pos];
switch (instruction) {
case 0x00:
NOP
case 0x01:
LD BC,nnnn
case 0x02:
LD (BC),A
case 0x03:
INC BC
case 0x04:
INC B
case 0x05:
DEC B
case 0x06:
LD B,nn
case 0x07:
RLCA
...
}
}
0000: LD BC,1234
0003: INC B
0004: LD (BC),A
0005: RLCA
0006: INC BC
0007: LD (BC),A
0008: LD BC,5678
while(true) {
instruction = memory[pos];
switch (instruction) {
case 0x00:
NOP
case 0x01:
LD BC,nnnn
case 0x02:
LD (BC),A
case 0x03:
INC BC
case 0x04:
INC B
case 0x05:
DEC B
case 0x06:
LD B,nn
case 0x07:
RLCA
...
}
}
0000: LD BC,1234
0003: INC B
0004: LD (BC),A
0005: RLCA
0006: INC BC
0007: LD (BC),A
0008: LD BC,5678
while(true) {
instruction = memory[pos];
switch (instruction) {
case 0x00:
NOP
case 0x01:
LD BC,nnnn
case 0x02:
LD (BC),A
case 0x03:
INC BC
case 0x04:
INC B
case 0x05:
DEC B
case 0x06:
LD B,nn
case 0x07:
RLCA
...
}
}
0000: LD BC,1234
0003: INC B
0004: LD (BC),A
0005: RLCA
0006: INC BC
0007: LD (BC),A
0008: LD BC,5678
while(true) {
instruction = memory[pos];
switch (instruction) {
case 0x00:
NOP
case 0x01:
LD BC,nnnn
case 0x02:
LD (BC),A
case 0x03:
INC BC
case 0x04:
INC B
case 0x05:
DEC B
case 0x06:
LD B,nn
case 0x07:
RLCA
...
}
}
0000: LD BC,1234 0003: INC B 0004: LD (BC),A 0005: RLCA 0006: INC BC 0007: LD (BC),A 0008: LD BC,5678
while(true) {
instruction = memory[pos];
switch (instruction) {
case 0x00:
NOP
case 0x01:
LD BC,nnnn
case 0x02:
LD (BC),A
case 0x03:
INC BC
case 0x04:
INC B
case 0x05:
DEC B
case 0x06:
LD B,nn
case 0x07:
RLCA
...
}
}
0000: LD BC,1234 0003: INC B 0004: LD (BC),A 0005: RLCA 0006: INC BC 0007: LD (BC),A 0008: LD BC,5678
while(true) { instruction = memory[pos]; switch (instruction) { case 0x00: NOP case 0x01: LD BC,nnnn case 0x02: LD (BC),A case 0x03: INC BC case 0x04: INC B case 0x05: DEC B case 0x06: LD B,nn case 0x07: RLCA ... } }
function() {
eval('... some code ...')
}
function() {
(1, eval)('... some code ...')
}
Thank you!
Matt Westcott - @gasmanic
http://matt.west.co.tt/
Picture credits: U. S. Army, Bill Bertram, GrahamUk, Evan-Amos, Nzeemin (via Wikipedia); Douglas Crockford.
Slide framework: robflaherty / html-slideshow