DHAESE@BANUIA51.BITNET (04/14/88)
Yesterday I tried to install P2DOS. As CP/M image file I used CPM60.COM, for the APPLE with Softcard 60K. As DOSSTRT address I used DC00h (high memory) and the image location (in CPM60.COM) was 1800h. I was able to make a P2DOS.HEX file without problems, thereafter I used DDT to load the hex file into CPM60.COM. I saved the new CPM60.COM file as P2DOS.COM. So, I installed the new CPM image onto a fresh disk. I tried to do a coldstart from the new disk and my system went bananas! I checked every step again, but I couldn't find any mistake. Is anyone out there who can give me a hint ? D'haese Gratien Univ. of Antwerp (Belgium) Dept. of Physics E-mail : dhaese@banuia51.bitnet
dick_a_wotiz@cup.portal.com (04/16/88)
DHAESE@BANUIA51.BITNET writes: > Yesterday I tried to install P2DOS. As CP/M image file I used CPM60.COM, > for the APPLE with Softcard 60K. > As DOSSTRT address I used DC00h (high memory) and the image location > (in CPM60.COM) was 1800h. I was able to make a P2DOS.HEX file without > problems, thereafter I used DDT to load the hex file into CPM60.COM. > I saved the new CPM60.COM file as P2DOS.COM. So, I installed the new > CPM image onto a fresh disk. > I tried to do a coldstart from the new disk and my system went bananas! > I checked every step again, but I couldn't find any mistake. > Is anyone out there who can give me a hint ? I have run across similar problems with the Apple Softcard. Apparently, Apple uses a completely non-standard BDOS for the Softcard. In fact, there is not a clear split between the BDOS and BIOS as with other systems. Because of the way the Apple II handles bank-switched memory, any changes or replacements to the BDOS and/or BIOS must be customized for the machine, and almost no standard 'drop-in' replacements will work. As an example, there is a special file in the Simtel20 CPM.APPLE archives for installing ZCPR3 with Softcard CP/M, that does some non-standard patches to get it to work properly. Apple did maintain almost all of the BDOS and BIOS call conventions, so it might be possible to get a replacement BDOS to work. If anyone does, I'd sure like to hear about it! Dick Wotiz dick@portal.com ...!{uunet|sun|atari}!portal!dick Apple did maintail
DHAESE@BANUIA51.BITNET (04/19/88)
portal!cup.portal.com!dick_a_wotiz@uunet.uu.net wrote : >I have run across similar problems with the Apple Softcard. Apparently, >Apple uses a completely non-standard BDOS for the Softcard. In fact, >there is not a clear split between the BDOS and BIOS as with other >systems. Because of the way the Apple II handles bank-switched memory, >any changes or replacements to the BDOS and/or BIOS must be customized >for the machine, and almost no standard 'drop-in' replacements will >work. > >As an example, there is a special file in the Simtel20 CPM.APPLE >archives for installing ZCPR3 with Softcard CP/M, that does some >non-standard patches to get it to work properly. > >Apple did maintain almost all of the BDOS and BIOS call conventions, >so it might be possible to get a replacement BDOS to work. >If anyone does, I'd sure like to hear about it! > I promised Don Kirkpatrick a full report of what I did. Here it comes: - my configuration is an Apple ][+ with 64 K of RAM, for running CP/M I have a Softcard 60K with a Z80 processor. I run the Apple Softcard CP/M 2.23 (to coldstart). - On my system disk there are two files to generate a startup disk, nl. CPM56.COM and CPM60.COM, which are similar to the SYSGEN program. The difference is that CPM60.COM has a copy of the CPM image inside the com file and with a SYSGEN program one has to save it. - I used the CPM60.COM to generate a new CP/M com file. addresses in image file addresses in high memory ======================= ======================== CCP: F00h - 17FFh CCP: D300h BDOS: 1800h - 26FFh BDOS: DC00h BIOS: 2700h - 2CFFh BIOS: FA03h P.S.: This are the addresses which I think the CCP, BDOS and BIOS probably begin ? If NOT correct please let me know, because the whole installation procedure falls or stands with it ! - In file P2DOS.MAC I filled the following values in : DOSSTRT = DC00h SE RI AL NU MB ER = BD 16 00 00 EC B8 ORG = 100h I assembled P2DOS.MAC with the M80 assembler. B>a:m80 =p2dos (no errors were produced) B>a:l80 p2dos,p2dos/x/n/e (to generate the p2dos.hex file) - type p2dos.hex gives : :20DC0000BD160000ECB8... ---- ------------ BDOS serialnumber - Combined CPM60.COM with P2DOS.HEX using DDT: B>DDT CPM60.COM -f 1800 26FF 0 (to fill with zeroes) -d 1800 (check if made zero) -i p2dos.hex -r 1700 -d 1800 (check if p2dos is there) -^C B>save 44 P2DOS.COM (new CP/M image file) B>P2DOS (on a fresh disk, writes system tracks) - Switch Apple ON/OFF and insert new CP/M startup system disk. RESULT= a lot of noice, and over and out. - Some final considerations : * who has experience with installing a new Apple CP/M image file ? * why not sharing some specific Apple CP/M details about the BDOS, BIOS and all the rest I don't know about. * I could write a technical report about our results and submit it to SIMTEL20. Fair or not ? I say don't waste energy, because there will be a time we'll be glad we have some left ! From D'haese Gratien Bitnet : dhaese@banuia51 Internet : dhaese%banuia51.bitnet@cunyvm.cuny.edu
donk@dadla.TEK.COM (Donald C. Kirkpatrick;6291236;92-716;LP=A;60rC) (04/20/88)
> I promised Don Kirkpatrick a full report of what I did. Here it comes: > - my configuration is an Apple ][+ with 64 K of RAM, for running CP/M > I have a Softcard 60K with a Z80 processor. > I run the Apple Softcard CP/M 2.23 (to coldstart). > - On my system disk there are two files to generate a startup disk, > nl. CPM56.COM and CPM60.COM, which are similar to the SYSGEN program. > The difference is that CPM60.COM has a copy of the CPM image inside > the com file and with a SYSGEN program one has to save it. > - I used the CPM60.COM to generate a new CP/M com file. > addresses in image file addresses in high memory > ======================= ======================== > CCP: F00h - 17FFh CCP: D300h > BDOS: 1800h - 26FFh BDOS: DC00h > BIOS: 2700h - 2CFFh BIOS: FA03h Actually, your bios starts at FA00h not FA03h but the warm boot is the second jump table entry. Not to worry, P2DOS calculates the bios from DOSSTRT. You didn't put in a P2BIOS equate did you? > > P.S.: This are the addresses which I think the CCP, BDOS and BIOS > probably begin ? If NOT correct please let me know, because > the whole installation procedure falls or stands with it ! > - In file P2DOS.MAC I filled the following values in : > DOSSTRT = DC00h > SE RI AL NU MB ER = BD 16 00 00 EC B8 > ORG = 100h > I assembled P2DOS.MAC with the M80 assembler. > B>a:m80 =p2dos (no errors were produced) > B>a:l80 p2dos,p2dos/x/n/e (to generate the p2dos.hex file) > - type p2dos.hex gives : > :20DC0000BD160000ECB8... > ---- ------------ > BDOS serialnumber Here is one thing I don't understand. When I did this with my M80/L80, the hex load file had 100H for the first load address. I think yours should too. The entry in the BDOS field above must have been 100H else the R command with offset 1700 would not have overlayed the zero-filled area. This address is controlled by the org statement. > > - Combined CPM60.COM with P2DOS.HEX using DDT: > B>DDT CPM60.COM > -f 1800 26FF 0 (to fill with zeroes) > -d 1800 (check if made zero) > -i p2dos.hex > -r 1700 > -d 1800 (check if p2dos is there) > -^C > B>save 44 P2DOS.COM (new CP/M image file) > B>P2DOS (on a fresh disk, writes system tracks) > - Switch Apple ON/OFF and insert new CP/M startup system disk. > RESULT= a lot of noice, and over and out. I sure don't see anything real obvious. One trap I fell into is to try to use M80/L80 and not use the phase pseudo op. I don't think it is possible to build a hex file properly without the org/phase statements as described. Every attempt without using org/phase resulted in hundreds of zero-filled records where I wanted nothing at all. Probably, you didn't delete any org/phase/aseg statement so it should work properly. One assumption made by the installation routine is that the disk-to-image program creates a contiguous image of the bdos. I tried for nearly a week on an old Northstar to get such an image, but I never figured out the track 0-1 skew factor. Every time I loaded in the reserve tracks, the bdos was fragmented all over the image. Let me offer a ray of hope. I am including a program that I almost included with the submital. It trys to load the image into memory starting at address 4000H. That starting address leaves room to load the image and execute DDT/ZSID so you never have to write a .com file to disk. All you have to do is load the image by running the program, run DDT to add the bdos image, then run the program again to write the image to disk. The program is self-documenting, so give it a try and let me know what happens. One word of caution, the program assumes that you have two drives, A and B. The source is always A, the destination B. It also assumes that the skew factor is the same on the reserve tracks as it is on the regular tracks. It trys to read the reserve tracks using the standard bdos calls. This program did not work on a northstar, but you might have better luck. One quick test is to let the program just copy the reserve tracks to a new disk and see if the new disk works. This SYSLOAD program also will calculate all your constants for you. Just type "SYSLOAD D" and it will tell you the values of the P2DOS equates. Question, did you turn off (set false) time stamps? Until the basic problem is solved, it might be wise to remove time stamp calls. IMPORTANT! While this is not your problem, one bug has been found in P2DOS. It occurs on write random with zero fill. (not my bug, I didn't change it) Please make the following change to P2DOS2.MAC: WRITS2: LD C,2 LD A,(FUNCT) SUB 40 JR NZ,WRTS6 PUSH DE LD HL,(DIRBUF) <------ ADD PARENTHESIS !!!!!!!!! LD B,128 WRITS3: Don Kirkpatrick ============================================================================= SYSLOAD Program ============================================================================= TITLE System Loader .Z80 ASEG ORG 100H ; ; This program loads the system from memory or from the disk's reserve tracks. ; Drive A is always the source drive and drive B is the destination drive. ; If the command line contains a "L", then the track image is only loaded ; from the A drive. If the command line contains a "S", then the image is ; assumed to be in memory and only the store to drive B occurs. If the ; command line contains a "C", then the reserve tracks on drive A are ; copied to drive B. ; ; The track image begins at 4000H. This permits one to load an image, ; run ZSID without overlaying the image, then store the image onto drive B. ; FRSTRC EQU 0 ; first record number on sys track SRCDRV EQU 0 ; always load from drive A DSTDRV EQU 1 ; always store to drive B ; BIOS EQU 0001H ; jump to bios address BDOS EQU 0005H ; jump to bdos address CMDBUF EQU 005CH ; default command line buffer FIRST EQU CMDBUF+1 ; first character in command buffer ; CR EQU 0DH LF EQU 0AH ; IMAGE EQU 4000H ; location of track image ; LD (STKSAV),SP ; save stack pointer LD SP,STACK ; and set to own CALL BUILD ; build bios calls LD A,(FIRST) ; valid option? CP 'C' ; copy? JP Z,BEGIN ; yes CP 'L' ; load? JP Z,BEGIN ; yes CP 'S' ; store? JP Z,STORE ; yes CP 'D' ; data? JP Z,DSKDAT ; yes LD C,9 ; not valid, print useage LD DE,USEAGE CALL BDOS JP LEND USEAGE: DEFB CR,LF DEFM "Useage:" DEFB CR,LF,CR,LF DEFM " SYSLOAD C -Copies reserve tracks from drive A to B." DEFB CR,LF DEFM " SYSLOAD L -Loads drive A's reserve tracks into memory." DEFB CR,LF DEFM " SYSLOAD S -Stores memory image onto drive B's reserve tracks." DEFB CR,LF DEFM " SYSLOAD D -Displays data about location of BDOS." DEFB CR,LF,'$' DSKDAT: LD C,9 ; bdos print string LD DE,ADRMSG CALL BDOS LD HL,(BIOS) ; get bios address LD DE,0E03H ; calculate bdos start AND A SBC HL,DE LD (BLOC),HL ; save for serial number CALL PRHL ; go print hl LD C,9 ; time for serial number LD DE,SERMSG CALL BDOS LD HL,(BLOC) ; get bdos loc LD B,6 ; six bytes JR DSP2 DSP1: PUSH HL PUSH BC LD C,9 ; print "H,0" LD DE,CMSG CALL BDOS POP BC POP HL DSP2: LD A,(HL) INC HL PUSH HL PUSH BC CALL PRHEX POP BC POP HL DJNZ DSP1 LD C,9 ; print search for msg LD DE,SMMSG CALL BDOS CALL LOADER ; load track LD DE,IMAGE ; start search at image address DSP3: LD HL,(BLOC) ; search for serial number PUSH DE ; save search address LD A,(DE) CP (HL) ; match byte 1? JR NZ,DSP4 ; no INC HL INC DE LD A,(DE) CP (HL) ; match byte 2? JR NZ,DSP4 INC HL INC DE LD A,(DE) CP (HL) ; match byte 3? JR NZ,DSP4 INC HL INC DE LD A,(DE) CP (HL) ; match byte 4? JR NZ,DSP4 INC HL INC DE LD A,(DE) CP (HL) ; match byte 5? JR NZ,DSP4 INC HL INC DE LD A,(DE) CP (HL) ; match byte 6? JR Z,DSP5 ; match! DSP4: LD HL,128 ; step to next possible loc POP DE ADD HL,DE EX DE,HL LD HL,(DMA) ; off end of buffer? AND A SBC HL,DE JR NZ,DSP3 ; no, go try again LD C,9 ; print not found LD DE,NFMSG CALL BDOS JP LEND DSP5: LD C,9 ; print image found loc LD DE,IMMSG CALL BDOS POP HL LD (IMLOC),HL ; save image location CALL PRHL ; print image address LD C,9 ; print high track address LD DE,HIMSG CALL BDOS LD HL,(DMA) DEC HL CALL PRHL LD C,9 ; print offset for R command LD DE,OF1MSG ; print 100h offset CALL BDOS LD HL,(IMLOC) LD DE,0100H AND A SBC HL,DE CALL PRHL LD C,9 LD DE,OF2MSG ; print org offset CALL BDOS LD HL,(BLOC) CALL PRHL LD C,9 LD DE,OF3MSG CALL BDOS LD HL,(IMLOC) LD DE,(BLOC) AND A SBC HL,DE CALL PRHL LD C,9 LD DE,HMSG CALL BDOS JP LEND ADRMSG: DEFB CR,LF DEFM "BDOS starting address............................0$" SERMSG: DEFB 'H',CR,LF DEFM "BDOS serial number........0$" CMSG: DEFM "H,0$" SMMSG: DEFB 'H',CR,LF DEFM "Searching for BDOS image location$" IMMSG: DEFB CR DEFM "Reserve track image starting address.............04000H" DEFB CR,LF DEFM "BDOS image location in reserve track image.......0$" HIMSG: DEFB 'H',CR,LF DEFM "Reserve track image ending address...............0$" OF1MSG: DEFB 'H',CR,LF DEFM "R command offset if hex load address is 0100H....0$" OF2MSG: DEFB 'H',CR,LF DEFM "R command offset if hex load address is 0$" OF3MSG: DEFM "H...0$" HMSG: DEFB 'H',CR,LF,'$' NFMSG: DEFB CR DEFM "BDOS image was not found on reserve track" DEFB CR,LF,'$' PRHL: LD A,L ; print hl reg as hex word PUSH AF LD A,H CALL PRHEX POP AF PRHEX: PUSH AF ; print acc as hex digit pair RRCA RRCA RRCA RRCA CALL PRHEX1 POP AF PRHEX1: AND 0FH ADD A,90H DAA ADC A,40H DAA LD C,2 ; console output byte LD E,A JP BDOS ; return via bdos BUILD: LD DE,(BIOS) ; build calls LD HL,WBOOT LD B,16 BUILD1: LD (HL),0C3H ; jp INC HL LD (HL),E ; adr lo INC HL LD (HL),D ; adr hi INC HL INC DE INC DE INC DE DJNZ BUILD1 RET LOADER: LD C,14 ; bdos select disk LD E,SRCDRV CALL BDOS LD C,31 ; bdos get disk parameters CALL BDOS LD E,(HL) ; get records/track INC HL LD D,(HL) LD (MAXREC),DE LD DE,12 ; get number of reserved tracks ADD HL,DE LD E,(HL) INC HL LD D,(HL) LD (RESRV),DE ; and save LD C,SRCDRV CALL SELDSK LD E,(HL) ; get translation table INC HL LD D,(HL) LD (TABLE),DE ; and save CALL HOME ; load track 0 LD HL,0 ; reset track counter LD (TRACK),HL LD HL,IMAGE ; set track image address LD (DMA),HL LTRACK: LD HL,FRSTRC ; start at first record LD (RECORD),HL LD BC,(TRACK) ; select track CALL SETTRK LOAD1: LD BC,(DMA) ; update dma address CALL SETDMA LD HL,(RECORD) ; translate record number LD B,H LD C,L LD DE,(TABLE) LD A,D ; any translate? OR E CALL NZ,SECTRN LD B,H ; select proper record LD C,L CALL SETSEC CALL READ ; read it LD HL,(DMA) ; update dma address LD DE,128 ADD HL,DE LD (DMA),HL LD HL,(RECORD) ; increment record number INC HL LD (RECORD),HL LD DE,(MAXREC) ; last record? AND A SBC HL,DE JR NZ,LOAD1 ; no LD HL,(TRACK) ; all tracks loaded? LD DE,(RESRV) INC HL LD (TRACK),HL ; update track counter AND A SBC HL,DE JR C,LTRACK ; more to do RET ; end of loader BEGIN: CALL LOADER ; load track image LD A,(FIRST) ; just load? CP 'L' JP Z,LEND ; yes STORE: LD C,14 ; bdos select disk LD E,DSTDRV CALL BDOS LD C,31 ; bdos get disk parameters CALL BDOS LD E,(HL) ; get records/track INC HL LD D,(HL) LD (MAXREC),DE LD DE,12 ; get number of reserved tracks ADD HL,DE LD E,(HL) INC HL LD D,(HL) LD (RESRV),DE ; and save LD C,DSTDRV CALL SELDSK LD E,(HL) ; get translation table INC HL LD D,(HL) LD (TABLE),DE ; and save CALL HOME ; load track 0 LD HL,0 LD (TRACK),HL LD HL,IMAGE LD (DMA),HL STRACK: LD HL,FRSTRC ; reset record counter LD (RECORD),HL LD BC,(TRACK) ; select proper track CALL SETTRK STORE1: LD BC,(DMA) ; set dma address CALL SETDMA LD HL,(RECORD) ; translate record LD B,H LD C,L LD DE,(TABLE) LD A,D OR E CALL NZ,SECTRN LD B,H ; select record LD C,L CALL SETSEC LD C,0 ; normal write CALL WRITE LD HL,(DMA) ; update dma pointer LD DE,128 ADD HL,DE LD (DMA),HL LD HL,(RECORD) ; increment record number INC HL LD (RECORD),HL LD DE,(MAXREC) ; last record? AND A SBC HL,DE JR NZ,STORE1 ; no LD HL,(TRACK) ; all tracks loaded? LD DE,(RESRV) INC HL LD (TRACK),HL AND A SBC HL,DE JR C,STRACK ; more to do LEND: LD SP,STKSAV ; restore stack RET RECORD: DEFS 2 ; current record TABLE: DEFS 2 ; translate table RESRV: DEFS 2 ; number of reserved tracks TRACK: DEFS 2 ; current track MAXREC: DEFS 2 ; number of records per track DMA: DEFS 2 ; dma address BLOC: DEFS 2 ; location of bdos serial number IMLOC: DEFS 2 ; location of bdos image STKSAV: DEFS 2 ; stack pointer save area DEFS 64 ; stack area (most generous) STACK EQU $ BOOT: DEFS 3 ; calls to bios WBOOT: DEFS 3 CONST: DEFS 3 CONIN: DEFS 3 CONOUT: DEFS 3 LIST: DEFS 3 PUNCH: DEFS 3 READER: DEFS 3 HOME: DEFS 3 SELDSK: DEFS 3 SETTRK: DEFS 3 SETSEC: DEFS 3 SETDMA: DEFS 3 READ: DEFS 3 WRITE: DEFS 3 LISTST: DEFS 3 SECTRN: DEFS 3 END
mwilson@crash.cts.com (Marc Wilson) (04/22/88)
In article <3414@zeus.TEK.COM> donk@dadla.UUCP (Donald C. Kirkpatrick) writes: > > I sure don't see anything real obvious. One trap I fell into is to try > to use M80/L80 and not use the phase pseudo op. I don't think it is > possible to build a hex file properly without the org/phase statements > as described. Every attempt without using org/phase resulted in hundreds > of zero-filled records where I wanted nothing at all. Probably, you didn't > delete any org/phase/aseg statement so it should work properly. One possibility would be to tell L80 to make a hex file with an origin at the location you need. It doesn't have to start at 0100H, you know. > Let me offer a ray of hope. I am including a program that I almost > included with the submital. It trys to load the image into memory > starting at address 4000H. That starting address leaves room to load > the image and execute DDT/ZSID so you never have to write a .com > file to disk. All you have to do is load the image by running the > program, run DDT to add the bdos image, then run the program again > to write the image to disk. The program is self-documenting, so give it > a try and let me know what happens. Why is something like this necessary? The image is up in memory, *above* where DDT/SID/ZSID will load. SYSGEN will load below this. -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Marc Wilson ARPA: ...!crash!mwilson@nosc.mil ...!crash!pnet01!pro-sol!mwilson@nosc.mil UUCP: [ cbosgd | hp-sdd!hplabs | sdcsvax | nosc ]!crash!mwilson INET: mwilson@crash.CTS.COM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dick_a_wotiz@cup.portal.com (04/24/88)
> I promised Don Kirkpatrick a full report of what I did. Here it comes: > - my configuration is an Apple ][+ with 64 K of RAM, for running CP/M > I have a Softcard 60K with a Z80 processor. > . > . > addresses in image file addresses in high memory > ======================= ======================== > CCP: F00h - 17FFh CCP: D300h > BDOS: 1800h - 26FFh BDOS: DC00h > BIOS: 2700h - 2CFFh BIOS: FA03h > > P.S.: This are the addresses which I think the CCP, BDOS and BIOS > probably begin ? If NOT correct please let me know, because > the whole installation procedure falls or stands with it ! A while back I disassembled and analyzed CPM60.COM for CP/M 2.23 on my Apple II, and this is the memory map that it appears to use: CPM60.COM address memory address ----------------- -------------- BIOS 500h - AFFh B000h - B5FFh (in Language Card Bank #2) CCP F00h - 17FFh D300h - DBFFh BDOS 1800h - 1BFFh DC00h - DFFFh BDOS 1C00h - 26FFh B5C0h - BFBFh (in Language Card Bank #2) BIOS 2700h - 2CFFh FA00h - FFFFh Since the Apple only has contiguous memory from 0000h - DFFFh, it is necessary to split the BDOS into two parts; one is in high memory at DC00-DFFFh, where you would expect it to be, but the other half is in bank-switched memory, accessible only if the appropriate bank-switching routines are inserted into the DC00-DFFFh section of the BDOS. Likewise, the BIOS is split in two pieces in memory. I don't think there is any easy way of installing a different BDOS without very extensive modification/customization for the memory configuration that Apple uses. By the way, someone reminded me that this 'warped' implementation of CP/M is not Apple's fault, as I had implied in a previous posting. It was developed for them by Microsoft for the Softcard. (Hmmm.... aren't they one of Digital Research's competitors, anyway? :-) ) Dick Wotiz dick@portal.com dick@cup.portal.com ...!{uunet|sun|atari}!portal!dick
donk@dadla.TEK.COM (Donald C. Kirkpatrick;6291236;92-716;LP=A;60rC) (04/26/88)
In article <2864@crash.cts.com> mwilson@crash.CTS.COM (Marc Wilson) writes: >In article <3414@zeus.TEK.COM> donk@dadla.UUCP (Donald C. Kirkpatrick) writes: >> >> I sure don't see anything real obvious. One trap I fell into is to try >> to use M80/L80 and not use the phase pseudo op. I don't think it is >> possible to build a hex file properly without the org/phase statements >> as described. Every attempt without using org/phase resulted in hundreds >> of zero-filled records where I wanted nothing at all. > > One possibility would be to tell L80 to make a hex file with an origin >at the location you need. It doesn't have to start at 0100H, you know. If anyone knows how to force M80/L80 to make a .hex file with an origin at a location other than 100H without zero-filling all the space between 100H and the requested origin, I sure would like to KNOW. I am aware of all the switches in both M80 and L80. I sure can't find the magic combination. Perhaps I have an incorrect use of one of the pseudo ops (ASEG, ORG and so on). Please include your pseudo ops in your answer. >> Let me offer a ray of hope. I am including a program that I almost >> included with the submital. It trys to load the image into memory >> starting at address 4000H. That starting address leaves room to load >> the image and execute DDT/ZSID so you never have to write a .com >> file to disk. All you have to do is load the image by running the >> program, run DDT to add the bdos image, then run the program again >> to write the image to disk. > > Why is something like this necessary? The image is up in memory, >*above* where DDT/SID/ZSID will load. SYSGEN will load below this. The image in memory that is to receive the new BDOS patch is the reserve track image from the boot floppy. This reserve track image contains more than just a copy of the operating system. There is also a cold start loader, perhaps a sign-on message, maybe even a default command to be executed the first time the CCP is given control. It is the reserve track image that must be patched and that presents a problem. CPM standards do not exist for the reserve track format. The best I can do is to provide a tool in the event the BDOS image is contiguous on the reserve track(s). I might note that it is even presumptuous to assume that I can read the reserve tracks using standard BDOS calls. Quite often the skew factor on the reserve tracks are different than the standard tracks to optimize warm boots. (That was my problem with the Northstar, for those of you who have been patiently following this discussion.) Don Kirkpatrick