| Unix Content | Register | FAQ | Calendar | Search | Today's Posts | Mark Forums Read |
|
#1
|
| 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
|
| 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
|
| 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
|
| 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
|
| 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
|
| 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
|
| 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, 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
|
| 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
|
| 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, 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
|
| 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
|
| 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
|
| 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 > |