Ignore:
Timestamp:
Oct 20, 2010, 5:59:20 PM (9 years ago)
Author:
mulligan
Message:

Remaining two timer modes implemented.

File:
1 edited

Legend:

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

    r201 r202  
    9191   th2: byte;  (* 8052 only *)
    9292
     93   previous_p1_val: bool;
     94   previous_p3_val: bool;
     95
    9396   clock: time;
    9497   timer0: word;
     
    217220  tl2 = zero `Eight;
    218221  th2 = zero `Eight;
     222
     223  previous_p1_val = false;
     224  previous_p3_val = false;
    219225
    220226  clock = 0;
     
    15491555        (if g0 then
    15501556          if get_bit status.p3 2 then
    1551             timer0 status b1 b2 ticks
     1557            if c0 then
     1558              if status.previous_p1_val && not $ get_bit status.p3 4 then
     1559                timer0 status b1 b2 ticks
     1560              else
     1561                status
     1562            else
     1563              timer0 status b1 b2 ticks
    15521564          else
    15531565            status
     
    15581570        (if g1 then
    15591571           if get_bit status.p1 3 then
    1560              timer1 status b3 b4 ticks
     1572             if c1 then
     1573               if status.previous_p3_val && not $ get_bit status.p3 5 then
     1574                 timer1 status b3 b4 ticks
     1575               else
     1576                 status
     1577             else
     1578               timer1 status b3 b4 ticks
    15611579           else
    15621580             status
     
    16051623              | _ -> status) in
    16061624           (* Serial port output, part two *)
    1607            if status.expected_out_time = `Now then
    1608              if get_bit status.scon 7 then
    1609                let exp_time, new_cont = out_cont status.clock (`SerialBuff (`Nine ((get_bit status.scon 3), status.sbuf))) in
    1610                  { status with expected_out_time = `At exp_time; io = new_cont }
     1625           let status =
     1626             (if status.expected_out_time = `Now then
     1627               if get_bit status.scon 7 then
     1628                 let exp_time, new_cont = out_cont status.clock (`SerialBuff (`Nine ((get_bit status.scon 3), status.sbuf))) in
     1629                   { status with expected_out_time = `At exp_time; io = new_cont }
     1630               else
     1631                 let exp_time, new_cont = out_cont status.clock (`SerialBuff (`Eight status.sbuf)) in
     1632                   { status with expected_out_time = `At exp_time; io = new_cont }               
    16111633             else
    1612                let exp_time, new_cont = out_cont status.clock (`SerialBuff (`Eight status.sbuf)) in
    1613                  { status with expected_out_time = `At exp_time; io = new_cont }               
    1614            else
    1615              status
     1634               status) in
     1635           { status with previous_p1_val = get_bit status.p3 4; previous_p3_val = get_bit status.p3 5 }
    16161636;;
    16171637
Note: See TracChangeset for help on using the changeset viewer.