BC/澳柯玛BC/BD-100H77FA多少钱

用户反馈-诸城信息港
诸城信息港――传播时尚信息 关注百姓生活
现在的位置:&>&用户反馈
comment4, &a href=&
&&canada pharmacy&/a&,
comment3, &a href=&
&&cialis generic&/a&,
comment6, http://poland.it/forums/topic/泻邪泻-锌芯懈懈-斜械谢械-泻械写/ kak_pochistit_belye_kedy,
tdxlda, /forums/topic/卸芯泄-锌芯懈胁-懈薪懈泻邪-械泻胁懈械屑/ chuzhoi_protiv_khishchnika_rekviem,
501, /forums/topic/芯懈-邪薪泻-锌械械斜谐-邪屑芯谢械/ sochi_sankt_peterburg_samolet,
gfriu, /forums/topic/泻芯芯-懈薪械薪械邪-斜械锌谢邪薪泄-械/?v=79cba1185463 skorost_interneta_besplatnyi_test,
opgq, /forums/topic/屑芯械-谐邪懈-锌芯械-懈-懈谢芯芯泻懈泄-泻/ smotret_garri_potter_i_filosofskii_kamen,
868, https://www./forums/topic/邪懈-锌芯械-5-邪-屑芯械/ garri_potter_5_chast_smotret,
279840, /forums/topic/泻邪泻-锌芯泄懈-胁-斜懈斜谢懈芯械泻/ kak_proiti_v_biblioteku,
063, https://www.neosociety.de/forums/topic/锌芯谐邪屑屑邪-锌械械写邪-胁-械谐芯写薪/ programma_peredach_tvts_segodnia,
97394, http://faire-savoir.me/forums/topic/adele-someone-like-you/ adele_someone_like_you,
&:-OOO, http://www.op-/forums/topic/邪屑懈谢薪械-械薪薪芯懈-27-械懈/ familnye_tsennosti_27_seriia,
%-))), https://promotions.co.th/coupon/forums/forum/喔喔福喔副喔喔灌喔喔喔掂喔喔掂
comment5, /anonymous/6de4d8fd0b0de95a25ed7 top_10_filmov_uzhasov,
08896, /anonymous/65aaddd3ba07cf4d30d52 kak_pomeniat_vremia_na_planshete_android,
8-), /anonymous/c584ba8c507f95bc0c598b1 kak_mozhno_skachat_video_s_youtube_otvety,
23446, /anonymous/52f081bce011b2e1740757 sinema_kholl_kinoteatr_makhachkala,
:O, /anonymous/f8e49bdd71a4cb86ad1ff3e2a50d07b5 igra_prestolov_5_sezon_skachat_torrentom,
=D, /anonymous/f38cae8fe2ece2b41bc91bffc62ec330 zuma_legenda_woka_woka_igrat_onlain,
=DDD, /anonymous/048b9fbeb9d537a skachat_driver-san-francisco-_russkie_-_mashiny_rar,
=-], /anonymous/7bee4351e skachat_besplatno_dublgis_na_vindovs_7,
uplqsv, /anonymous/9f39b89e2ecadbe091d4b1 zonealarm_extreme_security_manual,
79228, /anonymous/551e0e9d497da0c8336ad6fcd4fdd80b bliny_na_moloke_bez_iaits,
413836, /anonymous/055b7dc24dc1afc4441a70c otvety_naskolko_vy_umny_46,
lvb, /anonymous/4caddacf3caad prilozheniia_dlia_skachivaniia_muzyki,
665, /anonymous/b588a9fa48beeddd47eb558e tachki_3_smotret_onlain_besplatno_v_khoroshem_kachestve,
&:))), /anonymous/59ebd0b7f12a30d93c2efa069638eedd instruktsiia_k_metodike_dom_derevo_chelovek,
:PP, /anonymous/784618beca00de0b8043fa kerolain_vang_do_i_posle,
735767, /anonymous/d9c82ec4d47b11bcb5b15b5 roditelskii_kontrol_vindovs_xp,
hlwzxs, /anonymous/bf5fa790dc515a1ae7cb pereustanovit_windows_poshagovo,
cmm, /anonymous/8c10f1e57b83f3946395 kliuchnitsa_nastennaia_nizhnii_novgorod,
szaaa, /anonymous/ba890efd229c3a1eaca930f aiurveda_tomas_iarema_chitat_onlain,
ywsnd, /anonymous/709d4f3e7c57fab87002a5 khabbet_baraka_otzyvy,
8947, /anonymous/f61e21aa97a11c weather_saint_petersburg_russia,
wfmcuj, /anonymous/6f612d74e9befffc6c22ae igra_prestolov_2_sezon_9_seriia,
8((, /anonymous/dba3c309c0eb kod_aktivatsii_driver_booster_23,
%-[[, /anonymous/0ddd7f3173dfea4fd2420 reshebnik_po_istorii_7_klass_aiaiudovskaia,
09241, /anonymous/f8ff354cc168980cde886bc9bbfdeaab skachat_draiver_novatel_u720_dlia_windows_8,
xdzad, /anonymous/63baab00058abb525c267e8069adf495 skachat_igry_na_pk_tri_v_riad_na_russkom_iazyke,
=D, /anonymous/84cb2b69e10e0f002dbac otvety_na_igru_zagadki_nutella,
3952, /anonymous/caf9cf6b767cdaefb60a89fc1bbbdcad Chitatskii_shchodennik_9_klass,
%(, /anonymous/1c14c9c72d6b9c5d430fd serial_mentalist_smotret_onlain_6_sezon,
=OO, /anonymous/44d0dfd61bbf3b3 twenty_one_pilots_heathens_perevod,
:-], /anonymous/cf88ab6e445a99f3343556dac29e9f1e rukovodstvo_lanos_skachat_besplatno,
82164, /anonymous/669bc8beaa73 roksolana_khiurrem_serial_smotret_onlain,
4797, /anonymous/2cc5dd6840c65bdc4b2306 ne_prikhodiat_uvedomleniia_vk,
2349, /anonymous/db380ef3b711c7baedfde6 pereustanovit_konsol_mmc_windows_7,
ollwtn, /anonymous/9a4d32eeb14d69dd0a01f ibn_na_russkom,
ith, /anonymous/888d86ea2d362bc5aa96 goriachii_kliuch_sanatorii_piatigorsk,
252390, /anonymous/015fda95ef52f7555c5dfcf1 okruzhaiushchii_mir_2_klass_rabochaia_tetrad_otvety_fedotova_2_chast,
pfr, /anonymous/cba3a544ccdaffa079d88f2 reshebnik_po_angliiskomu_vaulina_9_klass_skachat,
7740, /anonymous/69c5890e0bec22d0fc5e3c3dc04d01fe rover_treiler_na_russkom,
mmn, /anonymous/3c1a587e7 gdz_fizika_10_klass_miakishev_voprosy,
8)), /anonymous/e7e31c8efce23d5bb533e shadow_fight_2_vzlomannaia,
comment2, /anonymous/d5f otvety_exam_success,
oudhwx, /anonymous/69dc8ab1b9ab7 bob_ross_video_uroki_na_russkom,
cxh, /anonymous/24c0bd171606dddfef878c60e2c0b003 moi_lichnyi_kabinet_tele2,
8[[, /anonymous/e33fb26fcae gdz_angl_mova_11_klas_karpiuk_skachat_besplatno,
=]]], /anonymous/e5c9ba93ae7fdfb2c9961 trudovoi_dogovor_s_rabotnikom_snt,
tmty, /anonymous/f89d2b838a37a74e924c72696b3faf95 kontsert_imagine_dragons_v_moskve,
8DDD, /anonymous/e6fa1baed5b4f7ab0e429b5 skachat_gta_vai_siti_na_android_s_keshem_besplatno,
8PP, /anonymous/490cc5deaf938e razvivaiushchie_igry_na_android_42,
3856, /anonymous/2ec8dd969def2bfef96c primer_obieiavleniia_o_prieme_na_rabotu_menedzhera,
=))), /anonymous/c8ea2bd4f963bf7960ccd kak_poluchit_pasport_v_14_let,
uxeva, /anonymous/e50b61bb557b2eb2fe621e chak_i_larri_pozharnaia_svadba,
59298, /anonymous/2dc86dbaf9b5de sanitarke_pokazalos_chto_mat_tseluet_mladentsa._prigliadevshis,
1780, /anonymous/46acfbfdbad290b82fd0ff kak_obnovit_android_na_planshete,
676186, /anonymous/f504ab13fe2a8bb2b94a8d3 elektronnye_bolnichnye_s_2017_goda,
:((, /anonymous/33f4397dcefbde90a0be9e serial_dnevniki_vampira_smotret_onlain_5_sezon_11_seriia,
8OO, /anonymous/338a3a2a0d472dac29bd02d0b87023a8 transformery_5_poslednii_rytsar_smotret_onlain,
&:-[, /anonymous/7fd82eafc56e samsung_galaksi_a5_tsena,
2419, /anonymous/970b9bf336f4a85e568be01 novosti_v_strane_i_mire,
378, /anonymous/59e35eade92e21c1eaa3 Skachat_mainkraft_bez_kodov,
rjns, /anonymous/39eacece849e5d993140e sea_planet_resort_&_spa,
91918, /anonymous/46dad7a38cffab97682aea moskva_odin_iz_samykh_bolshikh_gorodov_mira,
876385, /anonymous/4e21ed1a3a10a56ce5f2c1 primer_vvedeniia_kursovoi_raboty_po_ekonomike,
878, /anonymous/26fb0c407c2f1b26ef07c7cbf0a1c36d instruktsiia_e-trac,
=-]]], /anonymous/ddba9e170577 instruktsiia_po_chistke_kofemashiny_jura,
:DDD, /anonymous/fdfce3f274bd79f8cbcd draiver_dlia_brother_dcp-6690cw,
&:-(, /anonymous/dfcab26cc4f9dd55ce96 skachat_multik_udivitelnyi_mir_gambola_na_android,
8PPP, /anonymous/fb8ec25ffea73 tekst_pesni_okutala_menia_okutala,
dmehe, /anonymous/4d8bc745cef633abcf22fa7eac8bc071 foneticheskii_razbor_slova_rostok_otvety,
=-]]], /anonymous/1d9cfff35650a proverit_bilet_stoloto_zhilishchnaia_lotereia,
yzk, /anonymous/e8a19fc86d4d02b3983d7 instruktsiia_po_ekspluatatsii_honda_cr_v_2012,
qmch, /anonymous/2a582b574ca3a7b30a0c604e381ac8ee skachat_mortal_kombat_x,
qwlo, /anonymous/dbdb965b9bc177b perevod_s_angliiskogo_na_russkii_upper,
=-DDD, /anonymous/fcd4232c0acd41cf498eaa khimiia_gdz_8_klass_2016_iaroshenko,
17935, /anonymous/d279a305e9c4bf30de541b aktivator_office_2010_pro_plus,
%DD, /anonymous/cc8fd58c65017d1eff876d entoni_robbins_na_russkom,
wwc, /anonymous/05a3ba90a7 do_skoroi_vstrechi_tekst,
103390, /anonymous/c0f3ef0bfdaab posle_obnovleniia_vindovs_8_net_zvuka,
84704, /anonymous/b0e7c5743e40 gdz_rt_po_geometrii_9_klass,
16465, /anonymous/c57ef0b239cbbb0abd8377 samaia_luchshaia_mama_zemli,
531559, /anonymous/5b9d93ed11f59166c1ededf draiver_zyxel_g-302_ee,
756, /anonymous/74aa5e07bbec Vozrazhenie_isttsa_na_otzyv_otvetchika_obrazets,
604918, /anonymous/cbbabcfbff56 instruktsiia_vodonagrevatel_nakopitelnyi_thermex_id_80_v,
%[[, /anonymous/5e2c81a35bd niusha_otvety_na_voprosy,
exhef, /anonymous/1c162bf826da6bcee56f9d47bb4cee94 tsarevna_khochu_na_more,
hxaei, /anonymous/f50296d51c zavodila_azu-215_otzyvy,
comment3, /radcsedefi/pokemon-world-skachat pokemon_world_skachat,
&:[, /inerinun/serial-number-microsoft-word-2010-free serial_number_microsoft_word_2010_free,
%], /consdamcheperg/pokemon-tin-amazing-pulls pokemon_tin_amazing_pulls,
:-PPP, /suystataron/ssh-key-eto ssh_key_eto,
:-], /arnesniser/selbstaufblasbare-isomatte-wo-kaufen selbstaufblasbare_isomatte_wo_kaufen,
owd, /tipmasepe/power-surge-on-hub-port-error-windows-7 power_surge_on_hub_port_error_windows_7,
yeqfgz, /conspuddwinptec/ss-method-to-download-youtube-videos ss_method_to_download_youtube_videos,
eslje, /daebloodexun/sonic-project-x-download-free sonic_project_x_download_free,
fxss, /hillbookcsingco/round-up-4-kniga-dlya-uchitelya-onlayn round-up_4_kniga_dlia_uchitelia_onlain,
upe, /ephaginga/r-download-linux r_download_linux,
:-))), /naepelopi/qmobile-noir-a2-games-download qmobile_noir_a2_games_download,
1594, /conspuddwinptec/pokemon-sapphire-cheats-gba-rare-candy pokemon_sapphire_cheats_gba_rare_candy,
&:), /igsidelti/shakira-la-la-hd-video-download shakira_la_la_hd_video_download,
=-(, /evabstabmid/scanmaster-key-generator scanmaster_key_generator,
=(((, /herthamwinchto/psp-iso-tool-2013 psp_iso_tool_2013,
%(, /naepelopi/rms-klyuch rms_kliuch,
bzzbji, /numbterpibuck/tha-carter-4-download-free tha_carter_4_download_free,
479771, /arowenschool/serato-dj-16-download-crack-mac serato_dj_16_download_crack_mac,
=-]]], /guanvibilua/pokemon-x-pokedex-central pokemon_x_pokedex_central,
8DDD, /idmerbaci/roblox-download-android-tablet roblox_download_android_tablet,
=)), /evabstabmid/pokemon-xy-anime-episode-10-english-sub pokemon_xy_anime_episode_10_english_sub,
8[[[, /arnesniser/router-keygen-gratis-para-lg-l5 router_keygen_gratis_para_lg_l5,
ebagr, /hieswooncamturt/sd-card-recovery-free-software-keygen sd_card_recovery_free_software_keygen,
0219, /suystataron/pokemon-z-legendary-serebii pokemon_z_legendary_serebii,
lgcrov, /oupatsunbo/pokemon-silver-visual-boy-advance-cheats pokemon_silver_visual_boy_advance_cheats,
588224, /enkaipracam/samplitude-music-studio-pro-x-suite-crack samplitude_music_studio_pro_x_suite_crack,
:)), /xyeditoso/skyrim-legendary-edition-pc-torrent-tpb skyrim_legendary_edition_pc_torrent_tpb,
kmnp, /hieswooncamturt/telecharger-le-crack-de-idm-621-gratuit telecharger_le_crack_de_idm_621_gratuit,
607, /ermerlogsros/pokemon-swadloon-smogon pokemon_swadloon_smogon,
8OO, /suystataron/torch-browser-free-download-for-windows-7-ultimate torch_browser_free_download_for_windows_7_ultimate_64_bit,
5904, /radspotuttai/rs-isolsec-current-transformer rs_isolsec_current_transformer,
ftgxuo, /poipropsisy/serial-number-r-studio-76 serial_number_r-studio_76,
36290, /suystataron/pokemon-x-and-y-hitmontop-smogon pokemon_x_and_y_hitmontop_smogon,
tlq, /atotatgeo/tha-carter-iv-deluxe-edition-free-download-zip tha_carter_iv_deluxe_edition_free_download_zip,
&:-(, /conspuddwinptec/starlight-10-test-booklet-otvety starlight_10_test_booklet_otvety,
5195, /blandedgiftlo/snsd-oh-album-download-k2nblog snsd_oh_album_download_k2nblog,
sgb, /tipmasepe/sims-4-download-iphone sims_4_download_iphone,
owtso, /derriaphatos/ppt-norma-iso-17025 ppt_norma_iso_17025,
%), /babijaccord/www-download-dil-ka-rishta-mp4-video-songs www_download_dil_ka_rishta_mp4_video_songs,
&:((, /arowenschool/serial-key-security-task-manager serial_key_security_task_manager,
=-P, /inoctema/pokemon-xy-cards-list pokemon_xy_cards_list,
694679, /tipmasepe/que-es-crackear-un-programa que_es_crackear_un_programa,
xaw, /caigesgiore/serial-number-edius-720 serial_number_edius_720,
&:P, /lcasconpuhits/uaz-racing-4x4-nocd-crack-download uaz_racing_4x4_nocd_crack_download,
:-]], /writcalcellsi/rs-isolsec-sl rs_isolsec_sl,
comment1, /consmascfenfunb/xforce-keygen-adobe-cc-2015 xforce_keygen_adobe_cc_2015,
=P, /suystataron/product-key-microsoft-office-2013-professional-plu product_key_microsoft_office_2013_professional_plus_64_bit_free,
zld, /laynterdapu/tomtom-go-920-maps-crack tomtom_go_920_maps_crack,
%-), /igsidelti/r-studio-data-recovery-tools-torrent r_studio_data_recovery_tools_torrent,
7037, /dicarterstec/product-key-windows-10-pro-technical-preview product_key_windows_10_pro_technical_preview,
ffo, /singvaseno/utorrent-download-latest-version-for-windows-7-32- utorrent_download_latest_version_for_windows_7_32_bit,
hklfk, /liatiricour/tekken-6-ps3-iso-free-download tekken_6_ps3_iso_free_download,
oeenl, /imadansel/serial-adobe-photoshop-cs2-free serial_adobe_photoshop_cs2_free,
8-[[, /trantaposanc/porque-o-pokemon-heart-gold-fica-travando porque_o_pokemon_heart_gold_fica_travando,
689669, /tranexsouthmi/sulphate-of-iron-nz sulphate_of_iron_nz,
374229, /vafatthechin/windows-xp-usb-dvd-download-tool-rus-skachat windows_xp_usb_dvd_download_tool_rus_skachat,
=-[[[, /xiwarepa/pokemon-showdown-ultimate-ou-team pokemon_showdown_ultimate_ou_team,
8), /theiskinluma/site-de-torrente-romanesti site_de_torrente_romanesti,
40742, /inmistighpers/pokemon-tier-black pokemon_tier_black,
41380, /mayzicavi/windows-nt-31-iso windows_nt_31_iso,
yjwwt, /imadansel/pokemon-share-exp-fire-red pokemon_share_exp_fire_red,
&:((, /tihiscadu/smart-hub-lg-tv smart_hub_lg_tv,
%-D, /kinddedlaubrat/website-x5-professional-11-crack-ita website_x5_professional_11_crack_ita,
cxupbq, /laynterdapu/star-wars-knigi-skachat-fb2 star_wars_knigi_skachat_fb2,
=-O, /roythirsprogic/serial-vmware-workstation-8-key serial_vmware_workstation_8_key,
=((, /tihiscadu/recover-my-files-52-1-license-key recover_my_files_52_1_license_key,
836, /tackcodercu/ranjha-the-hk-mp3-download ranjha_the_hk_mp3_download,
892, /consdamcheperg/scanmaster-elm-v2-1-crack scanmaster_elm_v2_1_crack,
:-(, /nenamypo/team-bs-12-3-skachat-pesnyu team_bs_12_3_skachat_pesniu,
8-)), /coheadlkuga/pokemon-zeta-rom-download-android pokemon_zeta_rom_download_android,
628, /tikezobi/pokemon-victory-fire-evolution-levels pokemon_victory_fire_evolution_levels,
%-[[[, /dicarterstec/smallville-season-9-torrent-hdtv smallville_season_9_torrent_hdtv,
hox, /adcarici/russian-hub-helsinki russian_hub_helsinki,
&:-[, /myeredcmiti/serial-key-sony-vegas-11 serial_key_sony_vegas_11,
70826, /inoctema/subway-surfers-download-iphone-5 subway_surfers_download_iphone_5,
678879, /laynterdapu/rbob-crack-spread-formula rbob_crack_spread_formula,
590, /poipropsisy/rhl-15-v-20-skachat rhl_15_v_20_skachat,
&:-[[, /xiwarepa/pokemon-sezon-13 pokemon_sezon_13,
&:-OO, /lausemuvin/ubuntu-iso-download-for-oracle-virtualbox ubuntu_iso_download_for_oracle_virtualbox,
332, /derriaphatos/serial-key-adobe-flash-cs4-professional serial_key_adobe_flash_cs4_professional,
=-((, /eghitentrog/sad-hurt-quotes-and-sayings sad_hurt_quotes_and_sayings,
78026, /tahobuper/snagit-1220-crack snagit_1220_crack,
41371, /swittopdthinbio/pokemon-uranium-cheats pokemon_uranium_cheats,
476, /guepagotan/virtual-dj-le-serial-number-crack virtual_dj_le_serial_number_crack,
thgo, /townralibott/tdu-2-mod-russian-car-lada-2106-vaz-2106-skachat-b tdu_2_mod_russian_car_lada_2106__vaz_2106_skachat_besplatno,
8-)), /liovapora/rocksmith-2014-crack-only-dlc-fix rocksmith_2014_crack_only_dlc_fix,
8((, /naepelopi/pokemon-z-version-release-date pokemon_z_version_release_date,
ghse, /xyeditoso/sbs-server-2011-iso-download sbs_server_2011_iso_download,
wtsvwq, /avansiofol/real-hide-ip-crack real_hide_ip_crack,
ktdeu, /tranexsouthmi/psp-iso-installieren-660 psp_iso_installieren_660,
Hi! [url=http://ventolin.top/]albuterol inhaler[/url] beneficial web site.
levitra online,
generic viagra online,
comment3, &a href=&
&&cialis prices&/a&,
buy cialis online,
comment6, &a href=&
&&buy provigil online&/a&,
online pharmacy,
Uqgtjdddw gfyskeptu
http://www.1prikid.ru/koshelek-zhenskii-burberry-4763 Кошелёк женский BURBERRY
http://www.1prikid.ru/sumka-zhenskaia-cartier-56732
http://www.1prikid.ru/remen-armani-78432
http://www.1prikid.ru/zhenskii-koshelek-louis-vuitton-1977
http://www.1prikid.ru/koshelek-wanlima-zhenskii-1901 Кошелёк Wanlima женский
ARMANI(Армани) барсетка кошелек http://www.1prikid.ru/armani-barsetka-koshelek-56723
comment1, &a href=&
&&payday loans&/a&,
buy prednisone online,
generic levitra,
分页: &&&&&&3&&&&&&&&&
留言内容(*):
Copyright & 2005 诸城信息港 版权所有 | 增值电信业务经营许可证:鲁B2-号 | 备案/许可证号:鲁ICP备号 | 电子公告许可:电信业务审批[2008]字第262号函
投稿信箱:&&&总机: &&&新闻、业务热线: &&法律顾问:山东东武律师事务所 刘清波、秦丽律师; reset fz1, check&erase SRAM and WRAM
mov dx,0xfff4 ; WMB to 0x11
mov al,0x11
mov dx,0xfff5 ; WCY1 to 0x44
mov al,0x44
mov dx,0xfff6 ; WCY2 to 0x01
mov al,0x1
mov dx,0xfff2 ; RFC to 0x8e
mov al,0x8e
; zero registers
; check ROM
mov ax,0xf000
mov cx,0x8000
mov cx,0x8000
repe cmpsw
test cx,cx
; test failed
; check SRAM
mov cx,0x8000
mov cx,0x8000
repe scasw
test cx,cx
; test failed
call 0xb8eb
; 161: lcdinit()
; checksum test
add ax,[cs:si]
test ax,ax
; test failed
call 0x6dd
; init V50 peripherals
call 0x8ae
; init FZ1 peripherals
call 0x7d4
; check WRAM, init SRAM
call 0x73d
; init IRQ table
call 0x70e
; init timer
call 0x7af
; 1: reset MIDI
call 0x2380
; 43: gabint()
call 0xee22
; memory test failed: cycle LEDs
mov al,0xfe
out 0x78,al ; set LEDs
loop 0x6d9
jmp short 0x6d5
; V50 peripheral init
mov dx,0xfffe ; OP connection to 6
mov al,0x6
mov dx,0xfffd ; OP selection to 14
mov al,0xe
mov dx,0xfffc ; OP high to 0
mov al,0x0
mov dx,0xfffb ; DMA low to 0xf0
mov al,0xf0
mov dx,0xfffa ; IUL to 0xe0
mov al,0xe0
mov dx,0xfff9 ; TUL to 0xc0
mov al,0xc0
mov dx,0xfff8 ; SUL to 0xd0
mov al,0xd0
mov dx,0xfff0 ; TCKS to 0
mov al,0x0
; timer init
in al,0xe2
; disable timer IRQ
out 0xe2,al
mov al,0x30
; timer0 mode 0x30
out 0xc6,al
mov al,0xd0
; timer0 = 0x7d0
out 0xc0,al
mov al,0x7
out 0xc0,al
mov al,0x76
; timer1 mode 0x76
out 0xc6,al
mov al,0x8
; timer1 = 0x08
out 0xc2,al
mov al,0x0
out 0xc2,al
mov al,0xb0
; timer2 mode 0xb0
out 0xc6,al
mov al,0xd0
; timer2 = 0x7d0
out 0xc4,al
mov al,0x7
out 0xc4,al
; restore IRQ
out 0xe2,al
; init IRQ table
mov cx,0x100
; set all IRQ to iret
mov bx,0x0
mov ax,0x78e
mov [bx],ax
mov [bx+0x2],cs
add bx,byte +0x4
loop 0x746
8D 06 F9 F7
lea ax,[0xf7f9] ; int3 to f000:f7f9
mov [0xc],ax
8C 0E 0E 00
mov [0xe],cs
mov ax,0xf000 ; DS to ROM
mov ax,0x0
; ES to RAM
mov si,0x78f
; transfer irq vectors
mov di,0x80
mov cx,0x10
mov al,0x1b
; irq0: LTIM=1, ADI=4, single
out 0xe0,al
mov al,0x20
; irq0 vec = 0x200d
out 0xe2,al
mov al,0xd
; irq0: buffered, normal EDI, 8086-mode
out 0xe2,al
mov al,0xc0
; irq6: LTIM=0, ADI=8, cascade
out 0xe0,al
mov al,0xb8
; irq6 vec = 0xb800
out 0xe2,al
; spurious interrupt
; IRQ vectors (PS:PC)
078F: dd 0xfxfxfxf000078e
079F: dd 0xfxfxfxf000078e
; reset MIDI
in al,0xe2
; disable MIDI irq
out 0xe2,al
; quiet serial device
out 0xd2,al
out 0xd2,al
out 0xd2,al
mov al,0x40
; reset serial device
out 0xd2,al
mov al,0x4e
; async, 16x, 8N1.5
out 0xd4,al
mov al,0x15
; reset error, enable rx/tx
out 0xd2,al
mov al,0x2
; enable rxrdy interrupt
out 0xd6,al
; restore IRQ mask
out 0xe2,al
; check wave RAM, init data structures
mov ax,0x1000 ; ES to wave RAM
mov cx,0x10
; wave bank #0
and cl,0x3f
; selec wave bank
in al,0x22
and al,0xc0
out 0x22,al
26 C7 06 00 00 A5 A5
mov word [es:0x0],0xa5a5 ; pattern #1
26 81 3E 00 00 A5 A5
cmp word [es:0x0],0xa5a5
; test failed
26 C7 06 00 00 5A 5A
mov word [es:0x0],0x5a5a ; pattern #2
26 81 3E 00 00 5A 5A
cmp word [es:0x0],0x5a5a
; test failed
; next wave bank
cmp cx,byte +0x40
; process all banks
89 0E D4 08
mov [0x8d4],cx
; store pages
; ES to RAM
mov ax,0xe0e0
; max[] to 0xe0
mov cx,0x4
8D 3E 4E 04
lea di,[0x44e]
mov ax,0x2020
; min[] to 0x20
mov cx,0x4
8D 3E 56 04
lea di,[0x456]
C6 06 5F 04 70
mov byte [0x45f],0x70 ; bender center limit
C6 06 5E 04 8F
mov byte [0x45e],0x8f ;
C7 06 68 04 80 00
mov word [0x468],0x80 ; genbit = 0x80
mov ax,0xffff
mov [0x42c],al
; key = 0xff
mov [0x42d],al
; kkk = 0xff
mov [0x42e],al
; kls = 0xff
mov [0x430],ax
; ki0 = 0xffffffff
mov [0x432],ax
mov [0x434],ax
; ki1 = 0xffffffff
mov [0x436],ax
mov al,0x7f
mov [0x50e],al
; s1mix = 0x7f
mov [0x50f],al
; s2mix = 0x7f
call 0x87f
C6 06 88 52 18
mov byte [0x ; init nowe[]
mov al,0x40
mov [0x528b],al
mov [0x5296],al
C7 06 DA 04 14 00
mov word [0x4da],0x14 ; rec. 200ms
in al,0x24
; DISPLAY pressed?
and al,0x40
80 0E 2F 04 80
or byte [0x42f],0x80
; mark SLS
; init bank[] and voic[]
push byte +0x0
; init bank[]
push word 0x4480
8D 1E 08 0E
lea bx,[0xe08]
call 0xe392
add sp,byte +0x8
; init voic[]
mov cx,0x40
; voice counter
8D 1E 88 22
lea bx,[0x2288]
push byte +0x0
push byte +0x0
call 0x7f10
; init voic[cx]
add sp,byte +0x8
81 C3 C0 00
add bx,0xc0
loop 0x897
; reset peripherals
mov al,0xdf ; all LEDs on
out 0x78,al
mov al,0xc2 ; OBF=ACKE=ACKO=1
out 0x1e,al
mov al,0x89 ; STx = input lines
out 0x26,al
mov al,0xc2 ; inuse/moon=1, scan cursor
out 0x20,al
mov al,0x0 ; bank 0, norm=gain=0
out 0x22,al
mov al,0xfd ; play/mod/scratch LEDs on
out 0x78,al
mov [0x46d],al ; store LED pattern
mov cx,0x4ce ; wait for kbd reset
loop 0x8cc
in al,0x28 ; clear kdb int
mov al,0x0 ; reset DCF/DCA/DCQ
mov dx,0x80
add dx,byte +0x2
81 FA C0 00
cmp dx,0xc0
; serial interrupt
mov ax,0x0
; DS to RAM
; ES to RAM
in al,0xd2
and al,0x2
in al,0xd0
; get rxdata
8B 36 D8 09
mov si,[0x9d8] ; get in buffer pos.
88 84 D6 08
mov [si+0x8d6],al ; write data into buffer
in al,0xd2
; clear rx/tx irq
and al,0x38
FE 06 D8 09
inc byte [0x9d8] ; inc buffer pointer
mov ax,[0x9d8] ; ring buffer overflow?
3B 06 D6 09
cmp ax,[0x9d6]
; no -> proceed
push byte +0x1
call 0x1828
; all_noteoff()
mov al,0x15
; reset & enable serial
out 0xd2,al
8B 1E DA 0A
mov bx,[0xada] ; get out buffer pos.
39 1E DC 0A
cmp [0xadc],bx ; ring buffer overflow?
in al,0xd2
; skip transmission
and al,0x1
if not txrdy
8A 87 DA 09
mov al,[bx+0x9da] ; transmit data
out 0xd0,al
FE 06 DA 0A
inc byte [0xada] ; adjust buffer ptr
; out buffer overflow
in al,0xd6
; enable rxirq
out 0xd6,al
; end of MIDI interrupt
mov al,0x20
; enable serial IRQ
out 0xe0,al
; keyboard interrupt
mov ax,0x0
; DS to RAM
; ES to RAM
in al,0x1a
; skip IRQ if
and al,0x10
in al,0x1a
; wait for SYNC49
and al,0x20
in al,0x28
; get keybard data
8D 3E 02 04
lea di,[0x402] ; DI to keymap
mov cx,0x8
; max keys
test al,0x80
; key off?
xor al,0x80
; search for key
repne scasb
C6 45 FF 00
mov byte [di-0x1],0x0; release key
FE 0E 00 04
dec byte [0x400] ; dec keycount
mov cl,0x80
; note off
; search for free key
repne scasb
mov [di-0x1],ah ; set key
FE 06 00 04
inc byte [0x400] ; inc keycount
mov cl,0x90
; get command body
and al,0x7f
mov dx,0x71
; adjust body
in al,0x1a
; wait for SYNC49
and al,0x20
jmp short 0x94f ; don't wait forever...
; get velocity
in al,0x28
; get velocity
and al,0x3f
; limit to 0-63
cmp al,0x3d
; in range -> proceed
80 3E 00 04 06
cmp byte [0x400],0x6 ; too many fingers?
mov al,[0x401] ; yes, reuse velocity
mov [0x401],al ; store velocity
; weight velocity
2E 8A 9F DB 09
mov bl,[cs:bx+0x9db]
cmp cl,0x90
; clear velocity on
; return velocity
; return key
push word 0x90 ; note on
call 0x2807
add sp,byte +0x6 ; clear params
mov al,0x20
out 0xe0,al
; velocity scaling (0-63 -> 0-127)
09DB: db 0x03,0x08,0x0c,0x10,0x14,0x16,0x18,0x1a
09E3: db 0x1c,0x1d,0x1e,0x1f,0x21,0x23,0x25,0x27
09EB: db 0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30
09F3: db 0x31,0x32,0x33,0x34,0x35,0x36,0x38,0x3a
09FB: db 0x3c,0x3e,0x40,0x42,0x44,0x46,0x48,0x4a
0A03: db 0x4c,0x4e,0x50,0x52,0x54,0x56,0x58,0x5a
0A0B: db 0x5c,0x5e,0x60,0x62,0x64,0x66,0x68,0x6a
0A13: db 0x6c,0x73,0x7b,0x7c,0x7d,0x7e,0x7f,0x7f
; timer interrupt
mov al,0x30
; little endian, mode 0
out 0xc6,al
mov al,0xe8
; timer0 = 0x3e8
out 0xc0,al
mov al,0x3
out 0xc0,al
80 06 0A 04 20
add byte [0x40a],0x20 ; inc big counter by 0x20
80 16 0B 04 00
adc byte [0x40b],0x0
call 0xa96
call 0xbec
call 0xe46
call 0x1cd8
mov dx,0x90
; DX to DCF
mov cx,0x8
8B 9C 0C 04
mov bx,[si+0x40c] ; olddca
3B 9C 1C 04
cmp bx,[si+0x41c] ; newdca
; same -> 0x0a77
; new>old -> 0xa60
; dec olddca
jmp short 0xa61
; inc olddca
89 9C 0C 04
mov [si+0x40c],bx
; MSB to DCF
sub dx,byte +0x10 ; LSB to DCF
add dx,byte +0x10
81 FB DF 00
cmp bx,0xdf
; critical value!?
; process all voices
add dx,byte +0x2 ; address next voice
add si,byte +0x2
loop 0xa51
mov al,0x20
out 0xe0,al
; filter keytrack/transpose
; pointer*2
call 0x22ee
; 42: gene_off()
jmp short 0xa77
; scan buttons
C8 08 00 01
enter 0x8,0x1
36 8A 0E 0B 04
mov cl,[ss:0x40b] ; address keymap
shr bx,0x2
81 E3 03 00
and bx,0x3
mov [bp-0x6],bx
81 E1 03 00
and cx,0x3
cmp cx,byte +0x0
in al,0x20
; set scan lines
and al,0xfc
out 0x20,al
cmp cx,byte +0x2
in al,0x24
; get button code
8A 97 30 04
mov dl,[bx+0x430]
88 87 34 04
mov [bx+0x434],al
in al,0x24
; get button code
88 87 30 04
mov [bx+0x430],al
cmp bx,byte +0x1
mov al,[0x435]
test al,0x80
F6 06 2F 04 01
test byte [0x42f],0x1
80 0E 2F 04 01
or byte [0x42f],0x1
mov ax,0x7f
test al,0x80
F6 06 2F 04 01
test byte [0x42f],0x1
80 26 2F 04 FE
and byte [0x42f],0xfe
F6 06 EC 0D 01
test byte [0xdec],0x1
mov ax,0x40
F6 06 EC 0D 80
test byte [0xdec],0x80
or al,0x80
push word 0xb0
call 0x2807
add sp,byte +0x6
mov dl,0x7
mov dl,0x8
mov ax,0x100
mov bx,[bp-0x6]
8A 8F 34 04
mov cl,[bx+0x434]
test ah,cl
shl bx,0x3
mov [0x42d],al
jmp short 0xb3a
mov al,[0x40b]
and ax,0xf
cmp ax,0xf
mov al,[0x42d]
cmp al,0xff
C6 06 2E 04 FF
mov byte [0x42e],0xff
C7 06 38 04 1F 00
mov word [0x438],0x1f
8A 0E 2C 04
mov cl,[0x42c]
cmp cl,0xff
38 06 2E 04
cmp [0x42e],al
C7 06 38 04 1F 00
mov word [0x438],0x1f
83 3E 38 04 00
cmp word [0x438],byte +0x0
C7 06 38 04 04 00
mov word [0x438],0x4
mov [0x42e],al
mov [0x42c],al
FF 0E 38 04
dec word [0x438]
C6 06 2D 04 FF
mov byte [0x42d],0xff
; function 6: c=mgetc()
; returns character code
mov al,[0x42c]
cmp al,0xff
mov bx,0xffff
8A 1E 2C 04
mov bl,[0x42c]
C6 06 2C 04 FF
mov byte [0x42c],0xff
mov bh,0x0
; function 7: unmgetc(c)
; write character to keycode buffer
C8 00 00 01
enter 0x0,0x1
mov al,[bp+0x4]
mov [0x42c],al
; function 8: push=contsw(c)
; check button c whether pushed (00) or not (0xff)
C8 00 00 01
enter 0x0,0x1
mov bx,0xffff
mov al,[bp+0x4]
3A 06 2E 04
cmp al,[0x42e]
80 3E 38 04 04
cmp byte [0x438],0x4
; function 9
; sample analog voltages
8A 1E 0B 04
mov bl,[0x40b]
F6 06 EC 0D 01
test byte [0xdec],0x1
81 E6 1E 00
and si,0x1e
2E 8B B4 90 0D
mov si,[cs:si+0xd90]
and bl,0x1
in al,0x20
; set ADC source
and al,0xe3
shl bl,0x2
out 0x20,al
; wait for ADC routed
in al,0x60
; force conversion
; delayed return
in al,0x68
; get ADC result
8A 9C 46 04
mov bl,[si+0x446]
88 9C 46 04
mov [si+0x446],bl
test si,si
mov [0x444],al
80 3E D7 04 02
cmp byte [0x4d7],0x2
3A 06 D6 04
cmp al,[0x4d6]
call 0x2656
; rec_trig()
C6 06 D7 04 03
mov byte [0x4d7],0x3
cmp si,byte +0x4
8A 2E 5E 04
mov ch,[0x45e]
8A 0E 5F 04
mov cl,[0x45f]
mov ax,0x81
8A B4 4E 04
mov dh,[si+0x44e]
mov al,0x81
add ax,0x80
8A 94 56 04
mov dl,[si+0x456]
mov al,0x81
88 9C 4E 04
mov [si+0x44e],bl
mov ax,0x101
88 9C 56 04
mov [si+0x456],bl
mov ax,0x0
8B 1E 42 04
mov bx,[0x442]
cmp bx,byte -0x1
cmp ax,0x81
mov [0x442],ax
rcr al,0x2
and al,0x40
F6 06 EC 0D 10
test byte [0xdec],0x10
or al,0x80
push word 0xe0
call 0x2807
add sp,byte +0x6
8A 8C 4E 04
mov cl,[si+0x44e]
8A 94 56 04
mov dl,[si+0x456]
mov al,0x81
jmp short 0xd35
88 9C 4E 04
mov [si+0x44e],bl
mov al,0x81
cmp si,byte +0x2
C6 06 3A 04 06
mov byte [0x43a],0x6
88 9C 56 04
mov [si+0x456],bl
mov al,0x0
cmp si,byte +0x2
8A AC 3A 04
mov ch,[si+0x43a]
cmp ch,0xff
88 8C 3A 04
mov [si+0x43a],cl
sub cl,0x2
88 8C 3A 04
mov [si+0x43a],cl
2E FF A4 80 0D
jmp near [cs:si+0xd80]
8A 26 3A 04
mov ah,[0x43a]
88 26 3A 04
mov [0x43a],ah
mov ax,0x4
F6 06 EC 0D 02
test byte [0xdec],0x2
or al,0x80
push word 0xb0
call 0x2807
add sp,byte +0x6
push word 0xff
mov ax,0x7f
F6 06 EC 0D 04
test byte [0xdec],0x4
or al,0x80
push word 0xd0
call 0x2807
add sp,byte +0x6
mov ax,0x1
F6 06 EC 0D 08
test byte [0xdec],0x8
or al,0x80
push word 0xb0
call 0x2807
add sp,byte +0x6
mov ch,0x0
mov ax,0x7
F6 06 EC 0D 40
test byte [0xdec],0x40
or al,0x80
push word 0xb0
call 0x2807
add sp,byte +0x6
88 0E 45 04
mov [0x445],cl
; function 10: v=mvol()
; read data entry slider (0xff=no change)
mov al,[0x445]
cmp al,0xff
mov bx,0xffff
jmp short 0xe3e
8A 1E 45 04
mov bl,[0x445]
C6 06 45 04 FF
mov byte [0x445],0xff
; function 11: v=evol()
; read line/mic signal
8A 1E 44 04
mov bl,[0x444]
mov bh,0x0
; function 12
C8 0A 00 01
enter 0xa,0x1
C7 46 FC 00 00
mov word [bp-0x4],0x0
83 7E FC 03
cmp word [bp-0x4],byte +0x3
mov bx,[bp-0x4]
8A 87 63 04
mov al,[bx+0x463]
mov [bp-0xa],ax
8A 87 60 04
mov al,[bx+0x460]
mov [bp-0x8],ax
; function 12.2/6/7/8
push word [bp-0x4]
call 0x28e3
cmp bx,byte -0x1
cmp al,0xf8
80 3E EF 0D 01
cmp byte [0xdef],0x1
sub al,0xf8
2E FF A7 94 0E
jmp near [cs:bx+0xe94]
0E94: dw 0x0ea4, 0x0e6b, 0x0eb9, 0x0ebf
0E9C: dw 0x0ec7, 0x0e6b, 0x0e6b, 0x0e6b
; function 12.1
80 3E EE 0D 00
cmp byte [0xdee],0x0
83 06 F0 0D 01
add word [0xdf0],byte +0x1
83 16 F2 0D 00
adc word [0xdf2],byte +0x0
jmp short 0xe6b
; function 12.3
C7 06 F0 0D 00 00
mov word [0xdf0],0x0
; function 12.4
C7 06 EE 0D 00 01
mov word [0xdee],0x100
jmp short 0xe6b
; function 12.5
C7 06 EE 0D FF 01
mov word [0xdee],0x1ff
jmp short 0xe6b
cmp al,0x80
mov [bp-0x8],ax
C7 46 F6 FF FF
mov word [bp-0xa],0xffff
jmp short 0xe6b
mov bx,[bp-0x8]
81 E1 0F 00
and cx,0xf
shr bx,0x4
sub bx,byte +0x8
cmp bx,byte +0x8
2E FF A7 FB 0E
jmp near [cs:bx+0xefb]
movq [bx],mm1
btr [bx],cx
les cx,[bx]
or cx,[bx]
push word [bp-0xa]
push word [bp-0x4]
call 0x178c
add sp,byte +0x8
mov [bp-0xa],bx
80 7E F6 FF
cmp byte [bp-0xa],0xff
mov [bp-0xa],ax
push word [bp-0xa]
push word [bp-0x4]
call 0x14cd
add sp,byte +0x8
mov [bp-0xa],bx
80 7E F6 FF
cmp byte [bp-0xa],0xff
mov [bp-0xa],ax
cmp ax,0x0
mov [0x467],al
mov ax,[bp-0xa]
mov [0x466],al
push word [bp-0x4]
call 0xffd
add sp,byte +0x8
mov [bp-0xa],bx
push word [bp-0xa]
push word [bp-0x4]
call 0x14cd
add sp,byte +0x8
mov [bp-0xa],bx
80 7E F6 FF
cmp byte [bp-0xa],0xff
mov [bp-0xa],ax
push word [bp-0xa]
push word [bp-0x4]
call 0x1544
add sp,byte +0x8
mov [bp-0xa],bx
push word [bp-0x4]
call 0x16c7
add sp,byte +0x6
mov [bp-0xa],bx
push word [bp-0x4]
call 0x16e5
add sp,byte +0x6
mov [bp-0xa],bx
80 7E F6 FF
cmp byte [bp-0xa],0xff
mov [bp-0xa],ax
push word [bp-0xa]
push word [bp-0x4]
call 0x175d
add sp,byte +0x8
mov [bp-0xa],bx
mov al,[bp-0x8]
mov bx,[bp-0x4]
88 87 60 04
mov [bx+0x460],al
mov al,[bp-0xa]
88 87 63 04
mov [bx+0x463],al
inc word [bp-0x4]
; function 13
C8 1E 00 01
enter 0x1e,0x1
mov [bp-0x12],ax
mov [bp-0xa],ax
83 7E F6 08
cmp word [bp-0xa],byte +0x8
jnl 0x1030
8B 36 FE 0D
mov si,[0xdfe] ; get address of bank
test si,si
jns 0x1033
cmp si,byte -0x1
push byte +0x0
call 0x22ee
; 42: gene_off()
push byte +0x1
call 0x22ee
; 42: gene_off()
mov bx,0xffff
call 0x1a95
jmp 0x14a8
mov bx,[bp-0x12]
cmp [si],bx
jna 0x1030
mov al,[0xdea] ; MIDI rec. channel
cmp al,0xff
jnz 0x1045
8A 80 42 01
mov al,[bx+si+0x142] ; mchn
cmp [bp+0x6],al
jnz 0x107c
mov al,[bp+0x8]
cmp al,[bx+si+0x2] ; bhwid
cmp al,[bx+si+0x42] ; blwid
mov al,[bp+0xa]
3A 80 82 00
cmp al,[bx+si+0x82] ; bhtch
3A 80 C2 00
cmp al,[bx+si+0xc2] ; bltch
8A B0 82 01
mov dh,[bx+si+0x182] ; gchn
8A 80 C2 01
mov al,[bx+si+0x1c2] ; bvol
mov [bp-0x4],al
8B B0 02 02
mov si,[bx+si+0x202] ; vp
jmp 0x10a5
jmp 0x14a2
C7 46 F6 08 00
mov word [bp-0xa],0x8
8B 36 04 0E
mov si,[0xe04] ; get address of voice
mov al,[0xdeb] ; MIDI send chn
cmp [bp+0x6],al
jnz 0x107c
mov al,[bp+0x8]
3A 84 AE 00
cmp al,[si+0xae] ; vhwid
3A 84 AF 00
cmp al,[si+0xaf] ; vlwid
mov bl,0xff
C6 46 FC 00
mov byte [bp-0x4],0x0
83 7C 10 00
cmp word [si+0x10],byte +0x0 ; loop
8B 3E 6A 04
mov di,[0x46a] ; lastiy
mov cx,0x8
8B 16 68 04
mov dx,[0x468] ; genbit
add di,byte +0x3a
jnc 0x10c5
8D 3E 20 54
lea di,[0x5420] ; tranv
mov al,[di]
cmp al,0xff
jnz 0x10d6
test dl,bl
89 16 68 04
mov [0x468],dx ; set genbit
jmp 0x1138
loop 0x10b6
8B 3E 6A 04
mov di,[0x46a] ; lastiy
mov cx,0x8
8B 16 68 04
mov dx,[0x468] ; genbit
add di,byte +0x3a
jnc 0x10f2
8D 3E 20 54
lea di,[0x5420] ; tranv
F6 45 0F 40
test byte [di+0xf],0x40
jnz 0x1103
test dl,bl
89 16 68 04
mov [0x468],dx ; set genbit
jmp 0x112f
loop 0x10e3
8B 3E 6A 04
mov di,[0x46a] ; lastiy
mov cx,0x8
8B 16 68 04
mov dx,[0x468] ; genbit
add di,byte +0x3a
jnc 0x111f
8D 3E 20 54
lea di,[0x5420] ; tranv
test dl,bl
89 16 68 04
mov [0x468],dx ; set genbit
jmp 0x112f
loop 0x1110
jmp 0x14a2
call 0x22ee
; 42: gene_off()
8A 16 69 04
mov dl,[0x469] ; genbit/num
81 C2 B0 00
add dx,0xb0
2E 8A 87 AD 14
mov al,[cs:bx+0x14ad]
; DCF settings
2E 8A 87 BD 14
mov al,[cs:bx+0x14bd]
sub dx,byte +0x10
; DCF settings
add dx,byte +0x10
cmp bx,byte +0x10
jnz 0x1146
inc word [bp-0xa]
89 3E 6A 04
mov [0x46a],di ; set lastiy
mov bx,[si+0x10] ; loop
81 E3 00 F0
and bx,0xf000
81 FB 00 20
cmp bx,0x2000
mov dx,[bp+0x8]
8B 1E FE 0D
mov bx,[0xdfe]
cmp bx,byte -0x1
add bx,[bp-0x12]
8A 87 02 01
mov al,[bx+0x102]
jmp short 0x118d
8A 84 B0 00
mov al,[si+0xb0] ; vlcent
mov [bp-0x10],al
add dx,byte +0x24
cmp dx,byte +0x48
jng 0x119e
mov dl,0x48
mov [di+0x8],dx
8A 94 9E 00
mov dl,[si+0x9e] ; lfo_name
and dl,0x7
cmp dl,0x4
mov dx,0x7fff
80 BC 9E 00 05
cmp byte [si+0x9e],0x5 ; lfo_wave=5?
jna 0x11f5
8A BC A0 00
mov bh,[si+0xa0] ; lfo_rate
mov cx,0x8
8D 3E 20 54
lea di,[0x5420] ; tranv
cmp byte [di],0xff
mov si,[di+0xa]
3A BC A0 00
cmp bh,[si+0xa0] ; lfo_rate
jnz 0x11e3
80 BC 9E 00 05
cmp byte [si+0x9e],0x5 ; lfo_wave=5?
add di,byte +0x3a
loop 0x11ce
jmp short 0x11f3
mov ax,[di+0x2]
mov bl,[di+0x4]
mov dx,[di+0xc]
mov [di+0x2],ax
mov [di+0x4],bl
mov [di+0xc],dx
mov al,[bp+0x8]
mov [di],al
mov al,[bp+0x4]
shl al,0x4
or al,[bp+0x6]
mov [di+0x1],al
mov [di+0xa],si
C7 45 10 FF FF
mov word [di+0x10],0xffff
mov [di+0x6],ax
mov [di+0xe],al
mov [di+0x12],ax
mov [di+0x15],al
mov [di+0x26],ax
mov [di+0x29],al
mov al,[si+0x12] ; loop_sus
cmp al,[si+0x13] ; loop_end
jna 0x1236
mov al,[si+0x13] ; loop_end
or al,0x40
mov [di+0xf],al
mov al,[si+0x78] ; dca_sus
cmp al,[si+0x79] ; dca_end
jna 0x1246
mov al,[si+0x79] ; dca_end
mov [di+0x14],al
8A 84 8A 00
mov al,[si+0x8a] ; dcf_sus
3A 84 8B 00
cmp al,[si+0x8b] ; dcf_end
jna 0x1257
8A 84 8B 00
mov al,[si+0x8b] ; dcf_end
mov [di+0x28],al
mov al,[bp+0xa]
add al,0x10
jno 0x1263
mov al,0x7f
mov [bp-0x16],al
F6 AC A5 00
imul byte [si+0xa5] ; vel_dcq_kf
mov [di+0x5],ah
mov [bp-0x6],ax
mov [bp-0x8],ax
mov [bp-0xe],ax
80 7E F2 08
cmp byte [bp-0xe],0x8
jmp 0x1416
83 7E F8 03
cmp word [bp-0x8],byte +0x3
jnl 0x1296
mov bx,[bp-0x8]
8B 16 68 04
mov dx,[0x468]
call 0x195c
mov [bp-0x8],bx
83 7E FA 02
cmp word [bp-0x6],byte +0x2
jnl 0x12a9
mov bx,[bp-0x6]
8B 16 68 04
mov dx,[0x468]
call 0x19da
mov [bp-0x6],bx
mov bx,[bp-0xe]
cmp bl,[si+0x79]
jna 0x12b4
jmp 0x135f
mov cl,[bx+si+0x7a]
and cl,0x7f
mov al,[bp+0x8]
sub al,[bp-0x10]
F6 AC A7 00
imul byte [si+0xa7] ; dca_rs
sar ax,0x7
mov al,[bp-0x16]
F6 AC AB 00
imul byte [si+0xab] ; vel_dca_rs
8A A4 AB 00
mov ah,[si+0xab] ; vel_dca_rs
test ah,ah
cmp ax,0x7f
jng 0x12f2
mov al,0x7f
jmp short 0x12f9
cmp ax,0x1
jnl 0x12f9
mov al,0x1
and bl,0x80
mov bx,[bp-0xe]
mov [bx+di+0x16],al
mov bx,[bp-0xe]
8A 88 82 00
mov cl,[bx+si+0x82] ; dca_stop
mov al,[bp+0x8]
sub al,[bp-0x10]
F6 AC A6 00
imul byte [si+0xa6] ; dca_kf
sar ax,0x4
mov al,[bp-0x16]
F6 AC AA 00
imul byte [si+0xaa] ; vel_dca_kf
8A A4 AA 00
mov ah,[si+0xaa] ; vel_dca_kf
test ah,ah
mov cl,[bp-0x4]
cmp ax,0xff
jng 0x1347
mov al,0xff
jmp short 0x134e
cmp ax,0x0
jnl 0x134e
mov al,0x0
mov bx,[bp-0xe]
cmp bl,[si+0x79]
jnz 0x135c
80 49 16 80
or byte [bx+di+0x16],0x80
mov [bx+di+0x1e],al
mov bx,[bp-0xe]
3A 9C 8B 00
cmp bl,[si+0x8b]
jna 0x136b
jmp 0x1410
8A 88 8C 00
mov cl,[bx+si+0x8c] ; dcf_rate
and cl,0x7f
mov al,[bp+0x8]
sub al,[bp-0x10]
F6 AC A9 00
imul byte [si+0xa9] ; dcf_rs
sar ax,0x7
mov al,[bp-0x16]
F6 AC AD 00
imul byte [si+0xad] ; vel_dcf_rs
8A A4 AD 00
mov ah,[si+0xad] ; vel_dcf_rs
test ah,ah
cmp ax,0x7f
jng 0x13a8
mov al,0x7f
jmp short 0x13af
cmp ax,0x1
jnl 0x13af
mov al,0x1
and bl,0x80
mov bx,[bp-0xe]
mov [bx+di+0x2a],al
mov bx,[bp-0xe]
8A 88 94 00
mov cl,[bx+si+0x94] ; dcf_stop
mov al,[bp+0x8]
sub al,[bp-0x10]
F6 AC A8 00
imul byte [si+0xa8] ; dcf_kf
sar ax,0x4
mov al,[bp-0x16]
F6 AC AC 00
imul byte [si+0xac] ; vel_dcf_kf
8A A4 AC 00
mov ah,[si+0xac] ; vel_dcf_kf
test ah,ah
cmp ax,0xff
jng 0x13f7
mov al,0xff
jmp 0x13fe
cmp ax,0x0
jnl 0x13fe
mov al,0x0
mov bx,[bp-0xe]
3A 9C 8B 00
cmp bl,[si+0x8b] ; dcf_end
jnz 0x140d
80 49 2A 80
or byte [bx+di+0x2a],0x80
mov [bx+di+0x32],al
inc word [bp-0xe]
jmp 0x127a
8D 0E A0 52
lea cx,[0x52a0]
6B 46 06 18
imul ax,[bp+0x6],byte +0x18
mov [bp-0x14],cx
36 8B 16 68 04
mov dx,[ss:0x468]
call 0x225b
80 7D 2A 7F
cmp byte [di+0x2a],0x7f
jnz 0x1435
C6 45 27 FF
mov byte [di+0x27],0xff
36 8B 16 68 04
mov dx,[ss:0x468]
mov cx,[bp-0x14]
call 0x2173
36 8B 16 68 04
mov dx,[ss:0x468]
mov cx,[bp-0x14]
call 0x1e88
80 7D 16 7F
cmp byte [di+0x16],0x7f
jnz 0x1455
C6 45 13 FF
mov byte [di+0x13],0xff
36 8B 16 68 04
mov dx,[ss:0x468]
mov cx,[bp-0x14]
call 0x2039
89 87 0C 04
mov [bx+0x40c],ax
83 7E F8 03
cmp word [bp-0x8],byte +0x3
jnl 0x148d
mov bx,[bp-0x8]
8B 16 68 04
mov dx,[0x468]
call 0x195c
mov [bp-0x8],bx
83 7E FA 02
cmp word [bp-0x6],byte +0x2
jnl 0x1465
mov bx,[bp-0x6]
8B 16 68 04
mov dx,[0x468]
call 0x19da
mov [bp-0x6],bx
jmp short 0x1465
83 7E FA 02
cmp word [bp-0x6],byte +0x2
mov bx,0x2
8B 16 68 04
mov dx,[0x468]
call 0x19da
cmp bx,byte +0x3
jnz 0x1493
inc word [bp-0x12]
jmp 0x1009
mov bx,0xffff
; DCF settings (LSB)
14AD: db 0x3f,0x3f,0x3f,0x3f
db 0x5f,0x5f,0x5f,0x5f
db 0x7f,0x7f,0x7f,0x7f
db 0x9f,0x9f,0x9f,0x9f
; DCF settings (MSB)
14BD: db 0x0f,0x0d,0x0b,0x00
db 0x0f,0x0d,0x0b,0x00
db 0x0f,0x0d,0x0b,0x00
db 0x0f,0x0d,0x0b,0x00
; function 14
C8 0C 00 01
enter 0xc,0x1
8D 3E 20 54
lea di,[0x5420]
mov cx,0x8
mov al,[di]
cmp [bp+0x8],al
jnz 0x1508
mov al,[bp+0x4]
shl al,0x4
or al,[bp+0x6]
cmp al,[di+0x1]
jnz 0x1508
6B 46 06 18
imul ax,[bp+0x6],byte +0x18
80 BF A2 52 40
cmp byte [bx+0x52a2],0x40
jnl 0x1500
call 0x1512
jmp 0x1504
80 4D 0F 80
or byte [di+0xf],0x80
80 65 0F BF
and byte [di+0xf],0xbf
add di,byte +0x3a
loop 0x14d8
mov bx,0xffff
; function 14.1
mov si,[di+0xa]
mov al,[si+0x13]
80 65 0F C0
and byte [di+0xf],0xc0
or [di+0xf],al
mov bl,[si+0x79]
mov al,[di+0x15]
cmp al,[si+0x78]
mov [di+0x15],bl
mov [di+0x14],bl
8A 9C 8B 00
mov bl,[si+0x8b]
mov al,[di+0x29]
3A 84 8A 00
cmp al,[si+0x8a]
mov [di+0x29],bl
mov [di+0x28],bl
; function 15
C8 0C 00 01
enter 0xc,0x1
6B 76 06 18
imul si,[bp+0x6],byte +0x18
mov al,[bp+0x8]
mov bl,[bp+0xa]
8A 26 EC 0D
mov ah,[0xdec]
80 7E 04 01
cmp byte [bp+0x4],0x1
mov ah,0xff
cmp al,0x1
jnz 0x15c6
test ah,0x8
jnz 0x156a
jmp 0x16c2
mov al,[0x528b]
88 A4 A3 52
mov [si+0x52a3],ah
mov al,[0x528c]
88 A4 A4 52
mov [si+0x52a4],ah
mov al,[0x528d]
88 A4 A5 52
mov [si+0x52a5],ah
mov al,[0x528e]
88 A4 A6 52
mov [si+0x52a6],ah
mov al,[0x528f]
2A 26 8F 52
sub ah,[0x528f]
88 A4 A7 52
mov [si+0x52a7],ah
mov al,[0x5290]
2A 26 90 52
sub ah,[0x5290]
88 A4 A8 52
mov [si+0x52a8],ah
mov al,[0x5291]
2A 26 91 52
sub ah,[0x5291]
88 A4 A9 52
mov [si+0x52a9],ah
jmp 0x16c2
cmp al,0x4
jnz 0x162e
test ah,0x2
jnz 0x15d2
jmp 0x16c2
mov al,[0x5292]
88 A4 AA 52
mov [si+0x52aa],ah
mov al,[0x5293]
88 A4 AB 52
mov [si+0x52ab],ah
mov al,[0x5294]
88 A4 AC 52
mov [si+0x52ac],ah
mov al,[0x5295]
88 A4 AD 52
mov [si+0x52ad],ah
mov al,[0x5296]
2A 26 96 52
sub ah,[0x5296]
88 A4 AE 52
mov [si+0x52ae],ah
mov al,[0x5297]
2A 26 97 52
sub ah,[0x5297]
88 A4 AF 52
mov [si+0x52af],ah
mov al,[0x5298]
2A 26 98 52
sub ah,[0x5298]
88 A4 B0 52
mov [si+0x52b0],ah
jmp 0x16c2
cmp al,0x40
jnz 0x1672
test ah,0x80
jnz 0x163a
jmp 0x16c2
88 9C A2 52
mov [si+0x52a2],bl
cmp bl,0x40
jnl 0x166f
8D 3E 20 54
lea di,[0x5420]
mov cx,0x8
cmp byte [di],0xff
3E 8A 46 06
mov al,[ds:bp+0x6]
mov ah,[di+0x1]
and ah,0xf
jnz 0x166a
F6 45 0F 80
test byte [di+0xf],0x80
call 0x1512
80 65 0F 7F
and byte [di+0xf],0x7f
add di,byte +0x3a
loop 0x164a
jmp 0x16c2
cmp al,0x7
jnz 0x1699
test ah,0x20
jnz 0x167d
jmp short 0x16c2
80 7E 04 00
cmp byte [bp+0x4],0x0
jnz 0x1693
mov cx,0x10
88 9C A1 52
mov [si+0x52a1],bl
add si,byte +0x18
loop 0x1688
jmp short 0x16c2
88 9C A1 52
mov [si+0x52a1],bl
jmp short 0x16c2
cmp al,0x7a
jnz 0x16c2
mov al,[bp+0x6]
3A 06 EB 0D
cmp al,[0xdeb]
jnz 0x16c2
cmp bl,0x7f
cmp bl,0x0
jnz 0x16c2
80 0E 2F 04 02
or byte [0x42f],0x2
push byte +0x0
call 0x1828
; all_noteoff()
jmp short 0x16c2
80 26 2F 04 FD
and byte [0x42f],0xfd
mov bx,0xffff
; function 16
C8 02 00 01
enter 0x2,0x1
80 3E ED 0D FF
cmp byte [0xded],0xff
mov al,[0xdeb]
cmp [bp+0x6],al
jnz 0x16e0
mov al,[bp+0x8]
mov [0xded],al
mov bx,0xffff
; function 17
C8 02 00 01
enter 0x2,0x1
F6 06 EC 0D 04
test byte [0xdec],0x4
jnz 0x16f6
80 7E 04 01
cmp byte [bp+0x4],0x1
6B 46 06 18
imul ax,[bp+0x6],byte +0x18
mov bl,[bp+0x8]
mov al,[0x5299]
88 A4 B1 52
mov [si+0x52b1],ah
mov al,[0x529a]
88 A4 B2 52
mov [si+0x52b2],ah
mov al,[0x529b]
88 A4 B3 52
mov [si+0x52b3],ah
mov al,[0x529c]
88 A4 B4 52
mov [si+0x52b4],ah
mov al,[0x529d]
2A 26 9D 52
sub ah,[0x529d]
88 A4 B5 52
mov [si+0x52b5],ah
mov al,[0x529e]
2A 26 9E 52
sub ah,[0x529e]
88 A4 B6 52
mov [si+0x52b6],ah
mov al,[0x529f]
2A 26 9F 52
sub ah,[0x529f]
88 A4 B7 52
mov [si+0x52b7],ah
mov bx,0xffff
; function 18
C8 02 00 01
enter 0x2,0x1
F6 06 EC 0D 10
test byte [0xdec],0x10
jnz 0x176e
80 7E 04 01
cmp byte [bp+0x4],0x1
6B 46 06 18
imul ax,[bp+0x6],byte +0x18
mov ah,[bp+0xa]
mov al,[bp+0x8]
shl al,0x2
sub al,0x80
88 84 A0 52
mov [si+0x52a0],al
mov bx,0xffff
; function 19: check MIDI mask status
F6 06 EC 0D 80
test byte [0xdec],0x80
jnz 0x1794
; function 19.0:
C8 02 00 01
enter 0x2,0x1
80 7E 06 00
cmp byte [bp+0x6],0x0
jnz 0x17fa
mov al,[bp+0x8]
mov al,[bp+0xa]
cmp cx,byte -0x2
cmp cx,byte +0xa
2E FF A7 BB 17
jmp near [cs:bx+0x17bb]
; jump vectors
; function 19.1/2/3/5
2E 3A 87 01 18
cmp al,[cs:bx+0x1801]
jnz 0x1806
jmp short 0x17fd
; function 19.4
8A 26 EB 0D
mov ah,[0xdeb] ; MIDI send chn
or ah,0x70
jnz 0x17fa
jmp short 0x17fd
; function 19.6
cmp al,0x18
jnc 0x17fa
mov [0x46c],al ; set SysEx counter
jmp short 0x17fd
; function 19.7
8A 1E 6C 04
mov bl,[0x46c] ; get SysEx counter
88 87 88 52
mov [bx+0x5288],al
mov cx,0xfffe
db 0x44,0x02,0x00,0x70,0x78
add al,0x75
cmp al,0x7f
jnz 0x17fa
mov cx,0x6
jmp short 0x17fd
; function 19.8
mov [0x522],al
jmp short 0x17fd
; function 19.9
mov [0x523],al
jmp short 0x17fd
; function 19.10
mov [0x520],al
jmp short 0x17fd
mov [0x521],al
jmp short 0x17fa
; function 20: all_noteoff(i)
; i: 0=key, 1=MIDI, 2=seq
C8 02 00 01
enter 0x2,0x1
8D 36 20 54
lea si,[0x5420]
C7 46 FC 00 00
mov word [bp-0x4],0x0
83 7E FC 08
cmp word [bp-0x4],byte +0x8
jnl 0x1855
mov al,[si+0x1]
shr al,0x4
cmp [bp+0x4],al
jnz 0x184d
push word [bp-0x4]
call 0x22ee
; 42: gene_off()
inc word [bp-0x4]
add si,byte +0x3a
jmp short 0x1835
; function 21: all_midichan(chan)
; change MIDI channel
C8 02 00 01
enter 0x2,0x1
in al,0xe2
; disable kbd & timer irq
or al,0x41
out 0xe2,al
8A A7 02 04
mov ah,[bx+0x402]
test ah,0x80
and ah,0x7f
mov al,0x71
push byte +0x0
push word 0x90
call 0x2807
add sp,byte +0x6
cmp bx,byte +0x8
jnz 0x1864
call 0x18f7
; control_off()
mov al,[bp+0x4]
3A 06 EB 0D
cmp al,[0xdeb]
mov [0xdeb],al
8A A7 02 04
mov ah,[bx+0x402]
test ah,0x80
and ah,0x7f
mov al,0x71
push byte +0x40
push word 0x90
call 0x2807
add sp,byte +0x6
cmp bx,byte +0x8
jnz 0x189b
call 0x18c9
; control_on()
; restore IRQ mask
out 0xe2,al
; function 22: control_on()
; send controllers (bender, AT, mod. wheel, foot volume & sus. switch)
in al,0xe2
; disable kbd & timer IRQ
or al,0x41
out 0xe2,al
F6 06 2F 04 01
test byte [0x42f],0x1
push byte +0x7f
push byte +0x40
push word 0xb0
call 0x2807
add sp,byte +0x6
mov ax,0xffff
mov [0x43a],ax
mov [0x43c],ax
mov [0x43e],ax
mov [0x442],ax
; restore IRQ mask
out 0xe2,al
; function 23: control_off()
; send default values for controllers (64,0,0,127,0)
in al,0xe2
; disable kbd & timer IRQ
or al,0x41
out 0xe2,al
8D 1E 3C 19
lea bx,[0x193c]
F6 06 2F 04 01
test byte [0x42f],0x1
push word [cs:bx]
2E FF 77 02
push word [cs:bx+0x2]
2E FF 77 04
push word [cs:bx+0x4]
call 0x2807
add sp,byte +0x6
add bx,byte +0x6
2E 83 3F FF
cmp word [cs:bx],byte -0x1
jnz 0x1909
8D 3E A0 52
lea di,[0x52a0]
mov cx,0x180
C6 06 3F 04 FF
mov byte [0x43f],0xff
; restore IRQ mask
out 0xe2,al
; controller defaults
dw 0x0,0x00b0
; sustain to off
dw 0x1,0x00b0
; mod wheel to 0
dw 0x007f,0xb0
; volume to 127
dw 0x0,0x00e0
; pitch bend to 64
dw 0x00ff,0xd0
; program to 0
; jump to 1968+bx*2
81 E3 03 00
and bx,0x3
2E FF A7 68 19
jmp near [cs:bx+0x1968]
; jump vectors
mov dh,0x40
81 7C 10 1D 10
cmp word [si+0x10],0x101d
jnz 0x1981
mov cx,[si+0xe]
mov bx,[si+0xc]
jmp short 0x1987
mov cx,[si+0xa]
mov bx,[si+0x8]
jmp 0x19d0
mov dh,0x41
mov bx,[si+0x16]
81 E3 1F 00
and bx,0x1f
mov ax,[si+0x14]
jmp 0x19d0
mov dh,0x43
mov bx,[si+0x36]
81 E3 1F 00
and bx,0x1f
mov ax,[si+0x34]
mov cx,[si+0x16]
81 E1 1F 00
and cx,0x1f
sub ax,[si+0x14]
mov cx,[si+0x10]
F7 C1 08 00
test cx,0x8
jmp 0x19d0
mov dh,0x45
mov ax,[si+0x54]
call 0x1a30
; 24: gaa_write()
; jump to 19e6+bx*2
81 E3 03 00
and bx,0x3
2E FF A7 E6 19
jmp near [cs:bx+0x19e6]
; jump vectors
mov dh,0x40
81 7C 10 1D 10
cmp word [si+0x10],0x101d
mov cx,[si+0xe]
mov bx,[si+0xc]
jmp short 0x1a05
mov cx,[si+0xa]
mov bx,[si+0x8]
jmp 0x1a26
mov dh,0x41
mov cx,[si+0x36]
81 E1 1F 00
and cx,0x1f
mov bx,[si+0x34]
jmp 0x1a26
mov dh,0x42
mov bx,[si+0x10]
83 7C 54 00
cmp word [si+0x54],byte +0x0
jnz 0x1a26
81 E3 BF 00
and bx,0xbf
call 0x1a5b
; 25: gab_write()
; function 24: gaa_write(si,bx,cx,dx)
; write GAA parameters
in al,0xe2
; disable PCM & timer IRQ
out 0xe2,al
in al,0x1a
; check for GAA ready
and al,0x1
; feed GAA
out 0x0,ax
out 0x2,ax
out 0x4,ax
out 0x6,ax
jmp short 0x1a55
; restore IRQ mask
out 0xe2,al
; function 25: gab_write(bx,cx,dx)
; write GAB parameters
in al,0xe2
; disable PCM & timer IRQ
out 0xe2,al
in al,0x1a
; check for GAB ready
and al,0x2
; feed GAB
out 0x8,ax
out 0xa,ax
out 0xe,ax
jmp short 0x1a79
; restore IRQ mask
out 0xe2,al
; function 26: v=ngetc()
; get last MIDI note & velocity
mov ax,[0x466] ; get note/velocity
cmp ax,0xffff
jnz 0x1a8c
mov bx,0xffff ; no change
jmp 0x1a94
; return value &
C7 06 66 04 FF FF
mov word [0x466],0xffff ; set no change
; function 27
mov dx,0x1
mov al,[0x50c] ; get source1 voice
69 C0 C0 00
imul ax,ax,0xc0 ; get pointer to
8D 36 88 22
lea si,[0x2288] ;
voice data of
8D 3E 20 54
lea di,[0x5420]
83 3E FE 0D FC
cmp word [0xdfe],byte -0x4
mov al,[0x510] ; get source 1 detune
add ax,0x2400
mov [di+0x8],ax
test bx,bx
mov al,[bp+0x8]
mov [di],al
mov al,[bp+0x4]
shl al,0x4
or al,[bp+0x6]
mov [di+0x1],al
C6 45 14 FF
mov byte [di+0x14],0xff
mov [di+0xa],si
mov [di+0x6],ax
mov al,0x0
out 0xa0,al
out 0xa2,al
mov al,0x9f
out 0xb0,al
out 0xb2,al
80 7D 14 FF
cmp byte [di+0x14],0xff
C7 06 1C 04 DF 00
mov word [0x41c],0xdf
C7 06 1E 04 DF 00
mov word [0x41e],0xdf
mov ax,[di+0x8]
call 0x1ef8
83 3E FE 0D FD
cmp word [0xdfe],byte -0x3
83 3E FE 0D FE
cmp word [0xdfe],byte -0x2
mov al,0xff
mov bl,0x0
jmp 0x1b93
mov al,[0x50e]
8A 1E 0F 05
mov bl,[0x50f]
jmp 0x1b93
mov ax,[0x516]
sub ax,[si]
8B 16 18 05
mov dx,[0x518]
sbb dx,[si+0x2]
mov bx,0x5d
8A 8C B1 00
mov cl,[si+0xb1]
cmp ax,[di+0x6]
mov al,[0x50e]
mov bl,0x0
jmp 0x1b93
mov ax,[0x51a]
sub ax,[si]
8B 16 1C 05
mov dx,[0x51c]
sbb dx,[si+0x2]
mov bx,0x5d
8A 8C B1 00
mov cl,[si+0xb1]
cmp bx,[di+0x6]
jnc 0x1b72
mov al,0x0
8A 1E 0F 05
mov bl,[0x50f]
jmp 0x1b93
mov dx,[di+0x6]
mov al,[0x50f]
mov al,[0x50e]
8D 0E A0 52
lea cx,[0x52a0]
mov dx,0x1
call 0x1c8c
8D 0E A0 52
lea cx,[0x52a0]
mov dx,0x102
call 0x1c8c
83 7D 06 00
cmp word [di+0x6],byte +0x0
jnz 0x1bb4
mov dl,0x1
call 0x1c37
inc word [di+0x6]
jnz 0x1bbc
dec word [di+0x6]
83 3E FE 0D FC
cmp word [0xdfe],byte -0x4
jnz 0x1bc4
mov ax,[0x512]
sub ax,[si]
8B 16 14 05
mov dx,[0x514]
sbb dx,[si+0x2]
mov bx,0x5d
8A 8C B1 00
mov cl,[si+0xb1]
cmp ax,[di+0x6]
mov dx,0x102
mov al,[0x50d]
69 C0 C0 00
imul ax,ax,0xc0
8D 36 88 22
lea si,[0x2288]
8D 3E 20 54
lea di,[0x5420]
add di,byte +0x3a
mov al,[0x511]
add ax,0x2400
mov [di+0x8],ax
test bx,bx
mov al,[bx]
mov [di],al
mov al,[bx+0x1]
mov [di+0x1],al
mov [di+0xa],si
mov [di+0x6],ax
mov ax,[di+0x8]
call 0x1ef8
mov dx,0x102
call 0x1c37
mov ax,[di+0x8]
call 0x1ef8
83 7C 10 13
cmp word [si+0x10],byte +0x13
mov dh,0x40
83 3E FE 0D FC
cmp word [0xdfe],byte -0x4
jnz 0x1c4e
mov cx,[si+0x6]
mov bx,[si+0x4]
jmp short 0x1c53
mov cx,[si+0x2]
mov bx,[si]
call 0x1a30
; 24: gaa_write()
mov dh,0x40
83 3E FE 0D FC
cmp word [0xdfe],byte -0x4
mov cx,[si+0x6]
mov bx,[si+0x4]
jmp short 0x1c70
mov cx,[si+0x2]
mov bx,[si]
call 0x1a5b
; 25: gab_write()
mov dh,0x42
mov bx,0x15
83 3E FE 0D FC
cmp word [0xdfe],byte -0x4
jnz 0x1c86
mov bx,0x1d
call 0x1a5b
; 25: gab_write()
mov bl,0xff
81 E3 FE 00
and bx,0xfe
mov ax,0x7fff
2E 2B 87 90 04
sub ax,[cs:bx+0x490]
call 0x2135
83 7D 06 00
cmp word [di+0x6],byte +0x0
83 3E FE 0D FD
cmp word [0xdfe],byte -0x3
jnz 0x1cd7
8B 0E 1A 05
mov cx,[0x51a]
2B 0E 16 05
sub cx,[0x516]
8B 16 1C 05
mov dx,[0x51c]
1B 16 18 05
sbb dx,[0x518]
jnz 0x1cd7
81 F9 00 04
cmp cx,0x400
89 87 0C 04
mov [bx+0x40c],ax
81 C2 90 00
add dx,0x90
xchg al,ah
out dx,al ; DCF MSB
sub dx,byte +0x10
xchg al,ah
out dx,al ; DCF LSB
C8 22 00 01
enter 0x22,0x1
83 3E FE 0D FF
cmp word [0xdfe],byte -0x1
jnl 0x1ceb
call 0x1a95
jmp 0x1dc6
C7 46 E0 00 00
mov word [bp-0x20],0x0
8D 3E 20 54
lea di,[0x5420]
C7 46 EA 7F 00
mov word [bp-0x16],0x7f
mov cx,0x8
mov dx,0x1
mov al,[di]
cmp al,0xff
mov ax,[di+0x6]
jnz 0x1d0e
mov ax,0xfff0
mov [di+0x6],ax
and al,0x7
jnz 0x1d49
mov al,[di+0xf]
and al,0x3f
cmp al,[di+0xe]
jng 0x1d49
mov ax,[di+0x10]
test ax,ax
mov [di+0x10],ax
mov si,[di+0xa]
mov bl,[di+0xe]
cmp ax,[bx+si+0x64]
C7 46 EA 00 00
mov word [bp-0x16],0x0
C7 45 10 FE FF
mov word [di+0x10],0xfffe
inc byte [di+0xe]
or [bp-0x20],dx
add di,byte +0x3a
loop 0x1cff
8D 3E 20 54
lea di,[0x5420]
C7 46 E4 01 00
mov word [bp-0x1c],0x1
80 7E E5 08
cmp byte [bp-0x1b],0x8
jnl 0x1db2
mov al,[di]
cmp al,0xff
mov si,[di+0xa]
8D 1E A0 52
lea bx,[0x52a0]
mov al,0x18
mov ah,[di+0x1]
and ah,0xf
mov [bp-0xc],bx
83 7E EA 02
cmp word [bp-0x16],byte +0x2
jnl 0x1d93
in al,0x1a ; check GAB ready
and al,0x2
mov bx,[bp-0x16]
mov dx,[bp-0x20]
call 0x22d1
mov [bp-0x16],bx
mov bx,[di+0x6]
81 E3 07 00
and bx,0x7
mov dx,[bp-0x1c]
mov cx,[bp-0xc]
2E FF 97 C8 1D
call near [cs:bx+0x1dc8]
shl byte [bp-0x1c],1
inc byte [bp-0x1b]
add di,byte +0x3a
jmp short 0x1d59
83 7E EA 02
cmp word [bp-0x16],byte +0x2
jnl 0x1dc6
mov bx,[bp-0x16]
mov dx,[bp-0x20]
call 0x22d1
mov [bp-0x16],bx
jmp short 0x1db2
; from jumptable 1dc8
8A 9C A0 00
mov bl,[si+0xa0]
2E 8B 87 90 04
mov ax,[cs:bx+0x490]
add [di+0x2],ax
jnc 0x1e02
mov ax,0x17
F7 2E 6E 04
imul word [0x46e]
add ax,0x929
mov bx,0x11d7
89 16 6E 04
mov [0x46e],dx
mov ah,[di+0x3]
8A 9C 9E 00
mov bl,[si+0x9e]
and bl,0x7
2E FF A7 17 1E
jmp near [cs:bx+0x1e17]
xor ax,0x381e
cmp ax,0x501e
2E 8B 87 92 02
mov ax,[cs:bx+0x292]
jmp 0x1e64
jmp 0x1e64
jmp 0x1e64
jns 0x1e46
jmp 0x1e64
jmp 0x1e64
cmp ah,0x0
jnl 0x1e5b
mov ax,0x8000
jmp 0x1e64
mov ax,0x7fff
jmp 0x1e64
mov ax,[0x46e]
mov [di+0xc],ax
mov ax,[di+0x6]
80 7D 04 00
cmp byte [di+0x4],0x0
jnz 0x1e76
3B 84 9C 00
cmp ax,[si+0x9c]
jna 0x1e88
and al,0xf
jnz 0x1e88
mov al,[di+0x4]
02 84 9F 00
add al,[si+0x9f]
jno 0x1e85
mov al,0x7f
mov [di+0x4],al
mov ax,[si+0x10]
and ax,0xf000
cmp ax,0x2000
jnz 0x1e96
jmp 0x1f80
mov ah,[di+0x4]
8A 84 A1 00
mov al,[si+0xa1]
add ax,0x80
mov al,[bx+0x3]
mov al,[bx+0xa]
mov al,[bx+0x11]
cmp dx,byte +0x7f
jng 0x1ec4
mov dl,0x7f
mov ax,[di+0xc]
sar dx,0x3
03 16 FA 0D
add dx,[0xdfa]
add dx,[di+0x8]
add dx,[si+0x74]
mov al,[bx]
cmp al,0x80
jnz 0x1ee3
8A 3E 88 52
mov bh,[0x5288]
mov bx,0x7f
sar ax,0x3
83 7C 10 13
cmp word [si+0x10],byte +0x13
jnz 0x1f01
add ax,0x5d9
test ax,ax
jns 0x1f09
jmp short 0x1f11
cmp ax,0x47ff
mov ax,0x47ff
2E 8B 87 00 00
mov ax,[cs:bx+0x0]
2E 8B 97 92 00
mov dx,[cs:bx+0x92]
add ax,0x4000
adc dx,byte +0x0
8A 8C B1 00
mov cl,[si+0xb1]
mov dh,0x42
call 0x1a30
; 24: gaa_write()
mov bl,[di+0xe]
83 7D 10 FE
cmp word [di+0x10],byte -0x2
jnz 0x1f56
mov dx,[bx+si+0x54]
cmp ax,0xfff
mov ax,0xfff
mov dh,0x45
call 0x1a30
; 24: gaa_write()
mov al,[bx]
cmp al,[di+0x8]
add al,0x80
shl ax,0x4
mov cx,[si+0xa]
mov bx,[si+0x8]
adc cx,byte +0x0
mov dh,0x40
call 0x1a5b
; 25: gab_write()
mov ax,0x8080
add ah,[bx]
add al,[di+0x8]
jnc 0x1fb2
shl ax,0x8
mov dh,0x42
call 0x1a30
; 24: gaa_write()
mov al,[bx]
cmp al,[di+0x8]
mov [di+0x8],al
mov bx,0x1d
mov bx,0x8
mov dh,0x43
call 0x1a5b
; 25: gab_write()
mov bx,0x15
mov dh,0x42
call 0x1a5b
; 25: gab_write()
; from jumptable 1dc8
83 7D 10 FF
cmp word [di+0x10],byte -0x1
in al,0xe2
; enable PCM loop IRQ
out 0xe2,al
mov dh,0x80
call 0x1a30
; 24: gaa_write()
in al,0x1a
; wait for GAA ready
and al,0x1
; get GAA value
81 E2 1F 00
and dx,0x1f
; get GAA value
; restore IRQ mask
out 0xe2,al
mov bl,[di+0xe]
shl bx,0x2
mov ax,[bx+si+0x16]
and ax,0x1f
cmp cx,[bx+si+0x14]
F6 44 10 08
test byte [si+0x10],0x8
jnz 0x2033
jmp short 0x2038
F6 44 10 08
test byte [si+0x10],0x8
jnz 0x2038
C7 45 10 00 00
mov word [di+0x10],0x0
; from jumptable 1dc8
mov bl,[di+0x15]
cmp [di+0x14],bl
mov al,[bx+di+0x16]
test al,0x80
jnz 0x2064
2E 8B 87 90 04
mov ax,[cs:bx+0x490]
add ax,[di+0x12]
cmp [bx+di+0x1e],ah
jna 0x207d
jmp 0x2085
and al,0x7f
2E 8B 87 90 04
mov ax,[cs:bx+0x490]
add ax,[di+0x12]
jnc 0x207d
cmp [bx+di+0x1e],ah
inc byte [di+0x15]
mov ah,[bx+di+0x1e]
mov [di+0x12],ax
mov al,[bx+di+0x16]
and al,0x7f
cmp al,0x7f
jnz 0x20a8
call 0x20bd
89 87 0C 04
mov [bx+0x40c],ax
81 C2 90 00
add dx,0x90
xchg al,ah
out dx,al ; DCF lsb
sub dx,byte +0x10
xchg al,ah
out dx,al ; DCF msb
mov bl,[di+0x15]
cmp [si+0x79],bl
jnl 0x20bd
C7 87 1C 04 DF 00
mov word [bx+0x41c],0xdf
mov ah,[di+0x4]
8A 84 A2 00
mov al,[si+0xa2]
add ax,0x80
mov al,[bx+0x4]
mov al,[bx+0xb]
mov al,[bx+0x12]
cmp dx,byte +0x7f
jng 0x20ec
mov dx,0x7f
mov ax,[di+0xc]
mov ah,[bx+0x7]
sar ax,0x2
mov ah,[bx+0xe]
sar ax,0x2
mov ah,[bx+0x15]
sar ax,0x2
jno 0x2120
mov dx,0x7fff
mov ax,[di+0x12]
jno 0x2130
mov ax,0x7fff
jmp short 0x2132
jns 0x2134
mov bl,[bx+0x1]
add bl,0x7f
2E 2B 87 90 04
sub ax,[cs:bx+0x490]
jnc 0x214c
cmp bl,0x9f
jna 0x2163
sub bl,0xa0
2E 8B 87 90 05
mov ax,[cs:bx+0x590]
jmp short 0x2168
add ax,0xe0
89 87 1C 04
mov [bx+0x41c],ax
; from jumptable 1dc8
mov bl,[di+0x29]
cmp [di+0x28],bl
mov al,[bx+di+0x2a]
test al,0x80
jnz 0x219e
2E 8B 87 90 04
mov ax,[cs:bx+0x490]
add ax,[di+0x26]
cmp [bx+di+0x32],ah
jna 0x21b7
jmp 0x21bf
and al,0x7f
2E 8B 87 90 04
mov ax,[cs:bx+0x490]
add ax,[di+0x26]
jnc 0x21b7
cmp [bx+di+0x32],ah
inc byte [di+0x29]
mov ah,[bx+di+0x32]
mov [di+0x26],ax
mov ah,[di+0x4]
8A 84 A3 00
mov al,[si+0xa3]
add ax,0x80
mov al,[bx+0x5]
mov al,[bx+0xc]
mov al,[bx+0x13]
cmp dx,byte +0x7f
jng 0x21f1
mov dx,0x7f
mov ax,[di+0xc]
mov ah,[bx+0x8]
sar ax,0x2
mov ah,[bx+0xf]
sar ax,0x2
mov ah,[bx+0x16]
sar ax,0x2
jno 0x2225
mov dx,0x7fff
mov ah,[si+0x76]
jno 0x2236
mov dx,0x7fff
mov dx,0x8001
mov ax,[di+0x26]
jno 0x2246
mov ax,0x7fff
jmp short 0x2248
jns 0x224a
add al,0x20
81 C2 B0 00
add dx,0xb0 ; DCQ?
; from jumptable 1dc8
mov ah,[di+0x4]
8A 84 A4 00
mov al,[si+0xa4]
add ax,0x80
mov al,[bx+0x6]
mov al,[bx+0xd]
mov al,[bx+0x14]
cmp cx,byte +0x7f
jng 0x2288
mov cl,0x7f
mov al,[di+0xd]
mov al,[bx+0x9]
mov al,[bx+0x10]
mov al,[bx+0x17]
mov al,[si+0x77]
mov al,[di+0x5]
test ax,ax
jns 0x22ba
jmp short 0x22c2
cmp ax,0x7f
mov ax,0x7f
shr al,0x3
81 C2 A0 00
add dx,0xa0 ; DCA?
cmp bx,byte +0x1
mov dh,0x44
mov bx,0x1
jmp 0x22e4
mov dh,0x42
mov bx,0x220
call 0x1a5b
; 25: gab_write()
; function 42: gene_off(g)
; initialize generator g
C8 02 00 01
enter 0x2,0x1
6B 46 04 3A
imul ax,[bp+0x4],byte +0x3a ; ptr to data
8D 1E 20 54
lea bx,[0x5420]
cmp byte [bx],0xff ; skip if generator
already off
mov byte [bx],0xff ; mark generator off
mov cl,[bp+0x4] ; create gene bits
mov dl,0x1
mov dh,0x42
mov bx,0x200
call 0x1a5b
; 25: gab_write()
mov bx,[bp+0x4] ; create DCF bits
81 C2 90 00
add dx,0x90
8B 8F 0C 04
mov cx,[bx+0x40c] ; olddca
sub dx,byte +0x10
add dx,byte +0x10
sub cx,byte +0x4
81 F9 7C 01
cmp cx,0x17c
jnl 0x2324
89 87 0C 04
mov [bx+0x40c],ax
89 87 1C 04
mov [bx+0x41c],ax
sub dx,byte +0x10
mov cl,[bp+0x4] ; create gene bits
mov dl,0x1
mov dh,0x41
call 0x1a5b
; 25: gab_write()
mov dh,0x43
mov bx,0xffff
call 0x1a5b
; 25: gab_write()
mov dh,0x44
call 0x1a30
; 24: gaa_write()
mov dh,0x46
mov dl,0xff
call 0x1a5b
; 25: gab_write()
20 1E 70 04
and [0x470],bl ; jump0
; function 43: gabint()
; initialize all generator channels (silence everything)
mov [0xdfe],ax ; &bnk[pbn]
mov [0xe00],ax ;
mov al,0x0
mov dx,0x80
; reset DCF/DCA/DCQ
add dx,byte +0x2
81 FA C0 00
cmp dx,0xc0
jnz 0x238d
mov dx,0x3801 ; stop recording
call 0x1a5b
; 25: gab_write()
mov dx,0x43ff
mov bx,0xffff
call 0x1a5b
; 25: gab_write()
8D 1E 20 54
lea bx,[0x5420] ; clear data
mov al,0xff
mov cx,0x8
mov [bx],al
add bx,byte +0x3a
loop 0x23b3
C6 06 70 04 00
mov byte [0x470],0x0 ; jump0
mov dx,0x46ff
mov bx,0x0
call 0x1a5b
; 25: gab_write()
mov dx,0x45ff
mov bx,0xffff
call 0x1a5b
; 25: gab_write()
in al,0x22
; disable NORM
and al,0x7f
out 0x22,al
mov dx,0x2001 ; set rate
mov bx,0x8
call 0x1a5b
; 25: gab_write()
; PCM interrupt
mov ax,0x0
C8 24 00 01
enter 0x24,0x1
mov dx,0x46ff
; read ISR
mov [bp-0x1c],ax ; store IRQ source
; clear IRQ flags
call 0x1a5b
; 25: gab_write()
8D 3E 20 54
lea di,[0x5420]
mov [bp-0x1a],ax ; init osc counter
mov [bp-0x1e],ax
mov dl,0x1
; init bit test
83 7E E6 08
cmp word [bp-0x1a],byte +0x8
jmp 0x24a0
test [bp-0x1c],dl ; check IRQ source
jnz 0x2423
jmp 0x2489
; IRQ source processing
mov si,[di+0xa]
mov bl,[di+0xe]
cmp bl,0x8
jnc 0x2494
shl bx,0x2
mov [bp-0x18],bx
mov ax,[bx+si+0x32]
test ah,0x80
or [bp-0x1e],dl
30 16 70 04
xor [0x470],dl ; jump0
test [bp-0x1e],dl
84 16 70 04
test [0x470],dl ; jump0
jmp 0x2463
mov dh,0x41
mov bx,[bp-0x18]
mov cx,[bx+si+0x36]
mov bx,[bx+si+0x34]
call 0x1a5b
; 25: gab_write()
test [bp-0x1e],dl
84 16 70 04
test [0x470],dl
jnz 0x2471
jmp 0x2489
mov dh,0x41
mov bx,[bp-0x18]
mov cx,[bx+si+0x16]
mov ax,[bx+si+0x14]
call 0x1a30
; 24: gaa_write()
inc word [bp-0x1a]
add di,byte +0x3a
jmp 0x2412
mov dh,0x43
mov bx,0x2
call 0x1a5b
; 25: gab_write()
jmp short 0x2489
8A 16 70 04
mov dl,[0x470]
and dl,[bp-0x1c]
mov dh,0x43
mov bx,0x20
call 0x1a5b
; 25: gab_write()
8D 3E 20 54
lea di,[0x5420]
C7 46 E6 00 00
mov word [bp-0x1a],0x0
mov dl,0x1
83 7E E6 08
cmp word [bp-0x1a],byte +0x8
jmp 0x255e
test [bp-0x1c],dl
jnz 0x24cf
jmp 0x2553
mov si,[di+0xa]
test [bp-0x1e],dl
84 16 70 04
test [0x470],dl
jnz 0x24e0
jmp 0x2511
mov dh,0x43
mov bl,[di+0xe]
shl bx,0x2
mov [bp-0x18],bx
mov ax,[bx+si+0x36]
and ax,0x1f
mov cx,[bx+si+0x34]
mov dx,[bx+si+0x16]
81 E2 1F 00
and dx,0x1f
sub cx,[bx+si+0x14]
call 0x1a30
; 24: gaa_write()
test [bp-0x1e],dl
84 16 70 04
test [0x470],dl
jmp 0x2549
C7 45 10 FF FF
mov word [di+0x10],0xffff
mov bx,[bp-0x18]
83 78 54 00
cmp word [bx+si+0x54],byte +0x0
mov dh,0x42
mov bx,0x1c0
call 0x1a5b
; 25: gab_write()
jmp 0x2553
mov dh,0x43
mov bx,0x40
call 0x1a5b
; 25: gab_write()
jmp 0x2553
mov dh,0x44
mov bx,0x0
call 0x1a5b
; 25: gab_write()
inc word [bp-0x1a]
add di,byte +0x3a
jmp 0x24be
mov al,0x20
out 0xe0,al
; function 45: rec_start(vn,pre)
; struct voicedata *vn, unsigned int pre
C8 10 00 01
enter 0x10,0x1 ; reserve 16 bytes
call 0x2380
; gabint()
call 0xde46
80 0E EC 0D 01
or byte [0xdec],0x1 ; MIDI mask |= 0x01
mov al,0xfe
; enable all IRQ but timer
out 0xe2,al
mov bx,[bp+0x8] ; unsigned int pre
mov si,[bp+0x4] ; *struct voicedata vn
add bx,[si]
adc cx,[si+0x2]
mov [bp-0x6],bx ; wavst offset
mov [bp-0x4],cx ;
mov dx,0x40ff ; gaa[6]=0x40ff
mov cx,0x1f
; gaa[4]=0x001f
; gaa[2]=0x0000
; gaa[0]=0x0000
call 0x1a30
; 24: gaa_write()
mov dx,0x4001 ; gaa[6]=0x4001
mov cx,[si+0x2] ; gaa[4]=wavst/l
mov bx,[si]
; gaa[2]=wavst/h
mov ax,0x0
; gaa[0]=0x0000
call 0x1a30
; 24: gaa_write()
mov dx,0x4002 ; gaa[6]=0x4002
mov cx,[bp-0x4] ; gaa[4]=wavstoff/l
mov bx,[bp-0x6] ; gaa[2]=wavstoff/h
mov ax,0x0
; gaa[0]=0x0000
call 0x1a30
; 24: gaa_write()
mov dx,0x4003 ; gab[6]=0x4003
mov cx,[si+0x6] ; gab[2]=waved/l
mov bx,[si+0x4] ; gab[0]=waved/h
call 0x1a5b
; 25: gab_write()
mov dx,0x4101 ; gaa[6]=0x4101
mov cx,0x0
mov bx,[si+0x2] ; gaa[2]=wavst/l
mov ax,[si]
; gaa[0]=wavst/h
call 0x1a30
; 24: gaa_write()
mov dx,0x4101 ; gab[6]=0x4101
mov cx,[bp-0x4] ; gab[2]
mov bx,[bp-0x6] ; gab[0]
call 0x1a5b
; 25: gab_write()
mov dx,0x4201 ; gab[6]=0x4201
mov bx,0x2
; gab[4]=0x0002
call 0x1a5b
; 25: gab_write()
mov dx,0x4202 ; gab[6]=0x4202
mov bx,0x4
; gab[4]=0x0004
call 0x1a5b
; 25: gab_write()
mov dx,0x4203 ; gaa[6]=0x4203
mov ax,0x2000 ; gaa[0]=rate
8A 0E D9 04
mov cl,[0x4d9] ;
call 0x1a30
; 24: gaa_write()
mov dx,0x2001 ; gab[6]=0x2001
mov bx,0x4
; gab[0]=rate+4
03 1E D9 04
add bx,[0x4d9]
call 0x1a5b
; 25: gab_write()
8A 26 D9 04
mov ah,[0x4d9] ; set input filter
cmp ah,0x0
according to
jnz 0x262f
sample rate
in al,0x22
; clear NORM
and al,0x7f
out 0x22,al
jmp short 0x264c
; 18kHz/9kHz sampling
in al,0x22
; set NORM
or al,0x80
out 0x22,al
mov al,0x7c
cmp ah,0x2
jnz 0x263e
mov al,0x6c
; DCQ stuff
out 0xbe,al
mov al,0x0
; DCA stuff
out 0xae,al
mov al,0x3
; DCF stuff
out 0x9e,al
mov al,0x1c
out 0x8e,al
; 36kHz sampling
; bx=rate+4, cx=crap
mov dx,0x2801 ; gab[6]=0x2801
call 0x1a5b
; 25: gab_write()
; function 46: reg_trig()
; terminate pre-recording & start main recording
mov dx,0x3001 ; gab[6]=0x3001
call 0x1a5b
; 25: gab_write()
; function 47: rec_stop()
; terminate main recording & arrange wave memory
C8 14 02 01
enter 0x214,0x1
mov dx,0x3801 ; gab[6]=0x3801
call 0x1a5b
; 25: gab_write()
mov dx,0x8001 ; gaa[6]=0x8001
call 0x1a30
; 24: gaa_write()
in al,0x1a
; wait for GAA ready
and al,0x1
; GAA reg #3
and ax,0x1f
mov [bp-0x4],ax
; GAA reg #2
mov [bp-0x6],ax
C7 86 F2 FD 00 00
mov word [bp+0xfdf2],0x0
mov ax,[bp+0x8] ; pre
89 86 F4 FD
mov [bp+0xfdf4],ax
mov bx,[bp-0x4]
mov cx,[bp-0x6]
mov si,[bp+0x4] ; struct voicedata *vn
sub cx,[si]
sbb bx,[si+0x2]
89 8E F6 FD
mov [bp+0xfdf6],cx
8B 86 F6 FD
mov ax,[bp+0xfdf6]
39 86 F4 FD
cmp [bp+0xfdf4],ax
jmp 0x27b0
8B 8E F4 FD
mov cx,[bp+0xfdf4]
81 F9 00 01
cmp cx,0x100
jnc 0x26cb
89 8E EE FD
mov [bp+0xfdee],cx
jmp 0x26d1
C7 86 EE FD 00 01
mov word [bp+0xfdee],0x100
FF B6 EE FD
push word [bp+0xfdee]
8D 9E FA FD
lea bx,[bp+0xfdfa]
8B 86 F6 FD
mov ax,[bp+0xfdf6]
mov si,[bp+0x4]
add ax,[si]
adc bx,[si+0x2]
call 0xe3a8
; wpoke(ad,data,len)
add sp,byte +0xa
8B 86 F6 FD
mov ax,[bp+0xfdf6]
89 86 F8 FD
mov [bp+0xfdf8],ax
8B 8E EE FD
mov cx,[bp+0xfdee]
89 8E F0 FD
mov [bp+0xfdf0],cx
8B 86 F8 FD
mov ax,[bp+0xfdf8]
39 86 F2 FD
cmp [bp+0xfdf2],ax
jnc 0x277f
8B 8E F2 FD
mov cx,[bp+0xfdf2]
03 8E EE FD
add cx,[bp+0xfdee]
jnc 0x272d
2B 86 F2 FD
sub ax,[bp+0xfdf2]
89 86 F0 FD
mov [bp+0xfdf0],ax
8B 8E F2 FD
mov cx,[bp+0xfdf2]
03 8E EE FD
add cx,[bp+0xfdee]
89 8E F8 FD
mov [bp+0xfdf8],cx
FF B6 F0 FD
push word [bp+0xfdf0]
8D 9E FA FE
lea bx,[bp+0xfefa]
8B 86 F8 FD
mov ax,[bp+0xfdf8]
2B 86 EE FD
sub ax,[bp+0xfdee]
mov si,[bp+0x4]
add ax,[si]
adc bx,[si+0x2]
call 0xe3a8
; wpoke(ad,data,len)
add sp,byte +0xa
FF B6 F0 FD
push word [bp+0xfdf0]
8D 9E FA FE
lea bx,[bp+0xfefa]
8B 86 F8 FD
mov ax,[bp+0xfdf8]
mov si,[bp+0x4]
add ax,[si]
adc bx,[si+0x2]
call 0xe3fa
; wput(ad,data)
add sp,byte +0xa
8B 86 EE FD
mov ax,[bp+0xfdee]
29 86 F8 FD
sub [bp+0xfdf8],ax
jmp short 0x2703
FF B6 EE FD
push word [bp+0xfdee]
8D 9E FA FD
lea bx,[bp+0xfdfa]
8B 86 F2 FD
mov ax,[bp+0xfdf2]
mov si,[bp+0x4]
add ax,[si]
adc bx,[si+0x2]
call 0xe3fa
; wput(ad,data)
add sp,byte +0xa
8B 86 EE FD
mov ax,[bp+0xfdee]
01 86 F2 FD
add [bp+0xfdf2],ax
01 86 F6 FD
add [bp+0xfdf6],ax
jmp 0x26ab
call 0x2380
; gabint()
mov ax,0xffff
mov [0xdfe],ax
mov [0xe00],ax
80 26 EC 0D FE
and byte [0xdec],0xfe
call 0xde7e
; cread(pcl,data)
; function 48: set_gain(g)
; set record gain for PCM recording
C8 00 00 01
enter 0x0,0x1
in al,0x22
; get GAIN mode
mov ah,[bp+0x4]
cmp ah,0x0
jnz 0x27d8
and al,0xbf
; clear GAIN (0db)
jmp short 0x27da
or al,0x40
; set GAIN (-20dB)
out 0x22,al
; function 49: gstat=now_stat(i)
; read generator status
C8 00 00 01
enter 0x0,0x1
in al,0xe2
; enable PCM & timer IRQ
out 0xe2,al
mov dh,0x82
mov cl,[bp+0x4] ; dl=generator#
mov dl,0x1
call 0x1a5b
; 25: gab_write()
in al,0x1a
; wait for GAB ready
and al,0x2
; get GAB status
; restore IRQ mask
out 0xe2,al
; function 50: dummy PCM function - never used
; function 51: mpx(d1,d2,d3)
: write key, midi and seq buffer
C8 02 00 01
enter 0x2,0x1
mov dh,[bp+0x4]
0A 36 EB 0D
or dh,[0xdeb]
mov dl,[bp+0x6]
and dl,0x7f
mov ch,[bp+0x8]
in al,0xe2 ; enable seq,kbd,midi,timer
or al,0xc3
out 0xe2,al
test bl,0x80
jnz 0x284e
8B 1E DC 0A
mov bx,[0xadc]
88 B7 DA 09
mov [bx+0x9da],dh
88 97 DA 09
mov [bx+0x9da],dl
cmp ch,0xff
88 AF DA 09
mov [bx+0x9da],ch
89 1E DC 0A
mov [0xadc],bx
in al,0xd6 ; disable TxRDY IRQ
and al,0x1
out 0xd6,al
; restore IRQ mask
or al,0xc1 ; enable seq,kbd,timer
out 0xe2,al
F6 06 2F 04 02
test byte [0x42f],0x2
jnz 0x28d1
8B 1E E0 0B
mov bx,[0xbe0]
88 B7 DE 0A
mov [bx+0xade],dh
88 97 DE 0A
mov [bx+0xade],dl
cmp ch,0xff
88 AF DE 0A
mov [bx+0xade],ch
89 1E E0 0B
mov [0xbe0],bx
80 3E EF 0D FF
cmp byte [0xdef],0xff
8B 1E E4 0C
mov bx,[0xce4]
mov ax,[0xdf0]
8B 36 F2 0D
mov si,[0xdf2]
2B 06 F4 0D
sub ax,[0xdf4]
1B 36 F6 0D
sbb si,[0xdf6]
jnz 0x289a
test ah,ah
89 87 E2 0B
mov [bx+0xbe2],ax
add bl,0x2
89 B7 E2 0B
mov [bx+0xbe2],si
add bl,0x2
89 87 E2 0B
mov [bx+0xbe2],ax
add bl,0x2
89 97 E2 0B
mov [bx+0xbe2],dx
add bl,0x2
89 1E E4 0C
mov [0xce4],bx
mov ax,[0xdf0]
mov [0xdf4],ax
mov ax,[0xdf2]
mov [0xdf6],ax
; restore IRQ mask
out 0xe2,al
cmp dl,0x7
jnz 0x287a
and bl,0xf0
cmp bl,0xb0
jnz 0x287a
jmp 0x285b
; function 52: data=keyin(kn)
; read data from ringbuffer
C8 04 00 01
enter 0x4,0x1
mov bx,[bp+0x4]
81 E3 03 00
and bx,0x3
2E FF A7 F5 28
jmp near [cs:bx+0x28f5]
sub [si],bl
sub [bp+di],di
sub [bp+si+0x29],bx
8B 1E DE 0B
mov bx,[0xbde]
39 1E E0 0B
cmp [0xbe0],bx
jnz 0x290d
mov bx,0xffff
jmp 0x295d
8A 87 DE 0A
mov al,[bx+0xade]
mov ah,0x0
FE 06 DE 0B
inc byte [0xbde]
jmp 0x295d
8B 1E D6 09
mov bx,[0x9d6]
39 1E D8 09
cmp [0x9d8],bx
jnz 0x292c
mov bx,0xffff
jmp 0x295d
8A 87 D6 08
mov al,[bx+0x8d6]
mov ah,0x0
FE 06 D6 09
inc byte [0x9d6]
jmp 0x295d
8B 1E E6 0D
mov bx,

我要回帖

更多关于 海尔BC/BD-318HD 的文章

 

随机推荐