#SMB_1.18_script_by_RayeR,_run_SMB_/dbg_smbdemo.txt #each_line_must_be_continuous_string_due_to_scanf $This_is_a_demo_script_for_SMB_1.18_or_above_debug_console $It_should't_srew_up_your_PC_but_continue_on_your_own_risc. $You_can_press_CTRL+BREAK_to_abort_it_at_any_time,_eNJ0y! $ $Now_we_show_basic_I/O_functions_to_access_I/O_ports: $ $outportb(hex-ioport_address_word,hex-data_byte) $outportw_and_outportl_do_the_similar_with_16_and_32bits $ $Press_any_key_to_continue...(watch_your_keyboard_LEDs) #outportb_demo pause outportb(60,ED) delay(5) outportb(60,2) delay(500) outportb(60,ED) delay(5) outportb(60,4) delay(500) outportb(60,ED) delay(5) outportb(60,1) delay(500) outportb(60,ED) delay(5) outportb(60,4) delay(500) outportb(60,ED) delay(5) outportb(60,2) delay(500) $ $Well,_if_I_would_wrote_something_nice_to_port_64h_your_CPU_will_reset $immediately,_so_be_carefull._Hexa_arguments_are_expected_by_Default $if_not_told_otherwise_in_help $ #CPU_core_frequency_demo $BTW_what_is_your_CPU_frequency? $Let's_measure_it_via_Time_Stamp_Counter_register $ $CPU_get_core_f $ $will_be_executed._Press_any_key_to_continue... pause $ CPU_get_core_f #SMBus_demo $ $Now_we_try_to_init_SMBus_host_controller $It's_needed_to_be_done_before_you_use_any_SMB_function $ $SMB_detect $ $will_be_executed._Press_any_key_to_continue... pause SMB_detect $ $Well,_if_we_still_here_seems_that_some_SMB_host_was_detected $Now_look_for_the_slave_devices_present_on_SMNus $ $SMB_scan $ $will_be_executed._Press_any_key_to_continue... pause SMB_scan $I_guess_you_have_some_DIMM_module_with_SPD_EEPROM_installed $So_let's_read_some_bytes_from_it_using $ $SMB_read8(hex-slaveaddress_byte,hex-slavecommand_byte) $ $function_will_be_executed._Press_any_key_to_continue... pause $ SMB_read8(50,0) SMB_read8(50,1) SMB_read8(50,2) SMB_read8(50,3) SMB_read8(50,4) #IDE_demo $ $And_now_let's_play_with_your_hadrdisk_:-) $ $IDE_detect(dec-controller_type_byte) $0-standard_IDE,_1=ICHx,_2=PIIX3/4/5,_3=ICHx-SATA,_4=HPT37x $ $function_will_look_for_some_IDE_controllers. $It's_needed_to_be_done_before_you_use_any_IDE_function $Press_any_key_to_continue... pause IDE_detect(0) delay(1000) IDE_detect(1) delay(1000) IDE_detect(2) delay(1000) IDE_detect(3) delay(1000) IDE_detect(4) delay(1000) $ $Press_any_key_to_continue... pause $ $If_you_have_some_special_controller_you_can_manually_enter_its_IO_address $ $IDE_primary_io_base=hex-ioport_address_word $IDE_secondary_io_base=hex-ioport_address_word $ $Or_view_the_current_addresses_if_no_value_given IDE_primary_io_base IDE_secondary_io_base $ $Now_let's_see_some_drive_info $ $IDE_info(dec-channel_byte,dec-drive_byte) $ $function_will_be_executed._Press_any_key_to_continue... $IDE_info(0,0) pause IDE_info(0,0) $You_can_execute_a_lot_of_ATA_commans_via $ $IDE_exec_command(dec-channel,dec-drive,hexb-cmd,hexb-data,hexb-features, $dec-cylinder,dec-head,dec-sector,dec-sector_count,'R'/'W'/''-R/W_buffer $ $function._If_it_returns_or_requires_sector_data_(512B)_to_transfer_you $should_use_R_or_W_parameter_otherwise_ommit_last_argument. $Some_ATA_commands_are_provided_as_functions_with_some_preset_parameters $for_much_easy_use $ $For_example_a $IDE_read_sector(dec-channel,dec-drive,dec-cylinder,dec-head,dec-sector) $which_reads_and_displys_1_sector_in_hex-mode_(not_LBA,_8.4GB_limit) $ $Press_any_key_to_continue... $IDE_read_sector(0,0,0,0,1) pause IDE_read_sector(0,0,0,0,1) $Press_any_key_to_continue... pause $ $This_is_your_MBR_do_ya_thing_that_would_be_a_good_idea_to_fill_it_with_0? $Let's_clear_sector_buffer_first $ delay(1000) $IDE_clear_buffer IDE_clear_buffer delay(1000) $ $And_now_you_just_have_to_call $IDE_write_sector_function_with_same_parameters. delay(1000) $Easy_in't? delay(1000) $OK,_just_kidding_;-) $ delay(1000) $So_that's_all_folks, $ $exit_script $ $terminate_script_execution_and_fall_back_to_console. $Type_help_to_list_all_functions_or_exit_to_quit. $Now_you_can_play_yourself,_bye. exit_script