{"id":27,"date":"2008-08-17T21:48:00","date_gmt":"2008-08-18T01:48:00","guid":{"rendered":"http:\/\/72.167.111.237\/wpmgreene\/?p=27"},"modified":"2008-08-17T21:48:00","modified_gmt":"2008-08-18T01:48:00","slug":"doshlp-routines","status":"publish","type":"post","link":"https:\/\/www.mgreene.org\/?p=27","title":{"rendered":"DosHlp Routines"},"content":{"rendered":"<p>In brief, which is all I can do, the os2ldr contains some hardware dependent routines call DosHlp routines.  Thanks to Pasha for pointing out that the ddk contains doshlp.inc which lists most of these (baseinc).<\/p>\n<p>The os2ldr contains a table of offsets that is passed to the kernel.  The following is a structure I put together from this information and what I saw from a disassembled os2ldr (SMP v104a).  The unknowns are not listed in the doshlp.inc.<\/p>\n<p>typedef struct _DOSHLPFUNCTIONS {<br \/>uint16_t    TableVersion;<br \/>uint32_t    DosHlpInit;<br \/>uint32_t    DosHlpReboot;<br \/>uint32_t    DosHlpNMI;<br \/>uint32_t    DosHlpSizeMem;<br \/>uint32_t    DosHlpConfig;<br \/>uint32_t    DosHlpBaseDDList;<br \/>uint32_t    DosHlpGetDriveParms;<br \/>uint32_t    DosHlpInitSystemDump;<br \/>uint32_t    DosHlpSystemDump;<br \/>uint32_t    DosHlpReadSectors;<br \/>uint32_t    DosHlpSerInit;<br \/>uint32_t    DosHlpSetBaudRate;<br \/>uint32_t    DosHlpSerIn;<br \/>uint32_t    DosHlpSerOut;<br \/>uint32_t    DosHlpToneOn;<br \/>uint32_t    DosHlpToneOff;<br \/>uint32_t    DosHlpGetMask;<br \/>uint32_t    DosHlpSetMask;<br \/>uint32_t    DosHlpSetRealMask;<br \/>uint32_t    DosHlpSetProtMask;<br \/>uint32_t    DosHlpSetDosEnv;<br \/>uint32_t    DosHlpCallInt10;<br \/>uint32_t    DosHlpProtGetMessage;<br \/>uint32_t    DosHlpRealGetMessage;<br \/>uint32_t    DosHlpRegisterTmrDD;<br \/>uint32_t    DosHlpTmr16QueryTime;<br \/>uint32_t    DosHlpEnableWatchdogNMI;<br \/>uint32_t    DosHlpDisableWatchdogNMI;<br \/>uint32_t    DosHlpInstallIRET;<br \/>uint32_t    DosHlpDiscard;<br \/>uint32_t    DosHlpInitInterrupts;<br \/>uint32_t    DosHlpSetIRQMask;<br \/>uint32_t    DosHlpSendEOI;<br \/>uint32_t    DosHlpTmr32QueryTime;<br \/>uint32_t    DosHlpTmrSetRollover;<br \/>uint32_t    DosHlpInitNPX;<br \/>uint32_t    DosHlpClrBusyNPX;<br \/>uint32_t    DosHlpAckIntNPX;<br \/>uint32_t    DosHlpWaitNPX;<br \/>uint32_t    DosHlpValidNPXSwitch;<br \/>uint32_t    DosHlpVNPXReset;<br \/>uint32_t    DosHlpVNPXClrBusy;<br \/>uint32_t    DosHlpWhyNMI;<br \/>uint32_t    DosHlpAckNMI;<br \/>uint32_t    DosHlpResetWatchdogNMI;<br \/>uint32_t    DosHlpDisableCache;<br \/>uint32_t    DosHlpFindParity;<br \/>uint32_t    DosHlpEnableCache;<br \/>uint32_t    DosHlpGetErrorLogPtr;<br \/>uint32_t    DosHlpWriteErrorLog;<br \/>uint32_t    DosHlpReadErrorLog;<br \/>uint32_t    DosHlpResetParity;<br \/>uint32_t    Unknown1;<br \/>uint32_t    Unknown2;<br \/>uint32_t    Unknown3;<br \/>uint32_t    Unknown4;<br \/>uint32_t    Unknown5;<br \/>uint32_t    Unknown6;<br \/>uint32_t    Unknown7;<br \/>uint32_t    Unknown8;<br \/>uint32_t    Unknown9;<br \/>uint32_t    Unknown10;<br \/>uint32_t    Unknown11;<br \/>} DOSHLPFUNCTIONS, *PDOSHLPFUNCTIONS;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In brief, which is all I can do, the os2ldr contains some hardware dependent routines call DosHlp routines. Thanks to Pasha for pointing out that the ddk contains doshlp.inc which [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_links_to":"","_links_to_target":""},"categories":[7,24,31],"tags":[],"class_list":["post-27","post","type-post","status-publish","format-standard","hentry","category-bootldr","category-os2","category-programming"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":32,"url":"https:\/\/www.mgreene.org\/?p=32","url_meta":{"origin":27,"position":0},"title":"My os2ldr project","author":"Mike","date":"June 29, 2008","format":false,"excerpt":"I have had sometime to play and committed the results to the SVN page:http:\/\/www.assembla.com\/wiki\/show\/os2ldr","rel":"","context":"In &quot;bootldr&quot;","block_context":{"text":"bootldr","link":"https:\/\/www.mgreene.org\/?cat=7"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":36,"url":"https:\/\/www.mgreene.org\/?p=36","url_meta":{"origin":27,"position":1},"title":"Entry into os2ldr","author":"Mike","date":"May 22, 2008","format":false,"excerpt":"Using Bochs I have the entry values into os2ldr when booted with BootJFS. One important note is that any of the filetable structure len fields will depend on the module version. Also, the 0x8800 segment might vary with machine types in the real world. It is calculated:uses INT 12 to\u2026","rel":"","context":"In &quot;bootldr&quot;","block_context":{"text":"bootldr","link":"https:\/\/www.mgreene.org\/?cat=7"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":37,"url":"https:\/\/www.mgreene.org\/?p=37","url_meta":{"origin":27,"position":2},"title":"ah&#8230; BootJFS and the process","author":"Mike","date":"May 18, 2008","format":false,"excerpt":"I\u2019m going to plagiarize from www.osfree.org and modify the text to fit my adventures with BootJFS.At the end of POST procedure the ROM BIOS initializes devices and gives control to int 19h interrupt routine, which loads 1st sector of the 1st boot device (a floopy, HDD or another). If the\u2026","rel":"","context":"In &quot;bootldr&quot;","block_context":{"text":"bootldr","link":"https:\/\/www.mgreene.org\/?cat=7"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":40,"url":"https:\/\/www.mgreene.org\/?p=40","url_meta":{"origin":27,"position":3},"title":"Easy gcc build environment","author":"Mike","date":"March 22, 2008","format":false,"excerpt":"Open Office for eCS-OS\/2 2.4 Beta1 is available (news post) and I installed it on my old SMP PIII box. Seems to work well! I guess the big milestone was just getting it going in the previous version.Also, Pasha has his updated os2ldr on hobbes (here). No chance to try\u2026","rel":"","context":"In &quot;OS\/2&quot;","block_context":{"text":"OS\/2","link":"https:\/\/www.mgreene.org\/?cat=24"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":859,"url":"https:\/\/www.mgreene.org\/?p=859","url_meta":{"origin":27,"position":4},"title":"New System76 Darter Pro 10 with Gentoo","author":"Mike","date":"December 28, 2024","format":false,"excerpt":"I decided to get a System76 Darter Pro 10. It was to replace my Thinkbook 14s which was over 5 years old. The Thinkbook had been a replacement for an IdeaPad Y470p purchased early in 2012. Before the IdeaPad and Thinkbook, there were Thinkpads of various types. I had a\u2026","rel":"","context":"In &quot;Gentoo&quot;","block_context":{"text":"Gentoo","link":"https:\/\/www.mgreene.org\/?cat=12"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.mgreene.org\/wp-content\/uploads\/2024\/12\/system76_DP_spec.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.mgreene.org\/wp-content\/uploads\/2024\/12\/system76_DP_spec.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.mgreene.org\/wp-content\/uploads\/2024\/12\/system76_DP_spec.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.mgreene.org\/index.php?rest_route=\/wp\/v2\/posts\/27","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mgreene.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mgreene.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mgreene.org\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mgreene.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=27"}],"version-history":[{"count":0,"href":"https:\/\/www.mgreene.org\/index.php?rest_route=\/wp\/v2\/posts\/27\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.mgreene.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=27"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mgreene.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=27"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mgreene.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=27"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}