Rainbow.c: i now have a clue
why MS-DOS 2.x crashes (and CP/M 1.1 boots).
One reason is that our interrupt handling looks incorrect.
There is additional IRQ logic not reflected in our code.Please see the attached image in my Dropbox:
https://dl.dropboxusercontent.com/u/37819653/SH_6_VECTOR_SELECT.jpgThe screenshots are taken from the Field Manual of the PC-100 B, and the vital clue came from RBCONVERT.ZIP (File:
CONVERT-A-B).
Next thing is the wrong sector interleave (1:1) instead of the following (sector count from 0 to 9):
LOG. => PHYS 0, 2, 4, 6, 8, 1, 3, 5, 7, 9
PHYS. => LOG. 0, 5, 1, 6, 2, 7, 3, 8, 4, 9
This is valid for both CP/M and MS-DOS; only for tracks >= 2; counted from track 0.
Please advise what to do.
The current code base is increasingly difficult to understand.
Help is appreciated.