Additional Hbios Code Space #458
Replies: 2 comments 1 reply
-
Hi @stickbreaker, HBIOS space limitations have indeed become a huge problem. I'm not sure I am following your proposal entirely, but will answer the best I can.
Well, there is a reserved bank referred to as AUX in HBIOS. This is the bank used by CP/M 3 and ZPM3 for it's additional bank of code. This bank is generally available for CP/M 2.2 (and derivatives). However, CP/M 2.2 has no concept of banked memory, so it would need to be added in some way by you. It would not be hard for an application to stuff code in that bank and invoke it using HBIOS. It would be extremely difficult to extend CP/M 2.2 into a multi-bank OS. Since that is what CP/M 3 is, I am not sure why yo would want to.
I'm sure you are! 😊
There are a lot of words here that I am not quite following. If you are asking about using additional RAM banks as an area to store/grow HBIOS drivers, then there are severe issues to work around. HBIOS was never intended to do that. As an example, the current HBIOS bank contains both the code and data for HBIOS. If drivers are placed in a different bank, you could potentially dispatch there, but they would have no access to critical variables in the stantard HBIOS bank.
So, to be clear, applications are very different than HBIOS drivers. There is an existing HBIOS API that allows applications to determine available RAM banks. An application can put code there and such code can make normal HBIOS calls. However, an SPI driver that is to be available to all applications must be written as an HBIOS driver and would not be easy to place in a RAM bank other than the single standard HBIOS bank. Your example seems more like an application calling HBIOS which can be done from any RAM bank.
This is so far beyond the scope of the current HBIOS that I can't begin to provide any guidance.
Likewise, dynamic linking of HBIOS drivers is completely outside of HBIOS capabilities. This would require a ground-up rewrite of HBIOS.
If you could find a way to place drivers in an alternate bank, then I suppose you could place them in ROM as well. You need to solve the dynamic linking and multiple HBIOS code banks issues first.
Same answer as dynamic linking above. I apologize if I sound negative, but I literally do not know how to help you achieve your goals. Even if you seriously attempted the kind of rewrite needed, you would be dramatically increasing the complexity of RomWBW. The existing complexity of RomWBW is the most common complaint I have from hobbyists. The features are loved, but many casual hobbyists are overwhelmed by the current complexity. Frankly, so am I. Thanks, Waynbe |
Beta Was this translation helpful? Give feedback.
-
@wwarthen Well, I'll have to do some more deep dives and get a better understanding of how the CIO and DIO devices are dispatched. It is my current understanding that ROM disk and RAM disk sizes are set during compile time, so no runtime discovery or allocation changes.
Can these banks be permanently allocated(not released after APP end)?
That just gave me another idea, Load my drivers into this application bank above the HBIOS in Hierarchy.
I can see that, One of my problems is that i want to add additional storage devices that are visible as HBIOS/CP/M devices. Thanks for the feed back |
Beta Was this translation helpful? Give feedback.
-
@wwarthen
I saw you mention additional code space to support CPM3, How hard is it to use this feature for CP/M2.2?
I am working up multiple SPI device drivers and bumping against the HBIOS code sizes.
what I am thinking about would be some switched pages/frames, with RomWBW's 32KB lower page, and the Z180 1MB memory map, I would like to have an approved framework that uses an arbitrary 32K ROM/RAM bank. This 32k page would have support code to handle HBIOS calls and data buffer exchanges. I am working with a 4x20 LCD, 4x4 matrix switch pad they both need code and data storage to function. so, a 32k Ram bank with code and data that can make HBIOS calls(SPI driver access).
What i want is to be able to write CP/M app code that uses these devices:
Challanges
Chuck.
Beta Was this translation helpful? Give feedback.
All reactions