Image Map Image Map
Page 3 of 3 FirstFirst 123
Results 21 to 24 of 24

Thread: Exidy Sorcerer - Vista - Hard sector floppy disk image format question

  1. #21
    Join Date
    Mar 2013
    Location
    Chaffee, MO
    Posts
    1,203

    Default

    exiyboy,
    Yes, I understand exactly. I was just wanting to see what was missing from the file as there is a MBIOS.$$$ on the floppy with
    ZERO bytes. I was hoping that the MBIOS.MAC file wasn't lost forever.

    THANKS.

    Larry

  2. #22

    Default

    Found an article in sorcerers_apprentice_v04_06.pdf page 114 that describes reading Northstar disks in a Vista system. It goes into some details of the disk structure. On page 116 it says (middle of second column) -

    The CP/M directory on a
    Vista disk is located on sector
    6 of track 1, but on a Northstar
    disk, it is in the first sector
    of track 2.


    That certainly confirms that the RAW images are correct with the Directory starting at 2000h or start of Track 3 if each logical track is 8 sectors of 512 bytes.

    and in v04_04 it quotes

    ERRATA: In issues 3.8, it was
    erroneously stated that the Vista disk
    system uses soft-sectored disks. We
    are advised that it should have read
    10 hard-sectored.

  3. #23
    Join Date
    Mar 2013
    Location
    Chaffee, MO
    Posts
    1,203

    Default

    ChickenMan,
    That was an interesting article. I've taken the PDF's and OCR'd the program listing. There may still be a few mistakes that
    I overlooked.

    Code:
                     ;**********************************************
                     ;* CPYNSTAR - Utility to copy all 35 tracks   *
                     ;* from a Northstar double density disk on    *
                     ;* drive A to a second disk on drive B, in    *
                     ;* Vista format. Unformatted sectors on the   *
                     ;* source disk are output as zero-filled      *
                     ;* sectors.                                   *
                     ;*      Version 2.0 - 3/21/81                 *
                     ;**********************************************
    
                     .PABS           ;GENERATE ABSOLUTE OBJECT MODEL
     0100            .LOC  1OOH      ;ORIGINED AT 1OOH FOR COM FILE
     0100   C3 0115  JMP   START     ;JUMP AROUND SCRATCH AREA
                     ;
                     ;PROGRAM VARIABLES AND EQUATES
                     ;
     C93D            SEEK=0C93DH             ;SEEK & TRACK SECTOR (VOS)
     CBF1            WSEC=0C8F1H             ;WRITE IN VISTA FORMAT (VOS)
     C777            SELDSK=0C777H           ;SELECT DRIVE (VOS)
     C747            MHOME=0C747H            ;HOME THE HEAD (VOS)
     DB50            INDAT=0DB50H            ;DATA INPUT ADDRESS
     D900            REBOOT=0D900H           ;REENTRY INTO CP/M
     E23D            ASCHEX=0E23DH           ;CONVERT ASCII TO BINARY (EXIDY)
     0005            CPMIO=5                 ;CP/M I/O ENTRY ADDRESS
     0D0A            CRLF=0D0AH              ;CARRIAGE RETURN/LINE FEED
     000C            ERASE=0CH               ;CLEAR SCREEN, HOME CURSOR
     0103   00       TRACK:  .BYTE  0        ;CURRENT TRACK NUMBER
     0104   00       SECTOR: .BYTE  O        ;CURRENT SECTOR NUMBER
     0105   0000     BIAS:   .WORD  O        ;ABSOLUTE SECTOR BIAS
     0107   00       SKWFLG: .BYTE  O        ;SET IF SKEWED READ
     0108   00       CRTRY:  .BYTE  O        ;RETRY COUNTER
     0109   00       CRC:    .BYTE  O        ;CRC CHECK BYTE
     010A   00       ERRCD:  .BYTE  O        ;ERROR CODE
     01OB   0000     BIGPTR: .WORD  O        ;TRACK BUFFER POINTER
     010D   06       CMDBUF: .BYTE  6        ;COMMAND ENTRY BUFFER
     010E   00               .BYTE  O        ;CP/M RETURNS CHARACTER COUNT HERE
     010F                    .BLKB  6
                             ;
                             ;PRINT OPERATOR INSTRUCTIONS AND WAIT FOR CARRIAGE RETURN
                             ;
     0115   0E02     START:  MVI    C,2       ;2=WRITE A CHARACTER
     0117   11 000C          LXI    D,ERASE   ;FORM FEED CHAR
     011A   CD 0005          CALL   CPMIO     ;SEND TO CRT
     OllD   0E09             MVI    C,9       ;9=PRINT A BUFFER
     O11F   11 032A          LXI    D,MSG1    ;OPERATOR PROMPT MESSAGE
     0122   CD 0005          CALL   CPMIO     ;SEND TO CRT
     0125   CD 0317          CALL   WAIT      ;WAIT FOR CARRIAGE RETURN
     0128   0E09     INPT:   MVI    C,9
     012A   11 03DF          LXI    D,MSG3    ;REQUEST BIAS FROM OPERATOR
     012D   CD 0005          CALL   CPMIO
     0130   CD 02EC          CALL   INPUT     ;WAIT FOR OPERATOR ENTRY
     0133   3A 010E          LDA    CMDBUF+1  ;GET NO, CHARACTERS ENTERED
     0136   FE05             CPI    5         ;TEST FOR TOO MANY
     0138   30EE             JRNC   INPT      ;TRY AGAIN IF SO
     013A   21 010F          LXI    H,CMDBUF+2;P0INTS TO ENTRY
     013D   7E               MOV    A,M
     013E   FE2D             PCI    "-"       ;WAS ENTRY NEGATIVE?
     0140   2001             JRNZ   IPT1      ;IF SO CONTINUE
     0142   23               INX    H         ;IF NOT ADVANCE POINTER PAST "-"
     0143   CD E23D   IPT1:  CALL   ASCHEX    ;CONVERT ENTRY TO BINARY --> (DE)
     0146   3A 010F          LDA    CMDBUF+2  ;GET FIRST CHARACTER AGAIN
     0149   FE2D             CPI    "-"       ;TEST FOR MINUS
     014B   2006             JRNZ   IPT2      ;BRANCH IF NOT
     0140   16FF             MVI    D,0FFH    ;ELSE NEGATE (DE)
     014F   7B               MOV    A,E
     0150   ED44             NEG
     0152   5F               MOV    E,A
     0153   ED53 0105 IPT2:  SDED   BIAS      ;SAVE BIAS VALUE
     0157   0E09      IPT5:  MVI    C,9       ;NOW ASK FOR SKEW/NO SKEW
     0159   11 0402          LXI    D,MSG4    ;SET MESSAGE POINTER
     015C   CD 0005          CALL   CPMIO     ;PRINT THE PROMPT MESSAGE
     015F   CD 02EC          CALL   INPUT     ;WAIT FOR RESPONSE
     0162   0600             MVI    B,0
     0164   3A 010F          LDA    CMDBUF+2  ;PICK UP ENTRY CHAR
     0167   FE59             CPI    "Y"
     0169   2806             JRZ    IPT3
     016B   FE4E             CPI    "N"
     016D   2803             JRZ    IPT4
     016F   18E6             JMPR   IPT5      ;ENTRY WAS NFG, TRY AGAIN
     0171   04        IPT3:  INR    B         ;SET SKEW FLAG'FOR "Y"
     0172   78        IPT4:  MOV    A,B       ;IF "N", DON'T
     0173   32 0107          STA    SKWFLG    ;THEN SAVE IT
                      ;
                      ;TRACK LOOP - COPY 10 SECTORS FROM EACH OF 35 TRACK5 INTO
                      ;             MEMORY ('BIGBUF'), THEN COPY BUFFER ON OUTPUT
                      ;             DISK            
     0176   3E00             MVI    A,0
     0178   32 0103          STA    TRACK     ;INITIALIZE TRACK POINTER
     017B   0E00             MVI    C,0
     017D   CD C777          CALL   SELDSK    ;SELECT DRIVE A
     0180   CD C747          CALL   MHOME     ;HOME THE HEAD
     0183   0E01             MVI    C,1
     0185   CD C777          CALL   SELDSK    ;SELECT DRIVE B
     0188   CD C747          CALL   MHOME     ;HOME THE HEAD
                      ;
                      ;SET UP FOR TRACK READ
                      ;
     018B   21 045E   TLOOP: LXI    H,BIGBUF  ;BUFFER START ADDRESS
     018E   22 010B          SHLD   BIGPTR    ;INITIALIZE BUFFER POINTER
     0191   0E00             MVI    C,0       ;0 SELECTS DRIVE A
     0193   CD C777          CALL   SELDSK    ;DRIVE SELECT ROUTINE
     0196   3E00             MVI    A,0
     0198   32 0104          STA    SECTOR    ;SET SECTOR POINTER
                      ;
                      ;READ 10 SECTORS
                      ;
     019B   3A 0103          LDA    TRACK
     019E   47               MOV    B,A
     019F   0E00             MVI    C,0       ;POINTS TO SECTOR 0, THIS TRACK
     01A1   CD C93D          CALL   SEEK      ;DUMMY SEEK FOR TIMING
     01A4   CD 0204   RLOOP: CALL   READIN    ;READ NORTHSTAR SECT.
     01A7   A7               ANA    A         ;A-REG RETURNS STATUS
     01A8   C4 0307          CNZ    ZERBLK    ;ERROR IF NOT ZERO
     01AB   3A 0104          LDA    SECTOR    ;GET SECTOR POINTER
     01AE   3C               INR    A         ;INCREMENT
     01AF   32 0104          STA    SECTOR    ;AND STORE
     01B2   2A 010B          LHLD   BIGPTR    ;GET BUFFER POINTER
     01B5   01 0200          LXI    B,512     ;AND SECTOR SlZE
     01B8   09               DAD    B         ;ADD THEM
     01B9   22 010B          SHLD   BIGPTR    ;AND UPDATE POINTER
     01BC   FE0A             CPI    10        ;ALL SECTORS READ?
     01BE   20E4             JRNZ   RLOOP     ;LOOP TIL 10 READ
                      ;
                      ;SET UP FOR WRITING
                      ;
     01C0   21 045E          LXI    H,BIGBUF  ;ADDRESS OF BUFFER
     01C3   22 010B          SHLD   BIGPTR    ;RESET BUFFER POINTER
     0106   0E01             MVI    C,1       :1 SELECTS DRIVE B
     01C8   CD C777          CALL   SELDSK    ;DRIVE SElECT ROUTINE
     01CB   3E00             MVI    A,0
     01CD   32 0104          STA    SECTOR    ;RESET SECTOR POINTER
                      ;
                      ;WRITE 10 SECTORS
                      ;
     01D0   CD  0298  WLOOP: CALL   WRITEV    :WRITE SECTOR IN VISTA FORMAT
     01D3   A7               ANA    A         ;A-REG RETURNS STATUS
     01D4   280A             JRZ    NOERR     ;ZERO IF NO ERROR
     01DB   0E09             MVI    C,9       ;BUT IF WRITE PROTECTED
     01D8   11 042E          LXI    D,EMSG1   ;SET ERROR MESSAGE POINTER
     01DB   CD 0005          CALL   CPMIO     ;AND PRINT THE MESSAGE
     01DE   1816             JMPR   DONE      ;AND QUIT
     01E0   3A 0104   NOERR: LDA    SECTOR    ;GET SECTOR POINTER
     01E3   3C               INR    A         ;INCREMENT
     01E4   32 0104          STA    SECTOR    ;AND SAVE
     01E7   FE0A             CPI    10        ;ALL SECTORS WRITTEN?
     01E9   20E5             JRNZ   WLOOP     ;LOOP TIL 10 WRITTEN
     01EB   3A 0103          LDA    TRACK     ;GET TRACK POINTER
     01EE   3C               INR    A         ;INCREMENT
     01EF   32 0103          STA    TRACK     ;AND STORE
     01F2   FE23             CPI    35        ;ALL TRACKS COPIED?
     01F4   2095             JRNZ   TLOOP     ;CON TILL 35 COPIED
                      ;
                      ;PRINT OPERATOR PROMPT TO RELOAD SYSTEM DISK, WAIT FOR 'RETURN'
                      ;THEN REBOOT CP/M
     01F6   0E09      DONE:  MVI    C,9       ;9=PRINT A BUFFER
     01F8   11 0397          LXI    D,MSG2
     01FB   CD 0005          CALL   CPMIO     ;PRINT OPERATOR PROMPT
     01FE   CD 0317          CALL   WAIT      ;WAIT FOR 'RETURN'
     0201   C3 D900          JMP    REBOOT    ;RETURN TO CP/M
                      ;READN - READ 1 SECTOR FROM NORTHSTAR DISK INTO 512 WORD BLOCK
                      ;        STARTING AT 'BIGPTR'. RETURNS STATUS CODE IN A. IF
                      ;        READ WAS OK, A=0.
                      ;
     0204   2A 010B   READN: LHLD   BIGPTR    ;PICK UP BUFFER POINTER
     0207   DD21 023C        LXI    X,SKWTBL  ;SET POINTER TO SKEW TABLE
     020B   3A 0103          LDA    TRACK
     020E   47               MOV    B,A       ; SET  TRACK  NUMBER
     020F   3A 0107          LDA    SKWFLG    ;PICK UP SKEW FLAG
     0212   A7               ANA    A         ;TEST FLAG STATE
     0213   3A 0104          LDA    SECTOR
     0216   2806             JRZ    RN1       ;IF FLAG WAS O, USE SECTOR NO
     0218   32 021D          STA    RN2+2     ;ELSE SET SKWTBL INDEX POINTER
     021B   DD7E00    RN2:   MOV    A,0(X)    ;AND USE VALUE FOUND
     021E   4F        RN1:   MOV    C,A       ;AS SECTOR NUMBER
     021F   3E0A             MVI    A,10      ;SET RETRY COUNT TO 10
     0221   3D        GSCT2: DCR    A
     0222   32 0108          STA    CRTRY
     0225   E5               PUSH   H         ;SAVE BUFFER POINTER
     0226   C5               PUSH   B         ;SAVE TRACK AND SECTOR N0.
     0227   CD 0246          CALL   LONE      ;READ A SECTOR
     022A   C1               POP    B         ;RETRIEVE TRACK AND SECTOR
     022B   D1               POP    D         ;RETRIEVE BUFFER POINTER
     022C   C8               RZ               ;RETURN IF GOOD READ
     022D   EB               XCHG             ;PUT POINTER BACK IN HL
     022E   32 010A          STA    ERRCD     ;SAVE ERROR CODE
     0231   3A 0108          LDA    CRTRY     ;GET RETRY COUNT
     0234   B7               ORA    A         ;IS IT ZER0?
     0235   20EA             JRNZ   GSCT2     ;IF NOT, TRY AGAIN
     0237   3A 010A          LDA    ERRCD     ;ELSE, GET ERROR CODE
     023A   B7               ORA    A         ;SET UP ZERO FLAG
     0238   C9               RET
                      ;
                      ;SKWTBL - TABLE OF LOGICAL-PHYSICAL SECTOR NUMBER ASSOCIATIONS
                      ;         USED BY LIFEBOAT. EACH ENTRY lS THE PHYSICAL SECTOR
                      ;         NUMBER TO READ FOR THE LOGICAL SECTOR NUMBER, USED AS
     AN               ;         INDEX INTO THE TABLE.
     023C   00        SKWTBL: .BYTE  0
     023D   05                .BYTE  5
     023E   01                .BYTE  1
     023F   06                .BYTE  6
     0240   02                .BYTE  2
     0241   07                .BYTE  7
     0242   03                .BYTE  3
     0243   08                .BYTE  8
     0244   04                .BYTE  4
     0245   09                .BYTE  9
                      ;
                      ;LOAD ONE NORTHSTAR SECTOR
                      ;       B=TRACK
                      ;       C=SECTOR
                      ;       RETURNS NON-ZERO STATUS IF ERROR
                      ;
     0246   CD C93D   LONE:  CALL   SEEK      ;START MOTOR, FIND TRACK/SECTOR
     0249   C0               RNZ              ;RETURN IF ERROR
     024A   37               STC              ;PRESET MSB FOR 1'ST BYTE
     024B   11 DB50          LXI    D,INDAT   ;SET DISK READ ADDRESS
     024E   1A               LDAX   D         ;GET FlRST BYTE
     024F   1F               RAR              ;ROTATE BACK INTO 'PHASE'
     0250   F5               PUSH   PSW       ;AND SAVE LSB OF NEXT BYTE IN CY
     0251   FEFB             CPI    0FBH      ;SYNC CHARACTER?
     0253   203F             JRNZ   SYNERR    ;EXIT IF NOT SYNC CHAR
     0255   F1               POP    PSW       ;RESTORE MSB TO CY
     0256   1A               LDAX   D         ;SECOND 8YTE
     0257   1F               RAR
     0258   F5               PUSH   PSW
     0259   FEFB             CPI    0FBH      ;SYNC CHARACTER?
     025B   2037             JRNZ   SYNERR    ;EXIT IF NOT
     025D   F1               POP    PSW
     025E   01 0000          LXI    B,0       ;CLEAR B & C
                      ;
                      ;READ FIRST HALF OF SECTOR INTO BUFFER
                      ;
     0261  1A         RLUP1: LDAX   D         ;GET NEXT BYTE
     0262  1F                RAR
     0263  77                MOV    M,A       ;SAVE IT 
     0264  23                INX    H         ;ADVANCE BUFFER POINTER
     02B5  05                DCR    B         ;DECREMENT BYTE COUNT
     0266  20F9              JRNZ   RLUP1     ;LOOP TIL 256 BYTES REAO
                      ;
                      ;REAO SECOND HALF OF SECTOR INTO BUFFER
                      ;
     0268  1A         RLUP2: LDAX   D         ;GET A BYTE
     0269  1F                RAR              '
     026A  77                MOV    M,A       ;MOVE TO BUFER
     0268  23                INX    H         ;ADVANCE BUFFER POINTER
     026C  05                DCR    B         ;DECREMENT BYTE COUNT
     026D  20F9              JRNZ   RLUP2     ;LOOP TIL 256 BYTES READ
                      ;
                      ;COMPUTE CRC FROM DATA IN BUFFER
                      ;
     026F  1A                LDAX   D         ;REAO CRC
     0270  1F                RAR
     0271  32 0109           STA    CRC       ;SAVE IT
     0274  01 0000           LXI    B,0       ;CLEAR B & C
     0277  2A 010B           LHLD   BIGPTR    ; RESET BUFFER POINTER
     027A  7E        CRC1:   MOV    A,M       ;GET A BYTE
     027B  A9                XRA    C         ;X-OR WITH CRC
     027C  07                RLC              ;ROTATE LEFT 1
     027D  4F                MOV    C,A       ;AND SAVE NEW CRC
     027E  23                INX    H         ;ADVANCE BUFFER POlNTER
     027F  05                DCR    B         ;AND DECREMENT BYTE COUNT
     0280  20F8              JRNZ   CRC1      ;LOOP TIL 256 BYTES COUNTED
     0282  7E        CRC2:   MOV    A,M       :REPEAT FOR 2ND HALF OF BLOCK
     0283  A9                XRA    C
     0284  07                RLC
     0285  4F                MOV    C,A
     0286  23                INX    H
     0287  05                DCR    B
     0288  20F8              JRNZ   CRC2
     028A  3A 0109           LDA    CRC       ;GET CRC READ FROM DISK
     028D  B9                CMP    C         ;COMPARE WITH COMPUTED VALUE
     028E  3E53              MVI    A,"S"     ;ERROR CODE
     0290  C0                RNZ              ;RETURN IF ERROR
     0291  3E00              MVI    A,0       ;ZERO FOR GOOD READ
     0293  C9                RET
                      ;
                      ;EXIT PROCEDURE FOR BAD SYNC BYTES
                      ;
     0294  F1         SYNERR:POP    PSW        ;CLEAN UF' STACK
     0295  3E56              MVI    A,"V"      ;SYNC ERROR CODE
     0297  C9                RET
                      ;
                      ;
                      ;WRITEV - WRITE ONE SECTOR ON DISK IN VISTA FORMAT FROM 512
                      ;         WORD BLOCK STARTING AT 'BIGPTR', RETURS 'BIGPTR'
                      ;         UPDATED TO START OF NEXT BLOCK, AND STATUS CODE IN A,
                      ;         IF DISK IS WRITE PROTECTED, A CONTAINS "P".
                      ;
                      ;
     0298  3A 0103   WRITEV: LDA    TRACK
     0298  47                MOV    B,A       ;SET TRACK NUMBER
     029C  3A 0104           LDA    SECTOR
     029F  4F                MOV    C,A       ;SET SECTOR NUMBER
     02AO  CD 02BE           CALL   OFFSET    ;USE BIAS TO COMPUTE OFFSET
     02A3  C5                PUSH   B
     02A4  CD C93D           CALL   SEEK      ;DUMMY SEEK, FOR TIMING
     02A7  C1                POP    B
     02A8  2A 010B           LHLD   BIGPTR    :PICK UP BUFFER POINTER
     02AB  CD CBF1           CALL   WSEC      ;CALL VISTA WRITE ROUTINE
     02AE  2A 010B           LHLD   BIGPTR    ;BUFFER POINTER
     02B1  01 0200           LXI    B,512     ;NUMBER OF BYTES WRITTEN
     02B4  09                DAD    B         ;UPDATE POINTER
     02B5  22 010B           SHLD   BIGPTR    ;AND SAVE
     02B8  FE50              CPI    "P"       ;TEST FOR WRITE PROTECTED
     02BA  C8                RZ               ;RETURN IF SO
     02BB  3E00              MVI    A,0       ;ELSE
     02BD  C9                RET              ;RETURN WITH A=0
                      ;
                      ;
                      ;OFFSET - GIVEN A TRACK NUMBER IN (B) AND A SECTOR NUMBER IN
                      ;         (C) COMPUTES THE ABSOLUlE SECTOR NUMBER, THEN ADDS IN
                      ;         THE CONTENTS OF 'BIAS'. THIS RESULT IS THEN CONVERTED
                      ;         BACK TO TRACK AND SECTOR AND RETURNED IN (B) & (C).
                      ;
                      ;
     02BE   C5        OFFSET:PUSH   B        ;SAVE TRACK & SECTOR
     02BF   4B               MOV    C,B      '
     02CO   0600             MVI    B,0      ;NOW (BC)=TRK
     02C2   C5               PUSH   B
     02C3   E1               POP    H        ;COPY TRK INTO (HL)
     02C4   09               DAD    B        ;(HL)=2*TRK
     02C5   29               DAD    H        ;(HL)=4*TRK
     02C6   29               DAD    H        ;(HL)=8*TRK
     02C7   09               DAD    B        ;(HL)=9*TRK
     02C8   09               DAD    B        ;(HL)=10*TRK
     02C9   C1               POP    B        ;GET ORIGINAL ARGUMENTS BACK
     02CA   0600             MVI    B,0      ;NOW (BC)=SECTOR
     02CC   09               DAD    B        ;(HL)*(10*TRK)+SECTOR=ABS. SECTOR
     02CD   ED4B 0105        LBCD   BIAS
     02D1   09               DAD    B        ;NOW ADD IN BIAS
     02D2   CB7C             BIT    7,H      ;TEST SIGN OF RESULT
     02D4   2804             JRZ    OS1      ; BRANCH IF RESULT POSITIVE
     02D6   2600             MVI    H,0      ;ELSE, IF IT WAS NEGATIVE
     02D8   2EOO             MVI    L,0      ;FORCE TO 0
     02DA   0600      OS1:   MVI    B,0      ;CLEAR QUOTIENT
     02DC   0E00             MVI    C,0      ;AND REMAINDER
     02DE   11 000A          LXI    D,10     ;DIVISOR
     02E1   AF               XRA    A
     02E2   ED52      DIV1:  DSBC   D        ;SUBTRACT FROM (HL)
     02E4   3803             JRC    DIV2     ;DONE IF RESULT GOES NEGATIVE
     02E6   04               INR    B        ;ELSE, INCREMENT QUOTIENT
     02E7   18F9             JMPR   DIV1     ;AND CONTINUE
     02E9   19        DIV2:  DAD    D        ;ADD BACK TO GET REMAINDER
     02EA   4D               MOV    C,L      ;MOVE TO C
     02EB   C9               RET             ;AND RETURN
                      ;
                      ;INPUT - WAIT FOR OPERATOR INPUT INTO CMDBUF
                      ;
                      ;
     02EC   3E00      INPUT: MVI    A,0
     02EE   32 010E          STA    CMDBUF+l  ;RESET CHARACTER COUNT
     02F1   21 010F          LXI    H,CMDBUF+2;SET UP TO CLEAR CDBUF
     02F4   11 0110          LXI    D,CMDBUF+3
     02F7   01 0005          LXI    B,5
     02FA   3620             MVI    M,20H     ;ASCII BLANK
     02FC   EDB0             LDIR             ;CLEAR CMDBUF
     02FE   0E0A             MVI    C,10      ;10=BUFFERED READ
     0300   11 010D          LXI    D,CMDBUF
     0303   CD 0005          CALL   CPMIO     ;WAIT FOR INPUT, TERMINATED BY <CR>
     0306   C9               RET
                      ;
                      ;ZERBLK - WRITE 512 ZEROS INTO BLOCK, STARTING AT 'BIGPTR'.
                      ;
     0307   2A 010B   ZERBLK:LHLD   BIGPTR    ;GET ADDRESS OF BLOCK
     030A   ED5B 010B        LDED   BIGPTR
     030E   13               INX    D
     030F   01 01FF          LXI    B,511     ;NUMBER TO WRITE - 1
     0312   3600             MVI    M,0       ;ZERO FIRST BYTE
     0314   EDB0             LDIR             ;BOOT COPY TILL (BC)=0
     0316   C9               RET
                      ;
                      ;WAIT - WAIT FOR CARRIAGE RETURN FROM KEYBOARD THEN RETURN
                      ;
     0317   0E0B      WAIT:  MVI    C,11      ;11=TEST CONSOLE STATUS
     0319   CD 0005          CALL   CPMIO
     031C   CB47             BIT    0,A       ;TEST FOR CHARACTER PRESENT
     031E   28F7             JRZ    WAIT      ;LOOP TIL CHARACTER RECEIVED
     0320   OEOl             MVI    C,1       ;1=READ A CHARACTER
     0322   CD 005           CALL   CPMIO     ;GO GET IT
     0325   FE0D             CPI    0DH       ;WAS IT CARR1AGE RETURN?
     0327   20EE             JRNZ   WAIT      ;WAIT FOR CARRIAGE RETURN
     0329   C9               RET
                      ;
                      ;
                      ;PROMPT AND WARNING MESSAGES
                      ;
     032A   0D0A      MSG1:  .WORD  CRLF
     032C   4C6F6164204E     .ASCII "Load Northstar disk (source} in 'drive A."
     0354   0D0A             .WORD  CRLF,CRLF
     0358   4C6F61642062     .ASCII "Load blank disc in drive B."
     0373   0D0A             .WORD  CRLF,CRLF
     0377   507265737320     .ASCII "Press 'RETURN' to continue."
     0392   0D0A             .WORD  CRLF,CRLF
     0396   24               .BYTE  "$"
     0397   0D0A      MSG2:  .WORD  CRLF
     0399   4C6F61642043     .ASCII "Load CP/M System disk in drive A,"
     03BA   0D0A             .WORD  CRLF
     03BC   7468656E2070     .ASCII "then press 'RETURN' to reboot."
     03DA   0D0A             .WORD  CRLF,CRLF
     03DE   24               .BYTE  "$"
     03DF   0D0A      MSG3:  .WORD  CRLF
     03E1   456E74657220     .ASCII "Enter absolute sector offset $"
     0402   0D0A      MSG4:  .WORD  CRLF
     0404   497320736F75     .ASCII "Is source disk in Lifeboat CP/M format ? $"
     042E   0D0A      EMSG1: .WORD  CRLF,CRLF
     0432   4552524F5220     .ASCII "ERROR - Output disk is write protected."
     0459   0D0A             .WORD  CRLF,CRLF
     045D   24               .BYTE  "$"
                     ; 
                     ;TRACK BUFFER STARTS HERE (10 SECTORS = 5120 BYTES)
                     ;
    045E             BIGBUF=
    185E             EBUFF=BIGBUF+5120
                             .END
    Larry

  4. #24
    Join Date
    Mar 2013
    Location
    Chaffee, MO
    Posts
    1,203

    Default

    OCR typo's I missed:
    Search for "O" (Letter after N) change to "0" (ZERO)
    Search "REAO" change to "READ"
    Search "l" (Lowercase L) change to "1"

    That should do it unless a Label is incorrect, or a jump to Label instruction is incorrect.


    In case you are interested how I converted the PDF's to TIFF's here is my script.

    Code:
    #!/bin/bash
    #
    #Script to convert the PDF's to *.TIFF for OCR'ing
    #
    convert -density 300 pg_0018.pdf pg_0018.tiff
    convert -density 300 pg_0019.pdf pg_0019.tiff
    convert -density 300 pg_0020.pdf pg_0020.tiff
    convert -density 300 pg_0021.pdf pg_0021.tiff
    convert -density 300 pg_0022.pdf pg_0022.tiff
    convert -density 300 pg_0023.pdf pg_0023.tiff
    #
    #OCR the *.tiff's with IRFANVIEW with the OCR PLUGIN Installed.
    #Write the text file that IRFANVIEW finds then you can edit each file, and combine.
    #

    Larry
    Last edited by ldkraemer; August 30th, 2019 at 06:13 AM. Reason: added OCR Info.

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •