Able to transfer files CP/M <> PC, what next? - CP/M

This is a discussion on Able to transfer files CP/M <> PC, what next? - CP/M ; Hi, Shifting over from the other thread now.. Anadisk and 22disk are now working successfully on a 486 IBM Thinkpad 755C laptop. So files can be freely copied back and forth at will, and binaries have been moved to DOS ...

+ Reply to Thread
Results 1 to 9 of 9

Thread: Able to transfer files CP/M <> PC, what next?

  1. Able to transfer files CP/M <> PC, what next?

    Hi,

    Shifting over from the other thread now.. Anadisk and 22disk are now
    working successfully on a 486 IBM Thinkpad 755C laptop. So files can be
    freely copied back and forth at will, and binaries have been moved to DOS
    and back to CP/M to confirm their safe transfer.

    The following are ALL of the binary files available on the machine exactly
    as they are;

    http://www.retro.dial.pipex.com/las/ASM86.CMD
    http://www.retro.dial.pipex.com/las/BASWAR.CMD
    http://www.retro.dial.pipex.com/las/COPYDISK.CMD
    http://www.retro.dial.pipex.com/las/CPM.H86
    http://www.retro.dial.pipex.com/las/CPM.SYS
    http://www.retro.dial.pipex.com/las/DDT86.CMD
    http://www.retro.dial.pipex.com/las/ED.CMD
    http://www.retro.dial.pipex.com/las/FORM.CMD
    http://www.retro.dial.pipex.com/las/GENCMD.CMD
    http://www.retro.dial.pipex.com/las/HELP.CMD
    http://www.retro.dial.pipex.com/las/HELP.HLP
    http://www.retro.dial.pipex.com/las/LASBAS.CMD
    http://www.retro.dial.pipex.com/las/LMCMD.CMD
    http://www.retro.dial.pipex.com/las/MCONFIG.CMD
    http://www.retro.dial.pipex.com/las/PIP.CMD
    http://www.retro.dial.pipex.com/las/PRICONF.BAS
    http://www.retro.dial.pipex.com/las/SETSIO.CMD
    http://www.retro.dial.pipex.com/las/STAT.CMD
    http://www.retro.dial.pipex.com/las/SUBMIT.CMD
    http://www.retro.dial.pipex.com/las/VFLOP.CMD

    To give some more information on what I've collected so far, this is the
    breakdown of the unit, www.retro.dial.pipex.com/las5. The actual expansion
    cards which are in it are listed in section 6. being 2848x2136 pixel images.
    As many pictures as imaginable are also there too.

    Hopefully French is reading..

    Thanks again,

    Aly



  2. Re: Able to transfer files CP/M <> PC, what next?

    "techie_alison" wrote:

    > Shifting over from the other thread now.. Anadisk and 22disk are now
    > working successfully on a 486 IBM Thinkpad 755C laptop. So files can be
    > freely copied back and forth at will, and binaries have been moved to DOS
    > and back to CP/M to confirm their safe transfer.


    Good. One thing: We prefer to have several files inside a ZIP file.
    You could name it "R&S LAS-5 Distribution Disk".

    > Hopefully French is reading..


    Yes. So, you are a girl, in the comp.os.cpm Newsgroup? At last!

    Alas, searching on the Internet, I saw 3 pages about you, and found:

    - "class of 1990"
    - your Father was 63 in 2006, so he was born in 1943,
    so you were born after 1963
    - "My partner is a wildlife artist, by the way..."
    - "My husband and I have been enjoying this fine
    restaurant for about 12 years." so, you married in 1994

    Conclusion: you were born between 1963 and 1970,
    graduated from school in 1990, and married in 1994.
    (So, this is still not this time that I will find a girl
    interested in CP/M and programming.)

    (By the way, I also searched on the Internet for the
    LAS-5. Unfortunately, Google returns many, many
    copies of "Looking for info"... Eventually, I was finally
    able to find an English company, Cook International,
    which has both the "Service Manual" and the
    "Operation Manual" of the LAS-5... Just a slight
    problem: each costs 150 pounds sterling each...)

    I will study the files during this week-end.

    We need to know if you are knowledgeable about CP/M,
    and have done any programming and (especially) 8080/Z-80
    assembly language programming?

    Technically, your CPM.SYS file is unusually small
    (mine is 55KB big), so it should be quite easy
    (meaning: for someone already used to this kind of "hobby")
    to disassemble it. The problem is: will you have
    enough force and courage to go from beginning to end?

    If you have never done something like this,
    there could be dozens of things to learn and master
    before we arrive to recreate the source code.

    (Personally, I am interested in the LAS-BASIC,
    since it is specialized in communicating with a GPIB network.
    I am waiting for the answers of the hardware hackers of this
    Newsgroup before deciding if I will disassemble it.
    If I don't disassemble it, I could disassemble the various
    small utilities specific to your LAS-5. I will report about
    them in my next session.) (This is a world-wide newsgroup
    and some people (like me) access it only 1 or 2 times per
    week, so we try to write meaningful messages, not one-
    or two-liners.)

    What is sure is that you have the only Web page dealing
    with the Rohde & Schwarz LAS-5 logical analyser.

    But recreating its source code, or modifying to use
    bigger sized floppy disks or a hard disk, could be
    quite a lot of work. So, would it be worth it, for
    a 20-years old piece of equipment?

    Yours Sincerely,
    "French Luser"




  3. Re: Able to transfer files CP/M <> PC, what next?

    "French Luser" wrote in message
    news:445c9fd3$0$21268$8fcfb975@news.wanadoo.fr...
    > "techie_alison" wrote:
    >
    > Good. One thing: We prefer to have several files inside a ZIP file.
    > You could name it "R&S LAS-5 Distribution Disk".
    >


    Acknowledged. Noted for future reference.

    >
    > Yes. So, you are a girl, in the comp.os.cpm Newsgroup? At last!
    >


    Oh dear :-)

    > Alas, searching on the Internet, I saw 3 pages about you, and found:
    >


    merde de l'OH

    > - "class of 1990"


    Yes

    > - your Father was 63 in 2006, so he was born in 1943,


    64

    > so you were born after 1963


    Yes

    > - "My partner is a wildlife artist, by the way..."


    Yes

    > - "My husband and I have been enjoying this fine
    > restaurant for about 12 years." so, you married in 1994


    Nope, not married.

    > Conclusion: you were born between 1963 and 1970,
    > graduated from school in 1990, and married in 1994.
    > (So, this is still not this time that I will find a girl
    > interested in CP/M and programming.)


    1974

    >
    > (By the way, I also searched on the Internet for the
    > LAS-5. Unfortunately, Google returns many, many
    > copies of "Looking for info"... Eventually, I was finally
    > able to find an English company, Cook International,
    > which has both the "Service Manual" and the
    > "Operation Manual" of the LAS-5... Just a slight
    > problem: each costs 150 pounds sterling each...)
    >


    Yep, that's where my one came from. I think they were glad to see the back
    of it judging from the lower and lower auctions they were creating on eBay.
    Got it for £28!! Like most equipment resellers they try to drive the price
    up, no-one is ever going to pay £150 for that service manual when you can
    buy brand new TTI 100Mhz logic analysers for £600 with a full guarantee and
    servicing. So by not selling it at a sensible price they're just sitting on
    something that nobody is interested in. Some of these companies actually
    sell equipment at more than they were when in full production and with new
    better kit cheaper today. Hence there are warehouses building up full of
    complete junk that greedy unsavvy Directors think is worth something.

    17" CRT monitor anyone??? Yours for £299, bargain price, £399 in 1993.
    Almost new condition.

    Almost new!!?? That's a contradiction. It either is or it isn't!! Can't
    be both. Greedy people trying to muscle in on this arena don't speak the
    same 1's and 0's language that the buyers do.

    > I will study the files during this week-end.


    Coolies. Is appreciated as I don't really know what to do with them.
    Admittedly it gives me the functionality on the LAS of being able to load
    and save samples and setups.

    >
    > We need to know if you are knowledgeable about CP/M,
    > and have done any programming and (especially) 8080/Z-80
    > assembly language programming?


    8086 yes, on IBM PC architecture. Z80 no.

    > Technically, your CPM.SYS file is unusually small
    > (mine is 55KB big), so it should be quite easy
    > (meaning: for someone already used to this kind of "hobby")
    > to disassemble it. The problem is: will you have
    > enough force and courage to go from beginning to end?
    >


    That we'll see, depends on what the end result is and what it changes. The
    nicest thing would be able to shift the LST: device straight to AXO: by
    default.

    > If you have never done something like this,
    > there could be dozens of things to learn and master
    > before we arrive to recreate the source code.
    >


    Sounds scary, lots of late nights.

    > (Personally, I am interested in the LAS-BASIC,
    > since it is specialized in communicating with a GPIB network.
    > I am waiting for the answers of the hardware hackers of this
    > Newsgroup before deciding if I will disassemble it.
    > If I don't disassemble it, I could disassemble the various
    > small utilities specific to your LAS-5. I will report about
    > them in my next session.) (This is a world-wide newsgroup
    > and some people (like me) access it only 1 or 2 times per
    > week, so we try to write meaningful messages, not one-
    > or two-liners.)


    Understood. Old school.

    >
    > What is sure is that you have the only Web page dealing
    > with the Rohde & Schwarz LAS-5 logical analyser.
    >


    Yes. There's a few people out there with them. Last one found was in
    Austrailia but not respondant to emails. Had just won it in an auction.
    Was looking for a pod to reverse engineer to build some proper ones here.

    > But recreating its source code, or modifying to use
    > bigger sized floppy disks or a hard disk, could be
    > quite a lot of work. So, would it be worth it, for
    > a 20-years old piece of equipment?
    >


    Probably not. About the only thing it does have going for it is the floppy
    disk drive port on the back. Which appears to be standard-ish. Either way
    the FDD pins can be traced back to the FDC chip which is documented.

    > Yours Sincerely,
    > "French Luser"
    >
    >


    Aly :-)



  4. Re: Able to transfer files CP/M <> PC, what next?

    On Sat, 6 May 2006 16:06:27 +0100, "techie_alison"
    wrote:

    >"French Luser" wrote in message
    >news:445c9fd3$0$21268$8fcfb975@news.wanadoo.fr...
    >> "techie_alison" wrote:
    >>
    >> Good. One thing: We prefer to have several files inside a ZIP file.
    >> You could name it "R&S LAS-5 Distribution Disk".
    >>

    >
    >Acknowledged. Noted for future reference.
    >
    >>
    >> Yes. So, you are a girl, in the comp.os.cpm Newsgroup? At last!
    >>

    >
    >Oh dear :-)


    Fortunately your not the only Alison here though I have the Allison
    spelling. Finally, I'm not alone.

    My problem is I've been working with CP/M since 1976.

    Allison


    >> Alas, searching on the Internet, I saw 3 pages about you, and found:
    >>

    >
    >merde de l'OH
    >
    >> - "class of 1990"

    >
    >Yes
    >
    >> - your Father was 63 in 2006, so he was born in 1943,

    >
    >64
    >
    >> so you were born after 1963

    >
    >Yes
    >
    >> - "My partner is a wildlife artist, by the way..."

    >
    >Yes
    >
    >> - "My husband and I have been enjoying this fine
    >> restaurant for about 12 years." so, you married in 1994

    >
    >Nope, not married.
    >
    >> Conclusion: you were born between 1963 and 1970,
    >> graduated from school in 1990, and married in 1994.
    >> (So, this is still not this time that I will find a girl
    >> interested in CP/M and programming.)

    >
    >1974
    >
    >>
    >> (By the way, I also searched on the Internet for the
    >> LAS-5. Unfortunately, Google returns many, many
    >> copies of "Looking for info"... Eventually, I was finally
    >> able to find an English company, Cook International,
    >> which has both the "Service Manual" and the
    >> "Operation Manual" of the LAS-5... Just a slight
    >> problem: each costs 150 pounds sterling each...)
    >>

    >
    >Yep, that's where my one came from. I think they were glad to see the back
    >of it judging from the lower and lower auctions they were creating on eBay.
    >Got it for £28!! Like most equipment resellers they try to drive the price
    >up, no-one is ever going to pay £150 for that service manual when you can
    >buy brand new TTI 100Mhz logic analysers for £600 with a full guarantee and
    >servicing. So by not selling it at a sensible price they're just sitting on
    >something that nobody is interested in. Some of these companies actually
    >sell equipment at more than they were when in full production and with new
    >better kit cheaper today. Hence there are warehouses building up full of
    >complete junk that greedy unsavvy Directors think is worth something.
    >
    >17" CRT monitor anyone??? Yours for £299, bargain price, £399 in 1993.
    >Almost new condition.
    >
    >Almost new!!?? That's a contradiction. It either is or it isn't!! Can't
    >be both. Greedy people trying to muscle in on this arena don't speak the
    >same 1's and 0's language that the buyers do.
    >
    >> I will study the files during this week-end.

    >
    >Coolies. Is appreciated as I don't really know what to do with them.
    >Admittedly it gives me the functionality on the LAS of being able to load
    >and save samples and setups.
    >
    >>
    >> We need to know if you are knowledgeable about CP/M,
    >> and have done any programming and (especially) 8080/Z-80
    >> assembly language programming?

    >
    >8086 yes, on IBM PC architecture. Z80 no.
    >
    >> Technically, your CPM.SYS file is unusually small
    >> (mine is 55KB big), so it should be quite easy
    >> (meaning: for someone already used to this kind of "hobby")
    >> to disassemble it. The problem is: will you have
    >> enough force and courage to go from beginning to end?
    >>

    >
    >That we'll see, depends on what the end result is and what it changes. The
    >nicest thing would be able to shift the LST: device straight to AXO: by
    >default.
    >
    >> If you have never done something like this,
    >> there could be dozens of things to learn and master
    >> before we arrive to recreate the source code.
    >>

    >
    >Sounds scary, lots of late nights.
    >
    >> (Personally, I am interested in the LAS-BASIC,
    >> since it is specialized in communicating with a GPIB network.
    >> I am waiting for the answers of the hardware hackers of this
    >> Newsgroup before deciding if I will disassemble it.
    >> If I don't disassemble it, I could disassemble the various
    >> small utilities specific to your LAS-5. I will report about
    >> them in my next session.) (This is a world-wide newsgroup
    >> and some people (like me) access it only 1 or 2 times per
    >> week, so we try to write meaningful messages, not one-
    >> or two-liners.)

    >
    >Understood. Old school.
    >
    >>
    >> What is sure is that you have the only Web page dealing
    >> with the Rohde & Schwarz LAS-5 logical analyser.
    >>

    >
    >Yes. There's a few people out there with them. Last one found was in
    >Austrailia but not respondant to emails. Had just won it in an auction.
    >Was looking for a pod to reverse engineer to build some proper ones here.
    >
    >> But recreating its source code, or modifying to use
    >> bigger sized floppy disks or a hard disk, could be
    >> quite a lot of work. So, would it be worth it, for
    >> a 20-years old piece of equipment?
    >>

    >
    >Probably not. About the only thing it does have going for it is the floppy
    >disk drive port on the back. Which appears to be standard-ish. Either way
    >the FDD pins can be traced back to the FDC chip which is documented.
    >
    >> Yours Sincerely,
    >> "French Luser"
    >>
    >>

    >
    >Aly :-)
    >



  5. Re: Able to transfer files CP/M <> PC, what next?

    LAS5DB.TXT (= LAS-5 Distribution Disk)
    ----------

    - "A study of the Rohde & Schwarz LAS-5 Distribution Disk"
    made by Emmanuel ROCHE.

    "Techie-Alison" made available a copy of the files distributed
    with a Rohde & Schwarz LAS-5 (Logic Analyser System 5, made
    circa 1987), which can run either stand-alone (as a logic
    analyser) or as a CP/M-86 computer, for which a copy of the
    Distribution Disk as been found. The files are:

    A>STAT *.*
    Drive A: User : 0
    Recs Bytes FCBs Attributes Name
    205 26k 2 Dir RW A:ASM86 .CMD
    7 1k 1 Dir RW A:BASWAR .CMD
    19 3k 1 Dir RW A:COPYDISK.CMD
    173 22k 2 Dir RW A:CPM .H86
    115 15k 1 Dir RW A:CPM .SYS
    109 14k 1 Dir RW ADT86 .CMD
    72 9k 1 Dir RW A:ED .CMD
    5 1k 1 Dir RW A:FORM .CMD
    43 6k 1 Dir RW A:GENCMD .CMD
    52 7k 1 Dir RW A:HELP .CMD
    183 23k 2 Dir RW A:HELP .HLP
    148 19k 2 Dir RW A:LASBAS .CMD
    40 5k 1 Dir RW A:LMCMD .CMD
    4 1k 1 Dir RW A:MCONFIG .CMD
    59 8k 1 Dir RW A:PIP .CMD
    28 4k 1 Dir RW A:PRICONF .BAS
    15 2k 1 Dir RW A:SETSIO .CMD
    73 10k 1 Dir RW A:STAT .CMD
    31 4k 1 Dir RW A:SUBMIT .CMD
    10 2k 1 Dir RW A:VFLOP .CMD
    ----------------------------------------------
    Total: 182k 24
    A: RW, Free Space: 66k

    There are 16 CMD files. Opening my copy of the "CP/M-86 User's
    Guide", I saw that Section 4 lists the standard CP/M-86 ComManD
    files distributed by Digital Research. Checking the messages
    contained inside the CMD files, I find that those are:

    ASM-86 V1.1 01/25/82
    COPYDISK V2.0
    DDT-86 V1.1 01/25/82
    ED 01/02/82 (12/81)
    GENCMD 01/02/82
    HELP V1.0 01/02/82 (The HELP.HLP file is standard.)
    LMCMD 01/02/82
    PIP V1.1 01/02/82 (1/8/82)
    STAT V2.2 01/02/82
    SUBMIT 1977

    3 things to note:

    1) TOD is missing from the standard CP/M-86 distribution. This
    could implies that the R&S LAS-5 cannot keep the time and date
    (that is to say: has no Real-Time Clock inside).

    2) LMCMD is present. This programmer utility (equivalent to
    GENCMD, but for Intel language processors) is explained in the
    "CP/M-86 System Guide", Section 3.3.

    3) Obviously, the source code of SUBMIT was recompiled from
    8-bit CP/M 2.2 without updating the date!

    Except that, this is a pretty standard distribution of CP/M-86
    v1. The only thing that could be noted is that version 1.1 of
    ASM-86 and DDT-86 were provided, but this may be due to the late
    (1987) distribution, since Versions 1.0 are known to have been
    distributed, 5 years earlier. The only thing missing for serious
    8086 assembly language programming is SID-86, the improved 8086
    debugger, which was sold separately.

    There remains 6 CMD files, with are utilities developed
    specially for the LAS-5. They are:

    1) MCONFIG 512-bytes long (Contains no ASCII message)
    2) FORM 640-bytes long ("FORMAT V1.0")
    3) BASWAR 896-bytes long ("BASIC Warm Start V1.1")
    4) VFLOP 1,280-bytes long ("VFLOP V1.3")
    5) SETSIO 1,920-bytes long ("SETSIO V1.1")
    6) LASBAS 18,944-bytes long ("LAS-BASIC V2.1")

    The first thing I did was to check their Header Record, using my
    HEADER.BAS program. It reported that all of them are "8080
    Memory Model" files. I then ran my DUMPCMD.BAS program, to check
    them. 4 of them are perfectly standard 8080 Memory Model files.
    However, 2 of them, BASWAR and VFLOP, contain Base Pages
    containing the same part of DDT-86... So, their are probably the
    result of a debugging session with DDT-86, not direct result
    from the assembly/compilation. (Except that, the only minor
    thing to signal is that one "paragraph" is missing at the end of
    VFLOP, and the Base Page of LASBAS contains 3 bytes in the
    Command Buffer area.)

    Ok. Now, let's try to learn more about them, especially MCONFIG.

    1) MCONFIG contains no ASCII message, so it is quite difficult
    to guess what the "M" is standing for... However, it is so small
    that, maybe, a short session with DDT-86 could give us some
    clues?

    A>ddt86 mconfig
    DDT86 1.1
    START END
    CS 1DB8:0000 1DB8:0130
    -l
    1DB8:0100 PUSH ES
    1DB8:0101 MOV CL,32
    1DB8:0103 MOV DX,0131
    1DB8:0106 INT E0
    1DB8:0108 MOV AX,8000
    1DB8:010B MOV ES,AX
    1DB8:010D MOV AL,02
    1DB8:010F ES: MOV [BX],AL
    1DB8:0112 MOV AX,5000
    1DB8:0115 ES: MOV 05[BX],AX
    1DB8:0119 MOV AX,3000
    1DB8:011C ES: MOV 07[BX],AX
    -l
    1DB8:0120 POP ES
    1DB8:0121 MOV AX,8000
    1DB8:0124 MOV DS,AX
    1DB8:0126 MOV ES,AX
    1DB8:0128 MOV AL,00
    1DB8:012A MOV CL,00
    1DB8:012C JMPF 8000:0000
    1DB8:0131 ADC AL,[BX+SI]
    1DB8:0133 ADD [BX+SI],AL = 00 bytes
    1DB8:0135 ADD [BX+SI],AL
    1DB8:0137 ADD [BX+SI],AL
    1DB8:0139 ADD [BX+SI],AL
    -

    Ok. The program starts with:

    1DB8:0100 PUSH ES
    1DB8:0101 MOV CL,32
    1DB8:0103 MOV DX,0131
    1DB8:0106 INT E0

    which means: Direct BIOS Call! (CP/M-86 BDOS function 50 = 32h)
    The "CP/M-86 System Guide" says: The DX register addresses a
    5-byte memory area containing the BIOS call parameters:

    8-bit 16-bit 16-bit
    +------+------------+------------+
    | Func | Value (CX) | Value (DX) |
    +------+------------+------------+

    where Func is a BIOS function number (see Table 5-1) and Value
    (CX) and Value (DX) are the 16-bit values which would normally
    be passed directly in the CX and DX registers with the BIOS
    call.

    Ok. Let's have a look at those 5 bytes.

    -d0131,0135
    1DB8:0131 12 00 00 00 00 .....
    -

    12h = 18. Table 5-1 says: 18 = GETSEGB (Get MEM DESC Table
    Offset). Turning the pages, we find Section 5.4, "BIOS
    Subroutine Entry Points", with the following explanation towards
    the end of this Section 5.4:


    GETSEGB
    -------

    Returns the address of the Memory Region Table (MRT) in BX. The
    returned value is the offset of the table, relative to the start
    of the operating system. The table defines the location and
    extent of physical memory which is available for transient
    programs.

    Memory areas reserved for interrupt vectors and the CP/M-86
    operating system are not included in the MRT. The Memory Region
    Table takes the form:

    8-bit
    +--------+
    MRT: | R-Cnt |
    +--------+----------+
    0: | R-Base | R-Length |
    +--------+----------+
    1: | R-Base | R-Length |
    +--------+----------+
    (...)
    +--------+----------+
    n: | R-Base | R-Length |
    +--------+----------+
    | 16-bit | 16-bit |
    +--------+----------+

    where R-Cnt is the number of Memory Region Descriptors (equal to
    n+1 in the diagram above), while R-Base and R-Lenght give the
    paragraph base and length of each physically contiguous area of
    memory. Again, the reserved interrupt locations, normally
    0-3FFh, and the CP/M-86 operating system are not included in
    this map, because the map contains regions available to
    transient programs. If all memory is contiguous, the R-Cnt field
    is 1 and n = 0, with only a single Memory Region Descriptor
    which defines the region.


    Whew! So, the M in MCONFIG means Memory (meaning: TPA). It is
    strange that a transient command file needs to be specially
    written for setting it, but maybe that's because the LAS-5 uses
    differently the RAM when running as a logic analyser than as a
    CP/M-86 computer?

    Since I don't have a LAS-5, it is pretty difficult to know what
    the BIOS would have returned. However, if we follow the rest of
    the program, we find that:

    1DB8:0108 MOV AX,8000
    1DB8:010B MOV ES,AX

    That is to say: set ES equals to 8000h (probably the segment of
    the MRT).

    1DB8:010D MOV AL,02
    1DB8:010F ES: MOV [BX],AL

    That is to say: Sets R-Cnt = 2, so there are going to be 2
    Memory Region Descriptors...

    1DB8:0112 MOV AX,5000
    1DB8:0115 ES: MOV 05[BX],AX

    That is to say: Sets R-Base to 5000h. The thing to note, here,
    is that it is placed in the 5th byte, so it doesn't touch the
    first 4 bytes, which contain the previous Memory Region
    Descriptor.

    1DB8:0119 MOV AX,3000
    1DB8:011C ES: MOV 07[BX],AX

    That is to say: Sets R-Length to 3000h. The 07 means that it is
    placed after the previous R-Base. 5000h + 3000h = 8000h. And it
    is known, for the dump of LAS-BASIC provided by "Techie-Alison",
    that DDT-86 operates in 8400h...

    -l

    1DB8:0120 POP ES
    1DB8:0121 MOV AX,8000
    1DB8:0124 MOV DS,AX
    1DB8:0126 MOV ES,AX

    That is to say: Sets DS and ES to 8000h. So the CS and SS are
    somewhere else.

    1DB8:0128 MOV AL,00
    1DB8:012A MOV CL,00

    Haha! Interesting. It is loading CL with a value, so this looks
    like a BDOS call. The only problem is the AL value: when we look
    to the BDOS functions, we find that BDOS function 0 (System
    Reset) expects an Abort Code in DL, not AL...

    1DB8:012C JMPF 8000:0000

    If it jumps to 8000:0000, that means that, for it, it is
    equivalent to "back to CP/M". It is the last instruction of the
    program, so it must, one way or another, go back to CP/M. The
    only trouble with this way of doing is that, under 16-bit CP/M,
    jumping to absolute locations is discouraged... and usage of the
    BDOS functions strongly encouraged!

    Well, that's all. So, the purpose of MCONFIG is to add another
    Memory Region Descriptor to the Memory Region Table, adding 12KB
    to the TPA. (So, a better name would have been ADD12KB.CMD.) (I
    wonder what is the size of the TPA, if the designer of this
    system felt the need to add a command just to increase it for
    such a small amount, for a 16-bit computer?)


    2) Never seen a 640-bytes long FORMAT program... How does it do it?

    A>ddt86 form
    DDT86 1.1
    START END
    CS 1DB8:0000 1DB8:0180
    -d0100,016F
    1DB8:0100 EB 37 90 06 CD E0 07 C3 53 51 B1 01 E8 F4 FF 59 .7......SQ.....Y
    1DB8:0110 5B C3 B1 02 8A D0 E8 EA FF C3 B1 00 E8 E4 FF B1 [...............
    1DB8:0120 09 E8 DF FF C3 BA 61 01 90 B1 0A E8 D5 FF C3 BA ......a.........
    1DB8:0130 4B 01 90 B1 09 E8 CB FF C3 8C C8 8E D8 8E C0 BA K...............
    1DB8:0140 4E 01 90 E8 D9 FF EA 4B 25 00 80 0D 0A 24 04 46 N......K%....$.F
    1DB8:0150 4F 52 4D 41 54 20 56 45 52 53 20 31 2E 30 0D 0A ORMAT VERS 1.0..
    1DB8:0160 24 21 01 00 00 00 00 00 00 00 00 00 00 00 00 00 $!..............

    A 6-lines long program? Including a 1-line long "message"? Ok,
    let's have a look at it...

    -l0100,0146
    1DB8:0100 JMPS 0139
    1DB8:0102 NOP
    1DB8:0103 PUSH ES
    1DB8:0104 INT E0
    1DB8:0106 POP ES
    1DB8:0107 RET
    1DB8:0108 PUSH BX
    1DB8:0109 PUSH CX
    1DB8:010A MOV CL,01
    1DB8:010C CALL 0103
    1DB8:010F POP CX
    1DB8:0110 POP BX
    1DB8:0111 RET
    1DB8:0112 MOV CL,02
    1DB8:0114 MOV DL,AL
    1DB8:0116 CALL 0103
    1DB8:0119 RET
    1DB8:011A MOV CL,00
    1DB8:011C CALL 0103
    1DB8:011F MOV CL,09
    1DB8:0121 CALL 0103
    1DB8:0124 RET
    1DB8:0125 MOV DX,0161
    1DB8:0128 NOP
    1DB8:0129 MOV CL,0A
    1DB8:012B CALL 0103
    1DB8:012E RET
    1DB8:012F MOV DX,014B
    1DB8:0132 NOP
    1DB8:0133 MOV CL,09
    1DB8:0135 CALL 0103
    1DB8:0138 RET
    1DB8:0139 MOV AX,CS
    1DB8:013B MOV DS,AX
    1DB8:013D MOV ES,AX
    1DB8:013F MOV DX,014E
    1DB8:0142 NOP
    1DB8:0143 CALL 011F
    1DB8:0146 JMPF 8000:254B
    -

    Ok. Now, let's try to understand it.

    1DB8:0100 JMPS 0139

    Obviously, some GOTO Main... It would have been simpler to put
    Main here, and the subroutines after...

    1DB8:0102 NOP

    What's that?

    1DB8:0103 PUSH ES
    1DB8:0104 INT E0 = 224 = BDOS
    1DB8:0106 POP ES
    1DB8:0107 RET

    Obviously, the call to BDOS...

    1DB8:0108 PUSH BX
    1DB8:0109 PUSH CX
    1DB8:010A MOV CL,01
    1DB8:010C CALL 0103 = BDOS
    1DB8:010F POP CX
    1DB8:0110 POP BX
    1DB8:0111 RET

    BDOS function 1 = Console Input. Wait for a key press.

    1DB8:0112 MOV CL,02
    1DB8:0114 MOV DL,AL
    1DB8:0116 CALL 0103 = BDOS
    1DB8:0119 RET

    BDOS function 2 = Console Output. DL = AL contains the ASCII
    character to print.

    1DB8:011A MOV CL,00
    1DB8:011C CALL 0103 = BDOS

    BDOS function 0 = System Reset. End of program. Go back to CP/M.
    (No need for a RET instruction.)

    1DB8:011F MOV CL,09
    1DB8:0121 CALL 0103 = BDOS
    1DB8:0124 RET

    BDOS function 9 = Print String (pointed to by DX, to be provided).

    1DB8:0125 MOV DX,0161
    1DB8:0128 NOP What's that?
    1DB8:0129 MOV CL,0A
    1DB8:012B CALL 0103 = BDOS
    1DB8:012E RET

    BDOS function 10 = Read Console Buffer (pointed to by DX, so
    0161 = address of Console Buffer).

    From the above dump, we learn that 0161 = 21 01, that is to
    say??? The manual says that 21h = mx = maximum number of
    characters which the buffer will hold. That is to say: 21h = 33
    characters. And 01h = nc = number of characters placed in the
    buffer!?!? So, this program reserves enough place to read 33
    characters, but only takes into account the 1st one...

    1DB8:012F MOV DX,014B
    1DB8:0132 NOP What's that?
    1DB8:0133 MOV CL,09
    1DB8:0135 CALL 0103 = BDOS
    1DB8:0138 RET

    Idem above but, here, we have a string to print, located at 014B.

    From the above dump, we learn that this string is 0D 0A '$',
    that is to say: the CR-LF pair. So, this is equivalent to PRINT
    (prints an empty line).

    1DB8:0139 MOV AX,CS
    1DB8:013B MOV DS,AX
    1DB8:013D MOV ES,AX
    1DB8:013F MOV DX,014E
    1DB8:0142 NOP What's that?
    1DB8:0143 CALL 011F
    1DB8:0146 JMPF 8000:254B

    Hum. Let's see...

    Main:
    1DB8:0139 MOV AX,CS
    1DB8:013B MOV DS,AX
    1DB8:013D MOV ES,AX

    Sets DS and ES equal to CS. In the "CP/M-86 System Guide"
    (Section 2.3: The 8080 Memory Model), we learn that "the CS, DS,
    and ES registers are initialized to the beginning of the code
    group, while the SS and SP registers remain set to a 96-byte
    stack area in the CCP". Ok. This is it. Some kind of standard
    initialization, for "8080 Memory Model" files (I am more used to
    "Small Memory Model" files). But why is it doing it, since the
    above explanation says that it is the CCP (or the BDOS) which
    will initialize the CS, DS, and ES registers according to the
    Memory Model used by the CMD file?

    1DB8:013F MOV DX,014E
    1DB8:0142 NOP What's that?
    1DB8:0143 CALL 011F = Print String

    Use the Print String (without string...) subroutine. This is
    stupid: it would have been better to put it, here. One less
    CALL.

    From the above dump, we learn that 014E = 04 FORMAT VERS 1.0$
    However, I simply have no idea why it is printing a 04h byte (=
    Ctrl-D = EOT!!!) before the text. (Something to test on the
    LAS-5.)

    1DB8:0146 JMPF 8000:254B

    Hum. If we assume that 2500h is the beginning of the BIOS, we
    have a problem... This offset is not documented (at least, not
    in my manual)! And, since this is the last instruction of the
    program, it should (hopefully!) be equivalent to "go back to
    CP/M".

    I hope that I am not the only one to note that NONE of the above
    BDOS subroutines are used in this program... that simply jumps
    to the end, print its title, then jumps inside the BIOS. In
    other words, this program can be shortened to become:

    MOV DX,014E = 'FORMAT VERS 1.0'
    MOV CL,09 = Print String
    PUSH ES
    INT E0 = 224 = BDOS
    POP ES
    JMPF 8000:254B = BIOS function #25

    That is to say: it prints "Format Vers 1.0" on the screen, then
    jumps to BIOS function #25. That's all!

    So, the less than can be said, is that this short study raises
    much more questions than the answers it provides. In particular,
    the above snippet of code does not even ask which drive to
    format! So, one of the first thing to test on a LAS-5 would be
    what would happen if one typed "form b" (or "form g") at the
    system prompt ("A>")? (Will there be an error message?) Or is
    this BIOS function only able to format floppy disks in drive A?


    3) BASWAR. Contains the string "BASIC Warm Start".

    I wonder what it means, by "warm start"? As explained above,
    this is one the 2 CMD files with a very, very strange Base Page.
    Upon further investigations with DDT-86, it was also found that
    the code after the ASCII strings was calling the DDT-86
    subroutines in the Base Page... Hoho! This looks more and more
    like a case of badly saving the contents of the TPA in order to
    produce the CMD file. Since I am lazy, I decided to concentrate
    upon the code from 0100 (the normal beginning of a "8080 Memory
    Model" CMD file) to the ASCII strings. This way, if I ever found
    a reference to the code after it (or in the Base Page), I could
    add its disassembly, later. (I hope that CP/M-86 Newbies
    understand.)

    A>ddt86 baswar
    DDT86 1.1
    START END
    CS 1DB8:0000 1DB8:02F0
    -d0100,01CF
    1DB8:0100 EB 3B 90 09 01 00 70 06 CD E0 07 C3 53 51 B1 01 .;....p.....SQ..
    1DB8:0110 E8 F4 FF 59 5B C3 B1 02 8A D0 E8 EA FF C3 B1 00 ...Y[...........
    1DB8:0120 E8 E4 FF B1 09 E8 DF FF C3 BA BF 01 90 B1 0A E8 ................
    1DB8:0130 D5 FF C3 BA 76 01 90 B1 09 E8 CB FF C3 8C C8 8E ....v...........
    1DB8:0140 D8 8E C0 C4 1E 03 01 26 81 3F 4F 4B 74 10 BA 79 .......&.?OKt..y
    1DB8:0150 01 90 E8 CE FF B0 00 8A D0 8A C8 E8 A9 FF 8C C8 ................
    1DB8:0160 8E D8 8E C0 BA 9E 01 90 E8 B8 FF B9 00 F0 90 E2 ................
    1DB8:0170 FD EA 03 01 00 70 0D 0A 24 04 42 41 53 57 41 52 .....p..$.BASWAR
    1DB8:0180 20 56 31 2E 31 20 20 4E 4F 20 42 41 53 49 43 20 V1.1 NO BASIC
    1DB8:0190 49 4E 49 54 49 41 4C 49 5A 45 44 0D 0A 24 04 42 INITIALIZED..$.B
    1DB8:01A0 41 53 57 41 52 20 56 31 2E 31 20 20 42 41 53 49 ASWAR V1.1 BASI
    1DB8:01B0 43 20 57 41 52 4D 20 53 54 41 52 54 0D 0A 24 21 C WARM START..$!
    1DB8:01C0 01 2F C7 06 35 09 0B 00 C3 B1 0B E8 BD FE 0A C0 ./..5...........
    -l0100,0171
    1DB8:0100 JMPS 013D
    1DB8:0102 NOP
    1DB8:0103 OR [BX+DI],AX
    1DB8:0105 ADD 06[BX+SI],DH
    1DB8:0108 INT E0
    1DB8:010A POP ES
    1DB8:010B RET
    1DB8:010C PUSH BX
    1DB8:010D PUSH CX
    1DB8:010E MOV CL,01
    1DB8:0110 CALL 0107
    1DB8:0113 POP CX
    1DB8:0114 POP BX
    1DB8:0115 RET
    1DB8:0116 MOV CL,02
    1DB8:0118 MOV DL,AL
    1DB8:011A CALL 0107
    1DB8:011D RET
    1DB8:011E MOV CL,00
    1DB8:0120 CALL 0107
    1DB8:0123 MOV CL,09
    1DB8:0125 CALL 0107
    1DB8:0128 RET
    1DB8:0129 MOV DX,01BF
    1DB8:012C NOP
    1DB8:012D MOV CL,0A
    1DB8:012F CALL 0107
    1DB8:0132 RET
    1DB8:0133 MOV DX,0176
    1DB8:0136 NOP
    1DB8:0137 MOV CL,09
    1DB8:0139 CALL 0107
    1DB8:013C RET
    1DB8:013D MOV AX,CS
    1DB8:013F MOV DS,AX
    1DB8:0141 MOV ES,AX
    1DB8:0143 LES BX,[0103]
    1DB8:0147 ES: CMP WORD [BX],4B4F
    1DB8:014C JZ 015E
    1DB8:014E MOV DX,0179
    1DB8:0151 NOP
    1DB8:0152 CALL 0123
    1DB8:0155 MOV AL,00
    1DB8:0157 MOV DL,AL
    1DB8:0159 MOV CL,AL
    1DB8:015B CALL 0107
    1DB8:015E MOV AX,CS
    1DB8:0160 MOV DS,AX
    1DB8:0162 MOV ES,AX
    1DB8:0164 MOV DX,019E
    1DB8:0167 NOP
    1DB8:0168 CALL 0123
    1DB8:016B MOV CX,F000
    1DB8:016E NOP
    1DB8:016F LOOP 016E
    1DB8:0171 JMPF 7000:0103
    -

    Ok. Now, let's try to find what it means.

    1DB8:0100 JMPS 013D

    GOTO Main

    1DB8:0102 NOP

    Again! Like FORM. Let's hope that we won't encounter yet another
    set of BDOS subroutines not used...

    1DB8:0103 OR [BX+DI],AX
    1DB8:0105 ADD 06[BX+SI],DH
    1DB8:0108 INT E0
    1DB8:010A POP ES
    1DB8:010B RET

    ??? Obviously, the code is not synchronized. Since there is a
    POP, I would expect a PUSH... Let us try this way:

    -l0107,010B
    1DB8:0107 PUSH ES
    1DB8:0108 INT E0
    1DB8:010A POP ES
    1DB8:010B RET

    Ok. But what is between the jump to Main and the call to the BDOS?

    -d0100,0106
    1DB8:0100 EB 3B 90 09 01 00 70 .;....p
    -

    EB 3B is the jump to Main and 90 is NOP so, there are some
    mysterious 09 01 00 70 bytes. Let's continue. Maybe we will find
    some explanation for them, later on?

    1DB8:010C PUSH BX
    1DB8:010D PUSH CX
    1DB8:010E MOV CL,01
    1DB8:0110 CALL 0107 = BDOS
    1DB8:0113 POP CX
    1DB8:0114 POP BX
    1DB8:0115 RET

    ****! This looks more and more like FORM... (And this confirms
    that the call to the BDOS is now located at 0107, the PUSH
    instruction.) So, BDOS function 1 = Console Input. Wait for a
    key press.

    1DB8:0116 MOV CL,02
    1DB8:0118 MOV DL,AL
    1DB8:011A CALL 0107 = BDOS
    1DB8:011D RET

    BDOS function 2 = Console Output. DL = AL contains the ASCII
    character to print. (Exactly the same code as in FORM...)

    1DB8:011E MOV CL,00
    1DB8:0120 CALL 0107 = BDOS

    BDOS function 0 = System Reset. End of program. Go back to CP/M.
    (This is definitely looking like a copy of the BDOS subroutines
    at the beginning of FORM...)

    1DB8:0123 MOV CL,09
    1DB8:0125 CALL 0107 = BDOS
    1DB8:0128 RET

    BDOS function 9 = Print String (pointed to by DX, to be
    provided).

    1DB8:0129 MOV DX,01BF
    1DB8:012C NOP
    1DB8:012D MOV CL,0A
    1DB8:012F CALL 0107 = BDOS
    1DB8:0132 RET

    BDOS function 10 = Read Console Buffer (pointed to by DX, so
    01BF = address of Console Buffer).

    From the above dump, we see that 01BF = 21 01, that is to say:
    exactly what was explained in FORM...

    1DB8:0133 MOV DX,0176
    1DB8:0136 NOP
    1DB8:0137 MOV CL,09
    1DB8:0139 CALL 0107 = BDOS
    1DB8:013C RET

    Idem above but, here, we have a string to print, located at
    0176.

    From the above dump, we learn that this string is 0D 0A '$',
    that is to say: the CR-LF pair. So, this is equivalent to PRINT
    (prints an empty line).

    1DB8:013D MOV AX,CS
    1DB8:013F MOV DS,AX
    1DB8:0141 MOV ES,AX
    1DB8:0143 LES BX,[0103]
    1DB8:0147 ES: CMP WORD [BX],4B4F
    1DB8:014C JZ 015E
    1DB8:014E MOV DX,0179
    1DB8:0151 NOP
    1DB8:0152 CALL 0123
    1DB8:0155 MOV AL,00
    1DB8:0157 MOV DL,AL
    1DB8:0159 MOV CL,AL
    1DB8:015B CALL 0107 = BDOS
    1DB8:015E MOV AX,CS
    1DB8:0160 MOV DS,AX
    1DB8:0162 MOV ES,AX
    1DB8:0164 MOV DX,019E
    1DB8:0167 NOP
    1DB8:0168 CALL 0123
    1DB8:016B MOV CX,F000
    1DB8:016E NOP
    1DB8:016F LOOP 016E
    1DB8:0171 JMPF 7000:0103

    At last! Something different from FORM. Let's see.

    Main:
    1DB8:013D MOV AX,CS
    1DB8:013F MOV DS,AX
    1DB8:0141 MOV ES,AX

    Ok. Sets DS and ES equal to CS. (Same as FORM.)

    1DB8:0143 LES BX,[0103]
    1DB8:0147 ES: CMP WORD [BX],4B4F
    1DB8:014C JZ 015E

    Haha! Interesting. Gets a word located at ES:0103, and compare
    it with the word at ES:4B4F... Hum. Re-looking at the "CP/M-86
    System Guide" (same Section), we learn that "The Instruction
    Pointer register (IP) is set to 0100h, similar to CP/M-80, thus
    allowing Base Page values at the beginning of the code group".
    Since we know (since FORM) that DS = ES = CS, that means that it
    is comparing the word at 0103 (which happens to be one of the 4
    mysterious bytes! Haha! We're getting hot! By the way, the word
    at 0103 is 0109h.) Slight problem: the program ends at 02F0
    (anyway, we only go as far as 01C0, as explained in the Read
    Console Buffer function), so how to know was is located at 4B4F
    in a LAS-5? Let us continue, to see what happens, next. (By the
    way, JZ = jump if both words are equal.)

    1DB8:014E MOV DX,0179
    1DB8:0151 NOP
    1DB8:0152 CALL 0123 = Print String

    The 2 words are unequal: prints "BASWAR V1.1 No BASIC
    Initialised" on screen.

    1DB8:0155 MOV AL,00
    1DB8:0157 MOV DL,AL
    1DB8:0159 MOV CL,AL
    1DB8:015B CALL 0107 = BDOS

    Curious code. In effect, ask the BDOS to reset the system, that
    is to say: end the program (discarding it from the TPA: DL =
    Abort Code = 0) and return to the CCP (the "A>" prompt) (CL =
    0).

    Equal:
    1DB8:015E MOV AX,CS
    1DB8:0160 MOV DS,AX
    1DB8:0162 MOV ES,AX

    1DB8:0164 MOV DX,019E
    1DB8:0167 NOP
    1DB8:0168 CALL 0123 = Print String

    That is to say: Sets DS and ES equal to CS (standard "8080
    Memory Model" initialization), then prints "BASWAR V1.1 BASIC
    Warm Start" on screen.

    1DB8:016B MOV CX,F000
    1DB8:016E NOP
    1DB8:016F LOOP 016E

    Loops F000h (61,440) times before continuing. That should be
    enough time to read the above message, even at 4-MHz!

    1DB8:0171 JMPF 7000:0103

    Logically, this should be the "BASIC Warm Start" entry point.

    Now, the question is: why this utility? Under 8-bit CP/M 2.2,
    the terms "cold start" and "warm start" were well known, but
    they no longer appear in the CP/M-86 documentation. At the time,
    cold start was meaning "booting from the floppy", and warm start
    "re-booting (re-getting the "A>" prompt) from RAM". Needless to
    say, the second was much faster than the first. So, the only
    explanation I can think of is that this utility is used to
    re-get to LAS-BASIC, after it has been quitted. That implies
    that LAS-BASIC stays in a fixed area of memory.


    4) Now, VFLOP. The most telling message is: "This file initiates
    the virtual floppy "G:" (64/128/192/256/K)". (Why drive G?)
    (Germany?)

    A>ddt86 vflop
    DDT86 1.1
    START END
    1DB8:0000 1DB8:04FF
    -d0100,040F
    1DB8:0100 EB 37 90 06 CD E0 07 C3 53 51 B1 01 E8 F4 FF 59 .7......SQ.....Y
    1DB8:0110 5B C3 B1 02 8A D0 E8 EA FF C3 B1 00 E8 E4 FF B1 [...............
    1DB8:0120 09 E8 DF FF C3 BA 04 04 90 B1 0A E8 D5 FF C3 BA ................
    1DB8:0130 65 01 90 B1 09 E8 CB FF C3 8C C8 8E D8 8E C0 BA e...............
    1DB8:0140 68 01 90 E8 D9 FF E8 BF FF 3C 03 74 CD 2C 30 3C h........<.t.,0<
    1DB8:0150 04 77 E6 8A D0 E8 B0 FF 3C 0D 74 04 3C 03 74 BA .w......<.t.<.t.
    1DB8:0160 EA 45 25 00 80 0D 0A 24 04 56 46 4C 4F 50 20 56 .E%....$.VFLOP V
    1DB8:0170 45 52 53 20 31 2E 33 0D 0A 0D 0A 54 48 49 53 20 ERS 1.3....THIS
    1DB8:0180 46 49 4C 45 20 49 4E 49 54 49 41 54 45 53 20 54 FILE INITIATES T
    1DB8:0190 48 45 20 56 49 52 54 55 41 4C 20 46 4C 4F 50 50 HE VIRTUAL FLOPP
    1DB8:01A0 59 20 22 47 3A 22 2E 0D 0A 54 48 45 20 54 52 41 Y "G:"...THE TRA
    1DB8:01B0 4E 53 49 45 4E 54 20 50 52 4F 47 52 41 4D 20 41 NSIENT PROGRAM A
    1DB8:01C0 52 45 41 20 4F 46 20 43 50 2F 4D 2D 38 36 20 49 REA OF CP/M-86 I
    1DB8:01D0 53 20 52 45 44 55 43 45 44 20 41 43 43 4F 52 44 S REDUCED ACCORD
    1DB8:01E0 49 4E 47 4C 59 2E 0D 0A 0D 0A 49 4E 50 55 54 09 INGLY.....INPUT.
    1DB8:01F0 31 09 46 4F 52 20 20 20 20 20 20 36 34 4B 20 56 1.FOR 64K V
    1DB8:0200 49 52 54 55 41 4C 20 46 4C 4F 50 50 59 0D 0A 49 IRTUAL FLOPPY..I
    1DB8:0210 4E 50 55 54 09 32 09 46 4F 52 09 31 32 38 4B 20 NPUT.2.FOR.128K
    1DB8:0220 56 49 52 54 55 41 4C 20 46 4C 4F 50 50 59 0D 0A VIRTUAL FLOPPY..
    1DB8:0230 49 4E 50 55 54 09 33 09 46 4F 52 09 31 39 32 4B INPUT.3.FOR.192K
    1DB8:0240 20 56 49 52 54 55 41 4C 20 46 4C 4F 50 50 59 0D VIRTUAL FLOPPY.
    1DB8:0250 0A 49 4E 50 55 54 09 34 09 46 4F 52 09 32 35 36 .INPUT.4.FOR.256
    1DB8:0260 4B 20 56 49 52 54 55 41 4C 20 46 4C 4F 50 50 59 K VIRTUAL FLOPPY
    1DB8:0270 0D 0A 0D 0A 57 41 52 4E 49 4E 47 3A 0D 0A 49 46 ....WARNING:..IF
    1DB8:0280 20 59 4F 55 20 49 4E 50 55 54 20 32 20 20 20 20 YOU INPUT 2
    1DB8:0290 20 20 20 59 4F 55 20 57 49 4C 4C 20 4B 49 4C 4C YOU WILL KILL
    1DB8:02A0 20 59 4F 55 52 20 4C 41 53 20 52 45 46 45 52 45 YOUR LAS REFERE
    1DB8:02B0 4E 43 45 20 4D 45 4D 4F 52 59 0D 0A 49 46 20 59 NCE MEMORY..IF Y
    1DB8:02C0 4F 55 20 49 4E 50 55 54 20 33 20 4F 52 20 34 20 OU INPUT 3 OR 4
    1DB8:02D0 20 59 4F 55 20 43 41 4E 4E 4F 54 20 45 58 45 43 YOU CANNOT EXEC
    1DB8:02E0 55 54 45 20 42 41 53 49 43 0D 0A 49 46 20 59 4F UTE BASIC..IF YO
    1DB8:02F0 55 20 49 4E 50 55 54 20 34 20 20 20 20 20 20 20 U INPUT 4
    1DB8:0300 41 4C 4C 20 59 4F 55 52 20 4C 41 53 20 44 41 54 ALL YOUR LAS DAT
    1DB8:0310 41 20 50 52 45 56 49 4F 55 53 4C 59 20 4B 45 59 A PREVIOUSLY KEY
    1DB8:0320 45 44 20 49 4E 20 57 49 4C 4C 20 42 45 20 4C 4F ED IN WILL BE LO
    1DB8:0330 53 54 0D 0A 0D 0A 50 52 45 53 53 20 20 20 20 20 ST....PRESS
    1DB8:0340 20 4E 45 57 4C 49 4E 45 20 20 20 20 20 20 20 20 NEWLINE
    1DB8:0350 54 4F 20 47 45 4E 45 52 41 54 45 20 56 49 52 54 TO GENERATE VIRT
    1DB8:0360 55 41 4C 20 46 4C 4F 50 50 59 0D 0A 50 52 45 53 UAL FLOPPY..PRES
    1DB8:0370 53 20 20 20 20 20 20 5E 43 20 20 20 20 20 20 20 S ^C
    1DB8:0380 20 20 20 20 20 20 54 4F 20 52 45 54 55 52 4E 20 TO RETURN
    1DB8:0390 54 4F 20 43 50 4D 0D 0A 50 52 45 53 53 20 20 20 TO CPM..PRESS
    1DB8:03A0 20 20 20 4D 4F 44 45 20 53 45 4C 45 43 54 20 20 MODE SELECT
    1DB8:03B0 20 20 54 4F 20 52 45 54 55 52 4E 20 54 4F 20 4C TO RETURN TO L
    1DB8:03C0 41 53 0D 0A 0D 0A 4E 4F 54 45 3A 20 52 45 54 55 AS....NOTE: RETU
    1DB8:03D0 52 4E 49 4E 47 20 54 4F 20 4C 41 53 20 59 4F 55 RNING TO LAS YOU
    1DB8:03E0 20 57 49 4C 4C 20 4C 4F 53 45 20 59 4F 55 52 20 WILL LOSE YOUR
    1DB8:03F0 56 49 52 54 55 41 4C 20 46 4C 4F 50 50 59 21 0D VIRTUAL FLOPPY!.
    1DB8:0400 0A 0D 0A 24 21 01 74 27 43 2C 30 3C 0A 73 B1 8A ...$!.t'C,0<.s..
    -l0100,0160
    1DB8:0100 JMPS 0139
    1DB8:0102 NOP
    1DB8:0103 PUSH ES
    1DB8:0104 INT E0
    1DB8:0106 POP ES
    1DB8:0107 RET
    1DB8:0108 PUSH BX
    1DB8:0109 PUSH CX
    1DB8:010A MOV CL,01
    1DB8:010C CALL 0103
    1DB8:010F POP CX
    1DB8:0110 POP BX
    1DB8:0111 RET
    1DB8:0112 MOV CL,02
    1DB8:0114 MOV DL,AL
    1DB8:0116 CALL 0103
    1DB8:0119 RET
    1DB8:011A MOV CL,00
    1DB8:011C CALL 0103
    1DB8:011F MOV CL,09
    1DB8:0121 CALL 0103
    1DB8:0124 RET
    1DB8:0125 MOV DX,0404
    1DB8:0128 NOP
    1DB8:0129 MOV CL,0A
    1DB8:012B CALL 0103
    1DB8:012E RET
    1DB8:012F MOV DX,0165
    1DB8:0132 NOP
    1DB8:0133 MOV CL,09
    1DB8:0135 CALL 0103
    1DB8:0138 RET
    1DB8:0139 MOV AX,CS
    1DB8:013B MOV DS,AX
    1DB8:013D MOV ES,AX
    1DB8:013F MOV DX,0168
    1DB8:0142 NOP
    1DB8:0143 CALL 012F
    1DB8:0146 CALL 0108
    1DB8:0149 CMP AL,03
    1DB8:014B JZ 011A
    1DB8:014D SUB AL,30
    1DB8:014F CMP AL,04
    1DB8:0151 JA 0129
    1DB8:0153 MOV DL,AL
    1DB8:0155 CALL 0108
    1DB8:0158 CMP AL,0D
    1DB8:015A JZ 0160
    1DB8:015C CMP AL,03
    1DB8:015E JZ 011A
    1DB8:0160 JMPF 8000:2545
    -

    1DB8:0100 JMPS 0139

    GOTO Main. (This is becoming routine.)

    1DB8:0102 NOP

    (One day, I will finish by thinking that those LAS-5 utilities
    were programmed in PL/M-86.) (This would also explain the
    presence of LMCMD.)

    1DB8:0103 PUSH ES
    1DB8:0104 INT E0
    1DB8:0106 POP ES
    1DB8:0107 RET

    BDOS call.

    1DB8:0108 PUSH BX
    1DB8:0109 PUSH CX
    1DB8:010A MOV CL,01
    1DB8:010C CALL 0103 = BDOS
    1DB8:010F POP CX
    1DB8:0110 POP BX
    1DB8:0111 RET

    Console Input. Wait for a key press.

    1DB8:0112 MOV CL,02
    1DB8:0114 MOV DL,AL
    1DB8:0116 CALL 0103 = BDOS
    1DB8:0119 RET

    Console Output.

    1DB8:011A MOV CL,00
    1DB8:011C CALL 0103 = BDOS

    System Reset.

    1DB8:011F MOV CL,09
    1DB8:0121 CALL 0103 = BDOS
    1DB8:0124 RET

    Print String.

    1DB8:0125 MOV DX,0404
    1DB8:0128 NOP
    1DB8:0129 MOV CL,0A
    1DB8:012B CALL 0103 = BDOS
    1DB8:012E RET

    Read Console Buffer.

    1DB8:01AF MOV DX,0165
    1DB8:01B2 NOP
    1DB8:01B3 MOV CL,09
    1DB8:01B5 CALL 0103 = BDOS
    1DB8:01B8 RET

    Prints a CR-LF pair on the screen (empty line).

    Main:
    1DB8:0139 MOV AX,CS
    1DB8:013B MOV DS,AX
    1DB8:013D MOV ES,AX

    "8080 Memory Model" CMD file initialization.

    1DB8:013F MOV DX,0168
    1DB8:0142 NOP
    1DB8:0143 CALL 011F

    Print "VFLOP Vers 1.3 cr/lf cr/lf This file (etc)".
    (There is again a mysterious 04 byte before the string.)

    1DB8:0146 CALL 0108 = Wait for a key press
    1DB8:0149 CMP AL,03 = Ctrl-C ?
    1DB8:014B JZ 011A = Yes: goto System Reset

    (Upon reading the on-screen explanantion, the user aborted.)

    1DB8:014D SUB AL,30 = Convert from ASCII number to binary number
    1DB8:014F CMP AL,04 = 4 options max
    1DB8:0151 JA 0139 = If more than 4, repeat the explanation

    One of the 4 options was chosen.

    1DB8:0153 MOV DL,AL

    Store it in DL.

    1DB8:0155 CALL 0108 = Console Input
    1DB8:0158 CMP AL,0D = Carriage Return?
    1DB8:015A JZ 0160 = Yes: jump forward

    1DB8:015C CMP AL,03 = Ctrl-C ?
    1DB8:015E JZ 011A = Yes: Abort

    Forward:
    1DB8:0160 JMPF 8000:2545

    So, somewhere in the BIOS, there is a BIOS function #23 which
    reduces the TPA in 64KB increment, creating the G drive.


    5) Now, let's turn to SETSIO, which must set the speed of the
    I/O channels (normally, SIO = Serial Input/Output).

    A>ddt86 setsio
    DDT86 1.1
    START END
    CS 1DB8:0000 1DB8:06C0
    -d0100,06CF
    1DB8:0100 EB 3C 90 06 CD E0 07 C3 53 51 B1 01 E8 F4 FF E8 .<......SQ......
    1DB8:0110 2D 01 59 5B C3 B1 02 8A D0 E8 E7 FF C3 B1 00 E8 -.Y[............
    1DB8:0120 E1 FF 51 B1 09 E8 DB FF 59 C3 BA A8 06 90 B1 0A ..Q.....Y.......
    1DB8:0130 E8 D0 FF C3 BA 47 02 90 B1 09 E8 C6 FF C3 8C C8 .....G..........
    1DB8:0140 8E D8 8E C0 BA 4A 02 90 E8 D7 FF E8 BA FF 3C 0D .....J........<.
    1DB8:0150 74 16 2C 41 3C 0F 77 E6 8A 16 A6 06 80 E2 30 80 t.,A<.w.......0.
    1DB8:0160 CA 30 0A D0 88 16 A6 06 BA 66 04 90 E8 B3 FF E8 .0.......f......
    1DB8:0170 96 FF 3C 0D 74 1C 2C 35 72 EE 3C 03 77 EA D0 E0 ..<.t.,5r.<.w...
    1DB8:0180 D0 E0 8A 16 A5 06 80 E2 F3 0A D0 80 CA 01 88 16 ................
    1DB8:0190 A5 06 BA FA 04 90 E8 89 FF E8 6C FF 3C 0D 74 17 ..........l.<.t.
    1DB8:01A0 2C 30 3C 03 77 EC 8A 16 A5 06 B1 04 D2 E0 80 E2 ,0<.w...........
    1DB8:01B0 CF 0A D0 88 16 A5 06 BA A0 04 90 E8 64 FF E8 47 ............d..G
    1DB8:01C0 FF 3C 0D 74 1C 2C 41 3C 02 77 EC FE C0 B1 06 D2 .<.t.,A<.w......
    1DB8:01D0 E0 8A 16 A5 06 80 E2 3C 0A D0 80 CA 01 88 16 A5 .......<........
    1DB8:01E0 06 BA 85 05 90 E8 3A FF E8 1D FF 3C 0D 74 11 2C ......:....<.t.,
    1DB8:01F0 30 3C 01 8A 2E A7 06 B1 81 77 E6 74 03 80 E1 80 0<.......w.t....
    1DB8:0200 BA E5 05 90 E8 1B FF E8 FE FE 3C 0D 74 0B 2C 30 ..........<.t.,0
    1DB8:0210 3C 01 77 EC 74 03 80 E5 FD BA 45 06 90 E8 02 FF <.w.t.....E.....
    1DB8:0220 E8 E5 FE 3C 0D 74 0B 2C 30 3C 01 77 EC 74 03 80 ...<.t.,0<.w.t..
    1DB8:0230 E1 01 8A 16 A5 06 8A 36 A6 06 EA 51 25 00 80 3C .......6...Q%..<
    1DB8:0240 03 75 03 E9 D7 FE C3 0D 0A 24 04 53 45 54 53 49 .u.......$.SETSI
    1DB8:0250 4F 20 56 31 2E 31 0D 0A 50 52 45 53 53 20 4E 45 O V1.1..PRESS NE
    1DB8:0260 57 4C 49 4E 45 20 54 4F 20 53 4B 49 50 0D 0A 0D WLINE TO SKIP...
    1DB8:0270 0A 42 3A 20 20 42 41 55 44 20 52 41 54 45 20 0D .B: BAUD RATE .
    1DB8:0280 0A 0D 0A 46 4F 52 20 20 20 20 20 35 30 20 20 20 ...FOR 50
    1DB8:0290 42 44 20 20 20 50 52 45 53 53 20 20 20 20 41 0D BD PRESS A.
    1DB8:02A0 0A 46 4F 52 20 20 20 20 20 37 35 20 20 20 42 44 .FOR 75 BD
    1DB8:02B0 20 20 20 50 52 45 53 53 20 20 20 20 42 0D 0A 46 PRESS B..F
    1DB8:02C0 4F 52 20 20 20 20 31 31 30 20 20 20 42 44 20 20 OR 110 BD
    1DB8:02D0 20 50 52 45 53 53 20 20 20 20 43 0D 0A 46 4F 52 PRESS C..FOR
    1DB8:02E0 20 20 20 20 31 33 34 20 20 20 42 44 20 20 20 50 134 BD P
    1DB8:02F0 52 45 53 53 20 20 20 20 44 0D 0A 46 4F 52 20 20 RESS D..FOR
    1DB8:0300 20 20 31 35 30 20 20 20 42 44 20 20 20 50 52 45 150 BD PRE
    1DB8:0310 53 53 20 20 20 20 45 0D 0A 46 4F 52 20 20 20 20 SS E..FOR
    1DB8:0320 32 30 30 20 20 20 42 44 20 20 20 50 52 45 53 53 200 BD PRESS
    1DB8:0330 20 20 20 20 46 0D 0A 46 4F 52 20 20 20 20 33 30 F..FOR 30
    1DB8:0340 30 20 20 20 42 44 20 20 20 50 52 45 53 53 20 20 0 BD PRESS
    1DB8:0350 20 20 47 0D 0A 46 4F 52 20 20 20 20 36 30 30 20 G..FOR 600
    1DB8:0360 20 20 42 44 20 20 20 50 52 45 53 53 20 20 20 20 BD PRESS
    1DB8:0370 48 0D 0A 46 4F 52 20 20 20 31 30 35 30 20 20 20 H..FOR 1050
    1DB8:0380 42 44 20 20 20 50 52 45 53 53 20 20 20 20 49 0D BD PRESS I.
    1DB8:0390 0A 46 4F 52 20 20 20 31 32 30 30 20 20 20 42 44 .FOR 1200 BD
    1DB8:03A0 20 20 20 50 52 45 53 53 20 20 20 20 4A 0D 0A 46 PRESS J..F
    1DB8:03B0 4F 52 20 20 20 31 38 30 30 20 20 20 42 44 20 20 OR 1800 BD
    1DB8:03C0 20 50 52 45 53 53 20 20 20 20 4B 0D 0A 46 4F 52 PRESS K..FOR
    1DB8:03D0 20 20 20 32 30 30 30 20 20 20 42 44 20 20 20 50 2000 BD P
    1DB8:03E0 52 45 53 53 20 20 20 20 4C 0D 0A 46 4F 52 20 20 RESS L..FOR
    1DB8:03F0 20 32 34 30 30 2A 20 20 42 44 20 20 20 50 52 45 2400* BD PRE
    1DB8:0400 53 53 20 20 20 20 4D 0D 0A 46 4F 52 20 20 20 34 SS M..FOR 4
    1DB8:0410 38 30 30 20 20 20 42 44 20 20 20 50 52 45 53 53 800 BD PRESS
    1DB8:0420 20 20 20 20 4E 0D 0A 46 4F 52 20 20 20 39 36 30 N..FOR 960
    1DB8:0430 30 20 20 20 42 44 20 20 20 50 52 45 53 53 20 20 0 BD PRESS
    1DB8:0440 20 20 4F 0D 0A 46 4F 52 20 20 31 39 32 30 30 20 O..FOR 19200
    1DB8:0450 20 20 42 44 20 20 20 50 52 45 53 53 20 20 20 20 BD PRESS
    1DB8:0460 50 0D 0A 0D 0A 24 04 4C 3A 20 20 4E 4F 20 4F 46 P....$.L: NO OF
    1DB8:0470 20 42 49 54 53 3A 0D 0A 0D 0A 49 4E 50 55 54 20 BITS:....INPUT
    1DB8:0480 4E 4F 20 4F 46 20 42 49 54 53 20 35 2E 2E 2E 38 NO OF BITS 5...8
    1DB8:0490 20 28 38 2A 20 3D 44 45 46 29 20 43 52 0D 0A 24 (8* =DEF) CR..$
    1DB8:04A0 04 53 3A 20 20 20 49 4E 50 55 54 20 20 4E 4F 20 .S: INPUT NO
    1DB8:04B0 4F 46 20 53 54 4F 50 20 42 49 54 53 20 20 20 0D OF STOP BITS .
    1DB8:04C0 0A 31 2A 20 20 20 49 4E 50 55 54 20 20 20 20 20 .1* INPUT
    1DB8:04D0 41 0D 0A 31 2E 35 20 20 49 4E 50 55 54 20 20 20 A..1.5 INPUT
    1DB8:04E0 20 20 42 0D 0A 32 20 20 20 20 49 4E 50 55 54 20 B..2 INPUT
    1DB8:04F0 20 20 20 20 43 0D 0A 0D 0A 24 04 50 3A 20 20 50 C....$.P: P
    1DB8:0500 41 52 49 54 59 20 43 4F 4E 54 52 4F 4C 0D 0A 0D ARITY CONTROL...
    1DB8:0510 0A 4E 4F 20 50 41 52 49 54 59 20 43 4F 4E 54 52 .NO PARITY CONTR
    1DB8:0520 4F 4C 2A 20 20 20 20 20 20 50 52 45 53 53 20 20 OL* PRESS
    1DB8:0530 20 20 20 30 0D 0A 0D 0A 4F 44 44 20 20 20 50 41 0....ODD PA
    1DB8:0540 52 49 54 59 20 20 20 20 20 20 20 20 20 20 20 20 RITY
    1DB8:0550 50 52 45 53 53 20 20 20 20 20 31 0D 0A 45 56 45 PRESS 1..EVE
    1DB8:0560 4E 20 20 50 41 52 49 54 59 20 20 20 20 20 20 20 N PARITY
    1DB8:0570 20 20 20 20 20 50 52 45 53 53 20 20 20 20 20 33 PRESS 3
    1DB8:0580 0D 0A 0D 0A 24 04 52 3A 20 20 52 54 53 20 48 49 ....$.R: RTS HI
    1DB8:0590 2A 20 20 20 57 48 45 4E 20 49 4E 50 55 54 20 20 * WHEN INPUT
    1DB8:05A0 20 20 20 20 20 20 20 20 50 52 45 53 53 20 20 20 PRESS
    1DB8:05B0 20 20 31 0D 0A 20 20 20 20 44 4F 4E 54 20 43 41 1.. DONT CA
    1DB8:05C0 52 45 20 57 48 45 4E 20 49 4E 50 55 54 20 20 20 RE WHEN INPUT
    1DB8:05D0 20 20 20 20 20 20 20 50 52 45 53 53 20 20 20 20 PRESS
    1DB8:05E0 20 30 0D 0A 24 04 44 3A 20 20 44 54 52 20 48 49 0..$.D: DTR HI
    1DB8:05F0 2A 20 20 20 41 46 54 45 52 20 53 45 54 55 50 20 * AFTER SETUP
    1DB8:0600 20 20 20 20 20 20 20 20 50 52 45 53 53 20 20 20 PRESS
    1DB8:0610 20 20 31 0D 0A 20 20 20 20 44 54 52 20 4C 4F 57 1.. DTR LOW
    1DB8:0620 20 20 20 41 46 54 45 52 20 53 45 54 55 50 20 20 AFTER SETUP
    1DB8:0630 20 20 20 20 20 20 20 50 52 45 53 53 20 20 20 20 PRESS
    1DB8:0640 20 30 0D 0A 24 04 49 3A 20 20 44 53 52 20 54 45 0..$.I: DSR TE
    1DB8:0650 53 54 45 44 20 20 20 20 20 57 48 45 4E 20 4F 55 STED WHEN OU
    1DB8:0660 54 50 55 54 20 20 20 20 50 52 45 53 53 20 20 20 TPUT PRESS
    1DB8:0670 20 20 31 0D 0A 20 20 20 20 44 53 52 20 44 4F 4E 1.. DSR DON
    1DB8:0680 54 20 43 41 52 45 2A 20 57 48 45 4E 20 4F 55 54 T CARE* WHEN OUT
    1DB8:0690 50 55 54 20 20 20 20 50 52 45 53 53 20 20 20 20 PUT PRESS
    1DB8:06A0 20 30 0D 0A 24 4D 3C 37 21 01 00 00 00 00 00 00 0..$M<7!.......
    1DB8:06B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    1DB8:06C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    -l0100,023A
    1DB8:0100 JMPS 013E
    1DB8:0102 NOP
    1DB8:0103 PUSH ES
    1DB8:0104 INT E0
    1DB8:0106 POP ES
    1DB8:0107 RET
    1DB8:0108 PUSH BX
    1DB8:0109 PUSH CX
    1DB8:010A MOV CL,01
    1DB8:010C CALL 0103
    1DB8:010F CALL 023F
    1DB8:0112 POP CX
    1DB8:0113 POP BX
    1DB8:0114 RET
    1DB8:0115 MOV CL,02
    1DB8:0117 MOV DL,AL
    1DB8:0119 CALL 0103
    1DB8:011C RET
    1DB8:011D MOV CL,00
    1DB8:011F CALL 0103
    1DB8:0122 PUSH CX
    1DB8:0123 MOV CL,09
    1DB8:0125 CALL 0103
    1DB8:0128 POP CX
    1DB8:0129 RET
    1DB8:012A MOV DX,06A8
    1DB8:012D NOP
    1DB8:012E MOV CL,0A
    1DB8:0130 CALL 0103
    1DB8:0133 RET
    1DB8:0134 MOV DX,0247
    1DB8:0137 NOP
    1DB8:0138 MOV CL,09
    1DB8:013A CALL 0103
    1DB8:013D RET
    1DB8:013E MOV AX,CS
    1DB8:0140 MOV DS,AX
    1DB8:0142 MOV ES,AX
    1DB8:0144 MOV DX,024A
    1DB8:0147 NOP
    1DB8:0148 CALL 0122
    1DB8:014B CALL 0108
    1DB8:014E CMP AL,0D
    1DB8:0150 JZ 0168
    1DB8:0152 SUB AL,41
    1DB8:0154 CMP AL,0F
    1DB8:0156 JA 013E
    1DB8:0158 MOV DL,[06A6]
    1DB8:015C AND DL,30
    1DB8:015F OR DL,30
    1DB8:0162 OR DL,AL
    1DB8:0164 MOV [06A6],DL
    1DB8:0168 MOV DX,0466
    1DB8:016B NOP
    1DB8:016C CALL 0122
    1DB8:016F CALL 0108
    1DB8:0172 CMP AL,0D
    1DB8:0174 JZ 0192
    1DB8:0176 SUB AL,35
    1DB8:0178 JB 0168
    1DB8:017A CMP AL,03
    1DB8:017C JA 0168
    1DB8:017E SHL AL,1
    1DB8:0180 SHL AL,1
    1DB8:0182 MOV DL,[06A5]
    1DB8:0186 AND DL,F3
    1DB8:0189 OR DL,AL
    1DB8:018B OR DL,01
    1DB8:018E MOV [06A5],DL
    1DB8:0192 MOV DX,04FA
    1DB8:0195 NOP
    1DB8:0196 CALL 0122
    1DB8:0199 CALL 0108
    1DB8:019C CMP AL,0D
    1DB8:019E JZ 01B7
    1DB8:01A0 SUB AL,30
    1DB8:01A2 CMP AL,03
    1DB8:01A4 JA 0192
    1DB8:01A6 MOV DL,[06A5]
    1DB8:01AA MOV CL,04
    1DB8:01AC SHL AL,CL
    1DB8:01AE AND DL,CF
    1DB8:01B1 OR DL,AL
    1DB8:01B3 MOV [06A5],DL
    1DB8:01B7 MOV DX,04A0
    1DB8:01BA NOP
    1DB8:01BB CALL 0122
    1DB8:01BE CALL 0108
    1DB8:01C1 CMP AL,0D
    1DB8:01C3 JZ 01E1
    1DB8:01C5 SUB AL,41
    1DB8:01C7 CMP AL,02
    1DB8:01C9 JA 01B7
    1DB8:01CB INC AL
    1DB8:01CD MOV CL,06
    1DB8:01CF SHL AL,CL
    1DB8:01D1 MOV DL,[06A5]
    1DB8:01D5 AND DL,3C
    1DB8:01D8 OR DL,AL
    1DB8:01DA OR DL,01
    1DB8:01DD MOV [06A5],DL
    1DB8:01E1 MOV DX,0585
    1DB8:01E4 NOP
    1DB8:01E5 CALL 0122
    1DB8:01E8 CALL 0108
    1DB8:01EB CMP AL,0D
    1DB8:01ED JZ 0200
    1DB8:01EF SUB AL,30
    1DB8:01F1 CMP AL,01
    1DB8:01F3 MOV CH,[06A7]
    1DB8:01F7 MOV CL,81
    1DB8:01F9 JA 01E1
    1DB8:01FB JZ 0200
    1DB8:01FD AND CL,80
    1DB8:0200 MOV DX,05E5
    1DB8:0203 NOP
    1DB8:0204 CALL 0122
    1DB8:0207 CALL 0108
    1DB8:020A CMP AL,0D
    1DB8:020C JZ 0219
    1DB8:020E SUB AL,30
    1DB8:0210 CMP AL,01
    1DB8:0212 JA 0200
    1DB8:0214 JZ 0219
    1DB8:0216 AND CH,FD
    1DB8:0219 MOV DX,0645
    1DB8:021C NOP
    1DB8:021D CALL 0122
    1DB8:0220 CALL 0108
    1DB8:0223 CMP AL,0D
    1DB8:0225 JZ 0232
    1DB8:0227 SUB AL,30
    1DB8:0229 CMP AL,01
    1DB8:022B JA 0219
    1DB8:022D JZ 0232
    1DB8:022F AND CL,01
    1DB8:0232 MOV DL,[06A5]
    1DB8:0236 MOV DH,[06A6]
    1DB8:023A JMPF 8000:2551
    -

    1DB8:0100 JMPS 013E

    Goto Main...

    1DB8:0102 NOP

    Why? (Why why?)

    1DB8:0103 PUSH ES
    1DB8:0104 INT E0
    1DB8:0106 POP ES
    1DB8:0107 RET

    Call to BDOS.

    1DB8:0108 PUSH BX
    1DB8:0109 PUSH CX
    1DB8:010A MOV CL,01
    1DB8:010C CALL 0103 = BDOS
    1DB8:010F CALL 023F
    1DB8:0112 POP CX
    1DB8:0113 POP BX
    1DB8:0114 RET

    ??? What is this CALL 023F doing? Another DDT-86 session.

    -l023F,0246
    1DB8:023F CMP AL,03 = Ctrl-C ?
    1DB8:0241 JNZ 0246 = No: RETurn
    1DB8:0243 JMP 011D = Yes: goto System Reset
    1DB8:0246 RET
    -

    So, this new version of Console Input also checks if the user
    pressed Ctrl-C and, if so, aborts.

    1DB8:0115 MOV CL,02
    1DB8:0117 MOV DL,AL
    1DB8:0119 CALL 0103 = BDOS
    1DB8:011C RET

    Console Output.

    1DB8:011D MOV CL,00
    1DB8:011F CALL 0103 = BDOS

    System Reset.

    1DB8:0122 PUSH CX
    1DB8:0123 MOV CL,09
    1DB8:0125 CALL 0103 = BDOS
    1DB8:0128 POP CX
    1DB8:0129 RET

    Print String (this time, preserves CX).

    1DB8:012A MOV DX,06A8
    1DB8:012D NOP
    1DB8:012E MOV CL,0A
    1DB8:0130 CALL 0103 = BDOS
    1DB8:0133 RET

    Read Console Buffer. (Still 21 01...)

    1DB8:0134 MOV DX,0247
    1DB8:0137 NOP
    1DB8:0138 MOV CL,09
    1DB8:013A CALL 0103 = BDOS
    1DB8:013D RET

    Prints a CR-LF pair. (empty line)

    Main:
    1DB8:013E MOV AX,CS
    1DB8:0140 MOV DS,AX
    1DB8:0142 MOV ES,AX

    "8080 Memory Model" CMD file initialization.

    1DB8:0144 MOV DX,024A
    1DB8:0147 NOP (Why?)
    1DB8:0148 CALL 0122 = Print String

    Prints "SETSIO V1.1 Press NEWLINE to skip Baud rate (etc)".

    1DB8:014B CALL 0108 = Console Input with Ctrl-C check
    1DB8:014E CMP AL,0D = Carriage Return ?
    1DB8:0150 JZ 0168 = Yes: Number-of-bits (next setting)

    The user did not abort or jump to setting the number of bits, so
    he has input a Baud rate, which were presented on screen as
    ranging from A to P. (By the way, this means that NEWLINE = CR.)

    1DB8:0152 SUB AL,41 = Convert from ASCII letter to binary number
    1DB8:0154 CMP AL,0F = P ?
    1DB8:0156 JA 013E = >P: Re-explain

    1DB8:0158 MOV DL,[06A6]
    1DB8:015C AND DL,30
    1DB8:015F OR DL,30
    1DB8:0162 OR DL,AL
    1DB8:0164 MOV [06A6],DL

    06A6 now contains the Baud rate chosen.

    Number_of_bits:
    1DB8:0168 MOV DX,0466
    1DB8:016B NOP (Why?)
    1DB8:016C CALL 0122 = Print String

    Print "Number of bits: 5 or 8 (=default)".

    1DB8:016F CALL 0108 = Console Input with Ctrl-C check
    1DB8:0172 CMP AL,0D = Carriage Return ?
    1DB8:0174 JZ 0192 = Yes: parity control (next setting)

    1DB8:0176 SUB AL,35 = Convert to 0 if 5
    1DB8:0178 JB 0168 = <0: re-explain

    1DB8:017A CMP AL,03 = 8 ? (5 + 3)
    1DB8:017C JA 0168 = >3: re-explain

    1DB8:017E SHL AL,1
    1DB8:0180 SHL AL,1
    1DB8:0182 MOV DL,[06A5]
    1DB8:0186 AND DL,F3
    1DB8:0189 OR DL,AL
    1DB8:018B OR DL,01
    1DB8:018E MOV [06A5],DL

    06A5 contains the number of bits.

    Parity_control:
    1DB8:0192 MOV DX,04FA
    1DB8:0195 NOP (Why?)
    1DB8:0196 CALL 0122 = Print String

    Prints "Parity control (no, odd, even)".

    1DB8:0199 CALL 0108 = Console Input with Ctrl-C check
    1DB8:019C CMP AL,0D = Carriage Return?
    1DB8:019E JZ 01B7 = Yes: Number of stop bits (next setting)

    1DB8:01A0 SUB AL,30 = Convert from ASCII number to binary number
    1DB8:01A2 CMP AL,03 = 3?
    1DB8:01A4 JA 0192 = >3: re-explain

    1DB8:01A6 MOV DL,[06A5]
    1DB8:01AA MOV CL,04
    1DB8:01AC SHL AL,CL
    1DB8:01AE AND DL,CF
    1DB8:01B1 OR DL,AL
    1DB8:01B3 MOV [06A5],DL

    06A5 contains the parity control.

    Stop_bits:
    1DB8:01B7 MOV DX,04A0
    1DB8:01BA NOP (Why?)
    1DB8:01BB CALL 0122 = Print String

    Prints "Number of stop bits (1, 1.5, 2)".

    1DB8:01BE CALL 0108 = Console Input with Ctrl-C check
    1DB8:01C1 CMP AL,0D = Carriage Return?
    1DB8:01C3 JZ 01E1 = Yes: DTR high when input (next setting)

    1DB8:01C5 SUB AL,41 = Convert from ASCII letter to binary number
    1DB8:01C7 CMP AL,02 = 2 ?
    1DB8:01C9 JA 01B7 = >2: re-explain

    1DB8:01CB INC AL
    1DB8:01CD MOV CL,06
    1DB8:01CF SHL AL,CL
    1DB8:01D1 MOV DL,[06A5]
    1DB8:01D5 AND DL,3C
    1DB8:01D8 OR DL,AL
    1DB8:01DA OR DL,01
    1DB8:01DD MOV [06A5],DL

    06A5 contains the number of stop bits.

    RTS_high_when_input:
    1DB8:01E1 MOV DX,0585
    1DB8:01E4 NOP (Why?)
    1DB8:01E5 CALL 0122 = Print String

    Print "RTS high when input (yes, no)".

    1DB8:01E8 CALL 0108 = Console Input with Ctrl-C check
    1DB8:01EB CMP AL,0D = Carriage Return?
    1DB8:01ED JZ 0200 = Yes: DTR after setup (next setting)

    1DB8:01EF SUB AL,30 = Convert from ASCII number to binary number
    1DB8:01F1 CMP AL,01 = 1 ?
    1DB8:01F3 MOV CH,[06A7]
    1DB8:01F7 MOV CL,81
    1DB8:01F9 JA 01E1 = >1: Re-explain

    06A7 contains the RTS high when input flag.

    1DB8:01FB JZ 0200 = DTR_after_setup (next setting)

    1DB8:01FD AND CL,80

    DTR_after_setup:
    1DB8:0200 MOV DX,05E5
    1DB8:0203 NOP (Why?)
    1DB8:0204 CALL 0122 = Print String

    Prints "DTR high/low after setup".

    1DB8:0207 CALL 0108 = Console Input with Ctrl-C check
    1DB8:020A CMP AL,0D = Carriage Return?
    1DB8:020C JZ 0219 = Yes: DTR tested when output (next setting)

    1DB8:020E SUB AL,30 = Convert from ASCII number to binary number
    1DB8:0210 CMP AL,01 = 1 ?
    1DB8:0212 JA 0200 = >1: Re-explain

    1DB8:0214 JZ 0219 = 0: goto DTR tested when output

    1DB8:0216 AND CH,FD

    DTR_tested_when_output:
    1DB8:0219 MOV DX,0645
    1DB8:021C NOP (Why?)
    1DB8:021D CALL 0122 = Print String

    Prints "DTR tested when output (yes, no)".

    1DB8:0220 CALL 0108 = Console Input with Ctrl-C check
    1DB8:0223 CMP AL,0D = Carriage Return?
    1DB8:0225 JZ 0232 = Yes: finally

    1DB8:0227 SUB AL,30 = Convert from ASCII number to binary number
    1DB8:0229 CMP AL,01 = 1 ?
    1DB8:022B JA 0219 = >1: Re-explain

    1DB8:022D JZ 0232 = 1: goto Finally

    1DB8:022F AND CL,01

    Finally:
    1DB8:0232 MOV DL,[06A5]
    1DB8:0236 MOV DH,[06A6]

    1DB8:023A JMPF 8000:2551

    Conclusion: SETSIO uses yet-another-undocumented BDOS function,
    #27, to set up the SIO, using the condensed binary patterns
    formerly held in 06A5 and 06A6, and now in DL and DH (known
    together as DX).


    6) LASBAS 18,944-bytes long ("LAS-BASIC V2.1")

    I am starting to tire a little... Maybe I am not going to
    disassemble a 19KB BASIC now? However, there is a PRICONF.BAS
    file among the files found. Unfortunately, "Techie_Alison"
    forgot to convert it into ASCII, so we have no idea what kind of
    BASIC is used. Using my DUMPASC, I found the following
    explanation:

    Printer Configuration Menu Rev 1.2

    LAS Rev. > 3.8 required

    The screen copy feature of the LAS is intended for use with the
    PUD. Other printers may be used if bit-image printing is
    supported.

    Each byte transmitted corresponds to an 8-dot print column. The
    user may select wether the dot in the first row is represented
    by the MSB or LSB.

    Command strings are sent by the LAS to provide the printer with
    proper setup.

    The first string sets the printer to bit-image printing. This
    string is sent at the very beginning of printing.

    The second string tells the printer the number of bytes per
    line. This string is sent at the beginning of every line.

    The third string sets the printer back to character printing.
    This string is sent at the end of printing.

    (snip)

    Question: What is the PUD mentioned? It seems to be the name of
    a printer.


    Conclusion
    ----------

    1) We have checked that this is a pretty standard CP/M-86 system
    (with the exception of TOD).

    2) We have understood the purpose of 5 out of 6 of the utilities
    specialy developed for the R&S LAS-5.

    3) We have shown that the R&S LAS-5 implementation of CP/M-86
    contains at least 7 additional BIOS calls, in addition to the 20
    documented in the "CP/M-86 System Guide", and have shown their
    purposes and input parameters.

    4) We have shown the address of the "BASIC Warm Start" entry
    point.

    5) We have hinted how 4 of those utilities could be better
    rewritten in 8086 assembly language.

    To finish recreating the source code of this system, only 2
    things remain to be done:

    1) Disassemble LAS-LASIC (19KB... Without any documentation)

    2) Disassemble CPM.SYS (Only 15KB, with good technical
    documentation widely available...)

    So, I think that the logical next step is clear, isn't it?


    Yours Sincerely,
    "French Luser"


    EOF



  6. Re: Able to transfer files CP/M PC, what next?

    Bytes: 1748
    Lines: 51
    Path: number1.nntp.dca.giganews.com!border1.nntp.dca.gig anews.com!nntp.giganews.com!newscon06.news.prodigy .com!prodigy.net!news-east.rr.com!news.rr.com!news-out2.newsfeeds.com!local!sp6iad.superfeed.net!sp6i ad.superfeed.net!not-for-mail
    Newsgroups: comp.os.cpm
    X-Report: Please report illegal or inappropriate use to . Forward a copy of ALL headers INCLUDING the body. (DO NOT SEND ATTACHMENTS)
    X-Comments2: IMPORTANT: Newsfeeds.com does not condone,support,nor tolerate spam or any illegal or copyrighted postings.
    X-Comments: This message was posted through Newsfeeds.com
    Xref: number1.nntp.dca.giganews.com comp.os.cpm:49858



    On 2006-05-09 Emmanuel Roche said:

    > [ ... mega-snip ... ]
    >
    > We have shown that the R&S LAS-5 implementation of CP/M-86
    > contains at least 7 additional BIOS calls, in addition to
    > the 20 documented in the "CP/M-86 System Guide"...




    This isn't unusual in hardware-specific permutations of CP/M-86.

    The User Guide for "CP/M-86 For The IBM, Version 1.1," for example,
    lists 59 (decimal) BIOS calls -- most of which are documented.

    Your generic "CP/M-86 System Guide" gives you basic information.
    But for a specialized OEM version of CP/M-86, you really need the
    specific User Guide for that particular rendition of the O.S.



    > So, I think that the logical next step is clear, isn't it?




    No. "Disassembling" and "recreating the source code" for an OEM
    version of CP/M-86 that was designed for a specific and obsolete
    hardware platform is mostly crazy.

    Unless you are planning to buy an LAS-5, what's the point?

    If *you* want to do this work as a personal hobby, fine. But I
    don't believe you'll generate much interest in the project among
    other CP/M-86 fans.

    Instead, why not find a nice French widow? Preferably, one who has
    money -- so that you can have your own Internet connection at home,
    and don't have to visit the cyber-cafes.


    ----== Posted via Newsfeeds.Com - Unlimited-Unrestricted-Secure Usenet News==----
    http://www.newsfeeds.com The #1 Newsgroup Service in the World! 120,000+ Newsgroups
    ----= East and West-Coast Server Farms - Total Privacy via Encryption =----

  7. Re: Able to transfer files CP/M PC, what next?

    Le Tue, 09 May 2006 18:09:08 -0500, "Anonymous Guy" a
    écrit :

    >
    >On 2006-05-09 Emmanuel Roche said:
    >
    > > [ ... mega-snip ... ]
    > >
    > > So, I think that the logical next step is clear, isn't it?

    >
    >
    >
    >No. "Disassembling" and "recreating the source code" for an OEM
    >version of CP/M-86 that was designed for a specific and obsolete
    >hardware platform is mostly crazy.
    >
    >Unless you are planning to buy an LAS-5, what's the point?
    >
    >If *you* want to do this work as a personal hobby, fine. But I
    >don't believe you'll generate much interest in the project among
    >other CP/M-86 fans.
    >


    +1


    Instead, why not find a real (paid) job with modern (embedded)
    microcomputers ?
    Of course this means that French Luser has to leave behind his beloved
    Basic snippets and has to learn C or new assembly languages

    Peter Greuter

  8. Re: Able to transfer files CP/M <> PC, what next?

    Ok. So, "Techie_Alison" has the only Web page on the Internet
    dealing with the Rohde & Schwarz LAS-5 logic analyser.

    So far, it is dealing only with the hardware...

    Here are a few suggestions, regarding some materials that could
    be useful, to document the software.

    - What is the effect of 04 bytes placed in front of text? (PRINT
    CHR$(4) "Text highlighted?") And of some other values, probably
    in the control characters range? (FOR i=1 TO 31:PRINT CHR$(i)
    "Text modified?":IF i=15 THEN WHILE inkey$="":WEND:NEXT i)

    - What appears on screen when the LAS-5 specific utilities are
    run? (The beauty of CP/M is that, since it began with a TTY,
    all its I/O are text. The only problem is bold, underlined,
    italics, etc, but, now, most word-processors (even Good Old
    WordStar!) and most computers connected to the Internet (thanks
    to the HTML standard: by the way, someone wrote a WS4-to-HTML
    File Converter, so you can publish on the Internet any text
    written with WS on a CP/M microcomputer... even if it was done
    in 1974) are able to display them correctly.

    - Get INTVEC.BAS and DATAAREA.BAS from the comp.os.cpm
    Newsgroup, transfer them on your LAS-5 and, more important, find
    a way to echo their output on the LAS-5 screen into a file (this
    is only text, but the programs stop at each screenful -- press
    the spacebar to continue, or remove the line containing the
    loop), to be put online, for example, in a LAS-BASIC Web page.

    - I hope that you will agree that we can divide the software in
    4 categories: general CP/M-86 stuff, 8086 assembly language
    programming, LAS-5 utilities, and LAS-BASIC and programs
    developed with it.

    - Add 6 links for the 6 utilities (you could put my study of
    them as a kind of Introduction, and have a page displaying the
    original paper doc, then my disassemblies, then your improved
    versions of the 4 utilities).

    - In the LAS-BASIC Web page, don't forget my "List of Keywords
    of LAS-BASIC". By the way, this reminds me: I said that there
    were 2 families of BASIC: before and after GW-BASIC. LAS-BASIC
    is clearly NOT patterned after any MS-DOS BASIC. In fact, I
    think that it is an 8086 implementation of some kind of German
    8080 "Tiny BASIC". This would explain its non-standard keywords,
    and why it is a "8080 Memory Model" file. Also, note that it
    contains lots of messages dealing with cassette tape... and it
    seems unable to deal with a random access file system, just
    sequential I/O. That is to say: a magnetic tape. The floppy disk
    was invented by IBM to replace the magnetic tape so,
    fortunately, CP/M can work in sequential mode. (In fact, early
    versions of CP/M were sequential: there was a time when random
    access did not work...) 2 well-known all-in-one microcomputers
    able to manage both magnetic tape and floppy disks are the ADAM
    and the Amstrad CPC. (And the IBM PC had a magnetic tape driver
    in ROM, at the beginning... Those Newbies asking for a USB key
    would be quite amazed!)

    - Regarding CP/M-86, you could start by removing CCGFCU from the
    comp.os.cpm Newsgroup, then create a link displaying it, then
    the output of INTVEC and DATAAREA. (Since I am a fan of CP/M-86
    Plus, I don't bothered with the CP/M-86 manuals. I only have the
    parts dealing with the programmer's utilities (ASM-86, GENCMD,
    RASM-86, LINK-86, LIB-86, XREF-86, SID-86, CBASIC-86, CB-86,
    GSX-86, AM-86, DM-86) dealing with CMD files (some of them also
    exist under MS-DOS, making EXE files) under CP/M-86. (CP/M,
    contrary to MS-DOS, is a family of PORTABLE Operating Systems.
    It exists on the 8080, 8086, 68000, and Z-8000 families of CPU.
    By the way, this reminds me: I saw a very, very bad mention of
    CP/M on your Web page. Something like: "a primitive version of
    MS-DOS..." It is exactly the contrary: MS-DOS is a bastard of
    CP/M and Unix. MS-DOS V1 was strictly a non-autorized port of
    CP/M on the 8086 CPU. Bill Gates bought it, then added Unix-like
    commands and way of using it. CP/M was, and remains, a very nice
    Operating System, very simple, very fast, portable, and with
    single-user and multi-user and network versions. Everything
    that MS-DOS has never been. It also had a windowing system long
    before MS Windows. For 15 years, I kept using CP/M Plus on my
    Epson QX-10 with 4 floppy disk drives. I was the only man in
    town still using CP/M. My last program was taking 15 minutes to
    assemble at 4-MHz... Now, I have a CP/M-86 Plus system running
    at 400-MHz, and everything is instantaneous. My BASIC programs
    now run faster than my 8-bit assembly language programs! And
    all this from an amazingly simple command line. CP/M is really
    something nice, simple, that works. Too bad it is not teached
    in schools or Universities. If it is not as complex as Unix or
    C++, they are not interested. They mistake complex with power.)

    - Sooner or later, you will be obliged to debug something, so
    get the "SID-86 User's Guide" from the comp.os.cpm.amethyst
    Newsgroup (this no longer used Newsgroup serves as a repository
    for some lost Digital Research documentation that can be found
    nowhere else on the Internet). If you have not done 8086
    assembly language for some time, read and re-read it until you
    know it by heart, then practice the example debugging session,
    then trace your modified LAS-5 utilities.

    - You could also find some texts dealing with the various
    "Memory Models" used by CP/M-86's CMD files. I am thinking about
    some parts of AFTER8 (not the full text).

    - Also, you could get CALLSID and INTSID (to go with SID-86 and
    8080 assembly language programming).

    - Copy the STAT DSK: output in the 8086 assembly language area,
    since we could modify the floppy disk format, perhaps?

    - You could also provide MBASIC V5.22 for CP/M-86 and WS 3.3,
    since they are so small. (www.retroarchive.org)

    (I hope that it will not be too much for a Newbie. One problem
    with CP/M-86 is that it was as simple an 8086 implementation of
    CP/M as possible, since, at the time, everybody knew CP/M. In
    fact, the CP/M-86 doc refers you frequently to the paper doc of
    CP/M 2.2! The above mentioned CCGFCU paper is typical. It only
    lists the difference between the 8- and 16-bit versions. If you
    feel a little bit overwhelmed, print this "Alison Wish-List",
    then note what you discovered at each step, and don't forget to
    say it in your Web page! Since I have programmed CP/M systems
    for 20 years, I no longer remark some things.)

    By the way, get a set of CP/M-86 manuals. Mine, I got it for 2
    pounds sterling in a second-hand bookshop, during one of my
    trips to England. (There were 3 versions: 1) Standard 11" US
    paper (like CP/M 2), 2) IBM binder format (some people are
    always surprised to see an official IBM binder stamped CP/M on
    it...), and 3) same format, but with wide white margins, and
    glued, not in a binder.) You will need the "CP/M-86 System
    Guide" when you will disassemble the CPM.SYS file.


    Yours Sincerely,
    "French Luser"




  9. Re: Able to transfer files CP/M PC, what next?

    "Anonymous Guy" wrote:

    > Instead, why not find a nice French widow? Preferably, one who has
    > money -- so that you can have your own Internet connection at home,
    > and don't have to visit the cyber-cafes.


    I am afraid that you are totally off topic.

    (And why a widow?)

    (And if I prefer cafe?)

    "French Luser"




+ Reply to Thread