Changeset 206


Ignore:
Timestamp:
Oct 22, 2010, 3:56:49 PM (9 years ago)
Author:
mulligan
Message:

Fixed serial output.

File:
1 edited

Legend:

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

    r205 r206  
    110110  serial_v_in: [`Eight of byte | `Nine of (BitVectors.bit * byte) ] option;
    111111  serial_v_out: [`Eight of byte | `Nine of (BitVectors.bit * byte) ] option;
     112
     113  serial_k_out: continuation option;
    112114
    113115  io: continuation;
     
    247249  serial_epsilon_in = None;
    248250  serial_epsilon_out = None;
     251  serial_k_out = None;
    249252
    250253  clock = 0;
     
    16741677                       match(sm0, sm1) with
    16751678                         (false, false) | (false, true) -> assert false
    1676                        | (true, false) | (true, true) ->
     1679                       | (true, false)  | (true, true) ->
    16771680                           (* Modes 2 and 3: 9-bit UART *)
    16781681                           (* Explanation: 9 bit asynchronous communication.  There's a delay (epsilon)
     
    17101713                 { status with io = cont })
    17111714           | _ -> status) in
     1715           (* Serial port output *)
     1716           let status =
     1717             (let status = { status with serial_epsilon_out = Some (status.clock + epsilon);
     1718                                         serial_v_out = Some serial.sbuf;
     1719                                         serial_k_out = Some (out_cont (status.clock + epsilon) serial.sbuf) } in
     1720               if clock >= epsilon_out then
     1721                 match status.serial_k_out with
     1722                   None -> assert false (* correct? *)
     1723                 | Some k' -> { status with io = k';
     1724                                            scon = set_bit status.scon 1 true; }
     1725               else
     1726                 status) in
     1727           { status with previous_p1_val = get_bit status.p3 4; previous_p3_val = get_bit status.p3 5 }
     1728;;
     1729
     1730(*
     1731OLD output routine:
    17121732           (* Serial port output, part one *)
    17131733           let status =
     
    17161736                 { status with scon = set_bit status.scon 1 true; expected_out_time = `None }
    17171737              | _ -> status) in
    1718            (* Serial port output, part two *)
    1719            let status =
     1738
    17201739             (if status.expected_out_time = `Now then
    17211740               if get_bit status.scon 7 then
     
    17271746             else
    17281747               status) in
    1729            { status with previous_p1_val = get_bit status.p3 4; previous_p3_val = get_bit status.p3 5 }
    1730 ;;
     1748*)
    17311749
    17321750let rec execute f s =
Note: See TracChangeset for help on using the changeset viewer.