diff --git a/.vimlocal b/.vimlocal index 6b16e68..2abe03f 100644 --- a/.vimlocal +++ b/.vimlocal @@ -1 +1,2 @@ map :Make +map :Dispatch upload --mojo syn/main.bin diff --git a/Makefile b/Makefile index 8d3dfae..7ba584a 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ syn/main.bin: syn/main.ncd mb/Graphics/Release/Graphics.elf syn/main.ncd: syn/main.prj syn/main.xst src/*.v ipcore_dir/*.v syn/xst/projnav.tmp/ @cd syn && xst -intstyle ise -ifn "main.xst" -ofn "main.syr" - @cd syn && ngdbuild -intstyle ise -dd _ngo -sd ../ipcore_dir -nt timestamp -i -p xc6slx9-tqg144-2 main.ngc main.ngd -bm "../ipcore_dir/microblaze_mcs.bmm" + @cd syn && ngdbuild -intstyle ise -dd _ngo -sd ../ipcore_dir -nt timestamp -uc /home/tim/Projects/z80/hdmi/src/constraints.ucf -p xc6slx9-tqg144-2 main.ngc main.ngd -bm "../ipcore_dir/microblaze_mcs.bmm" @cd syn && map -intstyle ise -p xc6slx9-tqg144-2 -w -logic_opt off -ol high -t 1 -xt 0 -register_duplication off -r 4 -global_opt off -mt off -ir off -pr off -lc off -power off -o main_map.ncd main.ngd main.pcf @cd syn && par -w -intstyle ise -ol high -mt off main_map.ncd main.ncd main.pcf @cd syn && trce -intstyle ise -v 3 -s 2 -n 3 -fastpaths -xml main.twx main.ncd -o main.twr main.pcf diff --git a/hdmi.xise b/hdmi.xise index 7b19b9c..f24bc90 100644 --- a/hdmi.xise +++ b/hdmi.xise @@ -91,7 +91,7 @@ - + @@ -297,7 +297,7 @@ - + @@ -406,7 +406,7 @@ - + @@ -534,7 +534,7 @@ - + diff --git a/ipcore_dir/gen_hdmi_clk.tcl b/ipcore_dir/gen_hdmi_clk.tcl new file mode 100644 index 0000000..fdfdfa6 --- /dev/null +++ b/ipcore_dir/gen_hdmi_clk.tcl @@ -0,0 +1,37 @@ +## +## Core Generator Run Script, generator for Project Navigator regen command +## + +proc findRtfPath { relativePath } { + set xilenv "" + if { [info exists ::env(XILINX) ] } { + if { [info exists ::env(MYXILINX)] } { + set xilenv [join [list $::env(MYXILINX) $::env(XILINX)] $::xilinx::path_sep ] + } else { + set xilenv $::env(XILINX) + } + } + foreach path [ split $xilenv $::xilinx::path_sep ] { + set fullPath [ file join $path $relativePath ] + if { [ file exists $fullPath ] } { + return $fullPath + } + } + return "" +} + +source [ findRtfPath "data/projnav/scripts/dpm_cgUtils.tcl" ] + +set result [ run_cg_regen "hdmi_clk" xc6slx9-2tqg144 Verilog CURRENT ] + +if { $result == 0 } { + puts "Core Generator regen command completed successfully." +} elseif { $result == 1 } { + puts "Core Generator regen command failed." +} elseif { $result == 3 || $result == 4 } { + # convert 'version check' result to real return range, bypassing any messages. + set result [ expr $result - 3 ] +} else { + puts "Core Generator regen cancelled." +} +exit $result diff --git a/ipcore_dir/gen_microblaze_mcs.tcl b/ipcore_dir/gen_microblaze_mcs.tcl new file mode 100644 index 0000000..8251920 --- /dev/null +++ b/ipcore_dir/gen_microblaze_mcs.tcl @@ -0,0 +1,37 @@ +## +## Core Generator Run Script, generator for Project Navigator regen command +## + +proc findRtfPath { relativePath } { + set xilenv "" + if { [info exists ::env(XILINX) ] } { + if { [info exists ::env(MYXILINX)] } { + set xilenv [join [list $::env(MYXILINX) $::env(XILINX)] $::xilinx::path_sep ] + } else { + set xilenv $::env(XILINX) + } + } + foreach path [ split $xilenv $::xilinx::path_sep ] { + set fullPath [ file join $path $relativePath ] + if { [ file exists $fullPath ] } { + return $fullPath + } + } + return "" +} + +source [ findRtfPath "data/projnav/scripts/dpm_cgUtils.tcl" ] + +set result [ run_cg_regen "microblaze_mcs" xc6slx9-2tqg144 Verilog CURRENT ] + +if { $result == 0 } { + puts "Core Generator regen command completed successfully." +} elseif { $result == 1 } { + puts "Core Generator regen command failed." +} elseif { $result == 3 || $result == 4 } { + # convert 'version check' result to real return range, bypassing any messages. + set result [ expr $result - 3 ] +} else { + puts "Core Generator regen cancelled." +} +exit $result diff --git a/ipcore_dir/hdmi_clk.sym b/ipcore_dir/hdmi_clk.sym index 5ea4f73..1f842a4 100644 --- a/ipcore_dir/hdmi_clk.sym +++ b/ipcore_dir/hdmi_clk.sym @@ -1,7 +1,7 @@ BLOCK - 2020-9-17T15:18:55 + 2020-9-21T18:2:44 diff --git a/ipcore_dir/hdmi_clk.xco b/ipcore_dir/hdmi_clk.xco index b3e4514..7b44c9f 100644 --- a/ipcore_dir/hdmi_clk.xco +++ b/ipcore_dir/hdmi_clk.xco @@ -1,7 +1,7 @@ ############################################################## # # Xilinx Core Generator version 14.7 -# Date: Thu Sep 17 15:18:44 2020 +# Date: Mon Sep 21 18:02:33 2020 # ############################################################## # diff --git a/ipcore_dir/hdmi_clk.xise b/ipcore_dir/hdmi_clk.xise index df07c32..31edc03 100644 --- a/ipcore_dir/hdmi_clk.xise +++ b/ipcore_dir/hdmi_clk.xise @@ -50,8 +50,8 @@ - - + + diff --git a/ipcore_dir/microblaze_mcs.sym b/ipcore_dir/microblaze_mcs.sym index 12b464b..43fcaf4 100644 --- a/ipcore_dir/microblaze_mcs.sym +++ b/ipcore_dir/microblaze_mcs.sym @@ -1,7 +1,7 @@ BLOCK - 2020-9-20T19:27:36 + 2020-9-21T18:2:10 diff --git a/ipcore_dir/microblaze_mcs.v b/ipcore_dir/microblaze_mcs.v index a42419b..516e68f 100644 --- a/ipcore_dir/microblaze_mcs.v +++ b/ipcore_dir/microblaze_mcs.v @@ -7,7 +7,7 @@ // \ \ \/ Version: P.20131013 // \ \ Application: netgen // / / Filename: microblaze_mcs.v -// /___/ /\ Timestamp: Sun Sep 20 21:27:36 2020 +// /___/ /\ Timestamp: Mon Sep 21 20:02:10 2020 // \ \ / \ // \___\/\___\ // diff --git a/ipcore_dir/microblaze_mcs.xco b/ipcore_dir/microblaze_mcs.xco index 4f2403a..1db2feb 100644 --- a/ipcore_dir/microblaze_mcs.xco +++ b/ipcore_dir/microblaze_mcs.xco @@ -1,7 +1,7 @@ ############################################################## # # Xilinx Core Generator version 14.7 -# Date: Sun Sep 20 19:25:41 2020 +# Date: Mon Sep 21 18:00:15 2020 # ############################################################## # diff --git a/ipcore_dir/microblaze_mcs.xise b/ipcore_dir/microblaze_mcs.xise index 49cb27b..33634bf 100644 --- a/ipcore_dir/microblaze_mcs.xise +++ b/ipcore_dir/microblaze_mcs.xise @@ -66,8 +66,8 @@ - - + + diff --git a/ipcore_dir/microblaze_mcs_bd.bmm b/ipcore_dir/microblaze_mcs_bd.bmm index 81a0e82..99257ad 100644 --- a/ipcore_dir/microblaze_mcs_bd.bmm +++ b/ipcore_dir/microblaze_mcs_bd.bmm @@ -20,14 +20,14 @@ ADDRESS_MAP microblaze_mcs MICROBLAZE-LE 100 ADDRESS_SPACE lmb_bram RAMB16 [0x00000000:0x00003FFF] BUS_BLOCK - mcs_0/U0/lmb_bram_I/RAM_Inst/Using_B16_S4.The_BRAMs[0].RAMB16_S4_1 RAMB16 [31:28] [0:4095] INPUT = microblaze_mcs.lmb_bram_0.mem PLACED = X1Y18; - mcs_0/U0/lmb_bram_I/RAM_Inst/Using_B16_S4.The_BRAMs[1].RAMB16_S4_1 RAMB16 [27:24] [0:4095] INPUT = microblaze_mcs.lmb_bram_1.mem PLACED = X1Y24; - mcs_0/U0/lmb_bram_I/RAM_Inst/Using_B16_S4.The_BRAMs[2].RAMB16_S4_1 RAMB16 [23:20] [0:4095] INPUT = microblaze_mcs.lmb_bram_2.mem PLACED = X1Y8; - mcs_0/U0/lmb_bram_I/RAM_Inst/Using_B16_S4.The_BRAMs[3].RAMB16_S4_1 RAMB16 [19:16] [0:4095] INPUT = microblaze_mcs.lmb_bram_3.mem PLACED = X1Y28; - mcs_0/U0/lmb_bram_I/RAM_Inst/Using_B16_S4.The_BRAMs[4].RAMB16_S4_1 RAMB16 [15:12] [0:4095] INPUT = microblaze_mcs.lmb_bram_4.mem PLACED = X1Y20; - mcs_0/U0/lmb_bram_I/RAM_Inst/Using_B16_S4.The_BRAMs[5].RAMB16_S4_1 RAMB16 [11:8] [0:4095] INPUT = microblaze_mcs.lmb_bram_5.mem PLACED = X1Y26; - mcs_0/U0/lmb_bram_I/RAM_Inst/Using_B16_S4.The_BRAMs[6].RAMB16_S4_1 RAMB16 [7:4] [0:4095] INPUT = microblaze_mcs.lmb_bram_6.mem PLACED = X1Y16; - mcs_0/U0/lmb_bram_I/RAM_Inst/Using_B16_S4.The_BRAMs[7].RAMB16_S4_1 RAMB16 [3:0] [0:4095] INPUT = microblaze_mcs.lmb_bram_7.mem PLACED = X1Y22; + mcs_0/U0/lmb_bram_I/RAM_Inst/Using_B16_S4.The_BRAMs[0].RAMB16_S4_1 RAMB16 [31:28] [0:4095] INPUT = microblaze_mcs.lmb_bram_0.mem PLACED = X0Y26; + mcs_0/U0/lmb_bram_I/RAM_Inst/Using_B16_S4.The_BRAMs[1].RAMB16_S4_1 RAMB16 [27:24] [0:4095] INPUT = microblaze_mcs.lmb_bram_1.mem PLACED = X0Y20; + mcs_0/U0/lmb_bram_I/RAM_Inst/Using_B16_S4.The_BRAMs[2].RAMB16_S4_1 RAMB16 [23:20] [0:4095] INPUT = microblaze_mcs.lmb_bram_2.mem PLACED = X0Y24; + mcs_0/U0/lmb_bram_I/RAM_Inst/Using_B16_S4.The_BRAMs[3].RAMB16_S4_1 RAMB16 [19:16] [0:4095] INPUT = microblaze_mcs.lmb_bram_3.mem PLACED = X0Y18; + mcs_0/U0/lmb_bram_I/RAM_Inst/Using_B16_S4.The_BRAMs[4].RAMB16_S4_1 RAMB16 [15:12] [0:4095] INPUT = microblaze_mcs.lmb_bram_4.mem PLACED = X0Y30; + mcs_0/U0/lmb_bram_I/RAM_Inst/Using_B16_S4.The_BRAMs[5].RAMB16_S4_1 RAMB16 [11:8] [0:4095] INPUT = microblaze_mcs.lmb_bram_5.mem PLACED = X0Y22; + mcs_0/U0/lmb_bram_I/RAM_Inst/Using_B16_S4.The_BRAMs[6].RAMB16_S4_1 RAMB16 [7:4] [0:4095] INPUT = microblaze_mcs.lmb_bram_6.mem PLACED = X0Y28; + mcs_0/U0/lmb_bram_I/RAM_Inst/Using_B16_S4.The_BRAMs[7].RAMB16_S4_1 RAMB16 [3:0] [0:4095] INPUT = microblaze_mcs.lmb_bram_7.mem PLACED = X0Y16; END_BUS_BLOCK; END_ADDRESS_SPACE; diff --git a/ipcore_dir/microblaze_mcs_sdk.xml b/ipcore_dir/microblaze_mcs_sdk.xml index 848fe48..44471b3 100644 --- a/ipcore_dir/microblaze_mcs_sdk.xml +++ b/ipcore_dir/microblaze_mcs_sdk.xml @@ -1,6 +1,6 @@ - + diff --git a/ipcore_dir/tmp/customization_gui.0.405988320432.out b/ipcore_dir/tmp/customization_gui.0.405988320432.out new file mode 100644 index 0000000..a8315da --- /dev/null +++ b/ipcore_dir/tmp/customization_gui.0.405988320432.out @@ -0,0 +1,505 @@ +SET_FLAG DEBUG FALSE +SET_FLAG MODE BATCH +SET_FLAG STANDALONE_MODE FALSE +SET_PREFERENCE devicefamily spartan6 +SET_PREFERENCE device xc6slx9 +SET_PREFERENCE speedgrade -2 +SET_PREFERENCE package tqg144 +SET_PREFERENCE verilogsim true +SET_PREFERENCE vhdlsim false +SET_PREFERENCE simulationfiles Behavioral +SET_PREFERENCE busformat BusFormatAngleBracketNotRipped +SET_PREFERENCE outputdirectory /home/tim/Projects/z80/hdmi/ipcore_dir/ +SET_PREFERENCE workingdirectory /home/tim/Projects/z80/hdmi/ipcore_dir/tmp/ +SET_PREFERENCE subworkingdirectory /home/tim/Projects/z80/hdmi/ipcore_dir/tmp/_cg/ +SET_PREFERENCE transientdirectory /home/tim/Projects/z80/hdmi/ipcore_dir/tmp/_cg/_dbg/ +SET_PREFERENCE designentry Verilog +SET_PREFERENCE flowvendor Other +SET_PREFERENCE addpads false +SET_PREFERENCE projectname coregen +SET_PREFERENCE formalverification false +SET_PREFERENCE asysymbol false +SET_PREFERENCE implementationfiletype Ngc +SET_PREFERENCE foundationsym false +SET_PREFERENCE createndf false +SET_PREFERENCE removerpms false +SET_PARAMETER Component_Name hdmi_clk +SET_PARAMETER Use_Freq_Synth true +SET_PARAMETER Use_Phase_Alignment false +SET_PARAMETER Use_Min_Power false +SET_PARAMETER Use_Dyn_Phase_Shift false +SET_PARAMETER Use_Dyn_Reconfig false +SET_PARAMETER Jitter_Sel No_Jitter +SET_PARAMETER Use_Spread_Spectrum false +SET_PARAMETER Use_Spread_Spectrum_1 false +SET_PARAMETER Prim_In_Freq 50 +SET_PARAMETER In_Freq_Units Units_MHz +SET_PARAMETER In_Jitter_Units Units_UI +SET_PARAMETER Relative_Inclk REL_PRIMARY +SET_PARAMETER Secondary_In_Freq 100.000 +SET_PARAMETER Jitter_Options UI +SET_PARAMETER Clkin1_UI_Jitter 0.010 +SET_PARAMETER Clkin2_UI_Jitter 0.010 +SET_PARAMETER Prim_In_Jitter 0.010 +SET_PARAMETER Secondary_In_Jitter 0.010 +SET_PARAMETER Clkin1_Jitter_Ps 200.0 +SET_PARAMETER Clkin2_Jitter_Ps 100.0 +SET_PARAMETER Clkout2_Used true +SET_PARAMETER Clkout3_Used false +SET_PARAMETER Clkout4_Used false +SET_PARAMETER Clkout5_Used false +SET_PARAMETER Clkout6_Used false +SET_PARAMETER Clkout7_Used false +SET_PARAMETER Num_Out_Clks 2 +SET_PARAMETER Clk_Out1_Use_Fine_Ps_GUI false +SET_PARAMETER Clk_Out2_Use_Fine_Ps_GUI false +SET_PARAMETER Clk_Out3_Use_Fine_Ps_GUI false +SET_PARAMETER Clk_Out4_Use_Fine_Ps_GUI false +SET_PARAMETER Clk_Out5_Use_Fine_Ps_GUI false +SET_PARAMETER Clk_Out6_Use_Fine_Ps_GUI false +SET_PARAMETER Clk_Out7_Use_Fine_Ps_GUI false +SET_PARAMETER primary_port CLK_IN1 +SET_PARAMETER CLK_OUT1_port CLK_OUT1 +SET_PARAMETER CLK_OUT2_port CLK_OUT2 +SET_PARAMETER CLK_OUT3_port CLK_OUT3 +SET_PARAMETER CLK_OUT4_port CLK_OUT4 +SET_PARAMETER CLK_OUT5_port CLK_OUT5 +SET_PARAMETER CLK_OUT6_port CLK_OUT6 +SET_PARAMETER CLK_OUT7_port CLK_OUT7 +SET_PARAMETER DADDR_port DADDR +SET_PARAMETER DCLK_port DCLK +SET_PARAMETER DRDY_port DRDY +SET_PARAMETER DWE_port DWE +SET_PARAMETER DIN_port DIN +SET_PARAMETER DOUT_port DOUT +SET_PARAMETER DEN_port DEN +SET_PARAMETER PSCLK_port PSCLK +SET_PARAMETER PSEN_port PSEN +SET_PARAMETER PSINCDEC_port PSINCDEC +SET_PARAMETER PSDONE_port PSDONE +SET_PARAMETER Clkout1_Requested_Out_Freq 75 +SET_PARAMETER Clkout1_Requested_Phase 0.000 +SET_PARAMETER Clkout1_Requested_Duty_Cycle 50.000 +SET_PARAMETER Clkout2_Requested_Out_Freq 150 +SET_PARAMETER Clkout2_Requested_Phase 0.000 +SET_PARAMETER Clkout2_Requested_Duty_Cycle 50.000 +SET_PARAMETER Clkout3_Requested_Out_Freq 100.000 +SET_PARAMETER Clkout3_Requested_Phase 0.000 +SET_PARAMETER Clkout3_Requested_Duty_Cycle 50.000 +SET_PARAMETER Clkout4_Requested_Out_Freq 100.000 +SET_PARAMETER Clkout4_Requested_Phase 0.000 +SET_PARAMETER Clkout4_Requested_Duty_Cycle 50.000 +SET_PARAMETER Clkout5_Requested_Out_Freq 100.000 +SET_PARAMETER Clkout5_Requested_Phase 0.000 +SET_PARAMETER Clkout5_Requested_Duty_Cycle 50.000 +SET_PARAMETER Clkout6_Requested_Out_Freq 100.000 +SET_PARAMETER Clkout6_Requested_Phase 0.000 +SET_PARAMETER Clkout6_Requested_Duty_Cycle 50.000 +SET_PARAMETER Clkout7_Requested_Out_Freq 100.000 +SET_PARAMETER Clkout7_Requested_Phase 0.000 +SET_PARAMETER Clkout7_Requested_Duty_Cycle 50.000 +SET_PARAMETER Use_Max_I_Jitter false +SET_PARAMETER Use_Min_O_Jitter false +SET_PARAMETER Prim_Source Single_ended_clock_capable_pin +SET_PARAMETER Use_Inclk_Switchover false +SET_PARAMETER secondary_port CLK_IN2 +SET_PARAMETER Secondary_Source Single_ended_clock_capable_pin +SET_PARAMETER Clkout1_Drives BUFG +SET_PARAMETER Clkout2_Drives BUFG +SET_PARAMETER Clkout3_Drives BUFG +SET_PARAMETER Clkout4_Drives BUFG +SET_PARAMETER Clkout5_Drives BUFG +SET_PARAMETER Clkout6_Drives BUFG +SET_PARAMETER Clkout7_Drives BUFG +SET_PARAMETER Feedback_Source FDBK_AUTO +SET_PARAMETER Clkfb_In_Signaling SINGLE +SET_PARAMETER CLKFB_IN_port CLKFB_IN +SET_PARAMETER CLKFB_IN_P_port CLKFB_IN_P +SET_PARAMETER CLKFB_IN_N_port CLKFB_IN_N +SET_PARAMETER CLKFB_OUT_port CLKFB_OUT +SET_PARAMETER CLKFB_OUT_P_port CLKFB_OUT_P +SET_PARAMETER CLKFB_OUT_N_port CLKFB_OUT_N +SET_PARAMETER Platform lin64 +SET_PARAMETER Summary_Strings empty +SET_PARAMETER Use_Locked false +SET_PARAMETER calc_done DONE +SET_PARAMETER Use_Reset false +SET_PARAMETER Use_Power_Down false +SET_PARAMETER Use_Status false +SET_PARAMETER Use_Freeze false +SET_PARAMETER Use_Clk_Valid false +SET_PARAMETER Use_Inclk_Stopped false +SET_PARAMETER Use_Clkfb_Stopped false +SET_PARAMETER RESET_port RESET +SET_PARAMETER LOCKED_port LOCKED +SET_PARAMETER Power_Down_port POWER_DOWN +SET_PARAMETER CLK_VALID_port CLK_VALID +SET_PARAMETER STATUS_port STATUS +SET_PARAMETER CLK_IN_SEL_port CLK_IN_SEL +SET_PARAMETER INPUT_CLK_STOPPED_port INPUT_CLK_STOPPED +SET_PARAMETER CLKFB_STOPPED_port CLKFB_STOPPED +SET_PARAMETER Override_Mmcm false +SET_PARAMETER Mmcm_Notes None +SET_PARAMETER Mmcm_Divclk_Divide 1 +SET_PARAMETER Mmcm_Bandwidth OPTIMIZED +SET_PARAMETER Mmcm_Clkfbout_Mult_F 4.000 +SET_PARAMETER Mmcm_Clkfbout_Phase 0.000 +SET_PARAMETER Mmcm_Clkfbout_Use_Fine_Ps false +SET_PARAMETER Mmcm_Clkin1_Period 10.000 +SET_PARAMETER Mmcm_Clkin2_Period 10.000 +SET_PARAMETER Mmcm_Clkout4_Cascade false +SET_PARAMETER Mmcm_Clock_Hold false +SET_PARAMETER Mmcm_Compensation ZHOLD +SET_PARAMETER Mmcm_Ref_Jitter1 0.010 +SET_PARAMETER Mmcm_Ref_Jitter2 0.010 +SET_PARAMETER Mmcm_Startup_Wait false +SET_PARAMETER Mmcm_Clkout0_Divide_F 4.000 +SET_PARAMETER Mmcm_Clkout0_Duty_Cycle 0.500 +SET_PARAMETER Mmcm_Clkout0_Phase 0.000 +SET_PARAMETER Mmcm_Clkout0_Use_Fine_Ps false +SET_PARAMETER Mmcm_Clkout1_Divide 1 +SET_PARAMETER Mmcm_Clkout1_Duty_Cycle 0.500 +SET_PARAMETER Mmcm_Clkout1_Phase 0.000 +SET_PARAMETER Mmcm_Clkout1_Use_Fine_Ps false +SET_PARAMETER Mmcm_Clkout2_Divide 1 +SET_PARAMETER Mmcm_Clkout2_Duty_Cycle 0.500 +SET_PARAMETER Mmcm_Clkout2_Phase 0.000 +SET_PARAMETER Mmcm_Clkout2_Use_Fine_Ps false +SET_PARAMETER Mmcm_Clkout3_Divide 1 +SET_PARAMETER Mmcm_Clkout3_Duty_Cycle 0.500 +SET_PARAMETER Mmcm_Clkout3_Phase 0.000 +SET_PARAMETER Mmcm_Clkout3_Use_Fine_Ps false +SET_PARAMETER Mmcm_Clkout4_Divide 1 +SET_PARAMETER Mmcm_Clkout4_Duty_Cycle 0.500 +SET_PARAMETER Mmcm_Clkout4_Phase 0.000 +SET_PARAMETER Mmcm_Clkout4_Use_Fine_Ps false +SET_PARAMETER Mmcm_Clkout5_Divide 1 +SET_PARAMETER Mmcm_Clkout5_Duty_Cycle 0.500 +SET_PARAMETER Mmcm_Clkout5_Phase 0.000 +SET_PARAMETER Mmcm_Clkout5_Use_Fine_Ps false +SET_PARAMETER Mmcm_Clkout6_Divide 1 +SET_PARAMETER Mmcm_Clkout6_Duty_Cycle 0.500 +SET_PARAMETER Mmcm_Clkout6_Phase 0.000 +SET_PARAMETER Mmcm_Clkout6_Use_Fine_Ps false +SET_PARAMETER Override_Dcm false +SET_PARAMETER Dcm_Notes None +SET_PARAMETER Dcm_Clkdv_Divide 2.0 +SET_PARAMETER Dcm_Clkfx_Divide 2 +SET_PARAMETER Dcm_Clkfx_Multiply 3 +SET_PARAMETER Dcm_Clkin_Divide_By_2 false +SET_PARAMETER Dcm_Clkin_Period 20.000 +SET_PARAMETER Dcm_Clkout_Phase_Shift NONE +SET_PARAMETER Dcm_Deskew_Adjust SYSTEM_SYNCHRONOUS +SET_PARAMETER Dcm_Phase_Shift 0 +SET_PARAMETER Dcm_Clk_Feedback NONE +SET_PARAMETER Dcm_Startup_Wait false +SET_PARAMETER Dcm_Clk_Out1_Port CLKFX +SET_PARAMETER Dcm_Clk_Out2_Port CLK0 +SET_PARAMETER Dcm_Clk_Out3_Port CLK0 +SET_PARAMETER Dcm_Clk_Out4_Port CLK0 +SET_PARAMETER Dcm_Clk_Out5_Port CLK0 +SET_PARAMETER Dcm_Clk_Out6_Port CLK0 +SET_PARAMETER Override_Dcm_Clkgen false +SET_PARAMETER Dcm_Clkgen_Notes None +SET_PARAMETER Dcm_Clkgen_Clkfx_Divide 1 +SET_PARAMETER Dcm_Clkgen_Clkfx_Multiply 4 +SET_PARAMETER Dcm_Clkgen_Clkfxdv_Divide 2 +SET_PARAMETER Dcm_Clkgen_Clkfx_Md_Max 0.000 +SET_PARAMETER Dcm_Clkgen_Startup_Wait false +SET_PARAMETER Dcm_Clkgen_Clkin_Period 10.000 +SET_PARAMETER Dcm_Clkgen_Spread_Spectrum NONE +SET_PARAMETER Dcm_Clkgen_Clk_Out1_Port CLKFX +SET_PARAMETER Dcm_Clkgen_Clk_Out2_Port CLKFX +SET_PARAMETER Dcm_Clkgen_Clk_Out3_Port CLKFX +SET_PARAMETER Override_Pll false +SET_PARAMETER Pll_Notes None +SET_PARAMETER Pll_Bandwidth OPTIMIZED +SET_PARAMETER Pll_Clkfbout_Mult 9 +SET_PARAMETER Pll_Clkfbout_Phase 0.000 +SET_PARAMETER Pll_Clk_Feedback CLKFBOUT +SET_PARAMETER Pll_Divclk_Divide 1 +SET_PARAMETER Pll_Clkin_Period 20.000 +SET_PARAMETER Pll_Compensation INTERNAL +SET_PARAMETER Pll_Ref_Jitter 0.010 +SET_PARAMETER Pll_Clkout0_Divide 6 +SET_PARAMETER Pll_Clkout0_Duty_Cycle 0.500 +SET_PARAMETER Pll_Clkout0_Phase 0.000 +SET_PARAMETER Pll_Clkout1_Divide 3 +SET_PARAMETER Pll_Clkout1_Duty_Cycle 0.500 +SET_PARAMETER Pll_Clkout1_Phase 0.000 +SET_PARAMETER Pll_Clkout2_Divide 1 +SET_PARAMETER Pll_Clkout2_Duty_Cycle 0.500 +SET_PARAMETER Pll_Clkout2_Phase 0.000 +SET_PARAMETER Pll_Clkout3_Divide 1 +SET_PARAMETER Pll_Clkout3_Duty_Cycle 0.500 +SET_PARAMETER Pll_Clkout3_Phase 0.000 +SET_PARAMETER Pll_Clkout4_Divide 1 +SET_PARAMETER Pll_Clkout4_Duty_Cycle 0.500 +SET_PARAMETER Pll_Clkout4_Phase 0.000 +SET_PARAMETER Pll_Clkout5_Divide 1 +SET_PARAMETER Pll_Clkout5_Duty_Cycle 0.500 +SET_PARAMETER Pll_Clkout5_Phase 0.000 +SET_PARAMETER dcm_pll_cascade NONE +SET_PARAMETER clock_mgr_type AUTO +SET_PARAMETER primtype_sel PLL_BASE +SET_PARAMETER primitive MMCM +SET_PARAMETER SS_Mode CENTER_HIGH +SET_PARAMETER SS_Mod_Freq 250 +SET_SIM_PARAMETER c_clkout2_used 1 +SET_SIM_PARAMETER c_clkout3_used 0 +SET_SIM_PARAMETER c_clkout4_used 0 +SET_SIM_PARAMETER c_clkout5_used 0 +SET_SIM_PARAMETER c_clkout6_used 0 +SET_SIM_PARAMETER c_clkout7_used 0 +SET_SIM_PARAMETER c_use_clkout1_bar 0 +SET_SIM_PARAMETER c_use_clkout2_bar 0 +SET_SIM_PARAMETER c_use_clkout3_bar 0 +SET_SIM_PARAMETER c_use_clkout4_bar 0 +SET_SIM_PARAMETER c_component_name hdmi_clk +SET_SIM_PARAMETER c_platform lin64 +SET_SIM_PARAMETER c_use_freq_synth 1 +SET_SIM_PARAMETER c_use_phase_alignment 0 +SET_SIM_PARAMETER c_prim_in_jitter 0.010 +SET_SIM_PARAMETER c_secondary_in_jitter 0.010 +SET_SIM_PARAMETER c_jitter_sel No_Jitter +SET_SIM_PARAMETER c_use_min_power 0 +SET_SIM_PARAMETER c_use_min_o_jitter 0 +SET_SIM_PARAMETER c_use_max_i_jitter 0 +SET_SIM_PARAMETER c_use_dyn_phase_shift 0 +SET_SIM_PARAMETER c_use_inclk_switchover 0 +SET_SIM_PARAMETER c_use_dyn_reconfig 0 +SET_SIM_PARAMETER c_use_spread_spectrum 0 +SET_SIM_PARAMETER c_use_spread_spectrum_1 0 +SET_SIM_PARAMETER c_primtype_sel PLL_BASE +SET_SIM_PARAMETER c_use_clk_valid 0 +SET_SIM_PARAMETER c_prim_in_freq 50 +SET_SIM_PARAMETER c_in_freq_units Units_MHz +SET_SIM_PARAMETER c_secondary_in_freq 100.000 +SET_SIM_PARAMETER c_feedback_source FDBK_AUTO +SET_SIM_PARAMETER c_prim_source Single_ended_clock_capable_pin +SET_SIM_PARAMETER c_secondary_source Single_ended_clock_capable_pin +SET_SIM_PARAMETER c_clkfb_in_signaling SINGLE +SET_SIM_PARAMETER c_use_reset 0 +SET_SIM_PARAMETER c_use_locked 0 +SET_SIM_PARAMETER c_use_inclk_stopped 0 +SET_SIM_PARAMETER c_use_clkfb_stopped 0 +SET_SIM_PARAMETER c_use_power_down 0 +SET_SIM_PARAMETER c_use_status 0 +SET_SIM_PARAMETER c_use_freeze 0 +SET_SIM_PARAMETER c_num_out_clks 2 +SET_SIM_PARAMETER c_clkout1_drives BUFG +SET_SIM_PARAMETER c_clkout2_drives BUFG +SET_SIM_PARAMETER c_clkout3_drives BUFG +SET_SIM_PARAMETER c_clkout4_drives BUFG +SET_SIM_PARAMETER c_clkout5_drives BUFG +SET_SIM_PARAMETER c_clkout6_drives BUFG +SET_SIM_PARAMETER c_clkout7_drives BUFG +SET_SIM_PARAMETER c_inclk_sum_row0 "Input Clock Freq (MHz) Input Jitter (UI)" +SET_SIM_PARAMETER c_inclk_sum_row1 __primary______________50____________0.010 +SET_SIM_PARAMETER c_inclk_sum_row2 no_secondary_input_clock +SET_SIM_PARAMETER c_outclk_sum_row0a "Output Output Phase Duty Pk-to-Pk Phase" +SET_SIM_PARAMETER c_outclk_sum_row0b "Clock Freq (MHz) (degrees) Cycle (%) Jitter (ps) Error (ps)" +SET_SIM_PARAMETER c_outclk_sum_row1 CLK_OUT1____75.000______0.000______50.0______248.869____240.171 +SET_SIM_PARAMETER c_outclk_sum_row2 CLK_OUT2___150.000______0.000______50.0______216.897____240.171 +SET_SIM_PARAMETER c_outclk_sum_row3 no_CLK_OUT3_output +SET_SIM_PARAMETER c_outclk_sum_row4 no_CLK_OUT4_output +SET_SIM_PARAMETER c_outclk_sum_row5 no_CLK_OUT5_output +SET_SIM_PARAMETER c_outclk_sum_row6 no_CLK_OUT6_output +SET_SIM_PARAMETER c_outclk_sum_row7 no_CLK_OUT7_output +SET_SIM_PARAMETER c_clkout1_requested_out_freq 75 +SET_SIM_PARAMETER c_clkout2_requested_out_freq 150 +SET_SIM_PARAMETER c_clkout3_requested_out_freq 100.000 +SET_SIM_PARAMETER c_clkout4_requested_out_freq 100.000 +SET_SIM_PARAMETER c_clkout5_requested_out_freq 100.000 +SET_SIM_PARAMETER c_clkout6_requested_out_freq 100.000 +SET_SIM_PARAMETER c_clkout7_requested_out_freq 100.000 +SET_SIM_PARAMETER c_clkout1_requested_phase 0.000 +SET_SIM_PARAMETER c_clkout2_requested_phase 0.000 +SET_SIM_PARAMETER c_clkout3_requested_phase 0.000 +SET_SIM_PARAMETER c_clkout4_requested_phase 0.000 +SET_SIM_PARAMETER c_clkout5_requested_phase 0.000 +SET_SIM_PARAMETER c_clkout6_requested_phase 0.000 +SET_SIM_PARAMETER c_clkout7_requested_phase 0.000 +SET_SIM_PARAMETER c_clkout1_requested_duty_cycle 50.000 +SET_SIM_PARAMETER c_clkout2_requested_duty_cycle 50.000 +SET_SIM_PARAMETER c_clkout3_requested_duty_cycle 50.000 +SET_SIM_PARAMETER c_clkout4_requested_duty_cycle 50.000 +SET_SIM_PARAMETER c_clkout5_requested_duty_cycle 50.000 +SET_SIM_PARAMETER c_clkout6_requested_duty_cycle 50.000 +SET_SIM_PARAMETER c_clkout7_requested_duty_cycle 50.000 +SET_SIM_PARAMETER c_clkout1_out_freq 75.000 +SET_SIM_PARAMETER c_clkout2_out_freq 150.000 +SET_SIM_PARAMETER c_clkout3_out_freq N/A +SET_SIM_PARAMETER c_clkout4_out_freq N/A +SET_SIM_PARAMETER c_clkout5_out_freq N/A +SET_SIM_PARAMETER c_clkout6_out_freq N/A +SET_SIM_PARAMETER c_clkout7_out_freq N/A +SET_SIM_PARAMETER c_clkout1_phase 0.000 +SET_SIM_PARAMETER c_clkout2_phase 0.000 +SET_SIM_PARAMETER c_clkout3_phase N/A +SET_SIM_PARAMETER c_clkout4_phase N/A +SET_SIM_PARAMETER c_clkout5_phase N/A +SET_SIM_PARAMETER c_clkout6_phase N/A +SET_SIM_PARAMETER c_clkout7_phase N/A +SET_SIM_PARAMETER c_clkout1_duty_cycle 50.0 +SET_SIM_PARAMETER c_clkout2_duty_cycle 50.0 +SET_SIM_PARAMETER c_clkout3_duty_cycle N/A +SET_SIM_PARAMETER c_clkout4_duty_cycle N/A +SET_SIM_PARAMETER c_clkout5_duty_cycle N/A +SET_SIM_PARAMETER c_clkout6_duty_cycle N/A +SET_SIM_PARAMETER c_clkout7_duty_cycle N/A +SET_SIM_PARAMETER c_mmcm_notes None +SET_SIM_PARAMETER c_mmcm_bandwidth OPTIMIZED +SET_SIM_PARAMETER c_mmcm_clkfbout_mult_f 4.000 +SET_SIM_PARAMETER c_mmcm_clkin1_period 10.000 +SET_SIM_PARAMETER c_mmcm_clkin2_period 10.000 +SET_SIM_PARAMETER c_mmcm_clkout4_cascade FALSE +SET_SIM_PARAMETER c_mmcm_clock_hold FALSE +SET_SIM_PARAMETER c_mmcm_compensation ZHOLD +SET_SIM_PARAMETER c_mmcm_divclk_divide 1 +SET_SIM_PARAMETER c_mmcm_ref_jitter1 0.010 +SET_SIM_PARAMETER c_mmcm_ref_jitter2 0.010 +SET_SIM_PARAMETER c_mmcm_startup_wait FALSE +SET_SIM_PARAMETER c_mmcm_clkout0_divide_f 4.000 +SET_SIM_PARAMETER c_mmcm_clkout1_divide 1 +SET_SIM_PARAMETER c_mmcm_clkout2_divide 1 +SET_SIM_PARAMETER c_mmcm_clkout3_divide 1 +SET_SIM_PARAMETER c_mmcm_clkout4_divide 1 +SET_SIM_PARAMETER c_mmcm_clkout5_divide 1 +SET_SIM_PARAMETER c_mmcm_clkout6_divide 1 +SET_SIM_PARAMETER c_mmcm_clkout0_duty_cycle 0.500 +SET_SIM_PARAMETER c_mmcm_clkout1_duty_cycle 0.500 +SET_SIM_PARAMETER c_mmcm_clkout2_duty_cycle 0.500 +SET_SIM_PARAMETER c_mmcm_clkout3_duty_cycle 0.500 +SET_SIM_PARAMETER c_mmcm_clkout4_duty_cycle 0.500 +SET_SIM_PARAMETER c_mmcm_clkout5_duty_cycle 0.500 +SET_SIM_PARAMETER c_mmcm_clkout6_duty_cycle 0.500 +SET_SIM_PARAMETER c_mmcm_clkfbout_phase 0.000 +SET_SIM_PARAMETER c_mmcm_clkout0_phase 0.000 +SET_SIM_PARAMETER c_mmcm_clkout1_phase 0.000 +SET_SIM_PARAMETER c_mmcm_clkout2_phase 0.000 +SET_SIM_PARAMETER c_mmcm_clkout3_phase 0.000 +SET_SIM_PARAMETER c_mmcm_clkout4_phase 0.000 +SET_SIM_PARAMETER c_mmcm_clkout5_phase 0.000 +SET_SIM_PARAMETER c_mmcm_clkout6_phase 0.000 +SET_SIM_PARAMETER c_mmcm_clkfbout_use_fine_ps FALSE +SET_SIM_PARAMETER c_mmcm_clkout0_use_fine_ps FALSE +SET_SIM_PARAMETER c_mmcm_clkout1_use_fine_ps FALSE +SET_SIM_PARAMETER c_mmcm_clkout2_use_fine_ps FALSE +SET_SIM_PARAMETER c_mmcm_clkout3_use_fine_ps FALSE +SET_SIM_PARAMETER c_mmcm_clkout4_use_fine_ps FALSE +SET_SIM_PARAMETER c_mmcm_clkout5_use_fine_ps FALSE +SET_SIM_PARAMETER c_mmcm_clkout6_use_fine_ps FALSE +SET_SIM_PARAMETER c_pll_notes None +SET_SIM_PARAMETER c_pll_bandwidth OPTIMIZED +SET_SIM_PARAMETER c_pll_clk_feedback CLKFBOUT +SET_SIM_PARAMETER c_pll_clkfbout_mult 9 +SET_SIM_PARAMETER c_pll_clkin_period 20.000 +SET_SIM_PARAMETER c_pll_compensation INTERNAL +SET_SIM_PARAMETER c_pll_divclk_divide 1 +SET_SIM_PARAMETER c_pll_ref_jitter 0.010 +SET_SIM_PARAMETER c_pll_clkout0_divide 6 +SET_SIM_PARAMETER c_pll_clkout1_divide 3 +SET_SIM_PARAMETER c_pll_clkout2_divide 1 +SET_SIM_PARAMETER c_pll_clkout3_divide 1 +SET_SIM_PARAMETER c_pll_clkout4_divide 1 +SET_SIM_PARAMETER c_pll_clkout5_divide 1 +SET_SIM_PARAMETER c_pll_clkout0_duty_cycle 0.500 +SET_SIM_PARAMETER c_pll_clkout1_duty_cycle 0.500 +SET_SIM_PARAMETER c_pll_clkout2_duty_cycle 0.500 +SET_SIM_PARAMETER c_pll_clkout3_duty_cycle 0.500 +SET_SIM_PARAMETER c_pll_clkout4_duty_cycle 0.500 +SET_SIM_PARAMETER c_pll_clkout5_duty_cycle 0.500 +SET_SIM_PARAMETER c_pll_clkfbout_phase 0.000 +SET_SIM_PARAMETER c_pll_clkout0_phase 0.000 +SET_SIM_PARAMETER c_pll_clkout1_phase 0.000 +SET_SIM_PARAMETER c_pll_clkout2_phase 0.000 +SET_SIM_PARAMETER c_pll_clkout3_phase 0.000 +SET_SIM_PARAMETER c_pll_clkout4_phase 0.000 +SET_SIM_PARAMETER c_pll_clkout5_phase 0.000 +SET_SIM_PARAMETER c_dcm_notes None +SET_SIM_PARAMETER c_dcm_clkdv_divide 2.000 +SET_SIM_PARAMETER c_dcm_clkfx_divide 2 +SET_SIM_PARAMETER c_dcm_clkfx_multiply 3 +SET_SIM_PARAMETER c_dcm_clkin_divide_by_2 FALSE +SET_SIM_PARAMETER c_dcm_clkin_period 20.0 +SET_SIM_PARAMETER c_dcm_clkout_phase_shift NONE +SET_SIM_PARAMETER c_dcm_clk_feedback NONE +SET_SIM_PARAMETER c_dcm_clk_feedback_port NONE +SET_SIM_PARAMETER c_dcm_deskew_adjust SYSTEM_SYNCHRONOUS +SET_SIM_PARAMETER c_dcm_phase_shift 0 +SET_SIM_PARAMETER c_dcm_startup_wait FALSE +SET_SIM_PARAMETER c_dcm_clk_out1_port CLKFX +SET_SIM_PARAMETER c_dcm_clk_out2_port CLK0 +SET_SIM_PARAMETER c_dcm_clk_out3_port NONE +SET_SIM_PARAMETER c_dcm_clk_out4_port NONE +SET_SIM_PARAMETER c_dcm_clk_out5_port NONE +SET_SIM_PARAMETER c_dcm_clk_out6_port NONE +SET_SIM_PARAMETER c_dcm_clkgen_notes None +SET_SIM_PARAMETER c_dcm_clkgen_clkfxdv_divide 2 +SET_SIM_PARAMETER c_dcm_clkgen_clkfx_divide 1 +SET_SIM_PARAMETER c_dcm_clkgen_clkfx_multiply 4 +SET_SIM_PARAMETER c_dcm_clkgen_dfs_bandwidth OPTIMIZED +SET_SIM_PARAMETER c_dcm_clkgen_prog_md_bandwidth OPTIMIZED +SET_SIM_PARAMETER c_dcm_clkgen_clkin_period 20.0 +SET_SIM_PARAMETER c_dcm_clkgen_clkfx_md_max 0.000 +SET_SIM_PARAMETER c_dcm_clkgen_spread_spectrum NONE +SET_SIM_PARAMETER c_dcm_clkgen_startup_wait FALSE +SET_SIM_PARAMETER c_dcm_clkgen_clk_out1_port CLKFX +SET_SIM_PARAMETER c_dcm_clkgen_clk_out2_port CLKFX +SET_SIM_PARAMETER c_dcm_clkgen_clk_out3_port NONE +SET_SIM_PARAMETER c_clock_mgr_type AUTO +SET_SIM_PARAMETER c_override_mmcm 0 +SET_SIM_PARAMETER c_override_pll 0 +SET_SIM_PARAMETER c_override_dcm 0 +SET_SIM_PARAMETER c_override_dcm_clkgen 0 +SET_SIM_PARAMETER c_dcm_pll_cascade NONE +SET_SIM_PARAMETER c_primary_port CLK_IN1 +SET_SIM_PARAMETER c_secondary_port CLK_IN2 +SET_SIM_PARAMETER c_clk_out1_port CLK_OUT1 +SET_SIM_PARAMETER c_clk_out2_port CLK_OUT2 +SET_SIM_PARAMETER c_clk_out3_port CLK_OUT3 +SET_SIM_PARAMETER c_clk_out4_port CLK_OUT4 +SET_SIM_PARAMETER c_clk_out5_port CLK_OUT5 +SET_SIM_PARAMETER c_clk_out6_port CLK_OUT6 +SET_SIM_PARAMETER c_clk_out7_port CLK_OUT7 +SET_SIM_PARAMETER c_reset_port RESET +SET_SIM_PARAMETER c_locked_port LOCKED +SET_SIM_PARAMETER c_clkfb_in_port CLKFB_IN +SET_SIM_PARAMETER c_clkfb_in_p_port CLKFB_IN_P +SET_SIM_PARAMETER c_clkfb_in_n_port CLKFB_IN_N +SET_SIM_PARAMETER c_clkfb_out_port CLKFB_OUT +SET_SIM_PARAMETER c_clkfb_out_p_port CLKFB_OUT_P +SET_SIM_PARAMETER c_clkfb_out_n_port CLKFB_OUT_N +SET_SIM_PARAMETER c_power_down_port POWER_DOWN +SET_SIM_PARAMETER c_daddr_port DADDR +SET_SIM_PARAMETER c_dclk_port DCLK +SET_SIM_PARAMETER c_drdy_port DRDY +SET_SIM_PARAMETER c_dwe_port DWE +SET_SIM_PARAMETER c_din_port DIN +SET_SIM_PARAMETER c_dout_port DOUT +SET_SIM_PARAMETER c_den_port DEN +SET_SIM_PARAMETER c_psclk_port PSCLK +SET_SIM_PARAMETER c_psen_port PSEN +SET_SIM_PARAMETER c_psincdec_port PSINCDEC +SET_SIM_PARAMETER c_psdone_port PSDONE +SET_SIM_PARAMETER c_clk_valid_port CLK_VALID +SET_SIM_PARAMETER c_status_port STATUS +SET_SIM_PARAMETER c_clk_in_sel_port CLK_IN_SEL +SET_SIM_PARAMETER c_input_clk_stopped_port INPUT_CLK_STOPPED +SET_SIM_PARAMETER c_clkfb_stopped_port CLKFB_STOPPED +SET_SIM_PARAMETER c_clkin1_jitter_ps 200.0 +SET_SIM_PARAMETER c_clkin2_jitter_ps 100.0 +SET_SIM_PARAMETER c_primitive MMCM +SET_SIM_PARAMETER c_ss_mode CENTER_HIGH +SET_SIM_PARAMETER c_ss_mod_period 4000 +SET_CORE_NAME Clocking Wizard +SET_CORE_VERSION 3.6 +SET_CORE_VLNV xilinx.com:ip:clk_wiz:3.6 +SET_CORE_CLASS com.xilinx.ip.clk_wiz_v3_6.clk_wiz_v3_6 +SET_CORE_PATH /opt/Xilinx/14.7/ISE_DS/ISE/coregen/ip/xilinx/primary/com/xilinx/ip/clk_wiz_v3_6 +SET_CORE_GUIPATH /opt/Xilinx/14.7/ISE_DS/ISE/coregen/ip/xilinx/primary/com/xilinx/ip/clk_wiz_v3_6/gui/clk_wiz_v3_6.tcl +SET_CORE_DATASHEET /opt/Xilinx/14.7/ISE_DS/ISE/coregen/ip/xilinx/primary/com/xilinx/ip/clk_wiz_v3_6/doc/pg065_clk_wiz.pdf +ADD_CORE_DOCUMENT +ADD_CORE_DOCUMENT +ADD_CORE_DOCUMENT diff --git a/ipcore_dir/tmp/customization_gui.0.901080844412.out b/ipcore_dir/tmp/customization_gui.0.901080844412.out new file mode 100644 index 0000000..a8315da --- /dev/null +++ b/ipcore_dir/tmp/customization_gui.0.901080844412.out @@ -0,0 +1,505 @@ +SET_FLAG DEBUG FALSE +SET_FLAG MODE BATCH +SET_FLAG STANDALONE_MODE FALSE +SET_PREFERENCE devicefamily spartan6 +SET_PREFERENCE device xc6slx9 +SET_PREFERENCE speedgrade -2 +SET_PREFERENCE package tqg144 +SET_PREFERENCE verilogsim true +SET_PREFERENCE vhdlsim false +SET_PREFERENCE simulationfiles Behavioral +SET_PREFERENCE busformat BusFormatAngleBracketNotRipped +SET_PREFERENCE outputdirectory /home/tim/Projects/z80/hdmi/ipcore_dir/ +SET_PREFERENCE workingdirectory /home/tim/Projects/z80/hdmi/ipcore_dir/tmp/ +SET_PREFERENCE subworkingdirectory /home/tim/Projects/z80/hdmi/ipcore_dir/tmp/_cg/ +SET_PREFERENCE transientdirectory /home/tim/Projects/z80/hdmi/ipcore_dir/tmp/_cg/_dbg/ +SET_PREFERENCE designentry Verilog +SET_PREFERENCE flowvendor Other +SET_PREFERENCE addpads false +SET_PREFERENCE projectname coregen +SET_PREFERENCE formalverification false +SET_PREFERENCE asysymbol false +SET_PREFERENCE implementationfiletype Ngc +SET_PREFERENCE foundationsym false +SET_PREFERENCE createndf false +SET_PREFERENCE removerpms false +SET_PARAMETER Component_Name hdmi_clk +SET_PARAMETER Use_Freq_Synth true +SET_PARAMETER Use_Phase_Alignment false +SET_PARAMETER Use_Min_Power false +SET_PARAMETER Use_Dyn_Phase_Shift false +SET_PARAMETER Use_Dyn_Reconfig false +SET_PARAMETER Jitter_Sel No_Jitter +SET_PARAMETER Use_Spread_Spectrum false +SET_PARAMETER Use_Spread_Spectrum_1 false +SET_PARAMETER Prim_In_Freq 50 +SET_PARAMETER In_Freq_Units Units_MHz +SET_PARAMETER In_Jitter_Units Units_UI +SET_PARAMETER Relative_Inclk REL_PRIMARY +SET_PARAMETER Secondary_In_Freq 100.000 +SET_PARAMETER Jitter_Options UI +SET_PARAMETER Clkin1_UI_Jitter 0.010 +SET_PARAMETER Clkin2_UI_Jitter 0.010 +SET_PARAMETER Prim_In_Jitter 0.010 +SET_PARAMETER Secondary_In_Jitter 0.010 +SET_PARAMETER Clkin1_Jitter_Ps 200.0 +SET_PARAMETER Clkin2_Jitter_Ps 100.0 +SET_PARAMETER Clkout2_Used true +SET_PARAMETER Clkout3_Used false +SET_PARAMETER Clkout4_Used false +SET_PARAMETER Clkout5_Used false +SET_PARAMETER Clkout6_Used false +SET_PARAMETER Clkout7_Used false +SET_PARAMETER Num_Out_Clks 2 +SET_PARAMETER Clk_Out1_Use_Fine_Ps_GUI false +SET_PARAMETER Clk_Out2_Use_Fine_Ps_GUI false +SET_PARAMETER Clk_Out3_Use_Fine_Ps_GUI false +SET_PARAMETER Clk_Out4_Use_Fine_Ps_GUI false +SET_PARAMETER Clk_Out5_Use_Fine_Ps_GUI false +SET_PARAMETER Clk_Out6_Use_Fine_Ps_GUI false +SET_PARAMETER Clk_Out7_Use_Fine_Ps_GUI false +SET_PARAMETER primary_port CLK_IN1 +SET_PARAMETER CLK_OUT1_port CLK_OUT1 +SET_PARAMETER CLK_OUT2_port CLK_OUT2 +SET_PARAMETER CLK_OUT3_port CLK_OUT3 +SET_PARAMETER CLK_OUT4_port CLK_OUT4 +SET_PARAMETER CLK_OUT5_port CLK_OUT5 +SET_PARAMETER CLK_OUT6_port CLK_OUT6 +SET_PARAMETER CLK_OUT7_port CLK_OUT7 +SET_PARAMETER DADDR_port DADDR +SET_PARAMETER DCLK_port DCLK +SET_PARAMETER DRDY_port DRDY +SET_PARAMETER DWE_port DWE +SET_PARAMETER DIN_port DIN +SET_PARAMETER DOUT_port DOUT +SET_PARAMETER DEN_port DEN +SET_PARAMETER PSCLK_port PSCLK +SET_PARAMETER PSEN_port PSEN +SET_PARAMETER PSINCDEC_port PSINCDEC +SET_PARAMETER PSDONE_port PSDONE +SET_PARAMETER Clkout1_Requested_Out_Freq 75 +SET_PARAMETER Clkout1_Requested_Phase 0.000 +SET_PARAMETER Clkout1_Requested_Duty_Cycle 50.000 +SET_PARAMETER Clkout2_Requested_Out_Freq 150 +SET_PARAMETER Clkout2_Requested_Phase 0.000 +SET_PARAMETER Clkout2_Requested_Duty_Cycle 50.000 +SET_PARAMETER Clkout3_Requested_Out_Freq 100.000 +SET_PARAMETER Clkout3_Requested_Phase 0.000 +SET_PARAMETER Clkout3_Requested_Duty_Cycle 50.000 +SET_PARAMETER Clkout4_Requested_Out_Freq 100.000 +SET_PARAMETER Clkout4_Requested_Phase 0.000 +SET_PARAMETER Clkout4_Requested_Duty_Cycle 50.000 +SET_PARAMETER Clkout5_Requested_Out_Freq 100.000 +SET_PARAMETER Clkout5_Requested_Phase 0.000 +SET_PARAMETER Clkout5_Requested_Duty_Cycle 50.000 +SET_PARAMETER Clkout6_Requested_Out_Freq 100.000 +SET_PARAMETER Clkout6_Requested_Phase 0.000 +SET_PARAMETER Clkout6_Requested_Duty_Cycle 50.000 +SET_PARAMETER Clkout7_Requested_Out_Freq 100.000 +SET_PARAMETER Clkout7_Requested_Phase 0.000 +SET_PARAMETER Clkout7_Requested_Duty_Cycle 50.000 +SET_PARAMETER Use_Max_I_Jitter false +SET_PARAMETER Use_Min_O_Jitter false +SET_PARAMETER Prim_Source Single_ended_clock_capable_pin +SET_PARAMETER Use_Inclk_Switchover false +SET_PARAMETER secondary_port CLK_IN2 +SET_PARAMETER Secondary_Source Single_ended_clock_capable_pin +SET_PARAMETER Clkout1_Drives BUFG +SET_PARAMETER Clkout2_Drives BUFG +SET_PARAMETER Clkout3_Drives BUFG +SET_PARAMETER Clkout4_Drives BUFG +SET_PARAMETER Clkout5_Drives BUFG +SET_PARAMETER Clkout6_Drives BUFG +SET_PARAMETER Clkout7_Drives BUFG +SET_PARAMETER Feedback_Source FDBK_AUTO +SET_PARAMETER Clkfb_In_Signaling SINGLE +SET_PARAMETER CLKFB_IN_port CLKFB_IN +SET_PARAMETER CLKFB_IN_P_port CLKFB_IN_P +SET_PARAMETER CLKFB_IN_N_port CLKFB_IN_N +SET_PARAMETER CLKFB_OUT_port CLKFB_OUT +SET_PARAMETER CLKFB_OUT_P_port CLKFB_OUT_P +SET_PARAMETER CLKFB_OUT_N_port CLKFB_OUT_N +SET_PARAMETER Platform lin64 +SET_PARAMETER Summary_Strings empty +SET_PARAMETER Use_Locked false +SET_PARAMETER calc_done DONE +SET_PARAMETER Use_Reset false +SET_PARAMETER Use_Power_Down false +SET_PARAMETER Use_Status false +SET_PARAMETER Use_Freeze false +SET_PARAMETER Use_Clk_Valid false +SET_PARAMETER Use_Inclk_Stopped false +SET_PARAMETER Use_Clkfb_Stopped false +SET_PARAMETER RESET_port RESET +SET_PARAMETER LOCKED_port LOCKED +SET_PARAMETER Power_Down_port POWER_DOWN +SET_PARAMETER CLK_VALID_port CLK_VALID +SET_PARAMETER STATUS_port STATUS +SET_PARAMETER CLK_IN_SEL_port CLK_IN_SEL +SET_PARAMETER INPUT_CLK_STOPPED_port INPUT_CLK_STOPPED +SET_PARAMETER CLKFB_STOPPED_port CLKFB_STOPPED +SET_PARAMETER Override_Mmcm false +SET_PARAMETER Mmcm_Notes None +SET_PARAMETER Mmcm_Divclk_Divide 1 +SET_PARAMETER Mmcm_Bandwidth OPTIMIZED +SET_PARAMETER Mmcm_Clkfbout_Mult_F 4.000 +SET_PARAMETER Mmcm_Clkfbout_Phase 0.000 +SET_PARAMETER Mmcm_Clkfbout_Use_Fine_Ps false +SET_PARAMETER Mmcm_Clkin1_Period 10.000 +SET_PARAMETER Mmcm_Clkin2_Period 10.000 +SET_PARAMETER Mmcm_Clkout4_Cascade false +SET_PARAMETER Mmcm_Clock_Hold false +SET_PARAMETER Mmcm_Compensation ZHOLD +SET_PARAMETER Mmcm_Ref_Jitter1 0.010 +SET_PARAMETER Mmcm_Ref_Jitter2 0.010 +SET_PARAMETER Mmcm_Startup_Wait false +SET_PARAMETER Mmcm_Clkout0_Divide_F 4.000 +SET_PARAMETER Mmcm_Clkout0_Duty_Cycle 0.500 +SET_PARAMETER Mmcm_Clkout0_Phase 0.000 +SET_PARAMETER Mmcm_Clkout0_Use_Fine_Ps false +SET_PARAMETER Mmcm_Clkout1_Divide 1 +SET_PARAMETER Mmcm_Clkout1_Duty_Cycle 0.500 +SET_PARAMETER Mmcm_Clkout1_Phase 0.000 +SET_PARAMETER Mmcm_Clkout1_Use_Fine_Ps false +SET_PARAMETER Mmcm_Clkout2_Divide 1 +SET_PARAMETER Mmcm_Clkout2_Duty_Cycle 0.500 +SET_PARAMETER Mmcm_Clkout2_Phase 0.000 +SET_PARAMETER Mmcm_Clkout2_Use_Fine_Ps false +SET_PARAMETER Mmcm_Clkout3_Divide 1 +SET_PARAMETER Mmcm_Clkout3_Duty_Cycle 0.500 +SET_PARAMETER Mmcm_Clkout3_Phase 0.000 +SET_PARAMETER Mmcm_Clkout3_Use_Fine_Ps false +SET_PARAMETER Mmcm_Clkout4_Divide 1 +SET_PARAMETER Mmcm_Clkout4_Duty_Cycle 0.500 +SET_PARAMETER Mmcm_Clkout4_Phase 0.000 +SET_PARAMETER Mmcm_Clkout4_Use_Fine_Ps false +SET_PARAMETER Mmcm_Clkout5_Divide 1 +SET_PARAMETER Mmcm_Clkout5_Duty_Cycle 0.500 +SET_PARAMETER Mmcm_Clkout5_Phase 0.000 +SET_PARAMETER Mmcm_Clkout5_Use_Fine_Ps false +SET_PARAMETER Mmcm_Clkout6_Divide 1 +SET_PARAMETER Mmcm_Clkout6_Duty_Cycle 0.500 +SET_PARAMETER Mmcm_Clkout6_Phase 0.000 +SET_PARAMETER Mmcm_Clkout6_Use_Fine_Ps false +SET_PARAMETER Override_Dcm false +SET_PARAMETER Dcm_Notes None +SET_PARAMETER Dcm_Clkdv_Divide 2.0 +SET_PARAMETER Dcm_Clkfx_Divide 2 +SET_PARAMETER Dcm_Clkfx_Multiply 3 +SET_PARAMETER Dcm_Clkin_Divide_By_2 false +SET_PARAMETER Dcm_Clkin_Period 20.000 +SET_PARAMETER Dcm_Clkout_Phase_Shift NONE +SET_PARAMETER Dcm_Deskew_Adjust SYSTEM_SYNCHRONOUS +SET_PARAMETER Dcm_Phase_Shift 0 +SET_PARAMETER Dcm_Clk_Feedback NONE +SET_PARAMETER Dcm_Startup_Wait false +SET_PARAMETER Dcm_Clk_Out1_Port CLKFX +SET_PARAMETER Dcm_Clk_Out2_Port CLK0 +SET_PARAMETER Dcm_Clk_Out3_Port CLK0 +SET_PARAMETER Dcm_Clk_Out4_Port CLK0 +SET_PARAMETER Dcm_Clk_Out5_Port CLK0 +SET_PARAMETER Dcm_Clk_Out6_Port CLK0 +SET_PARAMETER Override_Dcm_Clkgen false +SET_PARAMETER Dcm_Clkgen_Notes None +SET_PARAMETER Dcm_Clkgen_Clkfx_Divide 1 +SET_PARAMETER Dcm_Clkgen_Clkfx_Multiply 4 +SET_PARAMETER Dcm_Clkgen_Clkfxdv_Divide 2 +SET_PARAMETER Dcm_Clkgen_Clkfx_Md_Max 0.000 +SET_PARAMETER Dcm_Clkgen_Startup_Wait false +SET_PARAMETER Dcm_Clkgen_Clkin_Period 10.000 +SET_PARAMETER Dcm_Clkgen_Spread_Spectrum NONE +SET_PARAMETER Dcm_Clkgen_Clk_Out1_Port CLKFX +SET_PARAMETER Dcm_Clkgen_Clk_Out2_Port CLKFX +SET_PARAMETER Dcm_Clkgen_Clk_Out3_Port CLKFX +SET_PARAMETER Override_Pll false +SET_PARAMETER Pll_Notes None +SET_PARAMETER Pll_Bandwidth OPTIMIZED +SET_PARAMETER Pll_Clkfbout_Mult 9 +SET_PARAMETER Pll_Clkfbout_Phase 0.000 +SET_PARAMETER Pll_Clk_Feedback CLKFBOUT +SET_PARAMETER Pll_Divclk_Divide 1 +SET_PARAMETER Pll_Clkin_Period 20.000 +SET_PARAMETER Pll_Compensation INTERNAL +SET_PARAMETER Pll_Ref_Jitter 0.010 +SET_PARAMETER Pll_Clkout0_Divide 6 +SET_PARAMETER Pll_Clkout0_Duty_Cycle 0.500 +SET_PARAMETER Pll_Clkout0_Phase 0.000 +SET_PARAMETER Pll_Clkout1_Divide 3 +SET_PARAMETER Pll_Clkout1_Duty_Cycle 0.500 +SET_PARAMETER Pll_Clkout1_Phase 0.000 +SET_PARAMETER Pll_Clkout2_Divide 1 +SET_PARAMETER Pll_Clkout2_Duty_Cycle 0.500 +SET_PARAMETER Pll_Clkout2_Phase 0.000 +SET_PARAMETER Pll_Clkout3_Divide 1 +SET_PARAMETER Pll_Clkout3_Duty_Cycle 0.500 +SET_PARAMETER Pll_Clkout3_Phase 0.000 +SET_PARAMETER Pll_Clkout4_Divide 1 +SET_PARAMETER Pll_Clkout4_Duty_Cycle 0.500 +SET_PARAMETER Pll_Clkout4_Phase 0.000 +SET_PARAMETER Pll_Clkout5_Divide 1 +SET_PARAMETER Pll_Clkout5_Duty_Cycle 0.500 +SET_PARAMETER Pll_Clkout5_Phase 0.000 +SET_PARAMETER dcm_pll_cascade NONE +SET_PARAMETER clock_mgr_type AUTO +SET_PARAMETER primtype_sel PLL_BASE +SET_PARAMETER primitive MMCM +SET_PARAMETER SS_Mode CENTER_HIGH +SET_PARAMETER SS_Mod_Freq 250 +SET_SIM_PARAMETER c_clkout2_used 1 +SET_SIM_PARAMETER c_clkout3_used 0 +SET_SIM_PARAMETER c_clkout4_used 0 +SET_SIM_PARAMETER c_clkout5_used 0 +SET_SIM_PARAMETER c_clkout6_used 0 +SET_SIM_PARAMETER c_clkout7_used 0 +SET_SIM_PARAMETER c_use_clkout1_bar 0 +SET_SIM_PARAMETER c_use_clkout2_bar 0 +SET_SIM_PARAMETER c_use_clkout3_bar 0 +SET_SIM_PARAMETER c_use_clkout4_bar 0 +SET_SIM_PARAMETER c_component_name hdmi_clk +SET_SIM_PARAMETER c_platform lin64 +SET_SIM_PARAMETER c_use_freq_synth 1 +SET_SIM_PARAMETER c_use_phase_alignment 0 +SET_SIM_PARAMETER c_prim_in_jitter 0.010 +SET_SIM_PARAMETER c_secondary_in_jitter 0.010 +SET_SIM_PARAMETER c_jitter_sel No_Jitter +SET_SIM_PARAMETER c_use_min_power 0 +SET_SIM_PARAMETER c_use_min_o_jitter 0 +SET_SIM_PARAMETER c_use_max_i_jitter 0 +SET_SIM_PARAMETER c_use_dyn_phase_shift 0 +SET_SIM_PARAMETER c_use_inclk_switchover 0 +SET_SIM_PARAMETER c_use_dyn_reconfig 0 +SET_SIM_PARAMETER c_use_spread_spectrum 0 +SET_SIM_PARAMETER c_use_spread_spectrum_1 0 +SET_SIM_PARAMETER c_primtype_sel PLL_BASE +SET_SIM_PARAMETER c_use_clk_valid 0 +SET_SIM_PARAMETER c_prim_in_freq 50 +SET_SIM_PARAMETER c_in_freq_units Units_MHz +SET_SIM_PARAMETER c_secondary_in_freq 100.000 +SET_SIM_PARAMETER c_feedback_source FDBK_AUTO +SET_SIM_PARAMETER c_prim_source Single_ended_clock_capable_pin +SET_SIM_PARAMETER c_secondary_source Single_ended_clock_capable_pin +SET_SIM_PARAMETER c_clkfb_in_signaling SINGLE +SET_SIM_PARAMETER c_use_reset 0 +SET_SIM_PARAMETER c_use_locked 0 +SET_SIM_PARAMETER c_use_inclk_stopped 0 +SET_SIM_PARAMETER c_use_clkfb_stopped 0 +SET_SIM_PARAMETER c_use_power_down 0 +SET_SIM_PARAMETER c_use_status 0 +SET_SIM_PARAMETER c_use_freeze 0 +SET_SIM_PARAMETER c_num_out_clks 2 +SET_SIM_PARAMETER c_clkout1_drives BUFG +SET_SIM_PARAMETER c_clkout2_drives BUFG +SET_SIM_PARAMETER c_clkout3_drives BUFG +SET_SIM_PARAMETER c_clkout4_drives BUFG +SET_SIM_PARAMETER c_clkout5_drives BUFG +SET_SIM_PARAMETER c_clkout6_drives BUFG +SET_SIM_PARAMETER c_clkout7_drives BUFG +SET_SIM_PARAMETER c_inclk_sum_row0 "Input Clock Freq (MHz) Input Jitter (UI)" +SET_SIM_PARAMETER c_inclk_sum_row1 __primary______________50____________0.010 +SET_SIM_PARAMETER c_inclk_sum_row2 no_secondary_input_clock +SET_SIM_PARAMETER c_outclk_sum_row0a "Output Output Phase Duty Pk-to-Pk Phase" +SET_SIM_PARAMETER c_outclk_sum_row0b "Clock Freq (MHz) (degrees) Cycle (%) Jitter (ps) Error (ps)" +SET_SIM_PARAMETER c_outclk_sum_row1 CLK_OUT1____75.000______0.000______50.0______248.869____240.171 +SET_SIM_PARAMETER c_outclk_sum_row2 CLK_OUT2___150.000______0.000______50.0______216.897____240.171 +SET_SIM_PARAMETER c_outclk_sum_row3 no_CLK_OUT3_output +SET_SIM_PARAMETER c_outclk_sum_row4 no_CLK_OUT4_output +SET_SIM_PARAMETER c_outclk_sum_row5 no_CLK_OUT5_output +SET_SIM_PARAMETER c_outclk_sum_row6 no_CLK_OUT6_output +SET_SIM_PARAMETER c_outclk_sum_row7 no_CLK_OUT7_output +SET_SIM_PARAMETER c_clkout1_requested_out_freq 75 +SET_SIM_PARAMETER c_clkout2_requested_out_freq 150 +SET_SIM_PARAMETER c_clkout3_requested_out_freq 100.000 +SET_SIM_PARAMETER c_clkout4_requested_out_freq 100.000 +SET_SIM_PARAMETER c_clkout5_requested_out_freq 100.000 +SET_SIM_PARAMETER c_clkout6_requested_out_freq 100.000 +SET_SIM_PARAMETER c_clkout7_requested_out_freq 100.000 +SET_SIM_PARAMETER c_clkout1_requested_phase 0.000 +SET_SIM_PARAMETER c_clkout2_requested_phase 0.000 +SET_SIM_PARAMETER c_clkout3_requested_phase 0.000 +SET_SIM_PARAMETER c_clkout4_requested_phase 0.000 +SET_SIM_PARAMETER c_clkout5_requested_phase 0.000 +SET_SIM_PARAMETER c_clkout6_requested_phase 0.000 +SET_SIM_PARAMETER c_clkout7_requested_phase 0.000 +SET_SIM_PARAMETER c_clkout1_requested_duty_cycle 50.000 +SET_SIM_PARAMETER c_clkout2_requested_duty_cycle 50.000 +SET_SIM_PARAMETER c_clkout3_requested_duty_cycle 50.000 +SET_SIM_PARAMETER c_clkout4_requested_duty_cycle 50.000 +SET_SIM_PARAMETER c_clkout5_requested_duty_cycle 50.000 +SET_SIM_PARAMETER c_clkout6_requested_duty_cycle 50.000 +SET_SIM_PARAMETER c_clkout7_requested_duty_cycle 50.000 +SET_SIM_PARAMETER c_clkout1_out_freq 75.000 +SET_SIM_PARAMETER c_clkout2_out_freq 150.000 +SET_SIM_PARAMETER c_clkout3_out_freq N/A +SET_SIM_PARAMETER c_clkout4_out_freq N/A +SET_SIM_PARAMETER c_clkout5_out_freq N/A +SET_SIM_PARAMETER c_clkout6_out_freq N/A +SET_SIM_PARAMETER c_clkout7_out_freq N/A +SET_SIM_PARAMETER c_clkout1_phase 0.000 +SET_SIM_PARAMETER c_clkout2_phase 0.000 +SET_SIM_PARAMETER c_clkout3_phase N/A +SET_SIM_PARAMETER c_clkout4_phase N/A +SET_SIM_PARAMETER c_clkout5_phase N/A +SET_SIM_PARAMETER c_clkout6_phase N/A +SET_SIM_PARAMETER c_clkout7_phase N/A +SET_SIM_PARAMETER c_clkout1_duty_cycle 50.0 +SET_SIM_PARAMETER c_clkout2_duty_cycle 50.0 +SET_SIM_PARAMETER c_clkout3_duty_cycle N/A +SET_SIM_PARAMETER c_clkout4_duty_cycle N/A +SET_SIM_PARAMETER c_clkout5_duty_cycle N/A +SET_SIM_PARAMETER c_clkout6_duty_cycle N/A +SET_SIM_PARAMETER c_clkout7_duty_cycle N/A +SET_SIM_PARAMETER c_mmcm_notes None +SET_SIM_PARAMETER c_mmcm_bandwidth OPTIMIZED +SET_SIM_PARAMETER c_mmcm_clkfbout_mult_f 4.000 +SET_SIM_PARAMETER c_mmcm_clkin1_period 10.000 +SET_SIM_PARAMETER c_mmcm_clkin2_period 10.000 +SET_SIM_PARAMETER c_mmcm_clkout4_cascade FALSE +SET_SIM_PARAMETER c_mmcm_clock_hold FALSE +SET_SIM_PARAMETER c_mmcm_compensation ZHOLD +SET_SIM_PARAMETER c_mmcm_divclk_divide 1 +SET_SIM_PARAMETER c_mmcm_ref_jitter1 0.010 +SET_SIM_PARAMETER c_mmcm_ref_jitter2 0.010 +SET_SIM_PARAMETER c_mmcm_startup_wait FALSE +SET_SIM_PARAMETER c_mmcm_clkout0_divide_f 4.000 +SET_SIM_PARAMETER c_mmcm_clkout1_divide 1 +SET_SIM_PARAMETER c_mmcm_clkout2_divide 1 +SET_SIM_PARAMETER c_mmcm_clkout3_divide 1 +SET_SIM_PARAMETER c_mmcm_clkout4_divide 1 +SET_SIM_PARAMETER c_mmcm_clkout5_divide 1 +SET_SIM_PARAMETER c_mmcm_clkout6_divide 1 +SET_SIM_PARAMETER c_mmcm_clkout0_duty_cycle 0.500 +SET_SIM_PARAMETER c_mmcm_clkout1_duty_cycle 0.500 +SET_SIM_PARAMETER c_mmcm_clkout2_duty_cycle 0.500 +SET_SIM_PARAMETER c_mmcm_clkout3_duty_cycle 0.500 +SET_SIM_PARAMETER c_mmcm_clkout4_duty_cycle 0.500 +SET_SIM_PARAMETER c_mmcm_clkout5_duty_cycle 0.500 +SET_SIM_PARAMETER c_mmcm_clkout6_duty_cycle 0.500 +SET_SIM_PARAMETER c_mmcm_clkfbout_phase 0.000 +SET_SIM_PARAMETER c_mmcm_clkout0_phase 0.000 +SET_SIM_PARAMETER c_mmcm_clkout1_phase 0.000 +SET_SIM_PARAMETER c_mmcm_clkout2_phase 0.000 +SET_SIM_PARAMETER c_mmcm_clkout3_phase 0.000 +SET_SIM_PARAMETER c_mmcm_clkout4_phase 0.000 +SET_SIM_PARAMETER c_mmcm_clkout5_phase 0.000 +SET_SIM_PARAMETER c_mmcm_clkout6_phase 0.000 +SET_SIM_PARAMETER c_mmcm_clkfbout_use_fine_ps FALSE +SET_SIM_PARAMETER c_mmcm_clkout0_use_fine_ps FALSE +SET_SIM_PARAMETER c_mmcm_clkout1_use_fine_ps FALSE +SET_SIM_PARAMETER c_mmcm_clkout2_use_fine_ps FALSE +SET_SIM_PARAMETER c_mmcm_clkout3_use_fine_ps FALSE +SET_SIM_PARAMETER c_mmcm_clkout4_use_fine_ps FALSE +SET_SIM_PARAMETER c_mmcm_clkout5_use_fine_ps FALSE +SET_SIM_PARAMETER c_mmcm_clkout6_use_fine_ps FALSE +SET_SIM_PARAMETER c_pll_notes None +SET_SIM_PARAMETER c_pll_bandwidth OPTIMIZED +SET_SIM_PARAMETER c_pll_clk_feedback CLKFBOUT +SET_SIM_PARAMETER c_pll_clkfbout_mult 9 +SET_SIM_PARAMETER c_pll_clkin_period 20.000 +SET_SIM_PARAMETER c_pll_compensation INTERNAL +SET_SIM_PARAMETER c_pll_divclk_divide 1 +SET_SIM_PARAMETER c_pll_ref_jitter 0.010 +SET_SIM_PARAMETER c_pll_clkout0_divide 6 +SET_SIM_PARAMETER c_pll_clkout1_divide 3 +SET_SIM_PARAMETER c_pll_clkout2_divide 1 +SET_SIM_PARAMETER c_pll_clkout3_divide 1 +SET_SIM_PARAMETER c_pll_clkout4_divide 1 +SET_SIM_PARAMETER c_pll_clkout5_divide 1 +SET_SIM_PARAMETER c_pll_clkout0_duty_cycle 0.500 +SET_SIM_PARAMETER c_pll_clkout1_duty_cycle 0.500 +SET_SIM_PARAMETER c_pll_clkout2_duty_cycle 0.500 +SET_SIM_PARAMETER c_pll_clkout3_duty_cycle 0.500 +SET_SIM_PARAMETER c_pll_clkout4_duty_cycle 0.500 +SET_SIM_PARAMETER c_pll_clkout5_duty_cycle 0.500 +SET_SIM_PARAMETER c_pll_clkfbout_phase 0.000 +SET_SIM_PARAMETER c_pll_clkout0_phase 0.000 +SET_SIM_PARAMETER c_pll_clkout1_phase 0.000 +SET_SIM_PARAMETER c_pll_clkout2_phase 0.000 +SET_SIM_PARAMETER c_pll_clkout3_phase 0.000 +SET_SIM_PARAMETER c_pll_clkout4_phase 0.000 +SET_SIM_PARAMETER c_pll_clkout5_phase 0.000 +SET_SIM_PARAMETER c_dcm_notes None +SET_SIM_PARAMETER c_dcm_clkdv_divide 2.000 +SET_SIM_PARAMETER c_dcm_clkfx_divide 2 +SET_SIM_PARAMETER c_dcm_clkfx_multiply 3 +SET_SIM_PARAMETER c_dcm_clkin_divide_by_2 FALSE +SET_SIM_PARAMETER c_dcm_clkin_period 20.0 +SET_SIM_PARAMETER c_dcm_clkout_phase_shift NONE +SET_SIM_PARAMETER c_dcm_clk_feedback NONE +SET_SIM_PARAMETER c_dcm_clk_feedback_port NONE +SET_SIM_PARAMETER c_dcm_deskew_adjust SYSTEM_SYNCHRONOUS +SET_SIM_PARAMETER c_dcm_phase_shift 0 +SET_SIM_PARAMETER c_dcm_startup_wait FALSE +SET_SIM_PARAMETER c_dcm_clk_out1_port CLKFX +SET_SIM_PARAMETER c_dcm_clk_out2_port CLK0 +SET_SIM_PARAMETER c_dcm_clk_out3_port NONE +SET_SIM_PARAMETER c_dcm_clk_out4_port NONE +SET_SIM_PARAMETER c_dcm_clk_out5_port NONE +SET_SIM_PARAMETER c_dcm_clk_out6_port NONE +SET_SIM_PARAMETER c_dcm_clkgen_notes None +SET_SIM_PARAMETER c_dcm_clkgen_clkfxdv_divide 2 +SET_SIM_PARAMETER c_dcm_clkgen_clkfx_divide 1 +SET_SIM_PARAMETER c_dcm_clkgen_clkfx_multiply 4 +SET_SIM_PARAMETER c_dcm_clkgen_dfs_bandwidth OPTIMIZED +SET_SIM_PARAMETER c_dcm_clkgen_prog_md_bandwidth OPTIMIZED +SET_SIM_PARAMETER c_dcm_clkgen_clkin_period 20.0 +SET_SIM_PARAMETER c_dcm_clkgen_clkfx_md_max 0.000 +SET_SIM_PARAMETER c_dcm_clkgen_spread_spectrum NONE +SET_SIM_PARAMETER c_dcm_clkgen_startup_wait FALSE +SET_SIM_PARAMETER c_dcm_clkgen_clk_out1_port CLKFX +SET_SIM_PARAMETER c_dcm_clkgen_clk_out2_port CLKFX +SET_SIM_PARAMETER c_dcm_clkgen_clk_out3_port NONE +SET_SIM_PARAMETER c_clock_mgr_type AUTO +SET_SIM_PARAMETER c_override_mmcm 0 +SET_SIM_PARAMETER c_override_pll 0 +SET_SIM_PARAMETER c_override_dcm 0 +SET_SIM_PARAMETER c_override_dcm_clkgen 0 +SET_SIM_PARAMETER c_dcm_pll_cascade NONE +SET_SIM_PARAMETER c_primary_port CLK_IN1 +SET_SIM_PARAMETER c_secondary_port CLK_IN2 +SET_SIM_PARAMETER c_clk_out1_port CLK_OUT1 +SET_SIM_PARAMETER c_clk_out2_port CLK_OUT2 +SET_SIM_PARAMETER c_clk_out3_port CLK_OUT3 +SET_SIM_PARAMETER c_clk_out4_port CLK_OUT4 +SET_SIM_PARAMETER c_clk_out5_port CLK_OUT5 +SET_SIM_PARAMETER c_clk_out6_port CLK_OUT6 +SET_SIM_PARAMETER c_clk_out7_port CLK_OUT7 +SET_SIM_PARAMETER c_reset_port RESET +SET_SIM_PARAMETER c_locked_port LOCKED +SET_SIM_PARAMETER c_clkfb_in_port CLKFB_IN +SET_SIM_PARAMETER c_clkfb_in_p_port CLKFB_IN_P +SET_SIM_PARAMETER c_clkfb_in_n_port CLKFB_IN_N +SET_SIM_PARAMETER c_clkfb_out_port CLKFB_OUT +SET_SIM_PARAMETER c_clkfb_out_p_port CLKFB_OUT_P +SET_SIM_PARAMETER c_clkfb_out_n_port CLKFB_OUT_N +SET_SIM_PARAMETER c_power_down_port POWER_DOWN +SET_SIM_PARAMETER c_daddr_port DADDR +SET_SIM_PARAMETER c_dclk_port DCLK +SET_SIM_PARAMETER c_drdy_port DRDY +SET_SIM_PARAMETER c_dwe_port DWE +SET_SIM_PARAMETER c_din_port DIN +SET_SIM_PARAMETER c_dout_port DOUT +SET_SIM_PARAMETER c_den_port DEN +SET_SIM_PARAMETER c_psclk_port PSCLK +SET_SIM_PARAMETER c_psen_port PSEN +SET_SIM_PARAMETER c_psincdec_port PSINCDEC +SET_SIM_PARAMETER c_psdone_port PSDONE +SET_SIM_PARAMETER c_clk_valid_port CLK_VALID +SET_SIM_PARAMETER c_status_port STATUS +SET_SIM_PARAMETER c_clk_in_sel_port CLK_IN_SEL +SET_SIM_PARAMETER c_input_clk_stopped_port INPUT_CLK_STOPPED +SET_SIM_PARAMETER c_clkfb_stopped_port CLKFB_STOPPED +SET_SIM_PARAMETER c_clkin1_jitter_ps 200.0 +SET_SIM_PARAMETER c_clkin2_jitter_ps 100.0 +SET_SIM_PARAMETER c_primitive MMCM +SET_SIM_PARAMETER c_ss_mode CENTER_HIGH +SET_SIM_PARAMETER c_ss_mod_period 4000 +SET_CORE_NAME Clocking Wizard +SET_CORE_VERSION 3.6 +SET_CORE_VLNV xilinx.com:ip:clk_wiz:3.6 +SET_CORE_CLASS com.xilinx.ip.clk_wiz_v3_6.clk_wiz_v3_6 +SET_CORE_PATH /opt/Xilinx/14.7/ISE_DS/ISE/coregen/ip/xilinx/primary/com/xilinx/ip/clk_wiz_v3_6 +SET_CORE_GUIPATH /opt/Xilinx/14.7/ISE_DS/ISE/coregen/ip/xilinx/primary/com/xilinx/ip/clk_wiz_v3_6/gui/clk_wiz_v3_6.tcl +SET_CORE_DATASHEET /opt/Xilinx/14.7/ISE_DS/ISE/coregen/ip/xilinx/primary/com/xilinx/ip/clk_wiz_v3_6/doc/pg065_clk_wiz.pdf +ADD_CORE_DOCUMENT +ADD_CORE_DOCUMENT +ADD_CORE_DOCUMENT diff --git a/mb/.metadata/.lock b/mb/.metadata/.lock new file mode 100644 index 0000000..e69de29 diff --git a/mb/.metadata/.plugins/com.xilinx.sdk.hw/dialog_settings.xml b/mb/.metadata/.plugins/com.xilinx.sdk.hw/dialog_settings.xml new file mode 100644 index 0000000..39cb11d --- /dev/null +++ b/mb/.metadata/.plugins/com.xilinx.sdk.hw/dialog_settings.xml @@ -0,0 +1,4 @@ + +
+ +
diff --git a/mb/.metadata/.plugins/org.eclipse.cdt.codan.ui/dialog_settings.xml b/mb/.metadata/.plugins/org.eclipse.cdt.codan.ui/dialog_settings.xml new file mode 100644 index 0000000..bad736e --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.cdt.codan.ui/dialog_settings.xml @@ -0,0 +1,4 @@ + +
+ +
diff --git a/mb/.metadata/.plugins/org.eclipse.cdt.core/Graphics.1600550500723.pdom b/mb/.metadata/.plugins/org.eclipse.cdt.core/Graphics.1600550500723.pdom new file mode 100644 index 0000000..820016d Binary files /dev/null and b/mb/.metadata/.plugins/org.eclipse.cdt.core/Graphics.1600550500723.pdom differ diff --git a/mb/.metadata/.plugins/org.eclipse.cdt.core/Graphics_bsp.1600550481305.pdom b/mb/.metadata/.plugins/org.eclipse.cdt.core/Graphics_bsp.1600550481305.pdom new file mode 100644 index 0000000..dca1ab3 Binary files /dev/null and b/mb/.metadata/.plugins/org.eclipse.cdt.core/Graphics_bsp.1600550481305.pdom differ diff --git a/mb/.metadata/.plugins/org.eclipse.cdt.make.core/Graphics.sc b/mb/.metadata/.plugins/org.eclipse.cdt.make.core/Graphics.sc new file mode 100644 index 0000000..0c02c55 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.cdt.make.core/Graphics.sc @@ -0,0 +1,793 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mb/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c b/mb/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c @@ -0,0 +1 @@ + diff --git a/mb/.metadata/.plugins/org.eclipse.cdt.make.core/specs.cpp b/mb/.metadata/.plugins/org.eclipse.cdt.make.core/specs.cpp new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.cdt.make.core/specs.cpp @@ -0,0 +1 @@ + diff --git a/mb/.metadata/.plugins/org.eclipse.cdt.make.ui/dialog_settings.xml b/mb/.metadata/.plugins/org.eclipse.cdt.make.ui/dialog_settings.xml new file mode 100644 index 0000000..5ca0b77 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.cdt.make.ui/dialog_settings.xml @@ -0,0 +1,3 @@ + +
+
diff --git a/mb/.metadata/.plugins/org.eclipse.cdt.ui/cHelpSettings.xml b/mb/.metadata/.plugins/org.eclipse.cdt.ui/cHelpSettings.xml new file mode 100644 index 0000000..ee11f9a --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.cdt.ui/cHelpSettings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/mb/.metadata/.plugins/org.eclipse.cdt.ui/dialog_settings.xml b/mb/.metadata/.plugins/org.eclipse.cdt.ui/dialog_settings.xml new file mode 100644 index 0000000..1855495 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.cdt.ui/dialog_settings.xml @@ -0,0 +1,17 @@ + +
+ +
+ +
+
+
+
+ +
+
+ +
+
+
+
diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/15/20a916bbf2f8001a1591e56b2da69a2d b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/15/20a916bbf2f8001a1591e56b2da69a2d new file mode 100644 index 0000000..ac9d80c --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/15/20a916bbf2f8001a1591e56b2da69a2d @@ -0,0 +1,208 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void clear_screen() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, y << 8 + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, y << 8 + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, y << 8 + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, y << 8 + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/16/307548faf5f8001a1591e56b2da69a2d b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/16/307548faf5f8001a1591e56b2da69a2d new file mode 100644 index 0000000..81aa6a4 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/16/307548faf5f8001a1591e56b2da69a2d @@ -0,0 +1,212 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void clear_screen() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + Xint16 temp = (y << 8); + int x; + int y; + for (y = 0; y < 45; ++y) { + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/1e/506725ceebf9001a1594f754340f23a0 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/1e/506725ceebf9001a1594f754340f23a0 new file mode 100644 index 0000000..fd3e611 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/1e/506725ceebf9001a1594f754340f23a0 @@ -0,0 +1,252 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +Xint8 reversed = 0; +Xint8 foreground = 0b111; +Xint8 background = 0; + +Xint16 properties = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void calculate_properties() { + properties = ((reversed << 6) + (background << 3) + foreground) << 8; +} + +void set_foreground(Xint8 color) { + foreground = color; + + calculate_properties(); +} + +void set_background(Xint8 color) { + background = color; + + calculate_properties(); +} + +void reverse(u8 enable) { + reversed = enable; + + calculate_properties(); +} + +void clear_screen() { + reverse(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, properties + c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + } else if (escape_parameter_1 == 7) { + reverse(1); + } + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/29/c0b2566ebdfa001a16bcb0432cb239eb b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/29/c0b2566ebdfa001a16bcb0432cb239eb new file mode 100644 index 0000000..8968a97 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/29/c0b2566ebdfa001a16bcb0432cb239eb @@ -0,0 +1,268 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +Xint8 reversed = 0; +Xint8 foreground = 0b111; +Xint8 background = 0; + +Xint16 properties = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void calculate_properties() { + if (reversed) { + properties = ((foreground << 4) + background) << 8; + } else { + properties = ((background << 4) + foreground) << 8; + } +} + +void set_foreground(Xint8 color) { + foreground = color; + + calculate_properties(); +} + +void set_background(Xint8 color) { + background = color; + + calculate_properties(); +} + +void reverse(u8 enable) { + reversed = enable; + + calculate_properties(); +} + +void clear_screen() { + reverse(0); + set_foreground(0b111); + set_background(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < (45+2); ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < (80+24); ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < (80+24); ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, properties + c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + set_foreground(0b111); + set_background(0); + } else if (escape_parameter_1 == 7) { + reverse(1); + } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { + set_foreground(escape_parameter_1 - 30); + } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { + set_background(escape_parameter_1 - 40); + } else if (escape_parameter_1 >= 90 && escape_parameter_1 <= 97) { + set_foreground(escape_parameter_1 - 90 + 8); + } else if (escape_parameter_1 >= 100 && escape_parameter_1 <= 107) { + set_background(escape_parameter_1 - 100 + 8); + } + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/2d/006e0b7af3f9001a1594f754340f23a0 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/2d/006e0b7af3f9001a1594f754340f23a0 new file mode 100644 index 0000000..2a7c527 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/2d/006e0b7af3f9001a1594f754340f23a0 @@ -0,0 +1,264 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +Xint8 reversed = 0; +Xint8 foreground = 0b111; +Xint8 background = 0; + +Xint16 properties = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void calculate_properties() { + if (reversed) { + properties = ((foreground << 3) + background) << 8; + } else { + properties = ((background << 3) + foreground) << 8; + } +} + +void set_foreground(Xint8 color) { + foreground = color; + + calculate_properties(); +} + +void set_background(Xint8 color) { + background = color; + + calculate_properties(); +} + +void reverse(u8 enable) { + reversed = enable; + + calculate_properties(); +} + +void clear_screen() { + reverse(0); + set_foreground(0b111); + set_background(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, properties + c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + set_foreground(0b111); + set_background(0); + } else if (escape_parameter_1 == 7) { + reverse(1); + } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { + set_foreground(escape_parameter_1 - 30); + } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { + set_background(escape_parameter_1 - 40); + } + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/2e/f0ada384f3f9001a1594f754340f23a0 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/2e/f0ada384f3f9001a1594f754340f23a0 new file mode 100644 index 0000000..de84024 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/2e/f0ada384f3f9001a1594f754340f23a0 @@ -0,0 +1,266 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +Xint8 reversed = 0; +Xint8 foreground = 0b111; +Xint8 background = 0; + +Xint16 properties = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void calculate_properties() { + if (reversed) { + properties = ((foreground << 3) + background) << 8; + } else { + properties = ((background << 3) + foreground) << 8; + } +} + +void set_foreground(Xint8 color) { + foreground = color; + + calculate_properties(); +} + +void set_background(Xint8 color) { + background = color; + + calculate_properties(); +} + +void reverse(u8 enable) { + reversed = enable; + + calculate_properties(); +} + +void clear_screen() { + reverse(0); + set_foreground(0b111); + set_background(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, properties + c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + set_foreground(0b111); + set_background(0); + } else if (escape_parameter_1 == 7) { + reverse(1); + } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { + set_foreground(escape_parameter_1 - 30); + } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { + set_background(escape_parameter_1 - 40); + } else if (escape_parameter_1 >= 90 && escape_parameter_1 <= 97) { + set_foreground(escape_parameter_1 - 90 + 8); + } + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/2f/e07ac67ce9f9001a1594f754340f23a0 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/2f/e07ac67ce9f9001a1594f754340f23a0 new file mode 100644 index 0000000..ee8b7a7 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/2f/e07ac67ce9f9001a1594f754340f23a0 @@ -0,0 +1,247 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +Xint8 reverse = 0; +Xint8 foreground = 0b111; +Xint8 background = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void set_foreground(Xint8 color) { + foreground = color; + + XIOModule_DiscreteWrite(&gpo, 3, (reverse << 7) + (background << 4) + (foreground << 1) + 0); +} + +void set_background(Xint8 color) { + background = color; + + XIOModule_DiscreteWrite(&gpo, 3, (reverse << 7) + (background << 4) + (foreground << 1) + 0); +} + +void reverse(u8 enable) { + reversed = 0; + + XIOModule_DiscreteWrite(&gpo, 3, (reverse << 7) + (background << 4) + (foreground << 1) + 0); +} + + +void clear_screen() { + reverse(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + } else if (escape_parameter_1 == 7) { + reverse(1); + } + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/32/904df402eaf9001a1594f754340f23a0 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/32/904df402eaf9001a1594f754340f23a0 new file mode 100644 index 0000000..a068a68 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/32/904df402eaf9001a1594f754340f23a0 @@ -0,0 +1,252 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +Xint8 reversed = 0; +Xint8 foreground = 0b111; +Xint8 background = 0; + +Xint16 properties = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void calculate_properties() { + properties = ((reversed << 6) + (background << 3) + foreground) << 8; +} + +void set_foreground(Xint8 color) { + foreground = color; + + calculate_properties(); +} + +void set_background(Xint8 color) { + background = color; + + calculate_properties(); +} + +void reverse(u8 enable) { + reversed = 0; + + calculate_properties(); +} + +void clear_screen() { + reverse(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + } else if (escape_parameter_1 == 7) { + reverse(1); + } + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/40/b0e30a03f6f8001a1591e56b2da69a2d b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/40/b0e30a03f6f8001a1591e56b2da69a2d new file mode 100644 index 0000000..3060cdb --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/40/b0e30a03f6f8001a1591e56b2da69a2d @@ -0,0 +1,213 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void clear_screen() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/42/9026d6c2f2f8001a1591e56b2da69a2d b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/42/9026d6c2f2f8001a1591e56b2da69a2d new file mode 100644 index 0000000..b82e8f5 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/42/9026d6c2f2f8001a1591e56b2da69a2d @@ -0,0 +1,208 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void clear_screen() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, y << 8 + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, y << 8 + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, y << 8 + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/47/d023e48af3f8001a1591e56b2da69a2d b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/47/d023e48af3f8001a1591e56b2da69a2d new file mode 100644 index 0000000..47ef832 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/47/d023e48af3f8001a1591e56b2da69a2d @@ -0,0 +1,208 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void clear_screen() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/48/40f584f1f5f8001a1591e56b2da69a2d b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/48/40f584f1f5f8001a1591e56b2da69a2d new file mode 100644 index 0000000..9bcdd39 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/48/40f584f1f5f8001a1591e56b2da69a2d @@ -0,0 +1,210 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void clear_screen() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + Xint16 temp = (y << 8); + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/4d/407df999cbf6001a1baecb89e4fed027 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/4d/407df999cbf6001a1baecb89e4fed027 new file mode 100644 index 0000000..ceef6a3 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/4d/407df999cbf6001a1baecb89e4fed027 @@ -0,0 +1,202 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void clear_screen() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + + int i; + for (i = 1; i < 45*80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, i); + } + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = 1; i < (80 - x); ++i) { + XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll) + i) % (80*45)); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_2 - 1; + y = escape_parameter_1 - 1; + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/5/d0d0d38bcbf6001a1baecb89e4fed027 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/5/d0d0d38bcbf6001a1baecb89e4fed027 new file mode 100644 index 0000000..559b143 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/5/d0d0d38bcbf6001a1baecb89e4fed027 @@ -0,0 +1,199 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void clear_screen() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + + int i; + for (i = 0; i < 45*80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, i); + commit(); + } + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); + int i; + for (i = 0; i < (80 - x); ++i) { + XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll) + i) % (80*45)); + commit(); + } +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_2 - 1; + y = escape_parameter_1 - 1; + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/55/a06a718beef9001a1594f754340f23a0 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/55/a06a718beef9001a1594f754340f23a0 new file mode 100644 index 0000000..6a6bb79 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/55/a06a718beef9001a1594f754340f23a0 @@ -0,0 +1,256 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +Xint8 reversed = 0; +Xint8 foreground = 0b111; +Xint8 background = 0; + +Xint16 properties = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void calculate_properties() { + properties = ((reversed << 6) + (background << 3) + foreground) << 8; +} + +void set_foreground(Xint8 color) { + foreground = color; + + calculate_properties(); +} + +void set_background(Xint8 color) { + background = color; + + calculate_properties(); +} + +void reverse(u8 enable) { + reversed = enable; + + calculate_properties(); +} + +void clear_screen() { + reverse(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, properties + c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + } else if (escape_parameter_1 == 7) { + reverse(1); + } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { + set_foreground(escape_parameter_1 - 30); + } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { + set_background(escape_parameter_1 - 40); + } + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/59/d08dccc1faf9001a1594f754340f23a0 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/59/d08dccc1faf9001a1594f754340f23a0 new file mode 100644 index 0000000..4700a28 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/59/d08dccc1faf9001a1594f754340f23a0 @@ -0,0 +1,268 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +Xint8 reversed = 0; +Xint8 foreground = 0b111; +Xint8 background = 0; + +Xint16 properties = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void calculate_properties() { + if (reversed) { + properties = ((foreground << 4) + background) << 8; + } else { + properties = ((background << 4) + foreground) << 8; + } +} + +void set_foreground(Xint8 color) { + foreground = color; + + calculate_properties(); +} + +void set_background(Xint8 color) { + background = color; + + calculate_properties(); +} + +void reverse(u8 enable) { + reversed = enable; + + calculate_properties(); +} + +void clear_screen() { + reverse(0); + set_foreground(0b111); + set_background(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, properties + c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + set_foreground(0b111); + set_background(0); + } else if (escape_parameter_1 == 7) { + reverse(1); + } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { + set_foreground(escape_parameter_1 - 30); + } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { + set_background(escape_parameter_1 - 40); + } else if (escape_parameter_1 >= 90 && escape_parameter_1 <= 97) { + set_foreground(escape_parameter_1 - 90 + 8); + } else if (escape_parameter_1 >= 100 && escape_parameter_1 <= 107) { + set_background(escape_parameter_1 - 100 + 8); + } + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/59/f0ade47cfcf8001a1591e56b2da69a2d b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/59/f0ade47cfcf8001a1591e56b2da69a2d new file mode 100644 index 0000000..d5a3624 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/59/f0ade47cfcf8001a1591e56b2da69a2d @@ -0,0 +1,230 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void reverse(u8 enable) { + if (enable) { + XIOModule_DiscreteSet(&gpo, 3, 2); + } else { + XIOModule_DiscreteClear(&gpo, 3, 2); + } +} + +void clear_screen() { + reverse(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + } + if (escape_parameter_1 == 7) { + reverse(1); + } + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/62/109d196ee9f9001a1594f754340f23a0 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/62/109d196ee9f9001a1594f754340f23a0 new file mode 100644 index 0000000..d10d775 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/62/109d196ee9f9001a1594f754340f23a0 @@ -0,0 +1,232 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void reverse(u8 enable) { + if (enable) { + XIOModule_DiscreteSet(&gpo, 3, 2); + } else { + XIOModule_DiscreteClear(&gpo, 3, 2); + } +} + +void clear_screen() { + reverse(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + } else if (escape_parameter_1 == 7) { + reverse(1); + } + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/64/500397c5faf9001a1594f754340f23a0 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/64/500397c5faf9001a1594f754340f23a0 new file mode 100644 index 0000000..dc9ff18 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/64/500397c5faf9001a1594f754340f23a0 @@ -0,0 +1,268 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +Xint8 reversed = 0; +Xint8 foreground = 0b111; +Xint8 background = 0; + +Xint16 properties = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void calculate_properties() { + if (reversed) { + properties = ((foreground << 4) + background) << 8; + } else { + properties = ((background << 4) + foreground) << 8; + } +} + +void set_foreground(Xint8 color) {x + foreground = color; + + calculate_properties(); +} + +void set_background(Xint8 color) { + background = color; + + calculate_properties(); +} + +void reverse(u8 enable) { + reversed = enable; + + calculate_properties(); +} + +void clear_screen() { + reverse(0); + set_foreground(0b111); + set_background(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < (45+2); ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < (80+24); ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, properties + c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + set_foreground(0b111); + set_background(0); + } else if (escape_parameter_1 == 7) { + reverse(1); + } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { + set_foreground(escape_parameter_1 - 30); + } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { + set_background(escape_parameter_1 - 40); + } else if (escape_parameter_1 >= 90 && escape_parameter_1 <= 97) { + set_foreground(escape_parameter_1 - 90 + 8); + } else if (escape_parameter_1 >= 100 && escape_parameter_1 <= 107) { + set_background(escape_parameter_1 - 100 + 8); + } + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/6b/40bd6ed0faf9001a1594f754340f23a0 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/6b/40bd6ed0faf9001a1594f754340f23a0 new file mode 100644 index 0000000..09b92d1 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/6b/40bd6ed0faf9001a1594f754340f23a0 @@ -0,0 +1,268 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +Xint8 reversed = 0; +Xint8 foreground = 0b111; +Xint8 background = 0; + +Xint16 properties = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void calculate_properties() { + if (reversed) { + properties = ((foreground << 4) + background) << 8; + } else { + properties = ((background << 4) + foreground) << 8; + } +} + +void set_foreground(Xint8 color) {x + foreground = color; + + calculate_properties(); +} + +void set_background(Xint8 color) { + background = color; + + calculate_properties(); +} + +void reverse(u8 enable) { + reversed = enable; + + calculate_properties(); +} + +void clear_screen() { + reverse(0); + set_foreground(0b111); + set_background(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < (45+2); ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < (80+24); ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < (80+24); ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, properties + c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + set_foreground(0b111); + set_background(0); + } else if (escape_parameter_1 == 7) { + reverse(1); + } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { + set_foreground(escape_parameter_1 - 30); + } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { + set_background(escape_parameter_1 - 40); + } else if (escape_parameter_1 >= 90 && escape_parameter_1 <= 97) { + set_foreground(escape_parameter_1 - 90 + 8); + } else if (escape_parameter_1 >= 100 && escape_parameter_1 <= 107) { + set_background(escape_parameter_1 - 100 + 8); + } + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/7b/304a29e3f1f9001a1594f754340f23a0 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/7b/304a29e3f1f9001a1594f754340f23a0 new file mode 100644 index 0000000..87cce62 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/7b/304a29e3f1f9001a1594f754340f23a0 @@ -0,0 +1,260 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +Xint8 reversed = 0; +Xint8 foreground = 0b111; +Xint8 background = 0; + +Xint16 properties = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void calculate_properties() { + properties = ((reversed << 6) + (background << 3) + foreground) << 8; +} + +void set_foreground(Xint8 color) { + foreground = color; + + calculate_properties(); +} + +void set_background(Xint8 color) { + background = color; + + calculate_properties(); +} + +void reverse(u8 enable) { + reversed = enable; + + calculate_properties(); +} + +void clear_screen() { + reverse(0); + set_foreground(0b111); + set_background(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, properties + c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + set_foreground(0b111); + set_background(0); + } else if (escape_parameter_1 == 7) { + reverse(1); + } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { + set_foreground(escape_parameter_1 - 30); + } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { + set_background(escape_parameter_1 - 40); + } + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/8/4025aea1cbf6001a1baecb89e4fed027 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/8/4025aea1cbf6001a1baecb89e4fed027 new file mode 100644 index 0000000..d130826 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/8/4025aea1cbf6001a1baecb89e4fed027 @@ -0,0 +1,204 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void clear_screen() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + + int i; + for (i = 1; i < 45*80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, i); + } + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = 1; i < (80 - x); ++i) { + XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll) + i) % (80*45)); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_2 - 1; + y = escape_parameter_1 - 1; + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/81/403f3f97cbf6001a1baecb89e4fed027 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/81/403f3f97cbf6001a1baecb89e4fed027 new file mode 100644 index 0000000..57f473a --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/81/403f3f97cbf6001a1baecb89e4fed027 @@ -0,0 +1,202 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void clear_screen() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + + int i; + for (i = 0; i < 45*80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, i); + } + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = 0; i < (80 - x); ++i) { + XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll) + i) % (80*45)); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_2 - 1; + y = escape_parameter_1 - 1; + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/83/305bbca1eef9001a1594f754340f23a0 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/83/305bbca1eef9001a1594f754340f23a0 new file mode 100644 index 0000000..b9733da --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/83/305bbca1eef9001a1594f754340f23a0 @@ -0,0 +1,258 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +Xint8 reversed = 0; +Xint8 foreground = 0b111; +Xint8 background = 0; + +Xint16 properties = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void calculate_properties() { + properties = ((reversed << 6) + (background << 3) + foreground) << 8; +} + +void set_foreground(Xint8 color) { + foreground = color; + + calculate_properties(); +} + +void set_background(Xint8 color) { + background = color; + + calculate_properties(); +} + +void reverse(u8 enable) { + reversed = enable; + + calculate_properties(); +} + +void clear_screen() { + reverse(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, properties + c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + set_foreground(0b111); + set_background(0); + } else if (escape_parameter_1 == 7) { + reverse(1); + } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { + set_foreground(escape_parameter_1 - 30); + } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { + set_background(escape_parameter_1 - 40); + } + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/8a/1060b65e03f9001a1591e56b2da69a2d b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/8a/1060b65e03f9001a1591e56b2da69a2d new file mode 100644 index 0000000..4fd03a0 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/8a/1060b65e03f9001a1591e56b2da69a2d @@ -0,0 +1,231 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void reverse(u8 enable) { + if (enable) { + XIOModule_DiscreteSet(&gpo, 3, 2); + } else { + XIOModule_DiscreteClear(&gpo, 3, 2); + } +} + +void clear_screen() { + reverse(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + } else if (escape_parameter_1 == 7) { + reverse(1); + } + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/8b/b03c3ee1e9f9001a1594f754340f23a0 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/8b/b03c3ee1e9f9001a1594f754340f23a0 new file mode 100644 index 0000000..9e1e645 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/8b/b03c3ee1e9f9001a1594f754340f23a0 @@ -0,0 +1,248 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +Xint8 reversed = 0; +Xint8 foreground = 0b111; +Xint8 background = 0; + +Xint16 properties = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void set_foreground(Xint8 color) { + foreground = color; + + properties = ((reversed << 6) + (background << 3) + foreground) << 8; +} + +void set_background(Xint8 color) { + background = color; + + XIOModule_DiscreteWrite(&gpo, 3, (reversed << 7) + (background << 4) + (foreground << 1) + 0); +} + +void reverse(u8 enable) { + reversed = 0; + + XIOModule_DiscreteWrite(&gpo, 3, (reversed << 7) + (background << 4) + (foreground << 1) + 0); +} + +void clear_screen() { + reverse(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + } else if (escape_parameter_1 == 7) { + reverse(1); + } + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/9f/30387ff6f5f8001a1591e56b2da69a2d b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/9f/30387ff6f5f8001a1591e56b2da69a2d new file mode 100644 index 0000000..a0e456d --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/9f/30387ff6f5f8001a1591e56b2da69a2d @@ -0,0 +1,211 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void clear_screen() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/a/30342cfdf5f8001a1591e56b2da69a2d b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/a/30342cfdf5f8001a1591e56b2da69a2d new file mode 100644 index 0000000..cc5234c --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/a/30342cfdf5f8001a1591e56b2da69a2d @@ -0,0 +1,213 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void clear_screen() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/a8/309ae6a801f9001a1591e56b2da69a2d b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/a8/309ae6a801f9001a1591e56b2da69a2d new file mode 100644 index 0000000..4468200 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/a8/309ae6a801f9001a1591e56b2da69a2d @@ -0,0 +1,230 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void reverse(u8 enable) { + if (enable) { + XIOModule_DiscreteSet(&gpo, 3, 2); + } else { + XIOModule_DiscreteClear(&gpo, 3, 2); + } +} + +void clear_screen() { + reverse(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + } else if (escape_parameter_1 == 7) { + reverse(1); + } + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/af/b027dbd12dfc001a1d38c6f066e572ed b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/af/b027dbd12dfc001a1d38c6f066e572ed new file mode 100644 index 0000000..52392c6 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/af/b027dbd12dfc001a1d38c6f066e572ed @@ -0,0 +1,265 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +Xint8 reversed = 0; +Xint8 foreground = 0b111; +Xint8 background = 0; + +Xint16 properties = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void calculate_properties() { + if (reversed) { + properties = ((foreground << 4) + background) << 8; + } else { + properties = ((background << 4) + foreground) << 8; + } +} + +void set_foreground(Xint8 color) { + foreground = color; + + calculate_properties(); +} + +void set_background(Xint8 color) { + background = color; + + calculate_properties(); +} + +void reverse(u8 enable) { + reversed = enable; + + calculate_properties(); +} + +void clear_screen() { + reverse(0); + set_foreground(0b111); + set_background(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + for (int y = 0; y < (45+2); ++y) { + Xint16 temp = (y << 8); + for (int x = 0; x < (80+24); ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + for (int i = x; i < (80+24); ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, properties + c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + set_foreground(0b111); + set_background(0); + } else if (escape_parameter_1 == 7) { + reverse(1); + } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { + set_foreground(escape_parameter_1 - 30); + } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { + set_background(escape_parameter_1 - 40); + } else if (escape_parameter_1 >= 90 && escape_parameter_1 <= 97) { + set_foreground(escape_parameter_1 - 90 + 8); + } else if (escape_parameter_1 >= 100 && escape_parameter_1 <= 107) { + set_background(escape_parameter_1 - 100 + 8); + } + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/b0/40ccb57bcaf6001a1baecb89e4fed027 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/b0/40ccb57bcaf6001a1baecb89e4fed027 new file mode 100644 index 0000000..e411712 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/b0/40ccb57bcaf6001a1baecb89e4fed027 @@ -0,0 +1,198 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 2); + XIOModule_DiscreteClear(&gpo, 3, 2); +} + +void clear_screen() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + + int i; + for (i = 0; i < 45*80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, i); + commit(); + } + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + int i; + for (i = 0; i < (80 - x); ++i) { + XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll) + i) % (80*45)); + commit(); + } +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_2 - 1; + y = escape_parameter_1 - 1; + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/b7/d09455cfe9f9001a1594f754340f23a0 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/b7/d09455cfe9f9001a1594f754340f23a0 new file mode 100644 index 0000000..a0b871c --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/b7/d09455cfe9f9001a1594f754340f23a0 @@ -0,0 +1,246 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +Xint8 reversed = 0; +Xint8 foreground = 0b111; +Xint8 background = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void set_foreground(Xint8 color) { + foreground = color; + + XIOModule_DiscreteWrite(&gpo, 3, (reversed << 7) + (background << 4) + (foreground << 1) + 0); +} + +void set_background(Xint8 color) { + background = color; + + XIOModule_DiscreteWrite(&gpo, 3, (reversed << 7) + (background << 4) + (foreground << 1) + 0); +} + +void reverse(u8 enable) { + reversed = 0; + + XIOModule_DiscreteWrite(&gpo, 3, (reversed << 7) + (background << 4) + (foreground << 1) + 0); +} + +void clear_screen() { + reverse(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + } else if (escape_parameter_1 == 7) { + reverse(1); + } + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/b9/203e4dede9f9001a1594f754340f23a0 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/b9/203e4dede9f9001a1594f754340f23a0 new file mode 100644 index 0000000..a068a68 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/b9/203e4dede9f9001a1594f754340f23a0 @@ -0,0 +1,252 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +Xint8 reversed = 0; +Xint8 foreground = 0b111; +Xint8 background = 0; + +Xint16 properties = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void calculate_properties() { + properties = ((reversed << 6) + (background << 3) + foreground) << 8; +} + +void set_foreground(Xint8 color) { + foreground = color; + + calculate_properties(); +} + +void set_background(Xint8 color) { + background = color; + + calculate_properties(); +} + +void reverse(u8 enable) { + reversed = 0; + + calculate_properties(); +} + +void clear_screen() { + reverse(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + } else if (escape_parameter_1 == 7) { + reverse(1); + } + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/ba/a087dfd72dfc001a1d38c6f066e572ed b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/ba/a087dfd72dfc001a1d38c6f066e572ed new file mode 100644 index 0000000..c6721bf --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/ba/a087dfd72dfc001a1d38c6f066e572ed @@ -0,0 +1,267 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +Xint8 reversed = 0; +Xint8 foreground = 0b111; +Xint8 background = 0; + +Xint16 properties = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void calculate_properties() { + if (reversed) { + properties = ((foreground << 4) + background) << 8; + } else { + properties = ((background << 4) + foreground) << 8; + } +} + +void set_foreground(Xint8 color) { + foreground = color; + + calculate_properties(); +} + +void set_background(Xint8 color) { + background = color; + + calculate_properties(); +} + +void reverse(u8 enable) { + reversed = enable; + + calculate_properties(); +} + +void clear_screen() { + reverse(0); + set_foreground(0b111); + set_background(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int y; + int x; + for (y = 0; y < (45+2); ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < (80+24); ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + for (int i = x; i < (80+24); ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, properties + c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + set_foreground(0b111); + set_background(0); + } else if (escape_parameter_1 == 7) { + reverse(1); + } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { + set_foreground(escape_parameter_1 - 30); + } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { + set_background(escape_parameter_1 - 40); + } else if (escape_parameter_1 >= 90 && escape_parameter_1 <= 97) { + set_foreground(escape_parameter_1 - 90 + 8); + } else if (escape_parameter_1 >= 100 && escape_parameter_1 <= 107) { + set_background(escape_parameter_1 - 100 + 8); + } + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/bb/e0bf3d9bf6f8001a1591e56b2da69a2d b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/bb/e0bf3d9bf6f8001a1591e56b2da69a2d new file mode 100644 index 0000000..e1804aa --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/bb/e0bf3d9bf6f8001a1591e56b2da69a2d @@ -0,0 +1,212 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void clear_screen() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/be/40cd6993cbf6001a1baecb89e4fed027 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/be/40cd6993cbf6001a1baecb89e4fed027 new file mode 100644 index 0000000..337877f --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/be/40cd6993cbf6001a1baecb89e4fed027 @@ -0,0 +1,202 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void clear_screen() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + + int i; + for (i = 0; i < 45*80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, i); + commit(); + } + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = 0; i < (80 - x); ++i) { + XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll) + i) % (80*45)); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_2 - 1; + y = escape_parameter_1 - 1; + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/bf/a0337580cbf6001a1baecb89e4fed027 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/bf/a0337580cbf6001a1baecb89e4fed027 new file mode 100644 index 0000000..54258cd --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/bf/a0337580cbf6001a1baecb89e4fed027 @@ -0,0 +1,198 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void clear_screen() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + + int i; + for (i = 0; i < 45*80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, i); + commit(); + } + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + int i; + for (i = 0; i < (80 - x); ++i) { + XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll) + i) % (80*45)); + commit(); + } +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_2 - 1; + y = escape_parameter_1 - 1; + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/cd/305a6603f3f9001a1594f754340f23a0 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/cd/305a6603f3f9001a1594f754340f23a0 new file mode 100644 index 0000000..5eb6da3 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/cd/305a6603f3f9001a1594f754340f23a0 @@ -0,0 +1,264 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +Xint8 reversed = 0; +Xint8 foreground = 0b111; +Xint8 background = 0; + +Xint16 properties = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void calculate_properties() { + if (reversed) { + properties = ((background << 3) + foreground) << 8; + } else { + properties = ((foreground << 3) + background) << 8; + } +} + +void set_foreground(Xint8 color) { + foreground = color; + + calculate_properties(); +} + +void set_background(Xint8 color) { + background = color; + + calculate_properties(); +} + +void reverse(u8 enable) { + reversed = enable; + + calculate_properties(); +} + +void clear_screen() { + reverse(0); + set_foreground(0b111); + set_background(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, properties + c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + set_foreground(0b111); + set_background(0); + } else if (escape_parameter_1 == 7) { + reverse(1); + } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { + set_foreground(escape_parameter_1 - 30); + } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { + set_background(escape_parameter_1 - 40); + } + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/ce/4018d09f01f9001a1591e56b2da69a2d b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/ce/4018d09f01f9001a1591e56b2da69a2d new file mode 100644 index 0000000..dc5a8db --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/ce/4018d09f01f9001a1591e56b2da69a2d @@ -0,0 +1,231 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void reverse(u8 enable) { + if (enable) { + XIOModule_DiscreteSet(&gpo, 3, 2); + } else { + XIOModule_DiscreteClear(&gpo, 3, 2); + } +} + +void clear_screen() { + reverse(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + } + if (escape_parameter_1 == 7) { + reverse(1); + } + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/d/60635348f2f8001a1591e56b2da69a2d b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/d/60635348f2f8001a1591e56b2da69a2d new file mode 100644 index 0000000..996c8d6 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/d/60635348f2f8001a1591e56b2da69a2d @@ -0,0 +1,205 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void clear_screen() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = 1; i < 45*80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = 1; i < (80 - x); ++i) { + XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll) + i) % (80*45)); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/d3/20aec944f7f8001a1591e56b2da69a2d b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/d3/20aec944f7f8001a1591e56b2da69a2d new file mode 100644 index 0000000..86b6b16 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/d3/20aec944f7f8001a1591e56b2da69a2d @@ -0,0 +1,228 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void reverse(u8 enable) { + if (enable) { + XIOModule_DiscreteSet(&gpo, 3, 2); + } else { + XIOModule_DiscreteClear(&gpo, 3, 2); + } +} + +void clear_screen() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + } + if (escape_parameter_1 == 7) { + reverse(1); + } + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/d8/803d3aebf5f8001a1591e56b2da69a2d b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/d8/803d3aebf5f8001a1591e56b2da69a2d new file mode 100644 index 0000000..a06aa99 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/d8/803d3aebf5f8001a1591e56b2da69a2d @@ -0,0 +1,209 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void clear_screen() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/de/902d4436ebf9001a1594f754340f23a0 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/de/902d4436ebf9001a1594f754340f23a0 new file mode 100644 index 0000000..9efcaa2 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/de/902d4436ebf9001a1594f754340f23a0 @@ -0,0 +1,252 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +Xint8 reversed = 0; +Xint8 foreground = 0b111; +Xint8 background = 0; + +Xint16 properties = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void calculate_properties() { + properties = ((reversed << 6) + (background << 3) + foreground) << 8; +} + +void set_foreground(Xint8 color) { + foreground = color; + + calculate_properties(); +} + +void set_background(Xint8 color) { + background = color; + + calculate_properties(); +} + +void reverse(u8 enable) { + reversed = 0; + + calculate_properties(); +} + +void clear_screen() { + reverse(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, properties + c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + } else if (escape_parameter_1 == 7) { + reverse(1); + } + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/e9/20afbe7eeef9001a1594f754340f23a0 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/e9/20afbe7eeef9001a1594f754340f23a0 new file mode 100644 index 0000000..8ae3017 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/e9/20afbe7eeef9001a1594f754340f23a0 @@ -0,0 +1,256 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +Xint8 reversed = 0; +Xint8 foreground = 0b111; +Xint8 background = 0; + +Xint16 properties = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void calculate_properties() { + properties = ((reversed << 6) + (background << 3) + foreground) << 8; +} + +void set_foreground(Xint8 color) { + foreground = color; + + calculate_properties(); +} + +void set_background(Xint8 color) { + background = color; + + calculate_properties(); +} + +void reverse(u8 enable) { + reversed = enable; + + calculate_properties(); +} + +void clear_screen() { + reverse(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, properties + c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + } else if (escape_parameter_1 == 7) { + reverse(1); + } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { + set_foreground(escape_parameter_1 - 30); + } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { + set_foreground(escape_parameter_1 - 40); + } + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/f0/e0c805f3f5f8001a1591e56b2da69a2d b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/f0/e0c805f3f5f8001a1591e56b2da69a2d new file mode 100644 index 0000000..54762a7 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/f0/e0c805f3f5f8001a1591e56b2da69a2d @@ -0,0 +1,212 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void clear_screen() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/f2/80e7b08af3f9001a1594f754340f23a0 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/f2/80e7b08af3f9001a1594f754340f23a0 new file mode 100644 index 0000000..da9c5f0 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/f2/80e7b08af3f9001a1594f754340f23a0 @@ -0,0 +1,268 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +Xint8 reversed = 0; +Xint8 foreground = 0b111; +Xint8 background = 0; + +Xint16 properties = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void calculate_properties() { + if (reversed) { + properties = ((foreground << 3) + background) << 8; + } else { + properties = ((background << 3) + foreground) << 8; + } +} + +void set_foreground(Xint8 color) { + foreground = color; + + calculate_properties(); +} + +void set_background(Xint8 color) { + background = color; + + calculate_properties(); +} + +void reverse(u8 enable) { + reversed = enable; + + calculate_properties(); +} + +void clear_screen() { + reverse(0); + set_foreground(0b111); + set_background(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, properties + c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + set_foreground(0b111); + set_background(0); + } else if (escape_parameter_1 == 7) { + reverse(1); + } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { + set_foreground(escape_parameter_1 - 30); + } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { + set_background(escape_parameter_1 - 40); + } else if (escape_parameter_1 >= 90 && escape_parameter_1 <= 97) { + set_foreground(escape_parameter_1 - 90 + 8); + } else if (escape_parameter_1 >= 100 && escape_parameter_1 <= 107) { + set_background(escape_parameter_1 - 100 + 8); + } + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/f3/d0c67fe9f6f8001a1591e56b2da69a2d b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/f3/d0c67fe9f6f8001a1591e56b2da69a2d new file mode 100644 index 0000000..a64fa95 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/f3/d0c67fe9f6f8001a1591e56b2da69a2d @@ -0,0 +1,220 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void reverse(u8 enable) { + if (enable) { + XIOModule_DiscreteSet(&gpo, 3, 2); + } else { + XIOModule_DiscreteClear(&gpo, 3, 2); + } +} + +void clear_screen() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/f7/3077b75576f7001a116fc72c51299c73 b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/f7/3077b75576f7001a116fc72c51299c73 new file mode 100644 index 0000000..f715316 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/f7/3077b75576f7001a116fc72c51299c73 @@ -0,0 +1,205 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void clear_screen() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = 1; i < 45*80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = 1; i < (80 - x); ++i) { + XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll) + i) % (80*45)); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (x + 80*(y + scroll)) % (80*45)); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_2 - 1; + y = escape_parameter_1 - 1; + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/f9/e0bf90a2f6f8001a1591e56b2da69a2d b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/f9/e0bf90a2f6f8001a1591e56b2da69a2d new file mode 100644 index 0000000..965d2be --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/f9/e0bf90a2f6f8001a1591e56b2da69a2d @@ -0,0 +1,220 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void reverse(uint8_t enable) { + if (enable) { + XIOModule_DiscreteSet(&gpo, 3, 2); + } else { + XIOModule_DiscreteClear(&gpo, 3, 2); + } +} + +void clear_screen() { + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < 45; ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < 80; ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + +void clear_eol() { + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < 80; ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.history/fa/70d0696fbdfa001a16bcb0432cb239eb b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/fa/70d0696fbdfa001a16bcb0432cb239eb new file mode 100644 index 0000000..7aa6b73 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.history/fa/70d0696fbdfa001a16bcb0432cb239eb @@ -0,0 +1,269 @@ +#include +#include + +XIOModule gpo; + +Xint8 x = 0; +Xint8 y = 0; +Xint8 scroll = 0; + +Xint8 reversed = 0; +Xint8 foreground = 0b111; +Xint8 background = 0; + +Xint16 properties = 0; + +void commit() { + XIOModule_DiscreteSet(&gpo, 3, 1); + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void calculate_properties() { + if (reversed) { + properties = ((foreground << 4) + background) << 8; + } else { + properties = ((background << 4) + foreground) << 8; + } +} + +void set_foreground(Xint8 color) { + foreground = color; + + calculate_properties(); +} + +void set_background(Xint8 color) { + background = color; + + calculate_properties(); +} + +void reverse(u8 enable) { + reversed = enable; + + calculate_properties(); +} + +void clear_screen() { + reverse(0); + set_foreground(0b111); + set_background(0); + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, 0); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int x; + int y; + for (y = 0; y < (45+2); ++y) { + Xint16 temp = (y << 8); + for (x = 0; x < (80+24); ++x) { + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + } + } + + XIOModule_DiscreteClear(&gpo, 3, 1); + + x = 0; + y = 0; + scroll = 0; + XIOModule_DiscreteWrite(&gpo, 4, scroll); +} + + +void clear_eol() { + reverse(0); + Xint16 temp = (y << 8); + + XIOModule_DiscreteWrite(&gpo, 1, 0); + XIOModule_DiscreteWrite(&gpo, 2, temp + x); + XIOModule_DiscreteSet(&gpo, 3, 1); + + int i; + for (i = x; i < (80+24); ++i) { + XIOModule_DiscreteWrite(&gpo, 2, temp + i); + } + + XIOModule_DiscreteClear(&gpo, 3, 1); +} + +void write(u8 c) { + XIOModule_DiscreteWrite(&gpo, 1, properties + c); + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + commit(); +} + +void next() { + x++; + if (x >= 80) { + y++; + x %= 80; + } + + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } +} + +// @todo This does not appear to work quite correctly +void previous() { + x--; + if (x < 0) { + y--; + x %= 80; + } + + if (y < 0) { + y = 0; + x = 0; + } +} + +u8 data = 0; +u8 had = 0; +u8 escape = 0; +u8 escape_parameter_1 = 0; +u8 escape_parameter_2 = 0; + + +void clock() { + u8 signals = XIOModule_DiscreteRead(&gpo, 3) & 0b11; + + if (!(signals & 0b01)) { + return; + } + + if (signals & 0b10) { + data = XIOModule_DiscreteRead(&gpo, 1) & 0xFF; + had = 1; + } else if (had) { + had = 0; + + if (escape == 1) { + if (data == '[') { + escape = 2; + } else { + escape = 0; + } + } else if (escape) { + switch (data) { + // For now we are only going to implement what we actually use + case 'K': + // Assume parameter 0 + clear_eol(); + escape = 0; + break; + + case 'H': + if (escape_parameter_1 == 0) { + escape_parameter_1 = 1; + } + + if (escape_parameter_2 == 0) { + escape_parameter_2 = 1; + } + + x = escape_parameter_1 - 1; + y = escape_parameter_2 - 1; + escape = 0; + break; + + case 'm': + if (escape_parameter_1 == 0) { + reverse(0); + set_foreground(0b111); + set_background(0); + } else if (escape_parameter_1 == 7) { + reverse(1); + } else if (escape_parameter_1 >= 30 && escape_parameter_1 <= 37) { + set_foreground(escape_parameter_1 - 30); + } else if (escape_parameter_1 >= 40 && escape_parameter_1 <= 47) { + set_background(escape_parameter_1 - 40); + } else if (escape_parameter_1 >= 90 && escape_parameter_1 <= 97) { + set_foreground(escape_parameter_1 - 90 + 8); + } else if (escape_parameter_1 >= 100 && escape_parameter_1 <= 107) { + set_background(escape_parameter_1 - 100 + 8); + } + escape = 0; + break; + + case 'J': + // Assume parameter 2 + clear_screen(); + escape = 0; + break; + + case '0' ... '9': + escape_parameter_1 *= 10; + escape_parameter_1 += (data - 48); + break; + + case ';': + escape_parameter_2 = escape_parameter_1; + escape_parameter_1 = 0; + break; + + default: + escape = 0; + break; + } + } else { + switch (data) { + case '\n': + y++; + if (y >= 45) { + y--; + scroll = (scroll + 1) % 45; + XIOModule_DiscreteWrite(&gpo, 4, scroll); + clear_eol(); + } + break; + + case '\r': + x = 0; + break; + + case 0x08: + previous(); + break; + + case 0x1B: + escape = 1; + escape_parameter_1 = 0; + escape_parameter_2 = 0; + // Handle escape code + break; + + default: + write(data - 32); + next(); + break; + } + } + XIOModule_DiscreteWrite(&gpo, 2, (y << 8) + x); + } +} + +int main() { + XIOModule_Initialize(&gpo, XPAR_IOMODULE_0_DEVICE_ID); // Initialize the GPO module + + microblaze_register_handler(XIOModule_DeviceInterruptHandler, + XPAR_IOMODULE_0_DEVICE_ID); // register the interrupt handler + + XIOModule_Start(&gpo); // start the GPO module + + XIOModule_Connect(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR, clock, + NULL); // register timerTick() as our interrupt handler + XIOModule_Enable(&gpo, XIN_IOMODULE_GPI_2_INTERRUPT_INTR); // enable the interrupt + + microblaze_enable_interrupts(); // enable global interrupts + + // Clear the screen + clear_screen(); + + while (1) { + + } +} diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.projects/Graphics/.indexes/e4/history.index b/mb/.metadata/.plugins/org.eclipse.core.resources/.projects/Graphics/.indexes/e4/history.index new file mode 100644 index 0000000..665cf3a Binary files /dev/null and b/mb/.metadata/.plugins/org.eclipse.core.resources/.projects/Graphics/.indexes/e4/history.index differ diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.projects/Graphics/.indexes/e4/properties.index b/mb/.metadata/.plugins/org.eclipse.core.resources/.projects/Graphics/.indexes/e4/properties.index new file mode 100644 index 0000000..3379e75 Binary files /dev/null and b/mb/.metadata/.plugins/org.eclipse.core.resources/.projects/Graphics/.indexes/e4/properties.index differ diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.projects/Graphics/.indexes/properties.index b/mb/.metadata/.plugins/org.eclipse.core.resources/.projects/Graphics/.indexes/properties.index new file mode 100644 index 0000000..cc20510 Binary files /dev/null and b/mb/.metadata/.plugins/org.eclipse.core.resources/.projects/Graphics/.indexes/properties.index differ diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.projects/Graphics/.markers b/mb/.metadata/.plugins/org.eclipse.core.resources/.projects/Graphics/.markers new file mode 100644 index 0000000..ccd344a Binary files /dev/null and b/mb/.metadata/.plugins/org.eclipse.core.resources/.projects/Graphics/.markers differ diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.projects/Graphics_bsp/.indexes/properties.index b/mb/.metadata/.plugins/org.eclipse.core.resources/.projects/Graphics_bsp/.indexes/properties.index new file mode 100644 index 0000000..6bd230c Binary files /dev/null and b/mb/.metadata/.plugins/org.eclipse.core.resources/.projects/Graphics_bsp/.indexes/properties.index differ diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.projects/hardware/.indexes/properties.index b/mb/.metadata/.plugins/org.eclipse.core.resources/.projects/hardware/.indexes/properties.index new file mode 100644 index 0000000..f58eb3d Binary files /dev/null and b/mb/.metadata/.plugins/org.eclipse.core.resources/.projects/hardware/.indexes/properties.index differ diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version b/mb/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version new file mode 100644 index 0000000..25cb955 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index b/mb/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index new file mode 100644 index 0000000..787d630 Binary files /dev/null and b/mb/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index differ diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version b/mb/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version new file mode 100644 index 0000000..6b2aaa7 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.root/17.tree b/mb/.metadata/.plugins/org.eclipse.core.resources/.root/17.tree new file mode 100644 index 0000000..c04bc8a Binary files /dev/null and b/mb/.metadata/.plugins/org.eclipse.core.resources/.root/17.tree differ diff --git a/mb/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources b/mb/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources new file mode 100644 index 0000000..0ff3afd Binary files /dev/null and b/mb/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources differ diff --git a/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prefs b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 0000000..d80fa54 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +macros/workspace=\n\n +org.eclipse.cdt.core.showSourceRootsAtTopLevelOfProject=true diff --git a/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-Graphics.prefs b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-Graphics.prefs new file mode 100644 index 0000000..2c80fdc --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-Graphics.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +indexer/preferenceScope=0 +language.settings.providers.disabled=true diff --git a/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-Graphics_bsp.prefs b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-Graphics_bsp.prefs new file mode 100644 index 0000000..2c80fdc --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.core.prj-Graphics_bsp.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +indexer/preferenceScope=0 +language.settings.providers.disabled=true diff --git a/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs new file mode 100644 index 0000000..b8c9267 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.debug.core.cDebug.default_source_containers=\n\n\n\n\n\n\n\n diff --git a/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.make.core.prefs b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.make.core.prefs new file mode 100644 index 0000000..b2cb58a --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.make.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.make.core.scanner.discovery.console.enabled=false diff --git a/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.managedbuilder.core.prefs b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.managedbuilder.core.prefs new file mode 100644 index 0000000..14af7b3 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.managedbuilder.core.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +properties/LED_Controller.xilinx.gnu.mb.exe.1814969487/xilinx.gnu.mb.exe.debug.32422249=\#\n\#Mon Sep 21 19\:24\:22 CEST 2020\nxilinx.gnu.mb.c.toolchain.linker.debug.963016491\=\\\#\\n\\\#Mon Sep 21 19\\\:24\\\:22 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.c.toolchain.compiler.debug.1526133289.453942197\=\\\#\\n\\\#Mon Sep 21 19\\\:24\\\:22 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.exe.debug.32422249.1916704164\=\\\#\\n\\\#Mon Sep 21 19\\\:13\\\:04 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.c.toolchain.compiler.debug.1526133289.444111638\=\\\#\\n\\\#Thu Sep 17 17\\\:39\\\:25 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.exe.debug.32422249\=\\\#\\n\\\#Mon Sep 21 19\\\:13\\\:04 CEST 2020\\nrcState\\\=-1\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.c.toolchain.compiler.debug.1526133289\=\\\#\\n\\\#Mon Sep 21 19\\\:24\\\:22 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.size.debug.1827824083\=\\\#\\n\\\#Mon Sep 21 19\\\:24\\\:22 CEST 2020\\nrebuildState\\\=false\\n\norg.eclipse.cdt.managedbuilder.ui.rcbs.835513525\=\\\#\\n\\\#Thu Sep 17 17\\\:39\\\:25 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.toolchain.archiver.967447973\=\\\#\\n\\\#Mon Sep 21 19\\\:24\\\:22 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.elfcheck.mb.debug.497589591\=\\\#\\n\\\#Mon Sep 21 19\\\:24\\\:22 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.exe.debug.32422249.1321561043\=\\\#\\n\\\#Thu Sep 17 17\\\:39\\\:25 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.cxx.toolchain.linker.debug.2014002494\=\\\#\\n\\\#Mon Sep 21 19\\\:24\\\:22 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.exe.debug.toolchain.1375698673\=\\\#\\n\\\#Mon Sep 21 19\\\:24\\\:22 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.c.toolchain.assembler.debug.503356807\=\\\#\\n\\\#Mon Sep 21 19\\\:24\\\:22 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.cxx.toolchain.compiler.debug.2077065818\=\\\#\\n\\\#Mon Sep 21 19\\\:24\\\:22 CEST 2020\\nrebuildState\\\=false\\n\norg.eclipse.cdt.managedbuilder.ui.rcbs.704915466\=\\\#\\n\\\#Mon Sep 21 19\\\:24\\\:22 CEST 2020\\nrebuildState\\\=true\\n\n +properties/LED_Controller.xilinx.gnu.mb.exe.1814969487/xilinx.gnu.mb.exe.release.1608365019=\#\n\#Mon Sep 21 19\:24\:18 CEST 2020\norg.eclipse.cdt.managedbuilder.ui.rcbs.964590779\=\\\#\\n\\\#Thu Sep 17 17\\\:41\\\:22 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.c.toolchain.compiler.release.1363891138.1568151430\=\\\#\\n\\\#Thu Sep 17 17\\\:41\\\:22 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.c.toolchain.compiler.release.1363891138.1347973672\=\\\#\\n\\\#Thu Sep 17 17\\\:41\\\:22 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.cxx.toolchain.linker.release.219817069\=\\\#\\n\\\#Mon Sep 21 19\\\:24\\\:18 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.elfcheck.mb.release.2093836222\=\\\#\\n\\\#Mon Sep 21 19\\\:24\\\:18 CEST 2020\\nrebuildState\\\=false\\n\norg.eclipse.cdt.managedbuilder.ui.rcbs.585520295\=\\\#\\n\\\#Thu Sep 17 17\\\:39\\\:56 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.c.toolchain.compiler.release.1363891138.188090075\=\\\#\\n\\\#Mon Sep 21 19\\\:24\\\:18 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.cxx.toolchain.compiler.release.623808407\=\\\#\\n\\\#Mon Sep 21 19\\\:24\\\:18 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.exe.release.1608365019\=\\\#\\n\\\#Mon Sep 21 19\\\:24\\\:18 CEST 2020\\nrcState\\\=0\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.c.toolchain.compiler.release.1363891138.1472073695\=\\\#\\n\\\#Thu Sep 17 17\\\:39\\\:56 CEST 2020\\nrebuildState\\\=true\\n\norg.eclipse.cdt.managedbuilder.ui.rcbs.303281880\=\\\#\\n\\\#Thu Sep 17 17\\\:41\\\:22 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.toolchain.archiver.728941664\=\\\#\\n\\\#Mon Sep 21 19\\\:24\\\:18 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.size.release.805765542\=\\\#\\n\\\#Mon Sep 21 19\\\:24\\\:18 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.exe.release.1608365019.2101405724\=\\\#\\n\\\#Mon Sep 21 19\\\:24\\\:18 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.exe.release.toolchain.449620394\=\\\#\\n\\\#Mon Sep 21 19\\\:24\\\:18 CEST 2020\\nrebuildState\\\=false\\n\norg.eclipse.cdt.managedbuilder.ui.rcbs.941823551\=\\\#\\n\\\#Mon Sep 21 19\\\:24\\\:18 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.c.toolchain.linker.release.948464890\=\\\#\\n\\\#Mon Sep 21 19\\\:24\\\:18 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.exe.release.1608365019.1177911836\=\\\#\\n\\\#Thu Sep 17 17\\\:41\\\:22 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.c.toolchain.assembler.release.1529446162\=\\\#\\n\\\#Mon Sep 21 19\\\:24\\\:18 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.c.toolchain.compiler.release.1363891138\=\\\#\\n\\\#Mon Sep 21 19\\\:24\\\:18 CEST 2020\\nrebuildState\\\=false\\n\n +properties/LED_Controller.xilinx.gnu.mb.exe.1958147925/xilinx.gnu.mb.exe.debug.1340360104=\#\n\#Sun Sep 13 01\:13\:41 CEST 2020\nxilinx.gnu.mb.cxx.toolchain.compiler.debug.1718510779\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:41 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.elfcheck.mb.debug.1120413088\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:41 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.toolchain.archiver.1415277683\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:41 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.c.toolchain.compiler.debug.284561060\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:41 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.exe.debug.1340360104\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:28 CEST 2020\\nrcState\\\=0\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.cxx.toolchain.linker.debug.819611121\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:41 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.size.debug.2065098265\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:41 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.c.toolchain.assembler.debug.1411310899\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:41 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.exe.debug.toolchain.2009906249\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:41 CEST 2020\\nrebuildState\\\=false\\n\nxilinx.gnu.mb.c.toolchain.linker.debug.1517138700\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:41 CEST 2020\\nrebuildState\\\=false\\n\n +properties/LED_Controller.xilinx.gnu.mb.exe.1958147925/xilinx.gnu.mb.exe.release.183079614=\#\n\#Sun Sep 13 01\:13\:33 CEST 2020\nxilinx.gnu.mb.c.toolchain.assembler.release.39538095\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:33 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.elfcheck.mb.release.1610739964\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:33 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.cxx.toolchain.compiler.release.1977882343\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:33 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.toolchain.archiver.340405373\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:33 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.size.release.414266922\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:33 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.exe.release.183079614\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:33 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.exe.release.toolchain.659377477\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:33 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.cxx.toolchain.linker.release.1164015715\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:33 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.c.toolchain.compiler.release.910828759\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:33 CEST 2020\\nrebuildState\\\=true\\n\nxilinx.gnu.mb.c.toolchain.linker.release.105016765\=\\\#\\n\\\#Sun Sep 13 01\\\:13\\\:33 CEST 2020\\nrebuildState\\\=true\\n\n diff --git a/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs new file mode 100644 index 0000000..5e2da66 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +spelling_locale_initialized=true +useAnnotationsPrefPage=true +useQuickDiffPrefPage=true diff --git a/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prj-Graphics.prefs b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prj-Graphics.prefs new file mode 100644 index 0000000..82196b4 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prj-Graphics.prefs @@ -0,0 +1,3 @@ +buildConsole/keepLog=true +buildConsole/logLocation=/home/tim/Projects/z80/hdmi-mb/.metadata/.plugins/org.eclipse.cdt.ui/Graphics.build.log +eclipse.preferences.version=1 diff --git a/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..dffc6b5 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +version=1 diff --git a/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.core.prefs b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.core.prefs new file mode 100644 index 0000000..57e3b77 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.core.prefs @@ -0,0 +1,5 @@ +//org.eclipse.debug.core.PREFERRED_DELEGATES/org.eclipse.cdt.launch.applicationLaunchType=org.eclipse.cdt.dsf.gdb.launch.localCLaunch,debug;org.eclipse.cdt.cdi.launch.localCLaunch,run +//org.eclipse.debug.core.PREFERRED_DELEGATES/org.eclipse.cdt.launch.attachLaunchType=org.eclipse.cdt.dsf.gdb.launch.attachCLaunch,debug +//org.eclipse.debug.core.PREFERRED_DELEGATES/org.eclipse.cdt.launch.postmortemLaunchType=org.eclipse.cdt.dsf.gdb.launch.coreCLaunch,debug +//org.eclipse.debug.core.PREFERRED_DELEGATES/org.eclipse.cdt.launch.remoteApplicationLaunchType=org.eclipse.rse.remotecdt.dsf.debug,debug +eclipse.preferences.version=1 diff --git a/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs new file mode 100644 index 0000000..a2917e5 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +org.eclipse.debug.ui.PREF_LAUNCH_PERSPECTIVES=\n\n +preferredTargets=org.eclipse.cdt.debug.ui.toggleCBreakpointTarget\:org.eclipse.cdt.debug.ui.toggleCBreakpointTarget| diff --git a/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.search.prefs b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.search.prefs new file mode 100644 index 0000000..cec65c4 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.search.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.search.defaultPerspective=org.eclipse.search.defaultPerspective.none diff --git a/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.browser.prefs b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.browser.prefs new file mode 100644 index 0000000..eff1d89 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.browser.prefs @@ -0,0 +1,2 @@ +browsers=\n\n\n +eclipse.preferences.version=1 diff --git a/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs new file mode 100644 index 0000000..61f3bb8 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +overviewRuler_migration=migrated_3.1 diff --git a/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs new file mode 100644 index 0000000..3457147 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs @@ -0,0 +1,6 @@ +PROBLEMS_FILTERS_MIGRATE=true +TASKS_FILTERS_MIGRATE=true +eclipse.preferences.version=1 +platformState=1599945748943 +quickStart=false +tipsAndTricks=true diff --git a/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs new file mode 100644 index 0000000..62252c0 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs @@ -0,0 +1,3 @@ +CURRENT_THEME_ID=org.eclipse.ui.ide.systemDefault +eclipse.preferences.version=1 +showIntro=false diff --git a/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs new file mode 100644 index 0000000..8ceca34 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs @@ -0,0 +1,7 @@ +ColorsAndFontsPreferencePage.expandedCategories=Torg.eclipse.cdt.ui.presentation\tTorg.eclipse.cdt.ui.CEditor.presentation +ColorsAndFontsPreferencePage.selectedElement=Forg.eclipse.cdt.ui.editors.textfont +eclipse.preferences.version=1 +org.eclipse.cdt.ui.CPerspective_persp=\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n +org.eclipse.ui.commands=\n +org.eclipse.ui.ide.systemDefault.org.eclipse.cdt.ui.editors.textfont=1|Source Code Pro|10.0|0|GTK|1|; +perspectives=org.eclipse.cdt.ui.CPerspective diff --git a/mb/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2020/9/37/refactorings.history b/mb/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2020/9/37/refactorings.history new file mode 100644 index 0000000..c82ab7c --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2020/9/37/refactorings.history @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/mb/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2020/9/37/refactorings.index b/mb/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2020/9/37/refactorings.index new file mode 100644 index 0000000..e4eb0ce --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2020/9/37/refactorings.index @@ -0,0 +1 @@ +1599952443965 Delete 2 resources diff --git a/mb/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2020/9/38/refactorings.history b/mb/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2020/9/38/refactorings.history new file mode 100644 index 0000000..7cf410d --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2020/9/38/refactorings.history @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/mb/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2020/9/38/refactorings.index b/mb/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2020/9/38/refactorings.index new file mode 100644 index 0000000..7064137 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2020/9/38/refactorings.index @@ -0,0 +1,4 @@ +1600550205135 Delete resource 'HDMIGraphics' +1600550416603 Rename resource 'micro_test' +1600550480249 Rename resource 'LED_Controller_bsp' +1600550500535 Rename resource 'LED_Controller' diff --git a/mb/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/Graphics/2020/9/38/refactorings.history b/mb/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/Graphics/2020/9/38/refactorings.history new file mode 100644 index 0000000..3d983a6 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/Graphics/2020/9/38/refactorings.history @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/mb/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/Graphics/2020/9/38/refactorings.index b/mb/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/Graphics/2020/9/38/refactorings.index new file mode 100644 index 0000000..05e2fad --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/Graphics/2020/9/38/refactorings.index @@ -0,0 +1 @@ +1600551239458 Rename resource 'LEDBlinker.c' diff --git a/mb/.metadata/.plugins/org.eclipse.ltk.ui.refactoring/dialog_settings.xml b/mb/.metadata/.plugins/org.eclipse.ltk.ui.refactoring/dialog_settings.xml new file mode 100644 index 0000000..27eb404 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.ltk.ui.refactoring/dialog_settings.xml @@ -0,0 +1,7 @@ + +
+
+ + +
+
diff --git a/mb/.metadata/.plugins/org.eclipse.search/dialog_settings.xml b/mb/.metadata/.plugins/org.eclipse.search/dialog_settings.xml new file mode 100644 index 0000000..5138536 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.search/dialog_settings.xml @@ -0,0 +1,6 @@ + +
+
+ +
+
diff --git a/mb/.metadata/.plugins/org.eclipse.ui.editors/dialog_settings.xml b/mb/.metadata/.plugins/org.eclipse.ui.editors/dialog_settings.xml new file mode 100644 index 0000000..50f1edb --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.ui.editors/dialog_settings.xml @@ -0,0 +1,5 @@ + +
+
+
+
diff --git a/mb/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml b/mb/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml new file mode 100644 index 0000000..36e36c6 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml @@ -0,0 +1,5 @@ + +
+
+
+
diff --git a/mb/.metadata/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml b/mb/.metadata/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml new file mode 100644 index 0000000..0e91340 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.ui.workbench.texteditor/dialog_settings.xml @@ -0,0 +1,30 @@ + +
+
+ + + + + +
+
+ + + + + + + + + + + + + + + + + + +
+
diff --git a/mb/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml b/mb/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml new file mode 100644 index 0000000..dcf1e21 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml @@ -0,0 +1,20 @@ + +
+
+ + +
+
+ + + + +
+
+ + + +
+
+
+
diff --git a/mb/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml b/mb/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml new file mode 100644 index 0000000..0d291c4 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml @@ -0,0 +1,276 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mb/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml b/mb/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml new file mode 100644 index 0000000..332e913 --- /dev/null +++ b/mb/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/mb/.metadata/version.ini b/mb/.metadata/version.ini new file mode 100644 index 0000000..c51ff74 --- /dev/null +++ b/mb/.metadata/version.ini @@ -0,0 +1 @@ +org.eclipse.core.runtime=1 \ No newline at end of file diff --git a/mb/hardware/system.xml b/mb/hardware/system.xml index 023c73b..44471b3 100644 --- a/mb/hardware/system.xml +++ b/mb/hardware/system.xml @@ -1,6 +1,6 @@ - + diff --git a/src/main.v b/src/main.v index e43372c..3e7ebe4 100644 --- a/src/main.v +++ b/src/main.v @@ -36,6 +36,8 @@ reg [12:0] raddr; wire [15:0] read_data; wire [255:0] char; +reg cursor; + reg [1:0] control_in; // 0 Correct address // 1 Write @@ -64,7 +66,7 @@ hdmi_encoder #(.Y_RES(HEIGHT), .X_RES(WIDTH), .Y_FRAME(HEIGHT+2*16), .X_FRAME(WI .green(green), .blue(blue) ); - + microblaze_mcs mcs_0 ( .Clk(mclk), // input Clk .Reset(rst), // input Reset @@ -108,7 +110,7 @@ color_map backgroundground_map ( .colorcode(read_data[15:12]), .color(background) ); - + always @(*) begin charx = (x >> 0) % 16; chary = (y >> 0) % 16; @@ -127,17 +129,19 @@ always @(*) begin end else begin control_in[1] = 0; end + + cursor = ((x >> 4) == screen_x) && ((y >> 4) == screen_y); // @todo Instead of doing + 17 we safe space in the char rom if (char[255 - charx - 16*chary] == 1) begin - red = foreground[23:16]; - green = foreground[15:8]; - blue = foreground[7:0]; + red = cursor ? 8'h00 : foreground[23:16]; + green = cursor ? 8'h00 : foreground[15:8]; + blue = cursor ? 8'h00 : foreground[7:0]; end else begin - red = background[23:16]; - green = background[15:8]; - blue = background[7:0]; + red = cursor ? 8'hAA : background[23:16]; + green = cursor ? 8'hAA : background[15:8]; + blue = cursor ? 8'hAA : background[7:0]; end end -endmodule \ No newline at end of file +endmodule diff --git a/syn/main.ut b/syn/main.ut index 0a46560..80a7b4c 100644 --- a/syn/main.ut +++ b/syn/main.ut @@ -1,4 +1,4 @@ --bd "/home/tim/Projects/z80/hdmi-mb/Graphics/Release/Graphics.elf" tag microblaze_mcs +-bd "/home/tim/Projects/z80/hdmi/mb/Graphics/Release/Graphics.elf" tag microblaze_mcs -w -g Binary:yes -g Compress