home *** CD-ROM | disk | FTP | other *** search
- ;
- ; MCOSB797.ASM
- ;
- ; Patches for overlaying distribution version of MODEM797,
- ; for use with the Osborne O-1.
- ;
- ;You will want to look this file over carefully, there are a number
- ;of options that you can use to configure MODEM797 to suit your taste.
- ;
- ;
- ; TO USE: First edit this file filling in answers for your own
- ; equipment. Then assemble with ASM.COM or equivalent
- ; assembler. Then use DDT to overlay the the results
- ; of this program to the original MODEM797.COM file:
- ;
- ; A>DDT MODEM797.COM
- ; DDT VERS 2.2
- ; NEXT PC
- ; 4080 0100
- ; -IMCOSB797.HEX (note the "I" command)
- ; -R (loads in the .HEX file)
- ; NEXT PC
- ; 4080 0000
- ; -G0 (return to CP/M)
- ; A>SAVE 64 MODEM797.COM (now have modified .COM file)
- ;
- ;
- ;12/17/82 - Revised for MODEM796 PLK
- ;
- ;12/01/82 - The file is left in the 11/29/82 form as an example of
- ; memory mapped I/O. Osborne owners may want to use the
- ; approach Frank Wancho describes. PLK
- ;
- ;11/30/82 - This file stills uses an old-style and now obsolete form of
- ; accessing the RS232 port directly thru the bank-switching
- ; technique with code in memory above 4000H, all OSBORNEs
- ; should have now been upgraded to at least ROM 1.2, if not
- ; 1.3 - the latest version. Combined with that upgrade is a
- ; new BIOS that supports the IOBYTE. All that has to be done
- ; is toggle the first of the two CON: bits in the IOBYTE
- ; as follows:
- ;
- ; 0 - keyboard + crt (TTY:)
- ; 1 - serial port (CRT:)
- ; F. J. Wancho
- ;
- ;11/29/82 - Version of MODEM797 overlay file for Osborne-1. The
- ; Osborne routines come from an earlier version. P. L. Kelley
- ;
- TRUE EQU 0FFH
- FALSE EQU 0
- ;
- BELL EQU 07H ;bell
- CR EQU 0DH ;carriage return
- LF EQU 0AH ;linefeed
- ;
- MODCTLP EQU 2A00H ;status register for RS232
- MODSNDB EQU 2 ;bit to test for ready to send
- MODSNDR EQU MODSNDB ;change to 0 if bit is 0 when
- ;ready to send
- MODRCVB EQU 1 ;bit to test for received data
- MODRCVR EQU MODRCVB ;change to 0 if bit is 0 when
- ;data received
- MODDATP EQU MODCTLP+1 ;data resister for RS232
- ;
- CLR1 EQU 0 ;there is no O-1 clear to end
- CLR2 EQU 0 ;of screen sequence
- CLR3 EQU 0 ;so all bytes MUST be 0
- CLR4 EQU 0
- ;
- SCLR1 EQU 'Z'-40H ;ctrl-Z for O-1 clear screen
- SCLR2 EQU 0 ;and home cursor
- SCLR3 EQU 0 ;the unused bytes MUST be 0
- SCLR4 EQU 0
- ;
- ;
- ;You can change locations 107H to 120H to suit your taste.
- ;
- ;*** WARNING - DO NOT INSERT OR DELETE LINES BEFORE SYSVERMSG: ***
- ; THE DEFINED LOCATIONS ARE GIVEN ON THE RIGHT MARGIN.
- ;
- ;
- ORG 100H
- ;
- DS 3 ;(for JMP START)
- PMMIBYTE: DB FALSE ;don't change this line 103H
- SETUPTST: DB TRUE ;don't change this line 104H
- SCRNTEST: DB TRUE ;don't change this line 105H
- CLOCK: DB 2 ;don't change this line 106H
- BAKUPBYTE: DB FALSE ;true=make .BAK file 107H
- CKSUMDFLT: DB FALSE ;true=default to Checksum checking 108H
- ;false=default to CRC checking
- TOGGLECRC: DB TRUE ;true=allow toggling of Checksum to CRC 109H
- CONVBKSP: DB FALSE ;true=convert backspace to rub 10AH
- TOGGLEBK: DB TRUE ;true=allow toggling of bksp to rub 10BH
- ADDLF: DB FALSE ;true=add LF after CR 10CH
- TOGGLELF: DB TRUE ;true=allow toggling of LF after CR 10DH
- TRANLOGON: DB FALSE ;true=allow transmission of logon 10EH
- ;write logon sequence at location LOGON
- SAVCCP: DB FALSE ;true=do not overwrite CCP 10FH
- LOCONEXTCHR: DB FALSE ;true=local command if EXTCHR precedes 110H
- ;false=not local command if EXTCHR precedes
- TOGGLELOC: DB TRUE ;true=allow toggling of LOCONEXTCHR 111H
- LSTTST: DB TRUE ;true=allow toggling of printer on/off 112H
- ;in terminal mode, set to false if your
- ;printer can't keep up with the modem
- XOFFTST: DB FALSE ;true=allow testing of XOFF from remote 113H
- ;while transmitting a file in terminal mode
- XONWAIT: DB FALSE ;true=wait for XON after sending CR 114H
- ;while transmitting a file in terminal mode
- TOGXOFF: DB TRUE ;true=allow toggling of XOFF testing 115H
- MSPEED: DB 1 ;0=110 1=300 2=450 3=600 4=710 5=1200 116H
- ;default modem speed, PMMI routines
- ;reset this value and so should your own
- ;modem routines
- BYTDLY: DB 0 ;0=0 delay, 1=0.02 sec, -- ,9=0.18 sec 117H
- ;default time to send character in
- ;terminal mode file transfer
- CRDLY: DB 0 ;0=0 delay, 1=0.08 sec, -- ,9=0.72 sec 118H
- ;default time for extra wait after CR
- ;in terminal mode file transfer
- BELRPT: DB 30 ;bell repeat time = value*0.03 sec 119H
- EXITCHR: DB 'E'-40H ; ^E = Exit without disconnect 11AH
- LOGCHR: DB 'O'-40H ; ^O = Send logon 11BH
- LSTCHR: DB 'P'-40H ; ^P = Toggle printer 11CH
- UNSAVE: DB 'R'-40H ; ^R = Close input text buffer 11DH
- TRANCHR: DB 'T'-40H ; ^T = Transmit file to remote 11EH
- SAVECHR: DB 'Y'-40H ; ^Y = Open input text buffer 11FH
- EXTCHR: DB 'W'-40H ; ^W = Send next character 120H
- DS 6 ;don't change, used only by PMMI 121H
- IN$MODCTLP: JMP MXSTAT ;test for status 127H
- OUT$MODDATP: JMP MXOUT ;output data to modem 12AH
- IN$MODDATP: JMP MXIN ;get data from modem 12DH
- ANI$MODSNDB: ANI MODSNDB ! RET ;bit to test for send ready 130H
- CPI$MODSNDR: CPI MODSNDR ! RET ;value of send bit when ready 133H
- ANI$MODRCVB: ANI MODRCVB ! RET ;bit to test for receive ready 136H
- CPI$MODRCVR: CPI MODRCVR ! RET ;value of rcv. bit when ready 139H
- DS 15 ;PMMI only calls 13CH
- LOGONPTR: DW LOGON ; 14BH
- JMP$INITMOD: JMP MXINIT ;go to user written routine 14DH
- JMP$SETUPR: JMP MXSETBAUD ; 150H
- ;
- CLREOS: CALL JMP$ILPRT ; 153H
- DB CLR1,CLR2,CLR3,CLR4,0
- RET
- ;
- CLRSCRN: CALL JMP$ILPRT ; 15CH
- DB SCLR1,SCLR2,SCLR3,SCLR4,0
- RET
- ;
- JMP$ILPRT: DS 3 ; 165H
- JMP$ILCOMP: DS 3 ; 168H
- JMP$INBUFF: DS 3 ; 16BH
- JMP$SYSVER: JMP SYSVERMSG; 16EH
- JMP$DIALPL: DS 3 ; 171H
- JMP$DISCONNT: DS 3 ; 174H
- ;
- SYSVERMSG: ; 16EH
- CALL JMP$ILPRT
- DB 'Version for: OSBORNE O-1',CR,LF,0
- RET
-
- ;INSERT YOUR LOGON HERE, MUST END IN 0.
- LOGON: DB 0
- ;
- MXIN: CALL $-$ ;patched to call input routine
- RET
- ;
- MXOUT: CALL $-$ ;patched to call output routine
- RET
- ;
- MXSTAT:
- CALL $-$ ;patched to call status routine
- RET
- ;
- MXINIT:
- LDA FINITFLG
- ORA A
- RZ
- CMA
- STA FINITFLG
- LHLD 6 ;find top of user RAM
- LXI D,-100H ;step down a little
- DAD D
- PUSH H ;save it
- LXI D,BDJ ;point to source of code
- LXI B,CDLEN+2 ;set length of code
- XCHG
- DB 0EDH,0B0H ; Z80 LDIR
- ;
- LHLD 6 ;get BDOS address back
- POP D
- PUSH D
- INX D ;point to address position
- XCHG
- MOV M,E ;patch in address
- INX H
- MOV M,D
- ;
- POP H
- SHLD 6 ;transfer BDOS jump
- ;
- LXI D,OSIN-BDJ
- DAD D ;compute address of OSIN routine
- SHLD MXIN+1 ;patch call
- LXI D,OSOUT-OSIN
- DAD D
- SHLD MXOUT+1 ;patch call
- LXI D,OSTAT-OSOUT
- DAD D
- SHLD MXSTAT+1
- ;
- MVI A,1 ;MSPEED 300 baud value
- STA MSPEED
- MVI C,56H ;for 300 baud
- STBAUD: PUSH H
- CALL OSET
- POP H
- XRA A ;clear carry
- RET
- ;
- OSET: LHLD 1 ;get BIOS+3 address
- MVI L,3CH ;special Osborne routine
- PCHL ;branch to it
- ;
- MXSETBAUD:
- PUSH H
- AGAIN: LXI D,BAUDBUF ;point to input buffer for ILCOMP
- CALL JMP$ILPRT
- DB 'Input Baud Rate (300, 1200): ',0
- CALL JMP$INBUFF
- LXI D,BAUDBUF+2
- CALL JMP$ILCOMP ;compare BAUDBUF+2 with characters below
- DB '300',0
- MVI A,1 ;MSPEED 300 baud
- MVI C,56H ;O-1 300 baud
- JNC OK ;go if got match
- CALL JMP$ILCOMP
- DB '1200',0
- MVI A,5
- MVI C,55H
- JNC OK
- CALL JMP$ILPRT ;all matches failed - tell operator
- DB '++ Incorrect entry ++',CR,LF,BELL,0
- JMP AGAIN ;try again
- ;
- OK: STA MSPEED ;set MSPEED
- POP H
- JMP STBAUD
- ;
- BAUDBUF: DB 10,0
- DS 10
- ;
- FINITFLG: DB TRUE
- ;
- ;
- ; --- ROUTINES THAT GET COPIED UP TO TOP OF MEMORY ---
- ; JUST UNDER THE BDOS
- ;
- BDJ: JMP $-$ ;this gets patched to jump to BDOS entry
- ;
- OSIN: DI ;disable interrupts
- OUT 0 ;switch to alternate page
- LDA MODDATP ;get data byte
- OUT 1 ;switch back pages
- EI ;re-enable interrupts
- RET
- ;
- OSOUT: DI ;disable interrupts
- OUT 0 ;switch to alternate page
- STA MODDATP ;send data byte
- OUT 1 ;switch back pages
- EI ;re-enable interrupts
- RET
- ;
- OSTAT: DI ;disable interrupts
- OUT 0 ;switch to alternate page
- LDA MODCTLP ;get status byte
- OUT 1 ;switch back pages
- EI ;re-enable interrupts
- RET
- CDLEN: EQU $-BDJ ;length of code to copy
- ;
- ;
- END
- ;
-