Source-Code for the WaveMate Bullet - CP/M

This is a discussion on Source-Code for the WaveMate Bullet - CP/M ; Hello CP/M Fans, someone has the Source-Code for the WaveMate Bullet CP/M 3. Source-Code for the Boot-Eprom and Source-Code BIOS. Greeting Rolf...

+ Reply to Thread
Results 1 to 12 of 12

Thread: Source-Code for the WaveMate Bullet

  1. Source-Code for the WaveMate Bullet

    Hello CP/M Fans,

    someone has the Source-Code for the WaveMate Bullet CP/M 3.

    Source-Code for the Boot-Eprom and Source-Code BIOS.

    Greeting
    Rolf


  2. Re: Source-Code for the WaveMate Bullet

    On Aug 21, 1:15*pm, Rolf Harrmann
    wrote:
    > Hello CP/M Fans,
    >
    > someone has the Source-Code for the WaveMate Bullet CP/M 3.
    >
    > Source-Code for the Boot-Eprom and Source-Code BIOS.
    >
    > Greeting
    > Rolf


    HI Rolf!

    http://groups.google.com/group/wavemate_computers

    Good luck and have a nice day!

    Andrew Lynch

  3. Re: Source-Code for the WaveMate Bullet

    Hello Andrew,

    On Thu, 21 Aug 2008 15:08:33 -0700 (PDT), lynchaj wrote:

    >HI Rolf!
    >
    >http://groups.google.com/group/wavemate_computers
    >
    >Good luck and have a nice day!
    >
    >Andrew Lynch


    There I already looked after.

    The Source-Code is not complete.
    Are missing to a few Assembler Files.

    I have the File Bullet_Cache_BIOS_CBIOS.pdf also by Ommipage ocr and
    am missing a File MINICODE.LIB.

    This File must be a Marco-File.

    Thanks and have a nice day!

    Rolf





  4. Re: Source-Code for the WaveMate Bullet

    On Thu, 21 Aug 2008 19:15:23 +0200, Rolf Harrmann wrote:

    > Hello CP/M Fans,
    >
    > someone has the Source-Code for the WaveMate Bullet CP/M 3.
    >
    > Source-Code for the Boot-Eprom and Source-Code BIOS.
    >
    > Greeting
    > Rolf


    I just found a bunch of techincal info on the Wavemate Bullet - was in a
    storage locker I emptied after a decade and I thought some people might
    like to have it saved. If I scan it is there a cp/m repository where I
    could send the docs?

  5. Re: Source-Code for the WaveMate Bullet

    On Aug 21, 6:51*pm, _
    wrote:
    > On Thu, 21 Aug 2008 19:15:23 +0200, Rolf Harrmann wrote:
    > > Hello CP/M Fans,

    >
    > > someone has the Source-Code for the WaveMate Bullet CP/M 3.

    >
    > > Source-Code for the Boot-Eprom and Source-Code BIOS.

    >
    > > Greeting
    > > Rolf

    >
    > I just found a bunch of techincal info on the Wavemate Bullet - was in a
    > storage locker I emptied after a decade and I thought some people might
    > like to have it saved. *If I scan it is there a cp/m repository where I
    > could send the docs?


    Hi!

    Yes, there is a WaveMate Bullet archive

    http://groups.google.com/group/wavemate_computers

    Thanks!

    Andrew Lynch

  6. Re: Source-Code for the WaveMate Bullet

    On Aug 21, 6:51 pm, _
    wrote:

    > I just found a bunch of techincal info on the Wavemate Bullet - was in a
    > storage locker I emptied after a decade and I thought some people might
    > like to have it saved. If I scan it is there a cp/m repository where I
    > could send the docs?


    The short answer is "no, you want a hardware archive, look around".
    Here's the long answer for what to look for. It's a surprisingly
    difficult question.

    There is no single, simple "CP/M" repository except for early Digital
    Research CP/M software products and manuals. CP/M ran on dozens and
    dozens of hardware systems, possibly hundreds. That's one reason it
    was important in the 70's and 80's.

    Hardware documentation online for systems which ran CP/M is often
    found in various privately-run archives for S-100 systems; or for
    archives of manuals for both minicomputers and microcomputers. There
    are also specific on-line archives by company & brand. Some archives
    are specialized by processor, or by "bus" like S-100. I don't know of
    any "single board Z80" archives, which describes the Bullet I believe.

    Also, not all archives or collections are of on-line or scanned
    documents; I have an extensive PAPER archive of S-100 and related
    hardware documents. I'm not the only one to offer paper copies only. I
    and others list manuals by title and brand and model.

    Some archives or some mirrors of archives only last a few years, or
    may last for several years. The scanned on-line archives often have
    overlapping contents for obvious reasons. If you want to preserve your
    WaveMate documents, provide them to multiple archives.

    A Google Web search or a search of posts in comp.os.cpm for "S-100
    manuals" or "hardware manuals", Z80 computer hardware", etc. will find
    some of these archives. Searches for brand names will find brand-
    specific archives.

    But there are a few large archives which cross processor and bus
    boundaries, such as

    http://www.bitsavers.org/
    http://vt100.net/manx/ (a catalog of archive sites)
    http://www.hartetechnologies.com/manuals/ (mostly but not exclusively
    S-100)

    ...and probably others. Over periods of decades, these come and go.
    That's not a joke: the first CP/M archives were started in the 1970's,
    as 8-inch disk collections of contributed software.

    Herb Johnson
    retrotechnology.com



  7. Re: Source-Code for the WaveMate Bullet

    Rolf Harrmann skrev:
    > There I already looked after.

    You don't get to many answer on this subject!
    (people are going fishing)...


    > The Source-Code is not complete.
    > Are missing to a few Assembler Files.


    The CP/M+ 3 source are THE source the Wave Mate Inc.
    send with the "rev E" board! , (my board).
    (i think i'm that 4'th member of that group that
    newer found the time to introduce himself)...


    > I have the File Bullet_Cache_BIOS_CBIOS.pdf also by Ommipage ocr and
    > am missing a File MINICODE.LIB.


    Great!, could You please send it to the group,
    i was sure i had to do that work,... thank You!


    But OK,... You need info for Your SYSTEC board, yes?
    (and not for the Bullet)...

    When You look at the SYSTEC code You will look
    for some data-struct like in the end of this,
    the programming style differ from programmer to
    the next, but all in all Your best friend is:
    "CP/M Plus Operating System System Guide"
    where appendix I.4 gives just another example...

    Some "snips" from fd.z80, is this use-full?
    good luck,


    ---my dis from fddrv.rel---
    ---rework to fd.z80---
    ; 18 March 1991
    Name FdDrv

    Entry FdInit, FdLgin, FdRead, FdWrit, FdTick
    Entry ?PdErr

    Extrn IniStm, FdVers, CntFlu, CntSpi

    Extrn ?Pdec, ?Pmsg
    Extrn ?Wboot, ?ConIn, ?ConO

    Extrn @Adrv, @Rdrv, @Dma, @Dbnk
    Extrn @Sect, @Trk, @ErMde

    FddVer Equ 6 ; Version #, WM:= 5
    FddRev Equ 'f' ; intern ID

    WaitLoop Equ 16

    ; HdW Port's #
    FdcCmd Equ 10H
    FdcSta Equ FdcCmd
    FdcTrk Equ 11H
    FdcSec Equ 12H
    FdcDta Equ 13H

    Dma Equ 14H
    FdxCtl Equ 16H
    DmaMux Equ 17H
    FdHwCnl Equ 18H
    HrdSta Equ 19H

    ; 1793 Fdc Cmd's ; xxxTHVRR
    ; 001xxxxx step
    ; 010xxxxx step in
    ; 011xxxxx step out
    ; xxx1xxxx track
    ; xxxx1xxx head load
    ; xxxxx1xx verify
    ; xxxxxxRR step rate
    CcfRstor Equ 03H
    CcfSeek Equ 1CH
    CcfRead Equ 80H
    CcfWrite Equ 0A0H
    CcfRadr Equ 0C0H
    CcfVrfy Equ 0FFH ; (software, not 179x Cmd)

    ; Fdc Status error mask
    SkMsk Equ 99H ; Seek OK
    RdMsk Equ 9DH ; Read OK
    WrMsk Equ 0FDH ; Write OK

    ; DMA cmd's
    DmaDisa Equ 83H ; deselect
    DmaEnab Equ 87H ; enable
    DmaRezz Equ 0C3H ; reset
    DmaRdSt Equ 0BFH ; read status

    ; DMA mask bit
    DmaRdy Equ 20H

    ; DmaMux values for physical bank moves
    Dmm11 Equ 00001000B ; 08H, bank1 -> bank1
    Dmm01 Equ 00010000B ; 10H, bank0 -> bank1
    Dmm10 Equ 00011000B ; 18H, bank1 -> bank0
    Dmm00 Equ 00000000B ; 00H, bank0 -> bank0

    ; Hardware select
    noUnit Equ 06H ; select no unit, LED's out
    MxDD Equ 10H ; Software sel.
    MxSD Equ MxDD+8 ; + Density pin
    MnDD Equ MxDD+5 ; PLO + 1MHz
    MnSD Equ MnDD+8 ; + Density pin

    ; Const
    MaxRW Equ 12
    Verify Equ 12
    Retry Equ 5
    Spinn Equ 150

    ; ASCII
    CtrlC Equ 03
    Bell Equ 07
    Lf Equ 10
    Cr Equ 13
    Esc Equ 27


    Dseg ; Code in System bank
    FndUni: POP HL ; get ret addr
    PUSH IX
    PUSH IY
    PUSH HL
    LD A,(@Rdrv) ; unit #
    LD HL,X17x8-17
    LD BC,17
    AND 7 ; unit 0..7
    INC A

    NxtUni: ADD HL,BC
    DEC A
    JR NZ,NxtUni

    EX (SP),HL
    POP IX
    JP (HL)


    FdInit: CALL FndUni
    LD A,(BootFlg) ; ColdStart ?
    Inc A
    Jr Z,Finit ; B/ no

    Ld A,-1
    Ld (BootFlg),A ; Set Flag
    Ld HL,Cright$ ; yes,
    Call ?Pmsg ; print copyright msg
    LD HL,(FdVERS)
    LD DE,FddVer ; test version
    SBC HL,DE
    JR Z,Finit ; B/ OK

    LD HL,VerMsg ; not OK
    CALL ?PMsg
    LD HL,FdVERS ; tell user,
    CALL ?PDec

    Stopp: JR Stopp ; and Halt

    Finit: LD A,(@Rdrv)
    AND A,7 ; unit 0..7
    OR A,8
    LD (IX+00),A ; Unit #
    LD IY,Y12$72x3
    LD DE,12+72
    LD B,3

    Fini1: XOR A
    LD (IY+02),A
    LD (IY+03),A
    LD (IY+04),A ; R/WTO
    ADD IY,DE
    DJNZ Fini1

    LD B,8
    LD IX,X17x8
    LD DE,17

    Fini2: LD (IX+02),-1
    ADD IX,DE
    DJNZ Fini2

    XOR A
    LD (CntFlu),A
    LD A,Spinn
    LD (CntSpi),A
    POP IY
    POP IX
    RET


    FdLgin: LD (StackP),SP
    LD SP,StackP
    XOR A
    LD (CntFlu),A
    LD (CntSpi),A
    CALL FndUni ; HL point to X17x8(.d.)
    PUSH DE ; point to XDPH
    PUSH IX
    LD IY,Y12$72x3
    LD B,3

    Flgi1: PUSH BC
    CALL Flush
    POP BC
    LD DE,12+72
    ADD IY,DE
    DJNZ Flgi1

    POP IX
    POP DE ; XDPH
    LD HL,-12
    ADD HL,DE
    LD A,(HL) ; any alternate DPB ?
    INC HL
    OR (HL)
    JP Z,Flgi11 ; B/ no

    PUSH DE ; yes, find out what
    LD A,(@Rdrv)
    SET 3,A
    OUT (FdxCtl),A
    LD (XfCMD),A
    AND 4 ; Drive type
    LD B,A
    PUSH BC
    LD C,MxDD ; 10H
    BIT 2,A ; Maxi / Mini ?
    JR NZ,Flgi2 ; B/ Maxi

    LD C,MnDD ; else Mini 15H

    Flgi2: LD A,C
    LD (HwCMD),A
    OUT (FdHwCnl),A
    CALL GetID
    AND RdMsk
    JR NZ,Flgi3

    POP BC
    LD A,(Id$Len)
    LD (SecLen),A
    OR B ; mini / maxi
    SET 4,A ; DD flag
    Ld B,A
    Push BC
    JR Flgi6

    Flgi3: LD C,MxSD ; try single density 19H
    LD A,(XfCMD)
    BIT 2,A
    JR NZ,Flgi4

    LD C,MnSD ; else Mini 1FH

    Flgi4: LD A,C
    LD (HwCMD),A
    OUT (FdHwCnl),A
    CALL GetID
    AND RdMsk
    POP BC
    JR Z,Flgi5

    POP HL
    LD HL,0000 ; no @DPH
    JP Return

    Flgi5: LD A,(Id$Len)
    LD (SecLen),A
    OR B ; mini / maxi
    LD B,A
    PUSH BC

    Flgi6: LD A,(XfCMD)
    SET 4,A
    LD (XfCMD),A
    OUT (FdxCtl),A
    LD A,(HwCMD)
    OUT (FdHwCnl),A
    CALL GetID
    AND RdMsk
    POP BC
    JR NZ,Flgi7

    LD A,(Id$Sid)
    Cp 1 ; Single Side ?
    JR NZ,Flgi7 ; B/ yes

    LD A,(Id$Len) ; still same disk ?
    LD E,A
    LD A,(SecLen)
    CP E
    JR NZ,Flgi7

    LD A,B
    SET 3,A ; Double side
    LD B,A

    Flgi7: POP DE
    PUSH DE
    LD HL,-12 ; alt DrvTbl
    ADD HL,DE
    LD A,(HL)
    INC HL
    LD H,(HL)
    LD L,A ; HL point to alt DrvTbl

    Flgi8: LD A,(HL) ; Media
    CP B ; Same ?
    JR Z,Flgi10 ; B/ yes

    CP -1 ; end of table ?
    JR Z,Flgi9 ; B/ yes

    LD DE,0005 ; else
    ADD HL,DE ; get next alt
    JR Flgi8 ; , and try this one

    Flgi9: OR A ; can't find
    POP DE ; right media
    JP Return

    Flgi10: INC HL ; Found Alt DrvTbl
    LD C,(HL)
    INC HL
    LD B,(HL) ; BC = addr Trans
    INC HL
    LD A,(HL)
    INC HL
    LD H,(HL) ; HL = DPB
    LD L,A
    POP DE ; DE = XDPH
    PUSH DE
    PUSH HL
    EX DE,HL
    LD (HL),C ; unit
    INC HL
    LD (HL),B ; type
    POP BC ; DPB
    LD DE,11
    ADD HL,DE ; point to Addr DPB
    LD (HL),C
    INC HL
    LD (HL),B ; set to DPB
    POP DE

    Flgi11: PUSH DE ; XDPH
    LD HL,12 ; offset DPB
    ADD HL,DE
    LD A,(HL)
    INC HL
    LD H,(HL)
    LD L,A
    LD A,(HL) ; DPB in HL
    LD (IX+06),A ; SPT
    LD DE,17 ; offset DEN
    ADD HL,DE
    LD A,(HL)
    AND 1 ; non zero is DD
    LD C,A ; flag in C
    INC HL
    LD A,(HL)
    LD (IX+04),A ; SIDE & scheme
    INC HL
    LD A,(HL)
    LD (IX+05),A ; RPS
    INC HL
    LD A,(HL)
    LD (IX+03),A ; SRAT
    INC HL
    LD A,(HL)
    LD (IX+07),A ; WPTRK
    INC HL
    LD A,(HL)
    LD (IX+08),A ; RTO
    INC HL
    LD A,(HL)
    LD (IX+09),A ; WTO
    LD A,(IX+00)
    AND 4
    RRCA ; 0 or 2
    OR C ; add density (0..3)
    LD HL,DcIndX ; array(0..3) of cmd's
    LD E,A
    LD D,00
    ADD HL,DE ; index (0..3)
    LD A,(HL)
    LD (IX+01),A ; FdxCmd
    LD (IX+02),00

    LD IX,X17x8 ; point to start
    LD B,8 ; init all 8 IX
    LD DE,0000

    Flgi12: PUSH BC ; repeat
    INC (IX+02)
    JR Z,Flgi15

    LD A,(IX+06) ; SPT
    LD BC,128 ; log record length
    LD HL,0000

    Flgi13: ADD HL,BC ; calc byte pr. track
    DEC A
    JR NZ,Flgi13

    EX DE,HL ; DE:= byte pr. track
    PUSH HL
    XOR A
    SBC HL,DE
    POP HL
    JR NC,Flgi14
    ; DE:= the largest
    EX DE,HL
    Flgi14: EX DE,HL

    Flgi15: DEC (IX+02)
    LD BC,17 ; point to next
    ADD IX,BC
    POP BC
    DJNZ Flgi12 ; B/ until 8 IX


    LD IY,Y12$72x3
    LD B,3 ; init all 3 IY
    LD C,00 ; zero C
    LD HL,0000 ; and HL

    Flgi16: XOR A ; clear carry bit
    SBC HL,DE ; point to start
    LD (IY+07),L ; of trackbuffer
    LD (IY+08),H ; in DMAmemory

    PUSH BC
    LD BC,12+72
    ADD IY,BC ; next buffer
    PUSH HL
    LD BC,0C000H ; DMAmemory full ?
    XOR A
    SBC HL,BC
    POP HL
    POP BC
    JR C,Flgi17 ; B/ yes
    ; else
    INC C ; next drive
    DJNZ Flgi16

    Flgi17: LD A,C
    LD (DinUse),A
    POP HL ; @DPH
    XOR A
    JP Return

    ---snip---

    DoRadr: LD B,MaxRW ; try this # of time

    doadR1: LD A,CcfRadr
    LD HL,Id$Buf
    PUSH BC
    CALL Exec$A
    POP BC
    AND RdMsk
    RET Z

    DJNZ doadR1 ; try one more ?

    Jr DoExEr


    DoVrfy: LD A,CcfVrfy
    LD HL,Buffer
    Jr DoExec

    DoRead: LD A,CcfRead

    DoExec: CALL Exec$A
    AND RdMsk
    RET Z

    Jr DoExEr

    DoWrite: LD A,CcfWrite
    CALL Exec$A
    AND WrMsk
    RET Z

    DoExEr: Or -1
    Ret


    Exec$A: PUSH AF
    LD A,(IX+01)
    OUT (FdHwCnl),A
    LD A,(IY+05) ; Psector
    OUT (FdcSec),A

    ExcRdy: IN A,(FdcSta)
    AND 81H ; Ready ?
    JR NZ,ExcRdy

    LD B,(IX+05) ; RPS
    LD C,00 ; calc
    SRL B ; sector length-1
    RR C
    DEC BC

    POP AF
    PUSH HL
    CP CcfVrfy
    JR NZ,exe$1

    LD A,CcfRead
    LD (Dma3W1),BC
    LD HL,DmaS3 ; verify
    JR exe$5

    exe$1: CP CcfRadr
    JR NZ,exe$2

    LD BC,6-1 ; length-1
    JR exe$3

    exe$2: CP CcfRead
    JR NZ,exe$4

    exe$3: LD (Dma4W2),BC
    LD (Dma4W1),HL
    LD HL,DmaS4 ; read from FDC
    JR exe$5

    exe$4: LD (Dma5W2),BC
    LD (Dma5W1),HL
    LD HL,DmaS5 ; write to FDC

    exe$5: PUSH AF
    LD A,Dmm11
    OUT (DmaMux),A
    CALL IniStm
    Pop AF
    POP HL
    LD B,A
    CP CcfRadr
    JR Z,exe$6

    LD A,(XfCMD)
    OUT (FdxCtl),A
    BIT 4,A ; side 2 ?
    JR Z,exe$6 ; B/ no

    SET 1,B
    SET 3,B

    exe$6: IN A,(HrdSta)
    And 10H ; head load ?
    JR NZ,exe$7

    SET 2,B

    exe$7: LD A,B
    CALL GtIREQ
    LD A,DmaDisa
    OUT (Dma),A
    LD A,DmaRdSt
    OUT (Dma),A ; read DMA status
    IN A,(Dma)
    AND A,DmaRdy
    Jr Z,exe$X

    PUSH HL ; reset DMA error
    LD HL,rZdma
    CALL IniStm
    POP HL
    Or 4 ; data lost

    exe$X: RET


    ; get FDC status
    GtStat: LD A,(IX+00)
    OUT (FdxCtl),A
    LD A,0D0H
    OUT (FdcCmd),A
    Rept 6
    Ex (SP),HL
    EndM
    Jr GstatX


    GtIREQ: OUT (FdcCmd),A
    ; wait until FDC is ready
    IrqRdy: IN A,(HrdSta)
    BIT 6,A ; IREQ
    JR Z,IrqRdy

    GstatX: IN A,(FdcSta) ; return FDC status
    Ld (DskErr),A
    RET


    GetID: LD HL,49152 ; time out

    GidRdy: IN A,(FdcSta)
    AND 81H ; Ready ?
    JR Z,GtAddr ; B/ yes

    DEC HL ; no, count down
    LD A,H
    OR L ; zero ?
    JR NZ,GidRdy ; B/ no

    OR -1 ; Z flag and (A)
    RET

    GtAddr: LD A,CcfRadr
    LD HL,Id$Buf
    PUSH HL
    JP exe$1


    MovMem: OUT (DmaMux),A
    LD (MvMMs),HL
    LD (MvMMd),DE
    LD HL,MovMM$
    CALL IniStm

    MomRdy: IN A,(Dma)
    AND DmaRdy
    JR NZ,MomRdy

    LD A,DmaDisa
    OUT (Dma),A
    RET

    ---snip---

    ; String to DMA: Reset DMA
    rZdma: DefB Lgt1,Dma
    DefB DmaRezz,DmaRezz ; DMA Reset
    DefB DmaRezz,DmaRezz
    DefB DmaRezz,DmaRezz
    DefB 14H,28H ; A=Inc, B=fixed port
    DefB 80H,82H
    Lgt1 Equ $-(rZdma+2)
    DefB 0

    ; Init stream to DMA: Memory to Memory
    MovMM$: DefB Lgt2,Dma ; # byte, port #
    DefB DmaDisa,7DH ; DISABLE DMA, ADR & BLK LEN FOLLOW
    MvMMs: DefS 2 ; addr source
    DefW 128-1 ; #byte in xfer -1
    DefB 14H,10H ; A increments, B increments
    DefB 0CDH ; DMA burst mode
    MvMMd: DefS 2 ; addr dest
    DefB 82H,0CFH ; LOAD A, CLR BYTE COUNT
    DefB 8BH ; REINIT STATUS BYTE
    DefB 0B3H ; FORCE READY
    DefB DmaEnab,DmaRdSt ; ENABLE DMA, READ STATUS
    Lgt2 Equ $-(MovMM$+2)
    DefB 0 ; last byte (NULL)
    ; (for IniStm)

    ; Init stream to DMA: FDC to Memory (Buffer)
    DmaS3: DefB Lgt3,Dma
    DefB 7DH
    DefW Buffer ; addr
    Dma3W1: DefS 2 ; cnt-1
    DefB 24H,28H ; A=Dec ?, B= fixed port
    DefB 85H ; xfer byte at a time
    DefB FdcDta ; port addr
    DefB 82H,0CFH
    DefB 1,0CFH ; xfer B -> A
    DefB 8BH,DmaEnab
    Lgt3 Equ $-(DmaS3+2)
    DefB 0

    ; Init stream to DMA: FDC to Memory
    DmaS4: DefB Lgt4,Dma
    DefB 79H
    Dma4W1: DefS 2 ; addr
    Dma4W2: DefS 2 ; cnt-1
    DefB 14H,28H ; A=Inc, B=fixed port
    DefB 85H ; xfer byte at a time
    DefB FdcDta ; port addr
    DefB 82H,0CFH
    DefB 8BH,DmaEnab
    Lgt4 Equ $-(DmaS4+2)
    DefB 0

    ; Init stream to DMA: Memory to FDC
    DmaS5: DefB Lgt5,Dma
    DefB 79H
    Dma5W1: DefS 2 ; addr source
    Dma5W2: DefS 2 ; cnt-1
    DefB 14H,28H ; A=Inc, B=fixed port
    DefB 85H ; xfer byte at a time
    DefB FdcDta ; port addr
    DefB 82H,0CFH
    DefB 5,0CFH ; xfer A -> B
    DefB 8BH,DmaEnab
    Lgt5 Equ $-(DmaS5+2)
    DefB 0
    ;
    ; Addressed by FdLgIn
    DcIndX: DefB MnSD ; 1FH, 5" SD
    DefB MnDD ; 15H, 5" DD
    DefB MxSD ; 19H, 8" SD
    DefB MxDD ; 10H, 8" DD
    ;
    Cright$: DefB 'Copyright 1983, Wave Mate Inc.'
    DefB ' / 1991, ',Cr,Lf
    DefB 'FD version ',FddVer+'0',FddRev
    CrLf$: DefB Cr,Lf,0
    ;
    VerMsg: DefB 'ERROR, floppy disk drive '
    DefB 'version does not match'
    DefB Cr,Lf
    DefB 'FDDRV version is: ',FddVer+'0'
    DefB Cr,Lf
    DefB 'DRVTBL version is: ',0
    ;
    DefS 16
    StackP: DefS 2
    ;
    ---snip---



  8. Re: Source-Code for the WaveMate Bullet

    Hello Ole,

    On Wed, 27 Aug 2008 03:47:53 +0200, Ole Christensen wrote:

    >> I have the File Bullet_Cache_BIOS_CBIOS.pdf also by Ommipage ocr and
    >> am missing a File MINICODE.LIB.

    >
    >Great!, could You please send it to the group,
    >i was sure i had to do that work,... thank You!


    i have uploaded on the Site two Files BETA-Version.

    http://www.hd64180-ecb.de/html/wavematebullet.html

    http://www.hd64180-ecb.de/assets/dow...8/wbulett2.txt

    http://www.hd64180-ecb.de/assets/dow...8/wbulett4.ASM

    >But OK,... You need info for Your SYSTEC board, yes?
    >(and not for the Bullet)...
    >
    >When You look at the SYSTEC code You will look
    >for some data-struct like in the end of this,
    >the programming style differ from programmer to
    >the next, but all in all Your best friend is:
    >"CP/M Plus Operating System System Guide"
    >where appendix I.4 gives just another example...
    >
    >Some "snips" from fd.z80, is this use-full?
    >good luck,
    >


    Many thanks for your Info.

    Rolf


  9. Re: Source-Code for the WaveMate Bullet

    Rolf Harrmann skrev:
    > Hello Ole,
    >
    > i have uploaded on the Site two Files BETA-Version.
    >
    > http://www.hd64180-ecb.de/html/wavematebullet.html
    > http://www.hd64180-ecb.de/assets/dow...8/wbulett2.txt
    > http://www.hd64180-ecb.de/assets/dow...8/wbulett4.ASM
    >
    > Rolf
    >

    Hello Rolf,
    Thank You, well done!

    ....i ran a dis on Your EPROM but:
    i'm not happy with data from 0D4Fh to 0D88h:
    it is for floppy and it is data,
    but i just can't get it to sync 100%
    it could be for the negativ offset used?

    When You later select labels for this then
    go first for the DRI doc and when You ran
    out of ideas look at source from others,
    good exemple can be found at:
    www.e-tech.net/~pbetti/archive/rlee

    /J/JONOS/
    /B/BAMDUA/DV10
    /L/LOOSECPM/155/
    /M/MORROW/

    just to name a couple in that "goldmine".



    ---
    ;LDRBIOS for Systec
    ;; Include cpmldr.asm
    L00FF EQU 0FFH
    ;addr in DRI cpmldr
    L00B0 EQU 00B0H ;cpmldr StackP
    L015B EQU 015BH ;cpmfcb
    L01D7 EQU 01D7H ;(-signon) (why copy?)
    L023D EQU 023DH ;bdos
    ;hi addr
    L2665 EQU 2665H ;StackP
    L2710 EQU 2710H ;buffer?



    ORG 0AB0H
    L0AB0: JP L0B13
    JP L0BE3
    L0AB6: JP L0E69
    L0AB9: JP L0E5F
    L0ABC: JP L0E45
    JP L0E45
    JP L0E45
    JP L0E5F
    JP L0C71
    L0ACB: JP L0C37
    JP L0C74
    JP L0C79
    JP L0C7E
    JP L0C8F
    JP L0CB6
    JP L0E6E
    JP L0C84
    JP L0E6E
    JP L0E69
    JP L0E6E
    JP L0BE3
    JP L0E4F
    JP L0BE4
    JP L0CB2
    JP L0CB6
    JP L0DBC
    JP L0DD4
    JP L0C36
    JP L0C83
    JP L0DC0
    JP 0
    JP 0
    JP 0



    L0B13:
    LD (L0CD8),SP
    LD SP,L00B0
    CALL L0E4F
    CALL L0E2A
    LD HL,L0D4F ;end of @dtbl
    LD B,16 ;all 16
    LD A,0FFH
    LD (L0DCC),A
    L0B2A:
    LD D,(HL)
    DEC HL
    LD E,(HL)
    DEC HL ;point to next drive
    PUSH HL
    PUSH BC
    LD A,E
    OR D
    CALL NZ,L0BCD
    POP BC
    POP HL
    DJNZ L0B2A
    L0B39:
    LD HL,L0D4F ;end of @dtbl
    LD B,16 ;all 16
    L0B3E:
    LD D,(HL)
    DEC HL
    LD E,(HL)
    DEC HL
    PUSH HL
    PUSH BC
    LD A,E
    OR D
    JR Z,L0B7F
    LD C,B
    DEC C
    LD E,0
    CALL L0ACB
    LD A,H
    OR L
    JR Z,L0B7F
    POP BC
    PUSH BC
    LD A,B
    LD DE,L015B ;cpmfcb
    LD (DE),A
    PUSH DE
    LD A,(DE)
    ADD A,'@'
    LD (L0BA1),A
    LD DE,L0B98
    LD C,9
    CALL L023D ;bdos
    POP DE
    LD C,0FH
    CALL L023D ;bdos
    AND A
    JR NZ,L0B7F
    XOR A
    LD (L0DCC),A
    POP AF
    LD (L015B),A ;cpmfcb
    LD SP,(L0CD8)
    RET


    L0B7F:
    POP BC
    POP HL
    DJNZ L0B3E
    LD DE,L0BAC
    LD C,9
    CALL L023D ;bdos
    CALL L0AB9
    LD DE,L0BCA
    LD C,9
    CALL L023D ;bdos
    JR L0B39


    L0B98: DB 0DH,'Booting '
    L0BA1: DB '@:CPM3.SYS$'
    L0BAC: DB ' - Boot Error, to retry:$'
    L0BCA: DB 0DH,0AH,'$'


    L0BCD:
    PUSH DE
    POP IX
    LD A,(IX+0FEH)
    LD (L0CDB),A
    LD A,B
    DEC A
    LD (L0CDA),A
    LD D,(IX+0FDH)
    LD E,(IX+0FCH)
    EX DE,HL
    L0BE2:
    JP (HL)


    L0BE3:
    RET


    L0BE4:
    LD HL,L0D30
    RET


    ;***no ref*** print char at (HL) up to zero
    ; entry: SP point to first char
    N0BE8:
    PUSH BC
    PUSH DE
    L0BEA:
    LD A,(HL)
    OR A
    JR Z,L0BF7
    LD C,A
    PUSH HL
    CALL L0ABC
    POP HL
    INC HL
    JR L0BEA
    L0BF7:
    POP DE
    POP BC
    RET
    ;*** (more fun to just set bit7)


    L0BFA:
    LD B,0
    LD DE,10000
    CALL L0C18
    LD DE,1000
    CALL L0C18
    LD DE,100
    CALL L0C18
    LD DE,10
    CALL L0C18
    INC B
    LD DE,1
    L0C18:
    LD C,0FFH
    OR A
    L0C1B:
    INC C
    SBC HL,DE
    JR NC,L0C1B
    ADD HL,DE
    LD A,C
    OR A
    JR NZ,L0C28
    INC B
    DEC B
    RET Z
    L0C28:
    ADD A,'0'
    LD C,A
    PUSH BC
    PUSH DE
    PUSH HL
    CALL L0ABC
    POP HL
    POP DE
    POP BC
    INC B
    RET


    L0C36:
    RET


    L0C37:
    LD A,C
    AND 0FH
    LD (L0CDA),A
    LD L,A
    L0C3E:
    LD H,0
    ADD HL,HL
    LD BC,L0D30
    ADD HL,BC
    LD A,(HL)
    INC HL
    LD H,(HL)
    LD L,A
    OR H
    RET Z
    LD A,E
    AND 1
    LD A,0
    JR NZ,L0C6B
    PUSH HL
    PUSH IX
    EX DE,HL
    PUSH DE
    POP IX
    LD A,(IX+0FEH)
    LD (L0CDB),A
    LD L,(IX+0FAH)
    LD H,(IX+0FBH)
    CALL L0BE2
    POP IX
    POP HL
    L0C6B:
    AND A
    RET Z
    LD HL,0
    RET


    L0C71:
    LD BC,0
    L0C74:
    LD (L0CDC),BC
    RET


    L0C79:
    LD (L0CDE),BC
    RET


    L0C7E:
    LD (L0CE0),BC
    RET


    L0C83:
    RET


    L0C84:
    LD L,C
    LD H,B
    LD A,D
    OR E
    RET Z

    EX DE,HL
    ADD HL,BC
    LD L,(HL)
    LD H,0
    RET


    L0C8F:
    LD HL,(L0CDA)
    LD H,0
    ADD HL,HL
    LD BC,L0D30
    ADD HL,BC
    LD A,(HL)
    INC HL
    LD H,(HL)
    LD L,A
    OR H
    LD A,0FDH
    RET Z

    EX DE,HL
    PUSH DE
    POP IX
    LD L,(IX+0F8H)
    LD H,(IX+0F9H)
    LD A,(IX+0FEH)
    LD (L0CDB),A
    JP (HL)


    L0CB2:
    LD (L0CE2),A
    RET


    L0CB6:
    XOR A
    RET


    ;print char at(IX) up to bit7 is set
    ; entry: SP point to first char
    L0CB8:
    EX (SP),IX
    PUSH BC
    PUSH DE
    PUSH HL
    L0CBD:
    LD C,(IX+00H)
    RES 7,C
    PUSH IX
    CALL L0ABC
    POP IX
    BIT 7,(IX+00H)
    INC IX
    JR Z,L0CBD

    POP HL
    POP DE
    POP BC
    EX (SP),IX
    RET


    L0CD7: DB 0
    L0CD8: DW 0
    L0CDA: DB 0
    L0CDB: DB 0
    L0CDC: DW 0
    L0CDE: DW 0
    L0CE0: DW 0
    L0CE2: DB 0
    L0CE3: DB 0
    L0CE4: DB 0

    DB '01-Feb-85',0


    ;14 byte to port 60H (DMA)
    L0CEF:
    DB 01H,14H,28H,80H,85H,6BH,8AH,0CFH
    L0CF7: DB 79H ;xfer B->A
    L0CF8: DefW 0,0 ;starting DMA addr, length-1
    DB 0CFH
    ;---

    L0CFD: DW 0
    DB 0
    L0D00: DB 0
    DW 0
    L0D03: DB 0
    DB 0
    L0D05: DB 0
    L0D06: DB 0
    L0D07: DB 0


    L0D08:
    DPB:
    DefW IR0D1C ;next or zero
    DefB 63H ;?hw bit?
    DefW 40 ; 128 BYTE RECORDS PER TRACK
    DefB 4 ; Block shift
    DefB 15 ; Block mask
    DefB 0 ; Extent mask
    DefW 384 ; Maximum block number
    DefW 127 ; Directory max
    DefB 192 ; Alloc0
    DefB 0 ; Alloc1
    DefW 128 ; Check size
    DefW 6 ; Reserved track
    DefB 2,3 ; PHYSICAL SECTOR SIZE & MASK
    ;sectorsize=512
    IR0D1C:
    DefW 0 ;next or zero
    DefB 73H ;?hw bit?
    DefW 40 ; 128 BYTE RECORDS PER TRACK
    DefB 4 ; Block shift
    DefB 15 ; Block mask
    DefB 0 ; Extent mask
    DefW 399 ; Maximum block number
    DefW 255 ; Directory max
    DefB 240 ; Alloc0
    DefB 0 ; Alloc1
    DefW 128 ; Check size
    DefW 0 ; Reserved track
    DefB 3,7 ; PHYSICAL SECTOR SIZE & MASK
    ;sectorsize=1024

    L0D30:
    @dtbl:
    DefW IR0D5F ;disk&A
    DW 0,0,0,0,0,0,0,0 ;disk&B ...
    DW 0,0,0,0,0,0,0 ;... disk&P
    L0D4F equ $-1

    ;***?
    DB 0 ;to sync
    DW 0
    DW 0
    DW IR0D89
    DW IR0FE2
    DW IR105A
    DW IR0F9C
    DW 31H ;(49) DW or 2xDB?
    ;***
    IR0D5F:
    disk&A:
    DW 0
    DW 0
    DW 0
    DW 0
    DW 0
    DW 0FF00H
    DW IR0D78
    DW 0
    ;0D6F
    DW 2000H
    DW IR0F86
    DW IR0F86
    DW 0FFFFH
    Db 0
    ;***

    ;one more disk? a big one!
    IR0D78:
    DW 72
    DB 04
    DB 15
    DB 0
    DW 399
    DW 255
    DB 240
    DB 0
    DW 32768 ;8000H
    DW 0
    DB 3,7
    ;***


    IR0D89:
    RET


    L0D8A:
    PUSH AF
    LD A,87H
    OUT (60H),A
    LD A,(L0CE3)
    OUT (64H),A
    OUT (66H),A
    POP AF
    L0D97:
    OUT (68H),A
    PUSH BC
    LD BC,3072 ;0C00H
    LD A,20 ;14H
    L0D9F:
    DEC A
    JR NZ,L0D9F
    DEC BC
    LD A,B
    OR C
    LD A,80H
    JR Z,L0DB4
    IN A,(68H)
    BIT 0,A
    LD A,80H
    JR NZ,L0D9F
    IN A,(68H)
    AND A
    L0DB4:
    POP BC
    PUSH AF
    LD A,83H
    OUT (60H),A
    POP AF
    RET
    L0DBC:
    EX DE,HL
    LDIR
    EX DE,HL
    L0DC0:
    RET


    ;***no ref***
    DB 0FFH,0FFH
    DB 0,0,0,0
    DB 0,0,0,0
    DefB 0
    ;***

    L0DCC: DB 0
    DB 0
    L0DCE: DB 0
    ;***no ref ***
    DB 0,0,0,0,0
    ;***

    L0DD4:
    NOP
    NOP
    XOR A
    RET


    L0DD8:
    DB 0DH,0AH,'SYSTEC Loader 1.42'
    DB 0DH,0AH,'$'
    L0DEF:
    DB 0DH,0AH,'CP/M Plus System-Loader '
    DB '(c) SYSTEC GmbH Muenster-Roxel'
    DB 0DH,0AH,'$'


    L0E2A:
    LD DE,L0DEF
    LD C,9
    CALL L023D ;bdos
    LD HL,L0DD8
    LD DE,L01D7
    LD BC,22
    LDIR
    XOR A
    LD (L0CE3),A
    LD (L0CE4),A
    RET


    L0E45:
    IN A,(0C6H)
    BIT 2,A
    JR Z,L0E45
    LD A,C
    OUT (0C4H),A
    RET


    ;set up console
    L0E4F:
    LD HL,L0E71
    LD C,0C6H ; port
    LD B,(HL) ; count as first byte!
    INC HL
    OTIR
    LD C,0C8H ; port
    LD B,(HL) ; count as first byte!
    INC HL
    OTIR
    RET


    L0E5F:
    CALL L0E69
    JR Z,L0E5F
    IN A,(0C4H)
    RES 7,A
    RET


    L0E69:
    IN A,(0C6H)
    RRA
    SBC A,A
    RET


    L0E6E:
    OR 0FFH
    RET


    ;setup for console
    ;9 byte for port 0C6H (DART)
    L0E71:
    DB 9
    DefB 18H,04H,4CH,03H,0E1H,05H
    DB 0EAH,01H,0E0H
    ;3 byte for port 0C8H (baud for CTC?)
    DefB 3
    DefB 03H,45H,10H
    ;

    L0E7F:
    EX (SP),HL
    LD A,(HL)
    INC HL
    EX (SP),HL
    LD (L0CD7),A
    PUSH IY
    PUSH IX
    PUSH BC
    PUSH DE
    PUSH HL
    CALL L0EA4
    PUSH AF
    LD A,C
    LD (L0E98),A
    CALL L0CB8
    L0E98: DefB '.',0DH,0AH+80H
    POP AF
    POP HL
    POP DE
    POP BC
    POP IX
    POP IY
    RET


    ;print all kind of errors
    L0EA4:
    LD A,(L0CD7)
    OR A
    JR Z,L0EB9
    DEC A
    JR Z,L0EC3
    DEC A
    JR Z,L0EC3
    DEC A
    JR Z,L0ECF
    LD A,(L0F1E)
    JP L0F5E

    L0EB9:
    CALL L0CB8
    DefB 0DH,'Les','e'+80H
    JR L0ECF
    L0EC3:
    CALL L0CB8
    DefB 0DH,'Berei','t'+80H
    JR L0ECF ;to many errors to fast is newer good!
    L0ECF: LD A,(L0CDA)
    ADD A,'A'
    LD (L0EEC),A
    CALL L0CB8
    DB '-Fehler, Laufwerk '
    L0EEC: DB 'X',':'+80H
    LD A,(L0CD7)
    CP 2
    JR Z,L0F19
    CALL L0CB8
    DB ', Spur',' '+80H
    LD HL,(L0CDC)
    CALL L0BFA
    CALL L0CB8
    DB ', Sektor',' '+80H
    LD HL,(L0CDE)
    PUSH HL
    CALL L0BFA
    POP HL
    L0F19:
    CALL L0CB8
    DB ' ('
    L0F1E: DB 'Neuversuch','/'+80H
    LD A,(L0CD7)
    CP 2
    JR Z,L0F3E
    CALL L0CB8
    L0F33: DB 'Ignorieren','/'+80H
    L0F3E:
    CALL L0CB8
    L0F41: DB 'Abbrechen)',':'+80H
    L0F4C:
    CALL L0AB6
    OR A
    JR Z,L0F57
    CALL L0AB9
    JR L0F4C
    L0F57:
    CALL L0CB8
    DefB 07H+80H
    CALL L0AB9
    L0F5E:
    CP 'a'
    JR C,L0F64
    SUB ' '
    L0F64:
    LD C,A
    LD A,(L0F1E)
    SUB C
    RET Z
    LD A,(L0F41)
    DEC A
    SUB C
    CP 0FFH
    SCF
    RET Z
    LD A,(L0CD7)
    CP 2
    JR Z,L0F82
    LD A,(L0F33)
    INC A
    SUB C
    CP 1
    RET Z
    L0F82:
    LD C,4Eh
    XOR A
    RET


    IR0F86:
    RST 38H


    ;***no ref***
    N0F87: DB 0,0,0,0,0,0,0,0
    DB 0
    DefB 65H,20H

    ;some hardcoded numbers (don't to forget!)
    L0F92:
    DefB 0,1,2,3,4,5,6,7,8,9
    ;


    ;irq
    IR0F9C:
    DI
    LD A,3
    OUT (6EH),A
    OUT (6FH),A
    LD A,20h
    OUT (6CH),A
    LD A,0CFH
    OUT (6EH),A
    LD A,0
    OUT (6EH),A
    LD A,30h
    OUT (6DH),A
    LD A,0CFH
    OUT (6FH),A
    LD A,4Bh
    OUT (6FH),A
    LD HL,L0FD2
    LD B,16 ;length
    LD C,60H
    OTIR
    LD A,32h
    OUT (6DH),A
    L0FC8:
    INC A
    JR NZ,L0FC8
    LD A,30h
    OUT (6DH),A
    XOR A
    EI
    RET


    ;16 byte for DMA, (Reset)
    L0FD2:
    DB 83H,0C3H,0C3H,0C3H,0C3H,0C3H,0C3H
    DB 0AFH,01H,14H,28H,80H,85H,6BH
    DB 8AH,0CFH


    ;
    IR0FE2:
    CALL L1155
    RET C
    LD (L0D03),A
    CALL L1244
    RES 7,(IX+0FFH)
    CALL L1177
    RET C
    L0FF4:
    LD B,4
    L0FF6:
    CALL L127F
    LD A,(L0D05)
    ADD A,A
    ADD A,A
    ADD A,A
    OR 82H
    CALL L0D8A
    AND 9CH
    JR Z,L101E
    BIT 4,A
    LD A,0FFH
    RET NZ
    DJNZ L0FF6
    CALL L0E7F
    NOP
    JR C,L101B
    AND A
    JR Z,L0FF4
    DEC A
    JR Z,L101E
    L101B:
    LD A,1
    RET
    L101E:
    CALL L1026
    RET C
    LD B,4
    JR L0FF6
    L1026:
    LD A,(L0D03)
    DEC A
    LD (L0D03),A
    SCF
    RET Z
    LD HL,(L0CE0)
    LD E,(IX+0F4H)
    LD D,(IX+0F5H)
    ADD HL,DE
    LD (L0CE0),HL
    LD A,(L0CDE)
    INC A
    LD (L0CDE),A
    CP (IX+0F3H)
    JP C,L11B6
    LD A,(L0CDC)
    INC A
    LD (L0CDC),A
    XOR A
    LD (L0CDE),A
    CALL L119D
    RET C
    XOR A
    RET

    ;
    IR105A:
    LD A,(IX+0FEH)
    OUT (6CH),A
    RLCA
    RLCA
    AND 42h
    XOR 2
    LD (IX+0FFH),A
    CALL L10F7
    RET C
    CALL L129E
    LD A,0CH
    CALL L0D97
    CALL L10F7
    RET C
    CALL L129E
    JR NC,L1097
    LD A,(IX+0FFH)
    XOR 2
    LD (IX+0FFH),A
    LD A,(IX+0FEH)
    XOR 80H
    RES 6,A
    LD (IX+0FEH),A
    CALL L10F7
    RET C
    CALL L129E
    RET C
    L1097:
    IN A,(6DH)
    AND 1
    LD L,A
    LD A,(L0D00)
    ADD A,A
    ADD A,A
    ADD A,A
    ADD A,A
    OR L
    OR (IX+0FFH)
    LD (IX+0FFH),A
    LD C,A
    LD DE,L0F92
    CP 63H
    JR Z,L10B5
    LD DE,0
    L10B5:
    LD (IX+00H),E
    LD (IX+01H),D
    LD DE,L0D08
    L10BE:
    EX DE,HL
    LD A,H
    OR L
    LD A,1
    RET Z
    LD E,(HL)
    INC HL
    LD D,(HL)
    INC HL
    LD A,(HL)
    INC HL
    CP C
    JR NZ,L10BE
    LD (IX+0CH),L
    LD (IX+0DH),H
    LD C,(HL)
    INC HL
    LD B,(HL)
    DEC HL
    EX DE,HL
    LD HL,15
    ADD HL,DE
    LD A,(HL)
    LD HL,128
    AND A
    JR Z,L10EB
    L10E3:
    ADD HL,HL
    SRL B
    RR C
    DEC A
    JR NZ,L10E3
    L10EB:
    LD (IX+0F4H),L
    LD (IX+0F5H),H
    LD (IX+0F3H),C
    EX DE,HL
    XOR A
    RET


    L10F7:
    LD A,(IX+0FEH)
    OUT (6CH),A
    AND A
    BIT 5,A
    JR Z,L1124
    LD A,' '
    OUT (6CH),A
    LD A,(IX+0FEH)
    OUT (6CH),A
    IN A,(68H)
    PUSH BC
    LD BC,2048
    L1110:
    DEC BC
    LD A,B
    OR C
    SCF
    JR Z,L1120
    XOR A
    L1117:
    DEC A
    JR NZ,L1117
    IN A,(68H)
    BIT 7,A
    JR NZ,L1110
    L1120:
    POP BC
    RET NC
    JR L1138
    L1124:
    LD A,(IX+0FEH)
    AND A
    OUT (6CH),A
    LD B,80H
    L112C:
    IN A,(68H)
    BIT 7,A
    JP Z,L1148
    CALL L1148
    DJNZ L112C
    L1138:
    CALL L0E7F
    LD (BC),A
    JR C,L1145
    AND A
    JR Z,L10F7
    SCF
    LD A,0FFH
    RET
    L1145:
    LD A,1
    RET
    L1148:
    PUSH BC
    LD B,20 ;14H
    L114B:
    PUSH BC
    LD B,0
    L114E:
    DJNZ L114E
    POP BC
    DJNZ L114B
    POP BC
    RET


    L1155:
    EX DE,HL
    LD A,(HL)
    INC HL
    OR (HL)
    DEC HL
    EX DE,HL
    LD HL,L0CE2
    JR Z,L1162
    LD (HL),0
    L1162:
    LD A,(HL)
    AND A
    LD A,1
    RET Z
    LD A,(HL)
    DEC (HL)
    BIT 7,(HL)
    SET 7,(HL)
    RET Z
    XOR A
    RES 7,(HL)
    CP (HL)
    SCF
    RET Z
    SET 7,(HL)
    RET


    L1177:
    IN A,(6CH)
    XOR (IX+0FEH)
    AND 0FH
    LD (L0D07),A
    CALL L10F7
    RET C
    IN A,(6DH)
    XOR (IX+0FFH)
    AND 1
    JR NZ,L11BE
    LD A,(L0D07)
    AND A
    CALL NZ,L129E
    RET C
    CALL L1272
    CALL NZ,L129E
    RET C
    L119D:
    XOR A
    LD (L0D05),A
    LD HL,L0D06
    LD A,(L0CDC)
    LD (HL),A
    CALL L11C2
    RET C
    LD A,(L0D05)
    RRCA
    RRCA
    OR (IX+0FEH)
    OUT (6CH),A
    L11B6:
    LD A,(L0CDE)
    INC A
    OUT (6AH),A
    AND A
    RET
    L11BE:
    SCF
    LD A,0FFH
    RET


    L11C2:
    CALL L122F
    LD B,5
    L11C7:
    LD HL,L0D06
    LD A,(IX+0F2H)
    OUT (69H),A
    CP (HL)
    RET Z
    LD A,(HL)
    OUT (6BH),A
    LD A,(IX+0FEH)
    RES 4,A
    OUT (6CH),A
    LD A,18H
    OR (IX+0F1H)
    CALL L0D97
    AND 80H
    LD A,(IX+0FEH)
    OUT (6CH),A
    LD A,1
    SCF
    RET NZ
    L11EE:
    LD A,79H ;xfer B->A
    LD HL,L0CFD
    CALL L128C
    LD A,0C4H
    CALL L0D8A
    AND 9CH
    JR Z,L1206
    DJNZ L11EE
    SCF
    LD A,0FFH
    JR L1211
    L1206:
    LD A,(L0CFD)
    LD (IX+0F2H),A
    DJNZ L11C7
    LD A,1
    SCF
    L1211:
    PUSH AF
    CALL L0CB8
    DB 7,'SeekErro','r'+80H
    LD A,0CH
    OR (IX+0F1H)
    CALL L0D97
    XOR A
    OUT (69H),A
    LD (IX+0F2H),A
    POP AF
    RET


    L122F:
    BIT 4,(IX+0FEH)
    JR Z,L1237
    JR L123C
    L1237:
    IN A,(6DH)
    AND 1
    RET NZ
    L123C:
    XOR A
    SRL (HL)
    RLA
    LD (L0D05),A
    RET


    L1244:
    EX (SP),IX
    LD (L2665),SP
    LD SP,L2665
    CALL L126C
    CP 0FFH
    JR NZ,L125A
    LD (IX+0BH),A
    LD (L0DCE),A
    L125A:
    AND A
    JR Z,L1265
    LD IX,L0CE2
    LD (IX+00H),0
    L1265:
    LD SP,(L2665)
    POP IX
    RET


    L126C:
    PUSH IX
    PUSH DE
    POP IX
    RET


    L1272:
    LD A,0D0H
    OUT (68H),A
    NOP
    NOP
    OUT (68H),A
    IN A,(68H)
    AND 20H
    RET


    L127F:
    LD HL,(L0CE0)
    BIT 7,(IX+0FFH)
    LD A,79H ;xfer B->A
    JR Z,L128C
    LD A,7DH ;xfer A->B
    L128C:
    LD (L0CF7),A
    LD (L0CF8),HL
    LD HL,L0CEF
    PUSH BC
    LD B,14 ;length
    LD C,60H ; port#
    OTIR
    POP BC
    RET


    L129E:
    LD A,79H ;xfer B->A
    LD HL,L0CFD
    CALL L128C
    CALL L1272
    LD A,0C0H
    JR NZ,L12AF
    OR 4
    L12AF:
    CALL L0D8A
    AND 9CH
    SCF
    LD A,0FFH
    RET NZ
    LD A,(L0CFD)
    OUT (69H),A
    LD (IX+0F2H),A
    IN A,(6DH)
    AND 1
    LD L,A
    LD A,(L0D00)
    ADD A,A
    ADD A,A
    ADD A,A
    ADD A,A
    OR L
    XOR (IX+0FFH)
    AND 7DH
    RET Z
    LD A,0FFH
    RET

    END
    ---

  10. Re: Source-Code for the WaveMate Bullet

    Hello Ole,

    On Fri, 29 Aug 2008 18:33:19 +0200, Ole Christensen wrote:

    >...i ran a dis on Your EPROM but:
    >i'm not happy with data from 0D4Fh to 0D88h:
    >it is for floppy and it is data,
    >but i just can't get it to sync 100%
    >it could be for the negativ offset used?
    >
    >When You later select labels for this then
    >go first for the DRI doc and when You ran
    >out of ideas look at source from others,
    >good exemple can be found at:
    > www.e-tech.net/~pbetti/archive/rlee
    >
    > /J/JONOS/
    > /B/BAMDUA/DV10
    > /L/LOOSECPM/155/
    > /M/MORROW/
    >
    >just to name a couple in that "goldmine".


    Many thanks for your Info.

    Rolf


  11. Re: Source-Code for the WaveMate Bullet

    Ole Christensen wrote:
    (snip)

    > ...i ran a dis on Your EPROM but:
    > i'm not happy with data from 0D4Fh to 0D88h:
    > it is for floppy and it is data,
    > but i just can't get it to sync 100%
    > it could be for the negativ offset used?

    (snip)

    Note that it searches the table from the end backwards,
    so the address is that of the last byte of a two byte
    word in the table. That is where the -1 comes from.

    I suppose that confuses the disassembler, though.

    > L0B13:
    > LD (L0CD8),SP
    > LD SP,L00B0
    > CALL L0E4F
    > CALL L0E2A
    > LD HL,L0D4F ;end of @dtbl
    > LD B,16 ;all 16
    > LD A,0FFH
    > LD (L0DCC),A
    > L0B2A:
    > LD D,(HL)
    > DEC HL
    > LD E,(HL)
    > DEC HL ;point to next drive
    > PUSH HL
    > PUSH BC
    > LD A,E
    > OR D
    > CALL NZ,L0BCD
    > POP BC
    > POP HL
    > DJNZ L0B2A
    > L0B39:
    > LD HL,L0D4F ;end of @dtbl
    > LD B,16 ;all 16
    > L0B3E:
    > LD D,(HL)
    > DEC HL
    > LD E,(HL)
    > DEC HL
    > PUSH HL
    > PUSH BC
    > LD A,E
    > OR D
    > JR Z,L0B7F


    (snip)

    > L0D30:
    > @dtbl:
    > DefW IR0D5F ;disk&A
    > DW 0,0,0,0,0,0,0,0 ;disk&B ...
    > DW 0,0,0,0,0,0,0 ;... disk&P
    > L0D4F equ $-1
    >
    > ;***?
    > DB 0 ;to sync
    > DW 0
    > DW 0
    > DW IR0D89
    > DW IR0FE2
    > DW IR105A
    > DW IR0F9C
    > DW 31H ;(49) DW or 2xDB?
    > ;***
    > IR0D5F:
    > disk&A:
    > DW 0
    > DW 0
    > DW 0
    > DW 0
    > DW 0
    > DW 0FF00H
    > DW IR0D78
    > DW 0
    > ;0D6F
    > DW 2000H
    > DW IR0F86
    > DW IR0F86
    > DW 0FFFFH
    > Db 0
    > ;***
    >
    > ;one more disk? a big one!
    > IR0D78:
    > DW 72
    > DB 04
    > DB 15
    > DB 0
    > DW 399
    > DW 255
    > DB 240
    > DB 0
    > DW 32768 ;8000H
    > DW 0
    > DB 3,7


    -- glen


  12. Re: Source-Code for the WaveMate Bullet

    glen herrmannsfeldt skrev:
    > Ole Christensen wrote:
    > (snip)
    >
    >> ...i ran a dis on Your EPROM but:
    >> i'm not happy with data from 0D4Fh to 0D88h:
    >> it is for floppy and it is data,
    >> but i just can't get it to sync 100%
    >> it could be for the negativ offset used?

    > (snip)
    >
    > Note that it searches the table from the end backwards,
    > so the address is that of the last byte of a two byte
    > word in the table. That is where the -1 comes from.
    >


    Yes,... thats correct! it should have been:
    "i'm not happy with data from 0D50h to 0D88h"
    it was that "+1"!,.. Thanks for pointing that out.

    > I suppose that confuses the disassembler, though.


    sure, it was, but change 0d50h to DefB fix that,

    later i found this in Rolf's source:
    T00A8:
    pop af ;
    ld ix,0d5fh ;
    ld (ix-0fh),a ;
    (remember it is a 3-part story),
    and again it snaps the end and index negative,
    (but at least 0d50h IS a byte!)



    > (snip)
    >
    >> L0D30:
    >> @dtbl:
    >> DefW IR0D5F ;disk&A
    >> DW 0,0,0,0,0,0,0,0 ;disk&B ...
    >> DW 0,0,0,0,0,0,0 ;... disk&P
    >> L0D4F equ $-1
    >>
    >> ;***?
    >> DB 0 ;to sync
    >> DW 0
    >> DW 0
    >> DW IR0D89
    >> DW IR0FE2
    >> DW IR105A
    >> DW IR0F9C
    >> DW 31H ;(49) DW or 2xDB?
    >> ;***
    >> IR0D5F:
    >> disk&A:
    >> DW 0
    >> DW 0
    >> DW 0
    >> DW 0
    >> DW 0
    >> DW 0FF00H
    >> DW IR0D78
    >> DW 0
    >> ;0D6F
    >> DW 2000H
    >> DW IR0F86
    >> DW IR0F86
    >> DW 0FFFFH
    >> Db 0
    >> ;***
    >>
    >> ;one more disk? a big one!
    >> IR0D78:
    >> DW 72
    >> DB 04
    >> DB 15
    >> DB 0
    >> DW 399
    >> DW 255
    >> DB 240
    >> DB 0
    >> DW 32768 ;8000H
    >> DW 0
    >> DB 3,7

    >
    > -- glen
    >


+ Reply to Thread