Ignore:
Timestamp:
Sep 21, 2010, 1:22:37 PM (9 years ago)
Author:
mulligan
Message:

fixed typing errors in ASMInterpret up to execute1.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Deliverables/D4.1/ASMInterpret.ml

    r93 r95  
    419419let lift a f g =
    420420  let (x, y) = f a in
    421     (g x, g x)
     421    (g x, g y)
    422422
    423423let assembly1 =
     
    425425    ACALL (`ADDR11 w) ->
    426426      let (a10,a9,a8,b1) = from_word11 w in
    427         [(a10,a9,a8,true),(false,false,false,true); lift b1 from_byte from_nibble]
     427        [mk_byte_from_bits ((a10,a9,a8,true),(false,false,false,true)); b1]
    428428  | ADD (`A,`REG (r1,r2,r3)) ->
    429      [(false,false,true,false),(true,r1,r2,r3)]
     429     [mk_byte_from_bits ((false,false,true,false),(true,r1,r2,r3))]
    430430  | ADD (`A, `DIRECT b1) ->
    431      [(false,false,true,false),(false,true,false,true); lift b1 from_byte from_nibble]
     431     [mk_byte_from_bits ((false,false,true,false),(false,true,false,true)); b1]
    432432  | ADD (`A, `INDIRECT i1) ->
    433      [(false,false,true,false),(false,true,true,i1)]
     433     [mk_byte_from_bits ((false,false,true,false),(false,true,true,i1))]
    434434  | ADD (`A, `DATA b1) ->
    435      [(false,false,true,false),(false,true,false,false); lift b1 from_byte from_nibble]
     435     [mk_byte_from_bits ((false,false,true,false),(false,true,false,false)); b1]
    436436  | ADDC (`A, `REG(r1,r2,r3)) ->
    437      [(false,false,true,true),(true,r1,r2,r3)]
     437     [mk_byte_from_bits ((false,false,true,true),(true,r1,r2,r3))]
    438438  | ADDC (`A, `DIRECT b1) ->
    439      [(false,false,true,true),(false,true,false,true); lift b1 from_byte from_nibble]
     439     [mk_byte_from_bits ((false,false,true,true),(false,true,false,true)); b1]
    440440  | ADDC (`A,`INDIRECT i1) ->
    441      [(false,false,true,true),(false,true,true,i1)]
     441     [mk_byte_from_bits ((false,false,true,true),(false,true,true,i1))]
    442442  | ADDC (`A,`DATA b1) ->
    443      [(false,false,true,true),(false,true,false,false); lift b1 from_byte from_nibble]
     443     [mk_byte_from_bits ((false,false,true,true),(false,true,false,false)); b1]
    444444  | AJMP (`ADDR11 w) ->
    445445     let (a10,a9,a8,b1) = from_word11 w in
    446        [(a10,a9,a8,false),(false,false,false,true)]
     446       [mk_byte_from_bits ((a10,a9,a8,false),(false,false,false,true))]
    447447  | ANL (`U1 (`A, `REG (r1,r2,r3))) ->
    448      [(false,true,false,true),(true,r1,r2,r3)]
     448     [mk_byte_from_bits ((false,true,false,true),(true,r1,r2,r3))]
    449449  | ANL (`U1 (`A, `DIRECT b1)) ->
    450      [(false,true,false,true),(false,true,false,true); lift b1 from_byte from_nibble]
     450     [mk_byte_from_bits ((false,true,false,true),(false,true,false,true)); b1]
    451451  | ANL (`U1 (`A, `INDIRECT i1)) ->
    452      [(false,true,false,true),(false,true,true,i1)]
     452     [mk_byte_from_bits ((false,true,false,true),(false,true,true,i1))]
    453453  | ANL (`U1 (`A, `DATA b1)) ->
    454      [(false,true,false,true),(false,true,false,false); lift b1 from_byte from_nibble]
     454     [mk_byte_from_bits ((false,true,false,true),(false,true,false,false)); b1]
    455455  | ANL (`U2 (`DIRECT b1,`A)) ->
    456      [(false,true,false,true),(false,false,true,false); lift b1 from_byte from_nibble]
     456     [mk_byte_from_bits ((false,true,false,true),(false,false,true,false)); b1]
    457457  | ANL (`U2 (`DIRECT b1,`DATA b2)) ->
    458      [(false,true,false,true),(false,false,true,true); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble]
     458     [mk_byte_from_bits ((false,true,false,true),(false,false,true,true)); b1; b2]
    459459  | ANL (`U3 (`C,`BIT b1)) ->
    460      [(true,false,false,false),(false,false,true,false); lift b1 from_byte from_nibble]
     460     [mk_byte_from_bits ((true,false,false,false),(false,false,true,false)); b1]
    461461  | ANL (`U3 (`C,`NBIT b1)) ->
    462     [(true,false,true,true),(false,false,false,false); lift b1 from_byte from_nibble]
     462    [mk_byte_from_bits ((true,false,true,true),(false,false,false,false)); b1]
    463463  | CJNE (`U1 (`A, `DIRECT b1), `REL b2) ->
    464     [(true,false,true,true),(false,true,false,true); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble]
     464    [mk_byte_from_bits ((true,false,true,true),(false,true,false,true)); b1; b2]
    465465  | CJNE (`U1 (`A, `DATA b1), `REL b2) ->
    466     [(true,false,true,true),(false,true,false,false); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble]
     466    [mk_byte_from_bits ((true,false,true,true),(false,true,false,false)); b1; b2]
    467467  | CJNE (`U2 (`REG(r1,r2,r3), `DATA b1), `REL b2) ->
    468     [(true,false,true,true),(true,r1,r2,r3); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble]
     468    [mk_byte_from_bits ((true,false,true,true),(true,r1,r2,r3)); b1; b2]
    469469  | CJNE (`U2 (`INDIRECT i1, `DATA b1), `REL b2) ->
    470     [(true,false,true,true),(false,true,true,i1); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble]
     470    [mk_byte_from_bits ((true,false,true,true),(false,true,true,i1)); b1; b2]
    471471  | CLR `A ->
    472     [(true,true,true,false),(false,true,false,false)]
     472    [mk_byte_from_bits ((true,true,true,false),(false,true,false,false))]
    473473  | CLR `C ->
    474     [(true,true,false,false),(false,false,true,true)]
     474    [mk_byte_from_bits ((true,true,false,false),(false,false,true,true))]
    475475  | CLR (`BIT b1) ->
    476     [(true,true,false,false),(false,false,true,false); lift b1 from_byte from_nibble]
     476    [mk_byte_from_bits ((true,true,false,false),(false,false,true,false)); b1]
    477477  | CPL `A ->
    478     [(true,true,true,true),(false,true,false,false)]
     478    [mk_byte_from_bits ((true,true,true,true),(false,true,false,false))]
    479479  | CPL `C ->
    480     [(true,false,true,true),(false,false,true,true)]
     480    [mk_byte_from_bits ((true,false,true,true),(false,false,true,true))]
    481481  | CPL (`BIT b1) ->
    482     [(true,false,true,true),(false,false,true,false); lift b1 from_byte from_nibble]
     482    [mk_byte_from_bits ((true,false,true,true),(false,false,true,false)); b1]
    483483  | DA `A ->
    484     [(true,true,false,true),(false,true,false,false)]
     484    [mk_byte_from_bits ((true,true,false,true),(false,true,false,false))]
    485485  | DEC `A ->
    486     [(false,false,false,true),(false,true,false,false)]
     486    [mk_byte_from_bits ((false,false,false,true),(false,true,false,false))]
    487487  | DEC (`REG(r1,r2,r3)) ->
    488     [(false,false,false,true),(true,r1,r2,r3)]
     488    [mk_byte_from_bits ((false,false,false,true),(true,r1,r2,r3))]
    489489  | DEC (`DIRECT b1) ->
    490     [(false,false,false,true),(false,true,false,true); lift b1 from_byte from_nibble]
     490    [mk_byte_from_bits ((false,false,false,true),(false,true,false,true)); b1]
    491491  | DEC (`INDIRECT i1) ->
    492     [(false,false,false,true),(false,true,true,i1)]
     492    [mk_byte_from_bits ((false,false,false,true),(false,true,true,i1))]
    493493  | DIV (`A, `B) ->
    494     [(true,false,false,false),(false,true,false,false)]
     494    [mk_byte_from_bits ((true,false,false,false),(false,true,false,false))]
    495495  | DJNZ (`REG(r1,r2,r3), `REL b1) ->
    496     [(true,true,false,true),(true,r1,r2,r3); lift b1 from_byte from_nibble]
     496    [mk_byte_from_bits ((true,true,false,true),(true,r1,r2,r3)); b1]
    497497  | DJNZ (`DIRECT b1, `REL b2) ->
    498     [(true,true,false,true),(false,true,false,true); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble]
     498    [mk_byte_from_bits ((true,true,false,true),(false,true,false,true)); b1; b2]
    499499  | INC `A ->
    500     [(false,false,false,false),(false,true,false,false)]
     500    [mk_byte_from_bits ((false,false,false,false),(false,true,false,false))]
    501501  | INC (`REG(r1,r2,r3)) ->
    502     [(false,false,false,false),(true,r1,r2,r3)]
     502    [mk_byte_from_bits ((false,false,false,false),(true,r1,r2,r3))]
    503503  | INC (`DIRECT b1) ->
    504     [(false,false,false,false),(false,true,false,true); lift b1 from_byte from_nibble]
     504    [mk_byte_from_bits ((false,false,false,false),(false,true,false,true)); b1]
    505505  | INC (`INDIRECT i1) ->
    506     [(false,false,false,false),(false,true,true,i1)]
     506    [mk_byte_from_bits ((false,false,false,false),(false,true,true,i1))]
    507507  | INC `DPTR ->
    508     [(true,false,true,false),(false,false,true,true)]
     508    [mk_byte_from_bits ((true,false,true,false),(false,false,true,true))]
    509509  | JB (`BIT b1, `REL b2) ->
    510     [(false,false,true,false),(false,false,false,false); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble]
     510    [mk_byte_from_bits ((false,false,true,false),(false,false,false,false)); b1; b2]
    511511  | JBC (`BIT b1, `REL b2) ->
    512     [(false,false,false,true),(false,false,false,false); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble]
     512    [mk_byte_from_bits ((false,false,false,true),(false,false,false,false)); b1; b2]
    513513  | JC (`REL b1) ->
    514     [(false,true,false,false),(false,false,false,false); lift b1 from_byte from_nibble]
     514    [mk_byte_from_bits ((false,true,false,false),(false,false,false,false)); b1]
    515515  | JMP `IND_DPTR ->
    516     [(false,true,true,true),(false,false,true,true)]
     516    [mk_byte_from_bits ((false,true,true,true),(false,false,true,true))]
    517517  | JNB (`BIT b1, `REL b2) ->
    518     [(false,false,true,true),(false,false,false,false); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble]
     518    [mk_byte_from_bits ((false,false,true,true),(false,false,false,false)); b1; b2]
    519519  | JNC (`REL b1) ->
    520     [(false,true,false,true),(false,false,false,false); lift b1 from_byte from_nibble]
     520    [mk_byte_from_bits ((false,true,false,true),(false,false,false,false)); b1]
    521521  | JNZ (`REL b1) ->
    522     [(false,true,true,true),(false,false,false,false); lift b1 from_byte from_nibble]
     522    [mk_byte_from_bits ((false,true,true,true),(false,false,false,false)); b1]
    523523  | JZ (`REL b1) ->
    524     [(false,true,true,false),(false,false,false,false); lift b1 from_byte from_nibble]
     524    [mk_byte_from_bits ((false,true,true,false),(false,false,false,false)); b1]
    525525  | LCALL (`ADDR16 w) ->
    526526      let (b1,b2) = from_word w in
    527         [(false,false,false,true),(false,false,true,false); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble]
     527        [mk_byte_from_bits ((false,false,false,true),(false,false,true,false)); b1; b2]
    528528  | LJMP (`ADDR16 w) ->
    529529      let (b1,b2) = from_word w in
    530         [(false,false,false,false),(false,false,true,false); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble]
     530        [mk_byte_from_bits ((false,false,false,false),(false,false,true,false)); b1; b2]
    531531  | MOV (`U1 (`A, `REG(r1,r2,r3))) ->
    532     [(true,true,true,false),(true,r1,r2,r3)]
     532    [mk_byte_from_bits ((true,true,true,false),(true,r1,r2,r3))]
    533533  | MOV (`U1 (`A, `DIRECT b1)) ->
    534     [(true,true,true,false),(false,true,false,true); lift b1 from_byte from_nibble]
     534    [mk_byte_from_bits ((true,true,true,false),(false,true,false,true)); b1]
    535535  | MOV (`U1 (`A, `INDIRECT i1)) ->
    536     [(true,true,true,false),(false,true,true,i1)]
     536    [mk_byte_from_bits ((true,true,true,false),(false,true,true,i1))]
    537537  | MOV (`U1 (`A, `DATA b1)) ->
    538     [(false,true,true,true),(false,true,false,false); lift b1 from_byte from_nibble]
     538    [mk_byte_from_bits ((false,true,true,true),(false,true,false,false)); b1]
    539539  | MOV (`U2 (`REG(r1,r2,r3), `A)) ->
    540     [(true,true,true,true),(true,r1,r2,r3)]
     540    [mk_byte_from_bits ((true,true,true,true),(true,r1,r2,r3))]
    541541  | MOV (`U2 (`REG(r1,r2,r3), (`DIRECT b1))) ->
    542     [(true,false,true,false),(true,r1,r2,r3); lift b1 from_byte from_nibble]
     542    [mk_byte_from_bits ((true,false,true,false),(true,r1,r2,r3)); b1]
    543543  | MOV (`U2 (`REG(r1,r2,r3), (`DATA b1))) ->
    544     [(false,true,true,true),(true,r1,r2,r3); lift b1 from_byte from_nibble]
     544    [mk_byte_from_bits ((false,true,true,true),(true,r1,r2,r3)); b1]
    545545  | MOV (`U3 (`DIRECT b1, `A)) ->
    546     [(true,true,true,true),(false,true,false,true); lift b1 from_byte from_nibble]
     546    [mk_byte_from_bits ((true,true,true,true),(false,true,false,true)); b1]
    547547  | MOV (`U3 (`DIRECT b1, `REG(r1,r2,r3))) ->
    548     [(true,false,false,false),(true,r1,r2,r3); lift b1 from_byte from_nibble]
     548    [mk_byte_from_bits ((true,false,false,false),(true,r1,r2,r3)); b1]
    549549  | MOV (`U3 (`DIRECT b1, `DIRECT b2)) ->
    550     [(true,false,false,false),(false,true,false,true); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble]
     550    [mk_byte_from_bits ((true,false,false,false),(false,true,false,true)); b1; b2]
    551551  | MOV (`U3 (`DIRECT b1, `INDIRECT i1)) ->
    552     [(true,false,false,false),(false,true,true,i1); lift b1 from_byte from_nibble]
     552    [mk_byte_from_bits ((true,false,false,false),(false,true,true,i1)); b1]
    553553  | MOV (`U3 (`DIRECT b1, `DATA b2)) ->
    554     [(false,true,true,true),(false,true,false,true); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble]
     554    [mk_byte_from_bits ((false,true,true,true),(false,true,false,true)); b1; b2]
    555555  | MOV (`U2 (`INDIRECT i1, `A)) ->
    556     [(true,true,true,true),(false,true,true,i1)]
     556    [mk_byte_from_bits ((true,true,true,true),(false,true,true,i1))]
    557557  | MOV (`U2 (`INDIRECT i1, `DIRECT b1)) ->
    558     [(true,false,true,false),(false,true,true,i1); lift b1 from_byte from_nibble]
     558    [mk_byte_from_bits ((true,false,true,false),(false,true,true,i1)); b1]
    559559  | MOV (`U2 (`INDIRECT i1, `DATA b1)) ->
    560     [(false,true,true,true),(false,true,true,i1); lift b1 from_byte from_nibble]
     560    [mk_byte_from_bits ((false,true,true,true),(false,true,true,i1)); b1]
    561561  | MOV (`U5 (`C, `BIT b1)) ->
    562     [(true,false,true,false),(false,false,true,false); lift b1 from_byte from_nibble]
     562    [mk_byte_from_bits ((true,false,true,false),(false,false,true,false)); b1]
    563563  | MOV (`U6 (`BIT b1, `C)) ->
    564     [(true,false,false,true),(false,false,true,false); lift b1 from_byte from_nibble]
     564    [mk_byte_from_bits ((true,false,false,true),(false,false,true,false)); b1]
    565565  | MOV (`U4 (`DPTR, `DATA16 w)) ->
    566566    let (b1,b2) = from_word w in
    567       [(true,false,false,true),(false,false,false,false); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble]
     567      [mk_byte_from_bits ((true,false,false,true),(false,false,false,false)); b1; b2]
    568568  | MOVC (`A, `A_DPTR) ->
    569     [(true,false,false,true),(false,false,true,true)]
     569    [mk_byte_from_bits ((true,false,false,true),(false,false,true,true))]
    570570  | MOVC (`A, `A_PC) ->
    571     [(true,false,false,false),(false,false,true,true)]
     571    [mk_byte_from_bits ((true,false,false,false),(false,false,true,true))]
    572572  | MOVX (`U1 (`A, `EXT_INDIRECT i1)) ->
    573     [(true,true,true,false),(false,false,true,i1)]
     573    [mk_byte_from_bits ((true,true,true,false),(false,false,true,i1))]
    574574  | MOVX (`U1 (`A, `EXT_IND_DPTR)) ->
    575     [(true,true,true,false),(false,false,false,false)]
     575    [mk_byte_from_bits ((true,true,true,false),(false,false,false,false))]
    576576  | MOVX (`U2 (`EXT_INDIRECT i1, `A)) ->
    577     [(true,true,true,true),(false,false,true,i1)]
     577    [mk_byte_from_bits ((true,true,true,true),(false,false,true,i1))]
    578578  | MOVX (`U2 (`EXT_IND_DPTR, `A)) ->
    579     [(true,true,true,true),(false,false,false,false)]
     579    [mk_byte_from_bits ((true,true,true,true),(false,false,false,false))]
    580580  | MUL(`A, `B) ->
    581     [(true,false,true,false),(false,true,false,false)]
     581    [mk_byte_from_bits ((true,false,true,false),(false,true,false,false))]
    582582  | NOP ->
    583     [(false,false,false,false),(false,false,false,false)]
     583    [mk_byte_from_bits ((false,false,false,false),(false,false,false,false))]
    584584  | ORL (`U1(`A, `REG(r1,r2,r3))) ->
    585     [(false,true,false,false),(true,r1,r2,r3)]
     585    [mk_byte_from_bits ((false,true,false,false),(true,r1,r2,r3))]
    586586  | ORL (`U1(`A, `DIRECT b1)) ->
    587     [(false,true,false,false),(false,true,false,true); lift b1 from_byte from_nibble]
     587    [mk_byte_from_bits ((false,true,false,false),(false,true,false,true)); b1]
    588588  | ORL (`U1(`A, `INDIRECT i1)) ->
    589     [(false,true,false,false),(false,true,true,i1)]
     589    [mk_byte_from_bits ((false,true,false,false),(false,true,true,i1))]
    590590  | ORL (`U1(`A, `DATA b1)) ->
    591     [(false,true,false,false),(false,true,false,false); lift b1 from_byte from_nibble]
     591    [mk_byte_from_bits ((false,true,false,false),(false,true,false,false)); b1]
    592592  | ORL (`U2(`DIRECT b1, `A)) ->
    593     [(false,true,false,false),(false,false,true,false); lift b1 from_byte from_nibble]
     593    [mk_byte_from_bits ((false,true,false,false),(false,false,true,false)); b1]
    594594  | ORL (`U2 (`DIRECT b1, `DATA b2)) ->
    595     [(false,true,false,false),(false,false,true,true); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble]
     595    [mk_byte_from_bits ((false,true,false,false),(false,false,true,true)); b1; b2]
    596596  | ORL (`U3 (`C, `BIT b1)) ->
    597     [(false,true,true,true),(false,false,true,false); lift b1 from_byte from_nibble]
     597    [mk_byte_from_bits ((false,true,true,true),(false,false,true,false)); b1]
    598598  | ORL (`U3 (`C, `NBIT b1)) ->
    599     [(true,false,true,false),(false,false,false,false); lift b1 from_byte from_nibble]
     599    [mk_byte_from_bits ((true,false,true,false),(false,false,false,false)); b1]
    600600  | POP (`DIRECT b1) ->
    601     [(true,true,false,true),(false,false,false,false); lift b1 from_byte from_nibble]
     601    [mk_byte_from_bits ((true,true,false,true),(false,false,false,false)); b1]
    602602  | PUSH (`DIRECT b1) ->
    603     [(true,true,false,false),(false,false,false,false); lift b1 from_byte from_nibble]
     603    [mk_byte_from_bits ((true,true,false,false),(false,false,false,false)); b1]
    604604  | RET ->
    605     [(false,false,true,false),(false,false,true,false)]
     605    [mk_byte_from_bits ((false,false,true,false),(false,false,true,false))]
    606606  | RETI ->
    607     [(false,false,true,true),(false,false,true,false)]
     607    [mk_byte_from_bits ((false,false,true,true),(false,false,true,false))]
    608608  | RL `A ->
    609     [(false,false,true,false),(false,false,true,true)]
     609    [mk_byte_from_bits ((false,false,true,false),(false,false,true,true))]
    610610  | RLC `A ->
    611     [(false,false,true,true),(false,false,true,true)]
     611    [mk_byte_from_bits ((false,false,true,true),(false,false,true,true))]
    612612  | RR `A ->
    613     [(false,false,false,false),(false,false,true,true)]
     613    [mk_byte_from_bits ((false,false,false,false),(false,false,true,true))]
    614614  | RRC `A ->
    615     [(false,false,false,true),(false,false,true,true)]
     615    [mk_byte_from_bits ((false,false,false,true),(false,false,true,true))]
    616616  | SETB `C ->
    617     [(true,true,false,true),(false,false,true,true)]
     617    [mk_byte_from_bits ((true,true,false,true),(false,false,true,true))]
    618618  | SETB (`BIT b1) ->
    619     [(true,true,false,true),(false,false,true,false); lift b1 from_byte from_nibble]
     619    [mk_byte_from_bits ((true,true,false,true),(false,false,true,false)); b1]
    620620  | SJMP (`REL b1) ->
    621     [(true,false,false,false),(false,false,false,false); lift b1 from_byte from_nibble]
     621    [mk_byte_from_bits ((true,false,false,false),(false,false,false,false)); b1]
    622622  | SUBB (`A, `REG(r1,r2,r3)) ->
    623     [(true,false,false,true),(true,r1,r2,r3)]
     623    [mk_byte_from_bits ((true,false,false,true),(true,r1,r2,r3))]
    624624  | SUBB (`A, `DIRECT b1) ->
    625     [(true,false,false,true),(false,true,false,true); lift b1 from_byte from_nibble]
     625    [mk_byte_from_bits ((true,false,false,true),(false,true,false,true)); b1]
    626626  | SUBB (`A, `INDIRECT i1) ->
    627     [(true,false,false,true),(false,true,true,i1)]
     627    [mk_byte_from_bits ((true,false,false,true),(false,true,true,i1))]
    628628  | SUBB (`A, `DATA b1) ->
    629     [(true,false,false,true),(false,true,false,false); lift b1 from_byte from_nibble]
     629    [mk_byte_from_bits ((true,false,false,true),(false,true,false,false)); b1]
    630630  | SWAP `A ->
    631     [(true,true,false,false),(false,true,false,false)]
     631    [mk_byte_from_bits ((true,true,false,false),(false,true,false,false))]
    632632  | XCH (`A, `REG(r1,r2,r3)) ->
    633     [(true,true,false,false),(true,r1,r2,r3)]
     633    [mk_byte_from_bits ((true,true,false,false),(true,r1,r2,r3))]
    634634  | XCH (`A, `DIRECT b1) ->
    635     [(true,true,false,false),(false,true,false,true); lift b1 from_byte from_nibble]
     635    [mk_byte_from_bits ((true,true,false,false),(false,true,false,true)); b1]
    636636  | XCH (`A, `INDIRECT i1) ->
    637     [(true,true,false,false),(false,true,true,i1)]
     637    [mk_byte_from_bits ((true,true,false,false),(false,true,true,i1))]
    638638  | XCHD(`A, `INDIRECT i1) ->
    639     [(true,true,false,true),(false,true,true,i1)]
     639    [mk_byte_from_bits ((true,true,false,true),(false,true,true,i1))]
    640640  | XRL(`U1(`A, `REG(r1,r2,r3))) ->
    641     [(false,true,true,false),(true,r1,r2,r3)]
     641    [mk_byte_from_bits ((false,true,true,false),(true,r1,r2,r3))]
    642642  | XRL(`U1(`A, `DIRECT b1)) ->
    643     [(false,true,true,false),(false,true,false,true); lift b1 from_byte from_nibble]
     643    [mk_byte_from_bits ((false,true,true,false),(false,true,false,true)); b1]
    644644  | XRL(`U1(`A, `INDIRECT i1)) ->
    645     [(false,true,true,false),(false,true,true,i1)]
     645    [mk_byte_from_bits ((false,true,true,false),(false,true,true,i1))]
    646646  | XRL(`U1(`A, `DATA b1)) ->
    647     [(false,true,true,false),(false,true,false,false); lift b1 from_byte from_nibble]
     647    [mk_byte_from_bits ((false,true,true,false),(false,true,false,false)); b1]
    648648  | XRL(`U2(`DIRECT b1, `A)) ->
    649     [(false,true,true,false),(false,false,true,false); lift b1 from_byte from_nibble]
     649    [mk_byte_from_bits ((false,true,true,false),(false,false,true,false)); b1]
    650650  | XRL(`U2(`DIRECT b1, `DATA b2)) ->
    651     [(false,true,true,false),(false,false,true,true); lift b1 from_byte from_nibble; lift b2 from_byte from_nibble]
     651    [mk_byte_from_bits ((false,true,true,false),(false,false,true,true)); b1; b2]
    652652;;
    653653
    654654let get_address_of_register status (b1,b2,b3) =
    655  let (_,_,rs1,rs0),_ = from_word status.psw in
     655 let bu,bl = from_byte status.psw in
     656 let (_,_,rs1,rs0) = from_nibble bu in
    656657 let base =
    657658  match rs1,rs0 with
     
    661662   | true,true   -> 0x18
    662663 in
    663   byte7_of_int (base + int_of_nibble (false,b1,b2,b3))
     664   vect_of_int (base + int_of_vect (mk_nibble false b1 b2 b3)) `Seven
    664665;;
    665666
    666667let get_register status reg =
    667   let addr = address_of_register status reg in
     668  let addr = get_address_of_register status reg in
    668669    Byte7Map.find addr status.low_internal_ram
    669670;;
    670671
    671672let set_register status v reg =
    672   let addr = address_of_register status reg in
     673  let addr = get_address_of_register status reg in
    673674    { status with low_internal_ram =
    674675        Byte7Map.add addr v status.low_internal_ram }
     
    680681       (match addr with
    681682          (false,r1,r2,r3),n1 ->
    682             Byte7Map.find (r1,r2,r3,n1) status.low_internal_ram
     683            Byte7Map.find (mk_byte7 r1 r2 r3 n1) status.low_internal_ram
    683684        | (true,r1,r2,r3),n1 ->
    684685             (*CSC: SFR access, TO BE IMPLEMENTED *)
    685686            assert false)
    686687  | `INDIRECT b ->
    687        let addr = get_register status (false,false,b) in
    688          (match addr with
    689            (false,r1,r2,r3),n1 ->
    690              Byte7Map.find (r1,r2,r3,n1) status.low_internal_ram
    691          | (true,r1,r2,r3),n1 ->
    692              Byte7Map.find (r1,r2,r3,n1) status.high_internal_ram)
     688       let (b1, b2) = from_byte (get_register status (false,false,b)) in
     689         (match (from_nibble b1, b2) with
     690           (false,r1,r2,r3),b2 ->
     691             Byte7Map.find (mk_byte7 r1 r2 r3 b2) status.low_internal_ram
     692         | (true,r1,r2,r3),b2 ->
     693             Byte7Map.find (mk_byte7 r1 r2 r3 b2) status.high_internal_ram)
    693694  | `REG (b1,b2,b3) -> get_register status (b1,b2,b3)
    694695  | `A -> status.acc
     
    696697  | `DATA b -> b
    697698  | `A_DPTR ->
    698        let dpr = status.dph,status.dpl in
     699       let dpr = mk_word status.dph status.dpl in
    699700       (* CSC: what is the right behaviour in case of overflow?
    700701          assert false for now. Try to understand what DEC really does *)
    701        let addr = dpr ++ (int_of_vect `Eight status.acc) in
     702       let cry,addr = half_add dpr (mk_word (vect_of_int 0 `Eight) status.acc) in
    702703         WordMap.find addr status.external_ram
    703704  | `A_PC ->
    704705       (* CSC: what is the right behaviour in case of overflow?
    705706          assert false for now *)
    706        let addr = status.pc ++ (int_of_vect `Eight status.acc) in
     707       let cry,addr = half_add status.pc (mk_word (vect_of_int 0 `Eight) status.acc) in
    707708         WordMap.find addr status.external_ram
    708709  | `IND_DPTR ->
    709        let dpr = status.dph, status.dpl in
     710       let dpr = mk_word status.dph status.dpl in
    710711         WordMap.find dpr status.external_ram
    711712;;
     
    722723      (match addr with
    723724         (false,r1,r2,r3),n1 ->
    724            let addr = (int_of_vect `Seven (r1,r2,r3,n1)) in
    725            let addr' = vect_of_int ((addr / 8) + 32) in
    726              nth_bit (addr mod 8) (Byte7Map.find addr' status.low_internal_ram)
    727        | (true,r1,r2,r3),n1 ->
     725           let addr = (int_of_vect (mk_byte7 r1 r2 r3 n1)) in
     726           let addr' = vect_of_int ((addr / 8) + 32) `Seven in
     727           let bit = get_bit (Byte7Map.find addr' status.low_internal_ram) (addr mod 8) in
     728             (match bit with
     729               None -> assert false
     730             | Some bit' -> bit')
     731        | (true,r1,r2,r3),n1 ->
    728732           (*CSC: SFR access, TO BE IMPLEMENTED *)
    729733           assert false)
    730734    in (match x with `BIT _ -> res | _ -> not res)
    731   | `C ->
    732        let ((b1,_,_,_),_) = status.psw in b1
     735  | `C -> get_cy_flag status
    733736
    734737let set_arg1 status v =
     
    737740      (match addr with
    738741         (false,r1,r2,r3),n1 ->
    739            let addr = (int_of_vect `Seven (r1,r2,r3,n1)) in
    740            let addr' = vect_of_int ((addr / 8) + 32) in
    741             { status with low_internal_ram =
    742                 Byte7Map.add addr' (set_nth_bit (addr mod 8) v (Byte7Map.find addr' status.low_internal_ram)) status.low_internal_ram }
     742           let addr = (int_of_vect (mk_byte7 r1 r2 r3 n1)) in
     743           let addr' = vect_of_int ((addr / 8) + 32) `Seven in
     744           let n_bit = set_bit (Byte7Map.find addr' status.low_internal_ram) (addr mod 8) v in
     745             (match n_bit with
     746                None -> assert false
     747              | Some n_bit' ->
     748                  { status with low_internal_ram = Byte7Map.add addr' n_bit' status.low_internal_ram })
    743749                        | (true,r1,r2,r3),n1 ->
    744750           (*CSC: SFR access, TO BE IMPLEMENTED *)
     
    746752           assert false)
    747753    | `C ->
    748        let ((_,b2,b3,b4),n2) = status.psw in
    749          { status with psw = (v,b2,b3,b4),n2 }
     754       let (n1,n2) = from_byte status.psw in
     755       let (_,b2,b3,b4) = from_nibble n1 in
     756         { status with psw = (mk_byte (mk_nibble v b2 b3 b4) n2) }
    750757
    751758let set_arg8 status v =
     
    755762         (false,r1,r2,r3),n1 ->
    756763           { status with low_internal_ram =
    757               Byte7Map.add (r1,r2,r3,n1) v status.low_internal_ram }
     764              Byte7Map.add (mk_byte7 r1 r2 r3 n1) v status.low_internal_ram }
    758765       | (true,r1,r2,r3),n1 ->
    759766           (*CSC: SFR access, TO BE IMPLEMENTED *)
     
    761768           assert false)
    762769  | `INDIRECT b ->
    763      let addr = get_register status (false,false,b) in
    764      (match addr with
     770     let (b1, b2) = from_byte (get_register status (false,false,b)) in
     771     (match (from_nibble b1, b2) with
    765772         (false,r1,r2,r3),n1 ->
    766773           { status with low_internal_ram =
    767               Byte7Map.add (r1,r2,r3,n1) v status.low_internal_ram }
     774              Byte7Map.add (mk_byte7 r1 r2 r3 n1) v status.low_internal_ram }
    768775       | (true,r1,r2,r3),n1 ->
    769776           { status with high_internal_ram =
    770               Byte7Map.add (r1,r2,r3,n1) v status.high_internal_ram })
     777              Byte7Map.add (mk_byte7 r1 r2 r3 n1) v status.high_internal_ram })
    771778  | `REG (b1,b2,b3) ->
    772779      set_register status v (b1,b2,b3)
     
    774781  | `B -> { status with b = v }
    775782  | `IND_DPTR ->
    776      let dpr = status.dph,status.dpl in
     783     let dpr = mk_word status.dph status.dpl in
    777784      { status with external_ram =
    778785        WordMap.add dpr v status.external_ram }
     
    786793let set_flags status c ac ov =
    787794 { status with psw =
    788     let (_c,oac,fo,rs1),(rs0,_ov,ud,p) = status.psw in
     795    let bu,bl = from_byte status.psw in
     796    let (_c,oac,fo,rs1),(rs0,_ov,ud,p) = from_nibble bu, from_nibble bl in
    789797    let ac = match ac with None -> oac | Some v -> v in
    790      (c,ac,fo,rs1),(rs0,ov,ud,p)
     798      mk_byte (mk_nibble c ac fo rs1) (mk_nibble rs0 ov ud p)
    791799 }
    792800;;
     
    800808;;
    801809
     810(*
    802811let execute1 status =
    803812 let instr,pc,ticks = fetch status.code_memory status.pc in
     
    11661175 | NOP -> status
    11671176;;
     1177*)
Note: See TracChangeset for help on using the changeset viewer.