binder@asd.dec.com (NOW willya gimme some fightin' room?) (11/25/86)
Netlanders, My query for Applicard information brought a flurry of "Please post whatever you learn" requests, together with one reply from Jim Gilbert containing lots of stuff that he's assembled over time, which I've digested here. First, info on PCPI itself. The company is still alive and well, but no longer marketing Apple stuff, preferring to concentrate on the more lucrative (Aagghhh!) IBM market. They still support the Applicard, and apparently very well. There is an OEM technical support package available from PCPI for about $50.00. It includes a couple of disks with sample drivers for all device classes, a 6502 cross-assembler that runs on the Z80, and other software, together with documentation. I have ordered a copy of this package - I'll know the exact cost when it gets here. It was $50.00 when Jim Gilbert's information was gathered. There is very little information available about the hardware, but the PCPI Technical Support people seem to be willing to answer questions in as much detail as you want. Keep your queries to hardware - if it's software info you're after, spring for the OEM package. The USnail address for PCPI is: PCPI 1150 West Bernardo Ct San Diego, CA 92127 Phone is (619) 485-8411 The Piggyback RAM card is still available, from (among others) the Laing Electronics BBS, at (714) 534-1547. I imagine Laing has a USnail address and maybe a peoplefone as well, but I don't have that info. The GFRN BBS in Garden Grove, CA, phone (714) 534-1547, has a fair amount of Applicard goodies on drive E8:. At the end of this message is a sample driver that came from GFRN. GFRN is a CP/M BBS that runs on an Apple with an Applicard. You can find interesting drivers for RAMDISKs and PCPI hop-ups of various kinds by reading the ads in the right section of Computer Shopper. There is at least one small software house that has specialized in this kind of stuff. Cheers, Dick Binder (The Stainless Steel Rat) DEC Enet: ASD::BINDER UUCP: { decvax, allegra, ucbvax... }!decwrl!asd.dec.com!binder ARPA: binder%asd.DEC@decwrl.ARPA ------------------------------------------------------------------------------ Following is the sample driver. I don't vouch for this code - I haven't tried it. But it looks reasonable. ------------------------------------------------------------------------------ ; Sample CP/M-80 (8080) TPA-resident Serial I/O driver ; for Apple // with CCS 7710 I/O card ; Modifications for PCPI Applicard ; by Daniel Hickey 03/12/83 ; Recommented by Dick Binder 11/24/86 slot equ 2 ; slot number of card offset equ slot*16 ; offset base equ 0C080h ; slot 0 base location cstat equ base+offset cdata equ cstat+1 rrf equ 01 ; character ready bit tre equ 02 ; transmitter ready creset equ 03h cinit equ 15h rdbyte equ 0ffe0h ; read a byte from apple (a = byte) wrbyte equ 0ffe3h ; write a byte to apple (c = byte) rdword equ 0ffe6h ; read 2 bytes from apple (de = bytes) wrword equ 0ffe9h ; write 2 bytes to apple (de = bytes) rdnbyts equ 0ffech ; read n bytes (de = count, hl = buffer) wrnbyts equ 0ffefh ; write n bytes (de = count, hl = buffer) peek1byte equ 6 ; command to peek 1 byte in the apple poke1byte equ 7 ; command to poke 1 byte in the apple org 100h jmp init ; *** initialize com device org 110h stat: lxi d,cstat ; *** return ready status call peek ani rrf ; mask rrf bit... ret ; ...and return org 120h sin: sin1: lxi d,cstat ; *** read one character call peek ; get status ani rrf ; rrf set? jz sin1 ; no, loop jmp sinext ; yes, get character org 130h sout: push psw ; save char to be output sout1: lxi d,cstat ; *** output one char call peek ; get status ani tre ; ready? jz sout1 ; no, loop jmp sotext ; yes, put char out scar: org 140h nop nop ret ; NOTE: This return must be here init: ; ******************************************************************** ; This code corrects an error in Crosstalk 2.0s. ; If using another version this code may be removed ; lxi h,0201bh mov a,m cpi 02ch jnz init1 mvi m,030h ; ******************************************************************** init1: mvi a,creset ; reset UART lxi d,cstat call poke mvi a,cinit ; initialize UART call poke jmp 0200h ; jump to xtalk - *** EXTERNAL CODE *** ; peek at 1 byte in the apple ; entry: de = address ; exit: a = data peek: mvi c,peek1byte call wrbyte call wrword call rdbyte ret ; poke 1 byte into the apple ; entry: de = address ; a = data poke: mov b,a mvi c,poke1byte call wrbyte call wrword mov c,b call wrbyte ret sinext: lxi d,cdata call peek ; get char ret ; return sotext: pop psw ; fetch saved char lxi d,cdata call poke ; output char ret ; return end