IMD 1.16: 31/05/2007 20:33:51 FOGCPM.142 --FOGCPM142AUTOMOD COM AUTOMOD DOC! AUTOMOD ASM- AUTOMODDCOM AUTOMODDASM/SETAUTO COMSETAUTO DOCAUTOST COMAUTOST AQMAUTOST ASM% !"#BAUTOST DOCC$%&'()*+,FSTART COM-FSTART DOC.MAKEAUTOCOM /0MAKEAUTODOC1MAKEAUTOASM 2345MAKAUTO2COM 67MAKAUTO2ASM"89:;<STARTER COM=>STARTER DOC?@STARTER ASMEABCDEFGHITO COMJTO ASMKLMTO80 ASMNTO80 DOC OPWID COMQWID DOC RSWID ASM(TUVWXWIDTH COMYZ[WIDTH DOC \]WIDTH C ^OSCHG COM_SCREEN COM`SCREEN DOCaFUNC COM bcFUNCTDD COMdFUNCTIONCOMeFUNCTIONDOC fgOSBKYBD ASMhijDISKEYS BAS#klmnoOSARROW COMEpqrstuvwxOSARROW DOCyz{OSARROW PAS|}~CLOCK BASOCLOCK COMOCLOCK DOCDMPSCR BASDMPSCR DOC$GRAPH BASOSCREEN BASOSPATCH1COM:-09-00 86 -CPM142 DOC)This is the disk name. ~ AUTOMOD REV. 1.1 PROGRAM TO INSERT A USER SELECTABLE COMMAND LINE INTO CP/M ON DISK, TO BE EXECUTED ON ALL COLD STARTS FOR OSBORNE CP/M 2.2A-00F ENTER CP/M SOURCE DRIVE (A or B): ?$ ENTER COMMAND LINE TO BE INSERTED, (36 CHARACTERS MAXIMUM) OR FOR NO COMMAND. If COMMAND LINE has N characters, where N > 6, first use SETUP.COM to establish (N - 6) dummy characters in FUNCTION KEY 0 (zero). This will avoid disastrous overlay of FUNCTION and ARROW KEY information but, also, will render FUNCTION KEY 0 unusable. COMMAND ?: $ **** COMMAND INSERTION COMPLETE **** $1 :` A ÉO* ^#V^#V{=2>2=:  2:  :2 2 *O !~`! # >2= R!"!"! "*DM*DM*DM:€ʒ :ʒ b::*¦*#"!#"*'z¾{"O ^#V^#V{=2>2$ 2:  :2 WRONG!$ lDISK READ ERRORm $ lERROR: CP/M NOT PRESENT ON SOURCE DISKm $ lDISK WRITE ERRORm $LL COLD STARTS FOR OSBORNE CP/M 2.2A-00F ENTER CP/M SOURCE DRIVE (A or B): ?$ ENTER COMMAND LINE TO BE INSERTED, (36 CHARACTERS MAXIMUM) OR FOR NO COMMAND. If COMMAND LINE has N characters, where N > 6, first use SETUP.COM to establish (N - 6) dummy characters in FUNCTION KEY 0 (zero). This will avoid disastrous overlay of FUNCTION and ARROW KEY information but, also, will render FUNCTION KEY 0 unusable. COMMAND ?: $ **** COMMAND INSERTION COMPLETE **** $1 :` A ÉO* ^#V^#V{=2>2=:  2:  :2 2 *O !~`! # >2= R!"!"! "*DM*DM*DM:€ʒ :ʒ b::*¦*#"!#"*'z¾{"O ^#V^#V{=2>2$ 2:  :.p 90 AUTOMOD.DOC CP/ COMMAN LIN INSERTIO PROGRAM DOCUMENTATION Th CP/ comman lin insertio progra 'AUTOMOD.COM change th boo cop o CP/ o track - o th diskett i th speci fie drive Thi chang consist o insertin 'comman line int buffe are o CP/ provide fo thi purpose Thi 'comman line i rea b CP/ immediatel followin 'cold- start (rese butto ) thi comman i the execute a i i wher an othe comman entere o th keyboard Al th diskette supplie b Osborn hav th comman line AUTOSԠ i thi buffe initially thi comman cause th AUTOS progra t b loade int memor an run th AUTOS progra merel draw th 'BI O o th scree the load th mai progra supplie o th dis (MBASIC WORDSTAR SUPERCAL etc. o i th cas o th syste disk th HEL program B usin th comman lin inser tio program thi comman ca b change t anythin yo want o ma b delete altogether i whic cas CP/͠ load ver quickl an start u cleanl (th wa i wa originall intende to) Som example o command whic ca b inserte are DIR whic wil caus th 'A dis director t b displaye o start- up XDIR print th extende director (sam a th utilit dis does bu faster) MBASIC o th 'BASIC dis wil loa an start MBASI immediately MBASI NAME.BAS wil caus MBASI t loa an automaticall loa th 'Basic languag progra NAME.BAӠ an star runnin i ('turnkey syste ) Th sam ma b don wit Wordstar Supercal o an othe use program. T us th insertio progra AUTOMOD.CO simpl pu th diskett containin thi progra int eithe drive plac th dis wit th CP/ cop yo desir t modif int th othe drive unpro tected (neve us th origina diskette supplie wit th Osborne Wit CP/ running issu th command: AUTOMOD (assumin i i i th selecte drive) Whe th 'CP/ sourc drive i requested respon appropriatel (th sourc driv wil als b th destinatio drive) Whe AUTOMO request th desire 'command t insert typ i i (u t 3 characters an terminat i wit carriag return I n comman i t b entere (quick-start) simpl typ carriag return thi wil eras an previou comman i th CP/ buffer Th ne comman wil b inserte ont th dis an th messag *** COMMAN INSERTIO COMPLET *** shoul appear I a erro occurs th sourc o th erro shoul b correcte an AUTOMO re-run. AUTOMOĠ ca b use t chang th comman buffe an numbe o time o th sam cop o CP/M. Th AUTOMO progra i addres dependant an futur release o CP/ ma requir ne versio o AUTOMO b obtained. ADDENDUM by Jim Woolley, FOG Disk Librarian, 8/82 Th Osborn implementatio o CP/ make us o th 'comman line buffe are i th firs thre diskett track t stor functio an arro ke information Usin AUTOMO t ente comman lin havin mor tha si character (th amoun allowe fo AUTOST wil overla thi information Therefore i i necessar t firs assig enoug dumm spac t functio ke (zero) s tha onl th dumm spac wil b overlayed Thi actio will however rende functio ke unusable. Assumin tha th comman lin t b inserte ha characters i i les tha 7 the ther i n specia concern I i greate tha 6 the firs ru SETU t alte th functio ke definitio o th diskett t b configure b AUTOMOD Se functio ke t b ( - 6 blank o othe dumm characters Thi wil se asid enoug spac fo th comman lin t b inserte b AUTOMOD Bu remembe tha functio ke wil n longe b meaningful Instead i wil b overlaye b th inserte comman line. arro ke information Usin AUTOMO t ente comman lin havin mor tha si character (th amoun allowe fo AUTOST wil overla thi information Therefore i i necessar t firs assig enoug dumm spac t functio ke (zero) s tha onl th dumm spac wil b overlayed Thi actio will however rende functio ke unusable. Assumin tha th comman lin t b inserte ha characters i i les tha 7 the ther i n specia concern I i greate tha 6 the firs ru SETU t alte th functio ke definitio o th diskett t b configure b AUTOMOD Se functio ke t b ( - 6 blank o othe dumm characters Thi wil se asid enoug spac fo th comman lin t b inserte b AUTOMOD Bu remembe tha functio ke wil n longe b meaningful Instead i wil b overlaye b th inserte comm ;************************************* ;* * ;* "AUTOMOD" * ;* * ;* LEE SWORDY 14/5/82 * ;* * ;* Revision 1.1 by Jim Woolley, FOG * ;* Disk Librarian, 8/82. * ;************************************* ; AUXBUF EQU 200AH ; CP/M AUX CMND BFR ST ADR (BYTE CNT = 1st) ; ORG 100H JMP START ; MSG1 DB 1AH,' AUTOMOD REV. 1.1',0DH,0AH DB ' PROGRAM TO INSERT A USER SELECTABLE COMMAND LINE',0DH,0AH DB 'INTO CP/M ON DISK, TO BE EXECUTED ON ALL COLD STARTS',0DH,0AH,0AH DB ' FOR OSBORNE CP/M 2.2A-00F',0DH,0AH,0AH,0AH DB 'ENTER CP/M SOURCE DRIVE (A or B): ?',8,8,8,'$' MSG2 DB 0DH,0AH,0AH,'ENTER COMMAND LINE TO BE INSERTED,',0DH,0AH DB '(36 CHARACTERS MAXIMUM) OR FOR NO COMMAND.',0DH,0AH,0AH ; db 'If COMMAND LINE has N characters, where N > 6,',0dh,0ah db 'first use"SETUP.COM to establish (N - 6) dummy',0dh,0ah db 'characters in FUNCTION KEY 0 (zero). This will',0dh,0ah db 'avoid disastrous overlay of FUNCTION and ARROW',0dh,0ah db 'KEY information but, also, will render FUNCTION',0dh,0ah db 'KEY 0 unusable.',0dh,0ah,0ah ; DB ' COMMAND ?: $' MSG3 DB 0DH,0AH,0AH,0AH,'**** COMMAND INSERTION COMPLETE ****',0DH,0AH,0AH DB '$' ; ;**** PRINT HEADER AND REQUEST DRIVE ID START LXI SP,STACK ; LOCAL STACK ; MVI C,9 LXI D,MSG1 ; HEADER MSG/DRIVE ID REQ TO CONS CALL 0005 ; RETRY1 MVI C,1 ; INPUT 'DRIVE ID' CALL 0005 CPI 03 ; ^C ? JZ EXIT ; YES: ABORT CPI 60H JM UPPER SUI 20H ; MAKE UPPER CASE UPPER SUI 41H ; CONV A or B TO 0 or 1 JM CHERROR ; IF NOT 0 or 1 CPI 2 JM DRIVEOK ; CHERROR MVI C,9 LXI D,ERR1 ; 'WRONG' MSG TO CONS CALL 0005 JMP RETRY1 ; DRIVEOK MOV C,A PUSH B ; SAVE DRIVE # ; ;**** MOVE PART OF BIOS VECTOR TABLE INTO LOCAL CORE FOR CALLS LHLD 0001 ; GET WARM ST VCTR ADRS LXI D,24 ; INDEX INTO VCTR TBLE DAD D ; HL + INDEX = SOURCE LXI D,VECTBL ; DESTINATION LXI B,18 ; BYTE COUNT (6 JUMP INSTR'S) DB 0EDH,0B0H ; Z80 'LDIR' INST (BLOCK MOVE) ; ;**** GET 'SECTORS PER TRACK' FROM 'DISK PARAM BLOCK' POP B ; GET DRIVE # CALL SELDSK ; SELECT DISK DRIVE ; LXI D,10 ; INDEX INTO DP HEADER DAD D ; +DPH BASE ADRS ; MOV E,M INX H MOV D,M ; GET DPB ADRS ; XCHG ; MOV E,M INX H MOV D,M ; GET 'SPT' ; MOV A,E DCR A ; -1 STA SPT ; SAVE SECTRS/TRACK ; ;**** READ CP/M FROM DISK INTO CORE STARTING AT 980H (NO BOOT LOADER) MVI A,0 STA FLAG ; RD/WRT FLAG TO READ (0) CALL RDWRT ; DISK READ/WRITE ROUTINE ; ;**** CHECK IF CP/M IS VALID (1st BYTE OK ?) LDA 980H ; GET BYTE 1 OF CPM CPI 0C3H ; SHOULD BE 'JMP' OP CODE JZ REQUEST ; YES: CPM OK ; MVI C,9 LXI D,ERR3 ; 'CPM BAD' MSG TO CONS CALL 0005 JMP EXIT ; ;**** REQUEST COMMAND STRING AND INPUT THE STRING REQUEST MVI C,9 LXI D,MSG2 ; 'CMND REQ' MSG TO CONS CALL 0005 ; MVI C,10 LXI D,INBUFF ; INPUT 'CMND STRING' CALL 0005 ; ;**** TRANSFER 'CMND STRING' FROM IP BUFF TO AUX CMND BUFF LDA INBUFF+1 ; GET INPUT BYTE CNT ADI 2 ; +2 FOR CCP STA AUXBUF ; SAVE AS AUX CMD BFR BYTE CNT SUI 2 ; = 0 ? JNZ JUMP1 ; NO STA AUXBUF ; YES: MAKE AUX BYTE CNT = 0 JMP JUMP4 ; JUMP1 MOV C,A ; BYTE CNT LXI D,AUXBUF+1 ; DESTINATION LXI H,INBUFF+2 ; SOURCE LOOP1 MOV A,M ; GET A SOURCE BYTE CPI 60H ; MAKE UPPER CASE JM JUMP5 SUI 20H ; JUMP5 STAX D ; BYTE TO DEST. INX D ; DEST. + 1 INX H ; SOURCE + 1 DCR C ; BYTE CNT - 1 JNZ LOOP1 ; IF NOT DONE ; XRA A ; A = 0 STAX D ; LINE TERMINATOR ; ;**** WRITE CP/M BACK TO SOURCE DISK JUMP4 MVI A,01 ; RD/WRT FLAG TO WRITE STA FLAG CALL RDWRT ; DISK READ/WRITE ROUTINE ; MVI C,9 LXI D,MSG3 ; 'ALL DONE' MESSAGE CALL 0005 ; EXIT JMP 0000 ; CPM WARM ST ENTRY ; ;******* READ/WRITE CPM TO/FROM DISK SUBROUTINE: ; 'FLAG' = 0 FOR READ, = 1 FOR WRITE ; RDWRT LXI H,0 ; INIT SECTOR = 0 SHLD SECTOR LXI H,0 ; INIT TRACK = 0 SHLD TRACK LXI H,980H ; INIT DMA ADRS = 980H SHLD DMAADR ; LOOP2 LHLD DMAADR MOV B,H MOV C,L CALL SETDMA ; SET DMA ADRS ; LHLD TRACK MOV B,H MOV C,L CALL SETTRK ; SET TRACK # ; LHLD SECTOR MOV B,H MOV C,L CALL SETSEC ; SET SECTOR # ; LDA FLAG ; READ ? (=0) ORA A JNZ DSKWRT ; NO: WRITE ; CALL READ ; READ A RECORD ORA A ; READ ERROR ? JZ GOODRD ; NO ; MVI C,9 LXI D,ERR2 ; 'SOURCE READ' ERR MSG TO CONS CALL 0005 JMP EXIT ; DSKWRT CALL WRITE ; WRITE A RECORD ORA A ; WRITE ERROR ? JZ GOODRD ; NO ; MVI C,9 LXI D,ERR4 ; 'DEST WRITE' ERR MSG TO CONS CALL 0005 JMP EXIT ; GOODRD LDA SPT LHLD SECTOR CMP L ; END OF TRACK ? JNZ JUMP3 ; NO ; LHLD TRACK INX H SHLD TRACK ; TRACK # +1 ; LXI H,0FFFFH ; SECTOR # = -1 JUMP3 INX H ; +1 SHLD SECTOR ; RE-SAVE SECTOR # ; LHLD DMAADR ; DMA ADRS + 128 LXI D,128 DAD D LXI D,2780H ; END OF CPM ? MOV A,D CMP H JNZ NOTEND ; NO MOV A,E CMP L JZ ENDCPM ; NOTEND SHLD DMAADR JMP LOOP2 ; DO NEXT SECTOR ENDCPM RET ; ;**** BUFFERS, STORAGE AND MESSAGES: ; VECTBL ; PORTION OF BIOS VECTOR TABLE SELDSK DS 3 SETTRK DS 3 SETSEC DS 3 SETDMA DS 3 READ DS 3 WRITE DS 3 ; SPT DB 0 ; 'SECTORS PER TRACK -1' FLAG DB 0 ; CPM RD/WRT FLAG; ; SECTOR DW 0 TRACK DW 0 DMAADR DW 0 ; INBUFF DB 36,0 DS 36 ; ERR1 DB 12,12,12,'WRONG!',8,8,8,8,8,8,8,8,8,8,'$' ERR2 DB 0DH,0AH,0AH,1BH,6CH,'DISK READ ERROR',1BH,6DH,0DH,0AH,'$' ERR3 DB 0DH,0AH,0AH,1BH,6CH,'ERROR: CP/M NOT PRESENT ON SOURCE' DB ' DISK',1BH,6DH,0DH,0AH,'$' ERR4 DB 0DH,0AH,0AH,1BH,6CH,'DISK WRITE ERROR',1BH,6DH,0DH,0AH,'$' ; DS 64 STACK END D OF TRACK ? JNZ JUMP3 ; NO ; LHLD TRACK INX H SHLD TRACK ; TRACK # +1 ; LXI H,0FFFFH ; SECTOR # = -1 JUMP3 INX H ; +1 SHLD SECTOR ; RE-SAVE SECTOR # ; LHLD DMAADR ; DMA ADRS + 128 LXI D,128 DAD D LXI D,2780H ; END OF CPM ? MOV A,D CMP H JNZ NOTEND ; NO MOV A,E CMP L JZ ENDCPM ; NOTEND SHLD DMAADR JMP LOOP2 ; DO NEXT SECTOR ENDCPM RET ; ;~ AUTOMOD REV. 1.1 PROGRAM TO INSERT A USER SELECTABLE COMMAND LINE INTO CP/M ON DISK, TO BE EXECUTED ON ALL COLD STARTS FOR OSBORNE CP/M 2.2A-00F ENTER CP/M SOURCE DRIVE (A or B): ?$ ENTER COMMAND LINE TO BE INSERTED, (36 CHARACTERS MAXIMUM) OR FOR NO COMMAND. If COMMAND LINE has N characters, where N > 6, first use SETUP.COM to establish (N - 6) dummy characters in FUNCTION KEY 0 (zero). This will avoid disastrous overlay of FUNCTION and ARROW KEY information but, also, will render FUNCTION KEY 0 unusable. COMMAND ?: $ **** COMMAND INSERTION COMPLETE **** $1 :` A ÉO* ^#V^#V{=2>2=:  2:  :2 2 *O !~`! # >2= R!"!"! "*DM*DM*DM:€ʒ :ʒ b::*¦*#"!#"*'z¾{"O ^#V^#V{=2>2$ 2:  :2 WRONG!$ lDISK READ ERRORm $ lERROR: CP/M NOT PRESENT ON SOURCE DISKm $ lDISK WRITE ERRORm $LL COLD STARTS FOR OSBORNE CP/M 2.2A-00F ENTER CP/M SOURCE DRIVE (A or B): ?$ ENTER COMMAND LINE TO BE INSERTED, (36 CHARACTERS MAXIMUM) OR FOR NO COMMAND. If COMMAND LINE has N characters, where N > 6, first use SETUP.COM to establish (N - 6) dummy characters in FUNCTION KEY 0 (zero). This will avoid disastrous overlay of FUNCTION and ARROW KEY information but, also, will render FUNCTION KEY 0 unusable. COMMAND ?: $ **** COMMAND INSERTION COMPLETE **** $1 :` A ÉO* ^#V^#V{=2>2=:  2:  :2 2 *O !~`! # >2= R!"!"! "*DM*DM*DM:€ʒ :ʒ b::*¦*#"!#"*'z¾{"O ^#V^#V{=2>2$ 2:  : ;************************************* ;* * ;* "AUTOMODD" * ;* * ;* LEE SWORDY 14/5/82 * ;* * ;* Revision 1.1 by Jim Woolley, FOG * ;* Disk Librarian, 8/82. * ;* * ;* Modified for double density 2/2/83* ;* By Mike Schwab, Denver Osborne * ;* Librarian. * ;************************************* ; AUXBUF EQU 201DH ; CP/M AUX CMND BFR ST ADR (BYTE CNT = 1st) ; ORG 100H JMP START ; MSG1 DB 1AH,' AUTOMOD REV. 1.1',0DH,0AH DB ' PROGRAM TO INSERT A USER SELECTABLE COMMAND LINE',0DH,0AH DB 'INTO CP/M ON DISK, TO BE EXECUTED ON ALL COLD STARTS',0DH,0AH,0AH DB ' FOR OSBORNE CP/M 2.2A-00F',0DH,0AH,0AH,0AH DB 'ENTER CP/M SOURCE DRIVE (A or B): ?',8,8,8,'$' MSG2 DB 0DH,0AH,0AH,'ENTER COMMAND LINE TO BE INSERTED,',0DH,0AH DB '(36 CHARACTERS MAXIMUM) OR FOR NO COMMAND.',0DH,0AH,0AH ; db 'If COMMAND LINE has N characters, where N > 6,',0dh,0ah db 'first use SETUP.COM to establish (N - 6) dummy',0dh,0ah db 'characters in FUNCTION KEY 0 (zero). This will',0dh,0ah db 'avoid disastrous overlay of FUNCTION and ARROW',0dh,0ah db 'KEY information but, also, will render FUNCTION',0dh,0ah db 'KEY 0 unusable.',0dh,0ah,0ah ; DB ' COMMAND ?: $' MSG3 DB 0DH,0AH,0AH,0AH,'**** COMMAND INSERTION COMPLETE ****',0DH,0AH,0AH DB '$' ; ;**** PRINT HEADER AND REQUEST DRIVE ID START LXI SP,STACK ; LOCAL STACK ; MVI C,9 LXI D,MSG1 ; HEADER MSG/DRIVE ID REQ TO CONS CALL 0005 ; RETRY1 MVI C,1 ; INPUT 'DRIVE ID' CALL 0005 CPI 03 ; ^C ? JZ EXIT ; YES: ABORT CPI 60H JM UPPER SUI 20H ; MAKE UPPER CASE UPPER SUI 41H ; CONV A or B TO 0 or 1 JM CHERROR ; IF NOT 0 or 1 CPI 2 JM DRIVEOK ; CHERROR MVI C,9 LXI D,ERR1 ; 'WRONG' MSG TO CONS CALL 0005 JMP RETRY1 ; DRIVEOK MOV C,A PUSH B ; SAVE DRIVE # ; ;**** MOVE PART OF BIOS VECTOR TABLE INTO LOCAL CORE FOR CALLS LHLD 0001 ; GET WARM ST VCTR ADRS LXI D,24 ; INDEX INTO VCTR TBLE DAD D ; HL + INDEX = SOURCE LXI D,VECTBL ; DESTINATION LXI B,18 ; BYTE COUNT (6 JUMP INSTR'S) DB 0EDH,0B0H ; Z80 'LDIR' INST (BLOCK MOVE) ; ;**** GET 'SECTORS PER TRACK' FROM 'DISK PARAM BLOCK' POP B ; GET DRIVE # CALL SELDSK ; SELECT DISK DRIVE ; LXI D,10 ; INDEX INTO DP HEADER DAD D ; +DPH BASE ADRS ; MOV E,M INX H MOV D,M ; GET DPB ADRS ; XCHG ; MOV E,M INX H MOV D,M ; GET 'SPT' ; MOV A,E DCR A ; -1 STA SPT ; SAVE SECTRS/TRACK ; ;**** READ CP/M FROM DISK INTO CORE STARTING AT 980H (NO BOOT LOADER) MVI A,0 STA FLAG ; RD/WRT FLAG TO READ (0) CALL RDWRT ; DISK READ/WRITE ROUTINE ; ;**** CHECK IF CP/M IS VALID (1st BYTE OK ?) LDA 980H ; GET BYTE 1 OF CPM CPI 0C3H ; SHOULD BE 'JMP' OP CODE JZ REQUEST ; YES: CPM OK ; MVI C,9 LXI D,ERR3 ; 'CPM BAD' MSG TO CONS CALL 0005 JMP EXIT ; ;**** REQUEST COMMAND STRING AND INPUT THE STRING REQUEST MVI C,9 LXI D,MSG2 ; 'CMND REQ' MSG TO CONS CALL 0005 ; MVI C,10 LXI D,INBUFF ; INPUT 'CMND STRING' CALL 0005 ; ;**** TRANSFER 'CMND STRING' FROM IP BUFF TO AUX CMND BUFF LDA INBUFF+1 ; GET INPUT BYTE CNT ADI 2 ; +2 FOR CCP STA AUXBUF ; SAVE AS AUX CMD BFR BYTE CNT SUI 2 ; = 0 ? JNZ JUMP1 ; NO STA AUXBUF ; YES: MAKE AUX BYTE CNT = 0 JMP JUMP4 ; JUMP1 MOV C,A ; BYTE CNT LXI D,AUXBUF+1 ; DESTINATION LXI H,INBUFF+2 ; SOURCE LOOP1 MOV A,M ; GET A SOURCE BYTE CPI 60H ; MAKE UPPER CASE JM JUMP5 SUI 20H ; JUMP5 STAX D ; BYTE TO DEST. INX D ; DEST. + 1 INX H ; SOURCE + 1 DCR C ; BYTE CNT - 1 JNZ LOOP1 ; IF NOT DONE ; XRA A ; A = 0 STAX D ; LINE TERMINATOR ; ;**** WRITE CP/M BACK TO SOURCE DISK JUMP4 MVI A,01 ; RD/WRT FLAG TO WRITE STA FLAG CALL RDWRT ; DISK READ/WRITE ROUTINE ; MVI C,9 LXI D,MSG3 ; 'ALL DONE' MESSAGE CALL 0005 ; EXIT JMP 0000 ; CPM WARM ST ENTRY ; ;******* READ/WRITE CPM TO/FROM DISK SUBROUTINE: ; 'FLAG' = 0 FOR READ, = 1 FOR WRITE ; RDWRT LXI H,0 ; INIT SECTOR = 0 SHLD SECTOR LXI H,0 ; INIT TRACK = 0 SHLD TRACK LXI H,980H ; INIT DMA ADRS = 980H SHLD DMAADR ; LOOP2 LHLD DMAADR MOV B,H MOV C,L CALL SETDMA ; SET DMA ADRS ; LHLD TRACK MOV B,H MOV C,L CALL SETTRK ; SET TRACK # ; LHLD SECTOR MOV B,H MOV C,L CALL SETSEC ; SET SECTOR # ; LDA FLAG ; READ ? (=0) ORA A JNZ DSKWRT ; NO: WRITE ; CALL READ ; READ A RECORD ORA A ; READ ERROR ? JZ GOODRD ; NO ; MVI C,9 LXI D,ERR2 ; 'SOURCE READ' ERR MSG TO CONS CALL 0005 JMP EXIT ; DSKWRT CALL WRITE ; WRITE A RECORD ORA A ; WRITE ERROR ? JZ GOODRD ; NO ; MVI C,9 LXI D,ERR4 ; 'DEST WRITE' ERR MSG TO CONS CALL 0005 JMP EXIT ; GOODRD LDA SPT LHLD SECTOR CMP L ; END OF TRACK ? JNZ JUMP3 ; NO ; LHLD TRACK INX H SHLD TRACK ; TRACK # +1 ; LXI H,0FFFFH ; SECTOR # = -1 JUMP3 INX H ; +1 SHLD SECTOR ; RE-SAVE SECTOR # ; LHLD DMAADR ; DMA ADRS + 128 LXI D,128 DAD D LXI D,2780H ; END OF CPM ? MOV A,D CMP H JNZ NOTEND ; NO MOV A,E CMP L JZ ENDCPM ; NOTEND SHLD DMAADR JMP LOOP2 ; DO NEXT SECTOR ENDCPM RET ; ;**** BUFFERS, STORAGE AND MESSAGES: ; VECTBL ; PORTION OF BIOS VECTOR TABLE SELDSK DS 3 SETTRK DS 3 SETSEC DS 3 SETDMA DS 3 READ DS 3 WRITE DS 3 ; SPT DB 0 ; 'SECTORS PER TRACK -1' FLAG DB 0 ; CPM RD/WRT FLAG; ; SECTOR DW 0 TRACK DW 0 DMAADR DW 0 ; INBUFF DB 36,0 DS 36 ; ERR1 DB 12,12,12,'WRONG!',8,8,8,8,8,8,8,8,8,8,'$' ERR2 DB 0DH,0AH,0AH,1BH,6CH,'DISK READ ERROR',1BH,6DH,0DH,0AH,'$' ERR3 DB 0DH,0AH,0AH,1BH,6CH,'ERROR: CP/M NOT PRESENT ON SOURCE' DB ' DISK',1BH,6DH,0DH,0AH,'$' ERR4 DB 0DH,0AH,0AH,1BH,6CH,'DISK WRITE ERROR',1BH,6DH,0DH,0AH,'$' ; DS 64 STACK END FFH ; SECTOR # = -1 JUMP3 INX H ; +1 SHLD SECTOR ; RE-SAVE SECTOR # ; LHLD DMAADR ; DMA ADRS + 128 LXI D,128 DAD D FSETAUTO version 1.0 (23 Apr 82)copyright 1982 Michael M Rubenstein!91@":\ :<=!@$?|> :]N C W B :_!^#V  !~( ( _# 1!qm (## (w#6!@ \|> Kͣ!ͣ{Oͣ|ʘͣBKͣ!ͣ$ͣBKͣ!ͣ'ͣ{ !!! * DISK READ ERROR $ DISK WRITE ERROR $ INVALID DRIVE $ Option: $ Program: $ $ NONE$COLD$WARM$BOTH$* DISK READ ERROR $ DISK WRITE ERROR $ INVALID DRIVE $ Option: $ Program: $.he setauto.doc page # Copyright 1982 Michael M Rubenstein Description: Setaut set autostar option fo dis o th Osborn 1 Possibl option are: 1. No autostart 2. Autostart on cold boot 3. Autostar o war boo (le m kno i anyone finds a use for this one.) 4. Autostart on warm or cold boot Additionally th dis ca b se t autostar an comman wit th restrictio tha th comman canno b mor tha character long. Setaut ha bee teste unde Osborn Re 1.3 I shoul als wor unde Re 1.2. Syntax: General form: setauto [d:][opt] [cmd] where i th driv specifier I omitted th defaul drive will be used. opt one of the options none -- no autostart will be performed cold -- autostart on cold boot warm -- autostart on warm boot both -- autostart on cold or warm boot Onl th firs lette o op i significant I op i omitte o invalid th curren optio an command for the disk will be displayed. cm i an comman les tha character long Operand o driv specifier ar no permitted N checking for validity is performed. Warning i bot i specifie an th comman terminate wit war boot th comman wil b reissued when the program terminates. Examples: Set no autostart: setauto none Se autostar t supercal o col boot Us dis on drive b: setauto b:cold sc Don' chang th autostar command bu se autostart on cold or warm boot: setauto both Display the selected autostart: setauto End of document e will be used. opt one of the options none -- no autostart will be performed cold -- autostart on cold boot warm -- autostart on warm boot both -- autostart on cold or warm boot Onl th firs lette o op i sig*.|g"fA xtaaxa{ah *f.V*f.>w*f.|w*fw# xV 4SCg$G$ Loading SUPERCALC... $YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKWWWWWWWWWWWWWWWWWWWWIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKWWWWWWZaaaaaaaaaaVWWWWWWIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWWWWWWWaaaaaaaaaaaaWWWWWWWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWWWWWWWaaaaaaaaaaaaWWWWWWWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWWWWWWWaaaaaaaaaaaaWWWWWWWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVWWWWWWIaaaaaaaaaaKWWWWWWZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVWWWWWWWWWWWWWWWWWWWWZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa$v}AUTOST.ASMY o !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXGw4cs<5S˭yq׏Nj7k3xzx6o^2 Ƙ[;|zq;+k鼮0 ͓|镹*o22Ŷ+̼P,Ιc̷r2os_ni`owLS$ī _!Qic\x7\hF]LLSAwÔoe)I ^m;џrJ7E2~X ^m.NMKo-[ī ~Peeʅy:8eʓ1WԶ\R*d&n*@ڠBQE2 L9{3̯?_>fP &N`Q0. 0KH0}i0K40mELaUfJ&*CSi`e˄vSOLh;Y2VL6_3a,3La»O˘NRFXYIĄ\B@cBXY( `ЧVlve?%&TTqaUfclKSQu`BX٢12wV|rM @L%$Eń<0. a¸, Y}0a,3aBhELBvaX.!YÄ\b̄ y3wKh-  L2IQ`0K0VhPT+XL cd eLxW b1ڵ10DNPGÄ;>UƸ,g,Lx7l+LH40ymq`Z!V2ƵL?;^jVguVguVg5` `LUvqm (5mj2EkBYM1ܘ$yS4wG1LH5E, ]̼۴qQh^_<ޮMW2 0ª0> ߇gLm'XfU9%L+S5G" kbj2/Ϳ_?>??,OYXdaseB9kXݻ(;(*۾?{wP&X=)*58e(V&XU&Xݻ2z~/V&XU&Xw?>D`=td Aߋ Cm C;Q&Xgq2z2z C{q2z2zٽav',V&XU&Xݻ2z~/V&XU&Xw8ѫٝ(o{wP&X}+nL*nL*[ePqePq+{! 9¹8h\TkXt 4M!ढ5ʐo I$Q+ w*.|w* 4 $!ͼ !)ͼ !ͼ :5͡ :6:6͡ :7!6*,6,6I u :J<<2,> 2u2v<ʆ ?AUTOST COM THE AUTOST.COM MAKER Version 1.0 This program takes your inputs and creates an "AUTOST.COM" file on the B: drive. For this reason, please put the disk you want to autostart in the B: drive. (It is assumed that this program was loaded from the A: drive.) Type in the name of the program as if you were going to run it under CP/M. (You MUST use CAPITAL LETTERS here.) Examples: (not more than 24 characters) A>MBASIC PROGRAM for a MBASIC program; or A>SORT for Supersort (tm) by MicroPro. A>$ Now, type a one-line message for the sign-on display. You can have up to 52 characters on the line (a TAB counts as one character). I recommend a TAB for the first character. You can edit the line, but hitting the carriage return key will enter the line. $ NOW SAVING B:AUTOST.COM... $ (The disk should be ready for self-starting when the light goes off on the drive. Press RESET and put the disk in the left drive, hit the return key, and watch what happens.) BE SURE THE CP/M SYSTEM IS ON THE DISK. $ Sorry, but there is no directory space left on your B: disk. $ Sorry, but there is no room left on your disk. $the B: drive. (It is assumed that this program was loaded from the A: drive.) Type in the name of the program as if you were going to run it under CP/M. (You MUST use CAPITAL LETTERS here.) Examples: (not more than 24 characters) A>MBASIC PROGRAM for a MBASIC program; or A>SORT for Supersort (tm) by MicroPro. A>$ Now, type a one-line message forMAKEAUTO and MAKAUTO2 MAKEAUTO i a Osborne-specifi progra tha wil generat customize AUTOST.CO fil o th B drive I allow yo t creat on lin sign-o message an designat th progra t b run I will work on single and double density drives. MAKAUTO i slightl modifie t chang th driv speed fo Osborne wit th MP drives To Vyse progra FAS ha bee incorporate s th th driv speed is automatically speeded up. T ru MAKEAUT o MAKAUTO2 pu th progra i th A driv an th diskett tha yo wan t hav customize i th B drive Typ MAKEAUTOMBASIC PROGRAM for a MBASIC program; or',cr,lf db 'A>SORT for Supersort (tm) by MicroPro.',cr,lf,lf db 'A>$' msg2: db clr,cr,lf,lf,lf db 'Now, type a one-line message for the sign-on',cr,lf db 'display. You can have up to 52 characters on',cr,lf db 'the line (a TAB counts as one character).',cr,lf db lf,'I recommend a TAB for the first character.',cr,lf db 'You can edit the line, but hitting the carriage',cr,lf db 'return key will enter the line.',cr,lf,lf,lf,'$' msg3: db cr,lf,lf,lf,' NOW SAVING B:AUTOST.COM...',cr,lf,'$' msg6: db lf,' (The disk should be ready for self-starting',cr,lf db ' when the light goes off on the drive. Press',cr,lf db ' RESET and put the disk in the left drive,',cr,lf db ' hit the return key, and watch what happens.)',cr,lf db lf,' BE SURE THE CP/M SYSTEM IS ON THE DISK.',cr,lf db '$' msg4: db cr,lf,lf,'Sorry, but there is no directory space left',cr,lf db 'on your B: disk.',cr,lf,'$' msg5: db cr,lf,lf,'Sorry, but there is no room left on your disk.' db cr,lf,'$' .|g"" w# x>2oO*.*.>w*.|w* 4 $!ͼ !)ͼ !ͼ :5͡ :6:6͡ :7!6*,6,6N z :O<<21> 2z2{<ʆ ?AUTOST COM THE AUTOST.COM MAKER Version 1.0 This program takes your inputs and creates an "AUTOST.COM" file on the B: drive. For this reason, please put the disk you want to autostart in the B: drive. (It is assumed that this program was loaded from the A: drive.) Type in the name of the program as if you were going to run it under CP/M. (You MUST use CAPITAL LETTERS here.) Examples: (not more than 24 characters) A>MBASIC PROGRAM for a MBASIC program; or A>SORT for Supersort (tm) by MicroPro. A>$ Now, type a one-line message for the sign-on display. You can have up to 52 characters on the line (a TAB counts as one character). I recommend a TAB for the first character. You can edit the line, but hitting the carriage return key will enter the line. $ NOW SAVING B:AUTOST.COM... $ (The disk should be ready for self-starting when the light goes off on the drive. Press RESET and put the disk in the left drive, hit the return key, and watch what happens.) BE SURE THE CP/M SYSTEM IS ON THE DISK. $ Sorry, but there is no directory space left on your B: disk. $ Sorry, but there is no room left on your disk. $the B: drive. (It is assumed that this program was loaded from the A: drive.) Type in the name of the program as if you were going to run it under CP/M. (You MUST use CAPITAL LETTERS here.) Examples: (not more than 24 characters) A>MBASIC PROGRAM for a MBASIC program; or A>SORT for Supersort (tm) by MicroPro. A>$ Now, type a one-line message for;************************************************** ;MAKEAUTO.ASM version 1.0 9/10/82 ; ;copyright 1982 by M. Joel Guerra ;portions copyright 1981 by Thom Hogan ;modified 10/23/83 by Steven Dyk to speed up the ;drives. ; ;This program creates a new AUTOST.COM file on disk ;for use with the Osborne 1 computer ;************************************************** ; ; cr equ 0dh ;carriage return lf equ 0ah ;line feed clr equ 26 ;clear Osborne screen ; ; org 100h jmp 200h mvi l,00h mov a,h sui 16h mov h,a shld 0110h jmp main nop nop nop print: mvi c,09 jmp 0005h rpt: ldax d mov m,a inx h inx d dcx b mov a,b ora c jnz rpt ret main: mvi a,0 ;these 2 lines speed up the drives sta 0ef13h ;for 01's with MPI drives - S. Dyk lxi d,signon call print lxi d,prgm cntr: lxi b,0 lhld 0110h mvi l,07 call rpt lhld 0110h mvi l,88h mvi a,08h mov m,a lhld 0110h mvi l,89h mov a,h mov m,a lhld 0110h pchl pprgm: db 018h prgm: db 0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0 signon: db clr,cr,lf,lf,lf db lf,lf,lf,lf,lf,lf,52,0 smesg: db 0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0 db 0,0,0,0,0,cr,lf,lf,'$' ds 87 ; ; org 200h ; lxi h,0100h mvi m,02ah inr l mvi m,01 inr l mvi m,00 ; lxi d,msg1 call print ; ; fetch the name of the program to autostart ; lxi d,pprgm mvi c,0ah call 0005h ; ; fetch the autostart message to be displayed ; lxi d,msg2 call print ; lxi d,smesg-2 mvi c,0ah call 0005h ; lda prgm inr a inr a sta cntr+1 ; mvi a,lf sta smesg-2 sta smesg-1 ; ; Save the new AUTOST.COM program on the b: disk ; lxi d,msg3 call print lxi d,bsave ;delete any previous file mvi c,013h call 0005h lxi d,bsave ;open new AUTOST.COM file mvi c,016h call 0005h inr a jz fuldir lxi d,0100h ;set DMA address mvi c,01ah call 0005h lxi d,bsave ;start writing to disk mvi c,015h call 0005h ora a jnz fuldsk lxi d,0180h ;set DMA address AGAIN! mvi c,01ah call 0005h lxi d,bsave ;finish writing to disk mvi c,015h call 0005h lxi d,bsave ;close file, write FCB to disk mvi c,010h call 0005h lxi d,msg6 call print jmp 0000h ; fuldir: lxi d,msg4 call print jmp 0000h fuldsk: lxi d,msg5 call print jmp 0000h ; bsave: db 2,'AUTOST COM',0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 0,0,0,0 ; msg1: db clr,cr,lf,lf,lf db 9,'THE AUTOST.COM MAKER' db cr,lf,9,' Version 1.0' db cr,lf,lf,lf db 'This program takes your inputs and creates',cr,lf db 'an "AUTOST.COM" file on the B: drive.',cr,lf db lf,'For this reason, please put the disk you',cr,lf db 'want to autostart in the B: drive.',cr,lf db '(It is assumed that this program was loaded',cr,lf db 'from the A: drive.)',cr,lf,lf db 'Type in the name of the program as if you',cr,lf db 'were going to run it under CP/M.',cr,lf db '(You MUST use CAPITAL LETTERS here.)',cr,lf,lf db ' Examples: (not more than 24 characters)',cr,lf db 'A>MBASIC PROGRAM for a MBASIC program; or',cr,lf db 'A>SORT for Supersort (tm) by MicroPro.',cr,lf,lf db 'A>$' msg2: db clr,cr,lf,lf,lf db 'Now, type a one-line message for the sign-on',cr,lf db 'display. You can have up to 52 characters on',cr,lf db 'the line (a TAB counts as one character).',cr,lf db lf,'I recommend a TAB for the first character.',cr,lf db 'You can edit the line, but hitting the carriage',cr,lf db 'return key will enter the line.',cr,lf,lf,lf,'$' msg3: db cr,lf,lf,lf,' NOW SAVING B:AUTOST.COM...',cr,lf,'$' msg6: db lf,' (The disk should be ready for self-starting',cr,lf db ' when the light goes off on the drive. Press',cr,lf db ' RESET and put the disk in the left drive,',cr,lf db ' hit the return key, and watch what happens.)',cr,lf db lf,' BE SURE THE CP/M SYSTEM IS ON THE DISK.',cr,lf db '$' msg4: db cr,lf,lf,'Sorry, but there is no directory space left',cr,lf db 'on your B: disk.',cr,lf,'$' msg5: db cr,lf,lf,'Sorry, but there is no room left on your disk.' db cr,lf,'$' db 'Now, type a one-line message for the sign-on',cr,lf db 'display. You can have up to 52 characters on',cr,lf db 'the line (a TAB counts as one character).',cr,lf db lf,'I recommend a TAB for the first character.',cr,lf db 'You can edit the line, but hitting the carriage',cr,lf db 'return key will enter the line.',cr,lf,lf,lf,'$' msg3: db cr,lf,lf,lf,' NOW SAVING B:AUTOST.COM...',cr,lf,'$' msg6: db lf,' (The disk should be ready for self-starting',cr,lf db ' when the light goes off on the drive. Press',cr,lf db ' RESET and put the disk in the left drive,',cr,lf db ' hit the return key, and watch what happens.)',cr,lf db lf,' BE SURE THE CP/M SYSTEM IS ON THE DISK.',cr,lf db '$' msg4: db cr,lf,lf,'Sorry, but there is no d*.|g"FAH**F.6*F.>w*F.|w*Fw# x6  #z !9"w͟ n!*=> !=1:2222  STARTER) Version 1.3 Copyright 1983 Claude Ostyn (>!w This program will create another program called AUTOST.COM and put it on a diskette in drive B. Ozzie looks for AUTOST.COM when it is booted. If it finds it, it then executes the command requested by AUTOST.COM. Press to proceed, or CONTROL-Z to exit. ʎo  Enter the command to be executed by AUTOST.COM, (up to 80 characters). Example: MBASIC ZAPGAME ________________________________________ !6P !~ʎB  Enter the message to be displayed while AUTOST.COM is executing (up to 80 characters). ___________________________________________________  ͷ,  Put the disk on which you want to create AUTOST.COM in drive B, and press any key, or CTRL-Z to make changes. l  <<< WAIT >>> Copy this AUTOST.COM on another disk? Y  Returning to CP/M... :2!#~$º6 #6 #6 #6$!":2 2|!"h"j\6  OK to erase existing AUTOST.COM? Y¤ R \\Iä**"\oͮä:=2I\:2  <<< DONE! >>>    Permanent write error  Cannot open for write ]_㯆# >2\!] w#9!HwG#x]w#Q:{}~a_!HR6#t!6P#6R#6$… <<< DONE! >>>    Permanent write error  Cannot open forAUTOST COM____ !6P !~ʎB  Enter the message to be displayed while AUTOST.COM is executing (up to 80 characters). ___________________________________________________  ͷ,  Put the disk on which you want to create AUTOST.COM in.op STARTER.DOC STARTER.CO create progra calle AUTOST.COM containin th command and sign-on message of your choice. Whe yo boo dis wit th Osborn 1 i look fo fil calle AUTOST.COM I i find it th comman specifie i th fil wil b executed Thi ca b compoun command includin parameters suc as MBASIC MENU or PIP B:=A:*.*[VO] or SUBMIT EXECUTE PIP.COM XDIR.COM or, simply, DIR To run the program: at the A> prompt, type A> STARTER Th progra wil the promp yo fo command an fo messag t displa o th scree whil th comman i bein loaded Th comman lin and the message can each be up to 80 characters long. Yo wil the b aske t pu dis i driv B I AUTOST.CO alread exist o th disk yo wil b give th choic t overwrit i o tr anothe disk Thi progra als allow yo t cop th sam AUTOST.CO progra o an numbe o disks. Unlik th Osborn AUTOST.COM thi versio doe no contai graphic an therefor th AUTOST.CO create wil fi int th minimu siz fil (1 i doubl density 2 i single). Thi progra work fo rev 1. o highe Osborn 1 an mayb (untested fo rev 1. a well I wil no wor wit th Executive (which has its own similar utility). Ther i copyrigh notic i th program d no authoriz an profit-making resal o commercia us o thi program However d gran licens fo persona us t al Osborn owners. I also authorize FOG to distribute it. Claude Ostyn Sitka, Alaska September 26, 1983 Yo wil the b aske t pu dis i driv B I AUTOST.CO alread exist o th disk yo wil b give th choic t overwrit i o tr anothe disk Thi progra als allow yo t cop th sam AUTOST.CO progra o an numbe o disks;==================================================== ; STARTER A.K.A. START MAKER by Claude Ostyn : ; Version 3 9/27/83 : ; : ; This is a self-modifying program with hooks into : ; CCP and BDOS. Use extreme caution. : ;==================================================== ;EQUATES ; ASCII cr equ 0dh lf equ 0ah ctrlz equ 1ah escape equ 27 half equ ')' full equ '(' ; BDOS functions rconf equ 1 ;read CON: into A wconf equ 2 ;write A to CON: rbuff equ 10 ;read a console line ; CP/M disk access functions initf equ 13 ;initialize BDOS openf equ 15 ;open file closf equ 16 ;close file findf equ 17 ;find file delef equ 19 ;delete file readf equ 20 ;read one record writf equ 21 ;write one record makef equ 22 ;create file sdmaf equ 26 ;set DMA function ; CP/M addresses rboot equ 0 ;cold boot drive equ 4 ;current drive bdos equ 5 ;BDOS entry for calls memax equ 7 ;MSB of top memory tfcb equ 5ch ;transient file control block fcbex equ tfcb+12 ;file extent fcbs2 equ tfcb+14 ;system use in FCB fcbrc equ tfcb+15 ;record count in FCB fcbcr equ tfcb+32 ;current record in FCB tbuff equ 80h ;transient buffer tpa equ 100h ;TPA ; CP/M flags bdaok equ 0 ;BDOS return for all OK bder1 equ 1 ;BDOS return 1 bder2 equ 2 ;BDOS return 2 bderr equ 255 ;BDOS return error flag ; special values for this program imagelen equ 4 ;number of records in AUTOST ;START org tpa tempjmp: jmp maker ;this jump will be changed to nop ;by program ;AUTOSTART PROGRAM PART lhld 01 mvi l,0 mov a,h sui 16h mov h,a shld ccp lxi d,message2 call print lxi d,command lxi b,42 automove: lhld ccp mvi l,07 call again lhld ccp mvi l,88h mvi a,08h mov m,a lhld ccp mvi l,89h mov a,h mov m,a lhld ccp pchl again: ldax d mov m,a inx h inx d dcx b mov a,b ora c jnz again ret print: mvi c,9 jmp bdos ;AUTOSTART STORAGE AREA ccp: ds 2 command:  ds 84 message: ds 2 message2: ds 88 ;END OF AUTOST PROGRAM maker: start: lxi sp,stak ;set up user's stack lda drive ;save initial drive selected sta drsav xra a sta tempjmp ;cancel the jump to here sta tempjmp+1 sta tempjmp+2 start1: call showmsg db 26,9,9,'STARTER',escape, half,' Version 1.3',cr,lf,lf db 9,9,'Copyright 1983 Claude Ostyn',cr,lf,lf,lf db escape,full,0 mvi a,imagelen ;length of AUTOST image lxi h,recct ;in number of 128 byte records mov m,a ;store it at recct call showmsg sinon: db 'This program will create another program called',cr,lf db 'AUTOST.COM and put it on a diskette in drive B.',cr,lf,lf db 'Ozzie looks for AUTOST.COM when it is booted.',cr,lf db 'If it finds it, it then executes the command',cr,lf db 'requested by AUTOST.COM.',cr,lf,lf,lf,lf contline: db 'Press to proceed, or CONTROL-Z to exit. ',0 call chrin ;get answer cpi ctrlz ;control-z? jz exit ;if yes, exit start2: call blank ;blank input areas call showmsg promptfile: db 26,cr,lf,lf db 'Enter the command to be executed by AUTOST.COM,' db cr,lf,'(up to 80 characters).',cr,lf db 'Example: MBASIC ZAPGAME',cr,lf,lf,lf db '________________________________________',cr,0 lxi h,inbuff ;set maximum input length mvi m,80 ;at 80 lxi d,inbuff mvi c,rbuff call bdos lxi h,inbuff+1 ;point to char. counter mov a,m cpi 0 ;if zero, then jz exit ;exit call movcommand ;move command line into AUTOST call showmsg promptmessage: db cr,lf,lf,'Enter the message to be displayed while',cr,lf db 'AUTOST.COM is executing (up to 80 characters).',cr,lf,lf,lf db '__________________________' db '_________________________',cr,0 lxi d,message ;point to message area mvi c,rbuff call bdos ;and enter the message call setend ;put cr/lf at end copyit: call putname ;put B:AUTOST.COM into FCB call showmsg db cr,lf,lf db 'Put the disk on which you want to create',cr,lf db 'AUTOST.COM in drive B, and press any key,',cr,lf db 'or CTRL-Z to make changes.',cr,lf db cr,lf,0 call chrin cpi ctrlz jz start2 call showmsg db lf,lf,9,9,'<<< WAIT >>>',0 call put call showmsg db 'Copy this AUTOST.COM on another disk? ',0 call chrin cpi 'Y' jz copyit exit: call showmsg db 26,cr,lf,lf,9,'Returning to CP/M...',cr,lf,lf,0 lda drsav ;restore initial drive sta drive jmp rboot ;make changes at end of message setend: lxi h,message+1 ;point to 1 before 1st chr lookforend: inx h mov a,m cpi '$' ;look for terminator jnz lookforend mvi m,cr ;and replace with cr/lf sequence inx h mvi m,lf inx h mvi m,lf inx h mvi m,'$' ret ; Write a file from "buffer" to disk put: lxi h,tpa ;set up buffer start shld next lda recct ;save record count sta ctsav put1: mvi c,initf ;enable write on any disk call bdos xra a ;initialize FCB sta fcbcr ;current record lxi h,0 shld fcbex ;extent and s1 shld fcbs2 ;s2 and record count lxi d,tfcb ;see if file exists mvi c,findf ;find function call bdos cpi bderr ;is it there? jz put2 call showmsg db cr,lf,'OK to erase existing AUTOST.COM? ' ,0 call chrin cpi 'Y' jnz putex ;if no, try again call showmsg db escape,'R',0bh,0 lxi d,tfcb ;if yes, erase it mvi c,delef call bdos put2: lxi d,tfcb mvi c,makef call bdos cpi bderr jnz put3 call wropn jmp putex put3: lhld next xchg mvi c,sdmaf call bdos lhld next lxi d,128 dad d shld next lxi d,tfcb mvi c,writf call bdos cpi bdaok jz put4 call wemsg jmp putex put4: lda recct dcr a sta recct jnz put3 call cpdma lxi d,tfcb mvi c,closf call bdos lda ctsav sta recct call showmsg db cr,9,9,'<<< DONE! >>>',9,9,cr,lf,lf,9,0 putex: call showmsg db cr,lf,0 call cpdma ret ; display write error message wemsg: call showmsg db cr,lf,lf,'Permanent write error',cr,lf,0 ret ; display write open message wropn: call showmsg db cr,lf,lf,'Cannot open for write ',cr,lf,0 ret ;restore CP/M DMA address to the transient buffer cpdma: lxi d,tbuff mvi c,sdmaf call bdos ret ;console character into register a, masked to 7 bits chrin: push b push d push h readit: mvi e,0ffh mvi c,6 call bdos cpi 0 jz readit ani 7fh call ucase call cout pop h pop d pop b ret ;character in register A output to console cout: push b push d push h push psw mvi c,wconf mov e,a call bdos pop psw pop h pop d pop b ret ;message pointed to by stack out to console showmsg: xthl xra a add m inx h xthl rz call cout jmp showmsg ;put name of new file into FCB putname: mvi a,2 sta tfcb ;force drive b designator lxi d,filename lxi h,tfcb+1 ;point to name area mvi b,11 movname: ldax d mov m,a inx h inx d dcr b jnz movname ret ; move the command line into AUTOST image movcommand: lxi h,command ;length of command in image lxi d,inbuff+1 ;point to character counter ldax d ;get it into a mov m,a ;and put it in command mov b,a ;also copy it into b inx d ;point to command itself inx h ;do same in image mov a,b ;put counter into a cpi 0 ;check if zero rz ;if zero, return moveit: ldax d ;get byte to move call ucase ;convert to upper-case if necessary mov m,a ;move it inx h ;increment destination inx d ;increment source loc. dcr b ;decrement counter jnz moveit ;repeat ret ;convert to uppercase if letter ucase: cpi ':' ;first check that it is not rz ;one of the ASCII codes cpi '{' ;larger than lower case rz ;and, if it is, just return cpi '}' rz cpi '~' rz cpi 'Z'+7 ;lowercase? rc ;if not, don't convert ani 5fh ;convert to uppercase ret ;initialize input areas blank:  lxi h,command ;command area mvi b,82 ;put zero in 82 bytes movzero: mvi m,0 inx h dcr b jnz movzero lxi h,message mvi m,80 inx h mvi m,0 ;zero counter mvi b,82 movterm: ;put terminator in 82 bytes inx h mvi m,'$' dcr b jnz movterm ret ;RAM variables and buffers drsav: ds 1 recct: ds 1 ctsav: ds 1 next: ds 2 ;set up stack space ds 80 stak db 0 ;for filename, format is XXXXXXXXTYP to fit FCB image filename: db 'AUTOST COM' inbuff: end nz moveit ;repeat ret ;convert to uppercase if letter ucase: cpi ':' ;first check that it is not rz ;one of the ASCII codes cpi '{' ;larger than lower case rz ;and, if it is, just return cpi '}' rz cpi '~' rz cpi 'Z'+7 ;lowercase? rc ;if not, don't convert ani 5fh ;convert to uppercase ret ;initialize input areas blank: !9@ ~# @C  SCREEN-PAC not installed$:$:]0O:^0O:_ yʀO:_0O:` Žyh4P Usage: TO arg, where arg = 52, 80, or 104$!qGAUTOST COMAUTOST AQMAUTOST ASM% !"#BAUTOST DOCC$%&'()*+,FSTART COM-FSTART DOC.MAKEAUTOCOM /0MAKEAUTODOC1MAKEAUTOASM 2345MAKAUTO2COM 67MAKAUTO2ASM"89:;<STARTER COM=>STARTER DOC?@STARTER ASMEABCDEFGHITO $$$; Program to switch to 52, 80, or 104 column screen ; if SCREEN-PAC is installed. ; ; Original by Chris Hill, July 1983 ; Modified by Jim Woolley, 11/83 ; ; Usage: ; A>TO arg ; where arg is 52, 80, or 104 ; LADR EQU 0E1A5H BIOS EQU 0E4E5H ;location to call ;in BIOS bdos equ 5 arg equ 5ch + 1 ;pointer to argument offset equ 4000h ;shadow RAM offset scrnpac equ 2400h ;pointer to screen-pac test value ; SETSC EQU 03H ;for 80 columns ; SETSC EQU 00H ;remove leading ; ;semicolon for 52 columns ; SETSC EQU O1H ;remove leading ;semicolon for 104 columns ORG 0100H ; lxi h,start ;move code at start to lxi d,offset ; offset above shadow RAM mvi c,finish-start ;length of code to move movit mov a,m ;from stax d ;to inx h inx d dcr c jnz movit ;continue move call offset ;check if screen-pac ani 2 jz argval ;jump if yes lxi d,msg1 ;else display msg mvi c,9 jmp bdos ;done ; msg1 db 'SCREEN-PAC not installed$' ; start di ;code to check if out 0 ; screen-pac installed lda scrnpac ; must run above shadow RAM out 1 ei ret finish equ $ ; argval lda arg ;get 1st digit sui 30h ;convert from ASCII jm quit call x10 ;multiply by 10 mov c,a ;save it lda arg + 1 ;get 2nd digit sui 30h ;convert from ASCII jm quit add c ;get whole number mov c,a ;save it lda arg + 2 ;see if 3rd digit cpi 20h mov a,c ;get back whole number jz check ;jump if no 3rd digit call x10 ;else multiply by 10 mov c,a ;save it lda arg + 2 ;get 3rd digit sui 30h ;convert from ASCII jm quit add c ;get whole number mov c,a ;save it lda arg + 3 ;see if 4th digit cpi 20h jnz quit ;4th digit not allowed mov a,c ;get back whole number cpi 104 mvi c,1 jz ok check cpi 52 ;verify appropriate value mvi c,0 jz ok cpi 80 mvi c,3 jz ok ; quit lxi d,msg2 ;tell how to use mvi c,9 jmp bdos ;done ; msg2 db 'Usage: TO arg, where arg = 52, 80, or 104$' ; ok LXI H,LADR ;get address of loc-GET ;ation to change mov m,c ;put appropriate value ; into that loc. jmp BIOS ;call to extended BIOS ;and done ; x10 ;get 10*a add a ;2*a mov b,a ;save it add a ;4*a add a ;8*a add b ;10*a ret get 2nd digit sui 30h ;convert from ASCII jm quit add c ;get whole number mov c,a ;save it lda arg + 2 ;see if 3rd digit cpi 20h mov a,c ;get back whole number jz check ;jump if no 3rd digit call x10 ;else multiply by 10 mov c,a ;save it lda arg + 2 ;get 3rd digit sui 30h ;convert from ASCII jm quit add c ;get whole number mov c,a ;save it lda arg + 3 ;see if 4th digit cpi 20h jnz quit ;4th digit not allowed mov a,c ;get back whole number cpi 104 mvi c,1 jz ok check cpi 52 ;verify appropriate value mvi c,0 jz ok cpi 80 mvi c,3 jz ok ; quit lxi d,msg2 ;tell how to use mvi c,9 jmp bdos ;done ; msg2 db 'Usage: TO arg, where arg = 52, 80, or 104$' ; ok LXI H,LADR ;get address ; ; routine to switch screen to 80 col ; or 52 or 104 columns ; ; Coded by Chris Hill, July 1983 ; ; LADR EQU 0E1A5H BIOS EQU 0E4E5H ;location to call ;in BIOS SETSC EQU 03H ;for 80 columns ; SETSC EQU 00H ;remove leading ;semicolon for 52 columns ; SETSC EQU O1H ;remove leading ;semicolon for 104 columns ORG 0100H ; LXI H,LADR ;get address of loc-GET ;ation to change MVI M,SETSC ;put appropriate value ; into that loc. CALL BIOS ;call to extended BIOS ; ; LHLD 01H ;get warm start loc. PCHL ;do it STARTER DOC?@STARTER ASMEABCDEFGHITO COMJTO ASMKLMTO80 $$$ TO80.DOC TO80 is a utility program that uses the scanty documentation in the Osborne Screen-Pac User's Guide to switch from 54 columns to 80 or 104 columns, and back, as desired. The program is very simplistic -- only one screen may be selected by the program, depending on which option is chosen during editing. It would probably be easy to make the program prompt for desired screen width, but I wanted to keep my involvement in assembly language programming to the barest minimum. I have three programs set up, called to80.com, to52.com, and to104.com which change the screen dimension as the names of the programs imply. Others have used the routines with ZCPR modifications to CP/M so that the programs are invoked via function keys. Whatever. The assembly language version of the program is called to80.asm, but the appropriate lines to invoke to modify the program for to104 or to52 are labelled. To make the programs into .com files, use the ASeMmbler and the LOADer provided with your Osborne. Note that the program will not work unless you have the Screen-Pac hardware and software modifications. Chris J. Hill Santa Clara FOG July 1983ake the program prompt for desired screen width, but I wanted to keep my involvement in assembly language programming to the barest minimum. I have three programs set up, called to80.com, to52.com, and to104.com which change the screen dimension as the names of the programs imply. Others have used the routines with ZCPR modifications to CP/M so that the programs are invoked via function keys. Whatever. The assembly language version of the program is called to80.asm, but the appropriate lines to invoke to modify the program for to104 or to52 are labelled. To make the programs into .com files, use the ASG)GAGxaGx5GxBjxbjx8jxCʇxcʇx1ʇ!6.X)c)B)6á!6.X)f)<á!6.X)i)<)GYxyxNxnx .êCopyright 1983 Claude Ostyn6.<.X)!h~)Òm)Ò  !h6!h6S $ New screen width: A. 52 columns B. 80 columns C. 104 columns $=( Automatic scrolling? )(Note: Normally ON for 52 column display, except with Supercalc, and normally OFF with 80 or 104 column display.)( Enter for autoscroll ON, for OFF: $Selected: $52$80$104$Autoscroll ON $Autoscroll OFF $TO80 ASMNTO80 DOC OPWID $$$.OP WID.COM PROGRA T CHANG SCREE WIDTH O TH OSBORN WIT SCREEN-PAC I yo hav th Screen-Pa upgrad o you Osborne 1 thi progra wil allo yo t chang th displa forma withou havin t reboo wit differentl setu diskette Thi mean yo ca us th sam progra diskettes whethe yo us th tin built-i scree o whic yo ca onl rea fifty-tw characte line withou losin you eyesight o large vide monito whic ca displa th eight o on hundre an fou column wit n strain. WID.CO i ver eas t use A th CP/ A prompt jus typ "WID (instea o Widt Adjustmen Progra -- hat unnecessar typing an "RETURN" I yo ar usin WordStar yo ca cal WID.CO fro th no-fil menu b typin th comman "R first. Th progra wil promp yo fo scree width an als allo yo t switc th auto-scrollin featur o o off sinc i doe no wor wel a al wit th eighty-colum screen I cas yo don' kno whic on i appropriate th promp wil explai wha th norma settin woul be Enterin jus carriag retur instea o mor specifi respons wil tur th auto-scrollin featur o i th scree i se t fifty-tw columns an tur i of otherwise Imprope entrie wil b ignored. by Claud Ostyn P.O Bo 2035 Sitka Alask 99835 Phon (907 747-5372 e A th CP/ A prompt jus typ "WID (instea o Widt Adjustmen Progra -- hat unnecessar typing an "RETURN" I yo ar usin WordStar yo ca cal WID.CO fro th no-fil menu b typin th comman "R first. Th progra wil promp yo fo scree width an als allo yo t switc th auto-scrollin featur o o off sinc i doe no w; ;-------------------------------------------------------------------------- ; W.ASM by Claude Ostyn May 2, 1983 ; rev 5/23/83 ; This program sets the Osborne 1 screen width to 52, 80 or 104 columns and ; switches the auto scrolling feature on or off. ; This program will work only if the Screen-Pac modification is installed. ;-------------------------------------------------------------------------- ; EQUATES clear equ 26 ;clear screen cr equ 0dh ;carriage return lf equ 0ah ;line feed esc equ 1bh ;escape phalf equ ')' ;begin dim display pfull equ '(' ;end dim display pcall equ 9 ;BDOS print call concall equ 0bh ;BDOS check console status call kcall equ 01h ;BDOS read character call bdos equ 5 ;BDOS call address widthflag equ 0e1a5h ;screen width flag byte adjust equ 0e4e5h ;BIOS routine to set width scrollctl equ 0e168h ;scroll control byte widfiftytwo equ 0 wideighty equ 3 widoneohfour equ 1 doscroll equ 0ffh noscroll equ 00h ; ; START org 0100h beginhere: lxi d,promptwidth ;print prompt for new width call print call whatsnew ;go check keyboard whatwasit: mvi c,kcall ;now, what was that character? call bdos mov b,a ;copy the character into register B cpi 'A' jz fiftytwo ;and do the appropriate thing mov a,b cpi 'a' jz fiftytwo ;etc. mov a,b cpi '5' ;accept digits from distracted jz fiftytwo ; or tired users... mov a,b cpi 'B' jz eighty mov a,b cpi 'b' jz eighty mov a,b cpi '8' jz eighty mov a,b cpi 'C' jz oneohfour mov a,b cpi 'c' jz oneohfour mov a,b cpi '1' jz oneohfour jmp beginhere ;character not acceptable... ;so try again ; fiftytwo: lxi h,widthflag ;point to the flagbyte mvi m,widfiftytwo ;set the flagbyte call adjust ;and adjust the width call backspace ;erase answer lxi d,selected ;and show selected call print lxi d,showfiftytwo ;width call print lxi d,screenhome ;(reset screen home, call print ; just in case) call makitscroll ;enable autoscrolling jmp autoscrollset eighty: lxi h,widthflag mvi m,wideighty call adjust call backspace lxi d,selected call print lxi d,showeighty call print call nomorescroll ;disable auto scrolling jmp autoscrollset oneohfour: lxi h,widthflag mvi m,widoneohfour call adjust call backspace ;erase answer lxi d,selected ;show selected width call print lxi d,showoneohfour call print call nomorescroll ;disable auto scrolling ; autoscrollset: lxi d,promptscroll call print call whatsnew whatwasitagain: mvi c,kcall ;now, what was this character? call bdos mov b,a ;copy the character into register B cpi 'Y' jz scrollyes ;and do the appropriate thing mov a,b cpi 'y' jz scrollyes mov a,b cpi 'N' jz scrollnoway mov a,b cpi 'n' jz scrollnoway mov a,b cpi cr ;if then leave it as it is jz scrollstatus call backspace jmp whatwasitagain db 'Copyright 1983 Claude Ostyn' scrollyes: call makitscroll ;enable auto scrolling call backspace jmp scrollstatus scrollnoway: call nomorescroll ;disable auto scrolling call backspace scrollstatus: lxi d,selected ;print "selected" call print lxi h,scrollctl ; point to scroll control byte mov a,m ; read it cpi doscroll ; on or off? jz yes ; if on, go print "ON" lxi d,shownoscroll ; else print "OFF" call print jmp fini yes: lxi d,showscroll call print jmp fini ;go to exit point ; ; SUBROUTINES ; whatsnew: mvi c,concall ;go check for console status call bdos ; cpi 00h ;if no character ready, jz whatsnew ; keep going back ret ;if ready, go on with the program print: mvi c,pcall ;get call into C jmp bdos ;and get BDOS to do it backspace: mvi e,08h ;backspace character mvi c,02 ;is being output to console call bdos ;to erase wrong entry ret makitscroll: lxi h,scrollctl ;point to scroll control byte mvi m,doscroll ;set it to FFh ret nomorescroll: lxi h,scrollctl ;point to scroll control byte mvi m,noscroll ;set it to 00 ret ; ; STORAGE AREA ; screenhome: db esc,'S',20h,20h,'$' promptwidth: db clear,lf db 'New screen width:',cr,lf,lf db 9,'A. 52 columns',cr,lf db 9,'B. 80 columns',cr,lf db 9,'C. 104 columns',cr,lf db 9,9,9,9,'$' promptscroll: db esc,'=',28h,20h db 'Automatic scrolling?',cr,lf,esc,phalf db '(Note: Normally ON for 52 column display,',cr,lf db ' except with Supercalc, and normally OFF',cr,lf db ' with 80 or 104 column display.)',esc,pfull,cr,lf,lf db 'Enter for autoscroll ON, for OFF: ',cr,lf,lf db '$' selected: db 'Selected: $' showfiftytwo: db '52$' showeighty: db '80$' showoneohfour: db '104$' showscroll: db 'Autoscroll ON',cr,lf,lf,lf,'$' shownoscroll: db 'Autoscroll OFF',cr,lf,lf,lf,'$' ; fini: ret end * b͸{   w{ÖüH!K]jU 2͵ ^#V#*~#fo^#*~#fo^#V#*n^#*n^#V# ~#fo^#& ~#fo!+!#!+!#!+!+}|z{|}|z7||7zZZ)|/g}/o#|͉k|/g}/o#ɯ2hZZk:h|/g}/o#|/g}/o#:h<2hqDM!xxGyO҃)v|͔`i|)Öxڷz/W{/_ѯzW{_=yOxGæ2hZZ͉M|}ȯ|g}o)|/g}/o#z/W{/_!9~#fo! ! ! ! ! ! P!9~#A!9"w**w"j!z*"d!"f!Y"H>2^>2a>2`2c>2s2t>2r>2v!"@!"D!@"B!"F !F#x:~#!|2i~# :" 2i +}|~#:G:ix."2i+w# +6#!6#@A2n2?*j**|+`"d!"f!!>ڌo&͖=}  w~2ʸͼ56!+W ?_!~7z?ͧ:>͞@w#5.ww#w#w#w*>?@͌>w#͌5> w#@ͧ͵g 2q&0OxG͵j/ʆSx\͞.7:77!a{  ʨ ʨ0:?ŷO !y$ 7o&))T])))!y 2p_ :p6)))Y~0̿7G~`2@2@#~2@~?>&=2@#^#V#^#V#"@^#V"@:@ '*{@!:@@'"@*@#w"@*@~9'D'/Ϳ7͈?+"@*@+"@!6D"@6!^D"@*@~*@*@s#r#*@s#r#*@s#r#*@s#r#*@s#r#:@w#"@'*@*@s#r#*@s#r#*@s#r#*@s#r#*@s#r#:@w#"@'|E'}X27*@+~2@+V+^+"@V+^+"@V+^+"@V+^+"@V+^"@"@*@+~2@+V+^+"@V+^+"@V+^+"@V+^+"@V+^"@"@p';(ͯ''͋(!"@"K@2@<2@2@2@ͥ)()(*¾(2@2@(S*(#)2@2@)l*ï !9DM͐++|!O ͻ;! ~#fo##~#fo*s#r! \# !x ͻ;\!l? !\!l usage is: A> WIDTH newline-length newline-length must be between 1 and 128 inclusive. õ !9DM͐n} ! ^#Vr+sn&Ͳ ý á !9DM`iw#w! 6#6͐ n! s{  ! n} ( ! ^#Vr+s ! n}-G ! 6#6! ^#Vr+s! ^#Vr+sn! s |ʈ ͐ ?! nѯg`is#rG ͐͐?Ø !9!9DM! n&|ͯ ! n&|ͩ  n&   > _   7*P:Rwr#:@w#"@'*@*@s#r#*@s#r#*@s#r#*@s#r#*@s#r#:@w#"@'|E'}X27*@+~2@+V+^+"@V+^+"@V+^+"@V+^+"@V+^"@"@*@+~2@+V+^+"@V+^+"@V+^+"@V+^+"@V+^"@"@p';(ͯ''͋(!"@"K@2@<2@2@2@ͥ)()(*¾(2@2@(S*(#)2@2@)l*ï !9DM͐++|!O ͻ;! ~#fo##~#fo* WIDTH.COM (for Osborne 1) copyright 1983 Dave Cairns Visalia, CA WIDTH.COM is a Public Domain program and NOT for sale or resale. Give it to someone for free. WIDTH.COM allows Oborne 1 users with 52 column displays to change screen width without rebooting. WIDTH.COM has not been tested on double-density machines. I use the program to quickly and easily read data and text which has been formated for standard 80 column displays (ie documentation listings from RCP/Ms, 80 col. directories,etc.) To use WIDTH.COM use the following format: A>WIDTH newline-length (newline length can be any integer from 1 to 128) EXAMPLE: WIDTH 128 (sets a 128 character line) WIDTH 52 (sets a 52 character line) WIDTH 40 (cuts an 80 col directory down to size) When WIDTH is used to go from a larger line  length to a smaller length (ie length was 128 and you want a 52 char line) it clears the screen and homes the cursor. This is done in order to remove garbage which might remain to the right of the margin. If WIDTH is executed going from shorter length to longer length no clear screen occurs. WIDTH was written in BDS-C (great language) Source code is in WIDTH.C.  formated for standard 80 column displays (ie documentation listings from RCP/Ms, 80 col. directories,etc.) To use WIDTH.COM use the following format: A>WIDTH newline-length (newline length can be any integer from 1 to 128) EXAMPLE: WIDTH 128 (sets a 128 character line) WIDTH 52 (sets a 52 character line) WIDTH 40 (cuts an 80 col directory down to size) When WIDTH is used to go from a larger line  /* WIDTH.C for OSBORNE 1 */ /* changes screen width setting */ /* without rebooting disks */ /* written in BDS-C */ /* for the PUBLIC DOMAIN */ /* c. 1983 by Dave Cairns */ /* not tested on double density */ #define LWIDTH 0xEF6C /* SD address of line width */ #define CLSCR 0x1A /* clear screen char */ unsigned nwidth; main(argc,argv) char *argv[]; { if(argc != 2) { puts("\nusage is:\nA> WIDTH newline-length \n"); exit(); } if((nwidth= atoi(argv[1])) < 1 || nwidth > 128) { puts("\n newline-length must be between 1 and 128 inclusive.\n"); exit(); } /* to clear screen if going to smaller size */ if(nwidth < peek(LWIDTH)) putchar(CLSCR); /* clear screen */ /* FINALLY WE DO IT */ poke(LWIDTH,nwidth); /* change width */ } WID ASM(TUVWXWIDTH COMYZ[WIDTH DOC \]WIDTH $$$!]~WdCN125(8- ʉÎ>D>D>D>!w N!ww!^#Vbk6 #6 #6 #6w!^#Vbk6#6#6#6 ʉ!m~ ʉͤ!͚7~ͮ#Ú> ͮ> î_Format OSCHG x1 (x2) ---------------------- Where x1 = 1 104 column 5 52 column 8 80 column (x2 =) W wordstar keys C CPM keys :P:` P:]5":^2":]85:^05:]1P:^0P:_4P SCREEN 1.1 (for the Osborne 1 with Screen-Pac) Copyright (c) 1984, Loren Cook Use: SCREEN [size] where size is 52, 80, or 104. $ >>>!w SCREEN version 1.1 02/12/84 This program is written to be used with the Osborne 1 and the Screen-Pac option. It allows you to change the screen size without having to use the cumbersome Osborne utility (SETUP.COM). This program also takes the place of a public domain set of programs that indiviually set the screen size. With the old programs (called 52.COM, 80.COM, 104.COM) you had to have each one on the diskette you were using to change and then change back. Additionally they each took up 1K of memory. By combining the power of all three programs into one you get a program that will set any of the legal screen sizes and is still only 1K in length. Usage is as follows: type SCREEN [size] where size is either 52, 80, or 104. If an incorrect size is chosen the program will repond with a help message. Enjoy....... Loren Cook Press ENTER to continue: m will repond with a help1m wmm~ m!k> 7 2F##"~hG]^m#G*:=7: <2m \\\\\\\\\\\\\\\\\\\\\\\\////////////////////// | | | | | | | | | | | | | FUNCTION KEY DISPLAY | | FOR | | THE OSBORNE 1 | | DOUBLE DENSITY | | ONLY | | | | by James Gangwer | | | | | | | | | | press any key to continue | | | ////////////////////////\\\\\\\\\\\\\\\\\\\\\\$ ********** Osborne Function keys ******* 0) 1) 2) 3) 4) 5) 6) 7) 8) 9) press any key to exit *****************************************$=%+$ $ | FOR | | THE OSBORNE 1 | | DOUBLE DENSITY | | ONLY | | | | by James Gangwer | | | | | | | | | | press a*.|g"! "!k"*^##"~Gk^{8̈́;ͮ#+*:=2 ͮ ͮ *.y*.>w*.|*w# xyKʤ2{_ҞzW:Êͽ͸ ͽ!8"*T]ͽ*} o|g"ɡ :6 )- - - - F U N C T I O N K E Y M E N U - - - - -($ ) 0: ($ ) 1: ($ ) 2: ($ ) 3: ($ ) 4: ($ ) 5: ($ ) 6: ($ ) 7: ($ ) 8: ($ ) 9: ($@$000000000000^A$00000000000^B$00000000000^C$00000000000^D$00000000000^E$00000000000^F$00000000000^G$00000000000^H$00000000000^I$00000000000^J$00000000000^K$00000000000^L$00000000000)($00000^N$00000000000^O$00000000000^P$00000000000^Q$00000000000^R$00000000000^S$00000000000^T$00000000000^U$00000000000^V$00000000000^W$00000000000^X$00000000000^Y$00000000000^Z$00000000000)($0000C–EQyQxQRQ** {zҷ*~#" <AOGƐ'@'OxƐ'@'ON# *.|g"! "!k"*^##"~Gk^{8̈́;ͮ#+*:=2 ͮ ͮ *.y*.>w*.|*w# xyKʤ2{_ҞzW:Êͽ͸ ͽ!8"*T]ͽ*} o|g"ɡ :6 )- - - - F U N C T I O N K E Y M E N U - - - - -($ ) 0: ($ ) 1: ($ ) 2: ($ ) 3: ($ ) 4: ($ ) 5: ($ ) 6: ($ ) 7: ($ ) 8: ($ ) 9: ($@$000000000000^A$00000000000^B$00000000000^C$00000000000^D$00000000000^E$00000000000^F$00000000000^G$00000000000^H$00000000000^I$00000000000^J$00000000000^K$00000000000^L$00000000000)($00000^N$00000000000^O$00000000000^P$00000000000^Q$00000000000^R$00000000000^S$00000000000^T$00000000000^U$00000000000^V$00000000000^W$00000000000^X$00000000000^Y$00000000000^Z$00000000000)($0000FUNCTION.DO John S. Florent Th capabilit o programmin functio key i ver useful However ɠ hav foun tha ther ar time whe i woul b nic t displa thos key o th screen Th FUNCTION.CO progra doe jus that Whe use i conjunctio wit AUTOST.COM th "big-O i dis playe an i cleare soo thereafter replace b men o func- ctio ke value currentl loade int th system Whe FUNCTION.CO i rename a AUTOST.COM th "big-O (whic i pretty bu non- functional i replace b th men (no a prett bu ver function al!) Wha ar th uses Well hav severa diskette containin jus games Wit suc diskette i i ver nic t se eac functio ke t contai th comman t execut specifi gam program Whe th diskett i booted th men appear immediately showin al game o th diskett (i 1 o fewer) wit on (two-finger keystroke an game can be started! Anothe use I yo hav se variou functio key o you WordSta diskette yo ma no remembe exactl whic i whic ( can't) o yo ma no eve remembe the all Usin th "R comman a th "editin n file menu yo ca execut th FUNCTION.CO program, which will display all the WordStar function keys. On functio ke ca b se u whic woul execut th progra and print the function key values on your printer: ^PFUNCTION^P However thi ma no wor o al printer ( hav a Epso MX-8 II F/T). t bu ver function al!) Wha ar th uses Well hav severa diskette containin jus games Wit suc diskette i i ver nic t se eac functio ke t contai th comman t execut specifi gam program Whe th diskett i booted th men appear immediately showin al game o th diskett (i 1 o fewer) wit on (two-finger keystrok;=====OSBKYBD.ASM======================8301191400=========== ; COPYRIGHT 1983 HOWARD WEINSTEIN ; SAN DIEGO CA 92128 ; Reproduction in any form for other than ; personal, non-commercial use is prohibited. ; ; Program to replace user-key definitions ; of Osborne 1 (ROM v1.3 or v1.4) with that ; set on diskette selected at keyboard. ; ; CAUTION: The disk system is reset by this ; program. Any temporary R/O status will be ; cancelled. If R/O is essential to you, ; either re-establish it or don't use this ; program. ; ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ; org 100h ; ; Equates ; jmp$2$bdos equ 5 select$dsk equ 001Bh select$trk equ 001Eh select$sect equ 0021h set$dma$adr equ 0024h read$sect equ 0027h first equ 300h second equ 380h local$bfr equ first+006Bh destination equ 006Bh size equ 0E600h-0E56Bh ldir equ 0B0EDh prnt$strg equ 9 console$in equ 1 ret$cur$dsk equ 25 sel$drive equ 14 reset$dsk$sys equ 13 ; ; Prepare return to BDOS ; lxi h,0 dad sp lxi sp,oldstack shld oldstack ; ; Save current disk ; mvi c,ret$cur$dsk call jmp$2$bdos sta cur$dr ; ; Prepare for ROM v1.3 or v1.4 ; lda 2 sta a1+2 ! sta a2+2 ! sta a3+2 sta a4+2 ! sta a5+2 ! sta a6+2 sta a7+2 ! sta a8+2 ! sta a9+2 ; ; Get diskette selection ; openers call get$dsk db 13,10,10,'Select user keys from drive A or B: ',36 ds 16 oldstack ds 2 cur$dr ds 1 ; get$dsk pop d mvi c,prnt$strg call jmp$2$bdos mvi c,console$in call jmp$2$bdos ani 5fh cpi 'A' jz okay cpi 'B' jz okay jmp openers okay sui 41h sta a1-1 ; ; Make the switch ; mvi c,0 a1 call select$dsk ; mvi c,2 a2 call select$trk ; mvi c,4 a3 call select$sect ; lxi b, first a4 call set$dma$adr ; a5 call read$sect ; mvi c,5 a6 call select$sect ; lxi b,second a7 call set$dma$adr ; a8 call read$sect ; ; Move the selected user keys into place ; lxi h,local$bfr a9 lxi d,destination lxi b,size dw ldir ; ; Restore default drive ; lda cur$dr mov e,a mvi c,sel$drive call jmp$2$bdos ; ; Reset disk system ; mvi c,reset$dsk$sys call jmp$2$bdos ; ; Go back to BDOS ; lhld oldstack sphl ret ; end 100h o back to BDOS ; lhld oldstack sphl ret ; end 100h ds 16 oldstack ds 2 cur$dr ds 1 ; get$dsk pop d mvi c,prnt$strg call jmp$2$bdos mvi c,console$in call jmp$2$bdos ani 5fh cpi 'A' jz okay cpi 'B' jz okay jmp openers okay sui 41h sta a1-1 ; ; Make the switch ; mvi c,0 a1 call select$dsk ; mvi c,2 a2 call select$trk ; mvi c,4 a3 call select$sect ; lxi b, first a4 call set$dma$adr ; a5 call read$sect ; mvi c,5 a6 call select$sect ; lxi b,second a7 call set$dma$adr ; a8 call read$sect ; ; Move the selected user keys into place ; lxi h,local$bfr a9 lxi d,destination lxi b,size dw ldir ; ; Restore default drive ; ld100 '******************************************* 105 ' 110 ' DISKEYS.BAS 115 ' 120 '******************************************* 125 ' 130 'An MBASIC program for the Osborne 1 135 'to print out the current definitions of the 140 'arrow and function keys - works with 145 'monitor ROM revisions 1.3 to 1.44 150 ' 155 '******************************************* 160 ' 165 ' Copyright (c) 1983 CompuMagic, Inc. 170 ' Modified by Daybreak Productions, Canada. 175 ' Permission granted for personal use only! 180 ' 185 '******************************************* 190 ' 195 'Note: this program will not run properly if 200 'MBASIC is run under the R command of Word- 205 'Star, nor if MBASIC has been modified by 210 ' the program MANYKEYS. 215 ' 220 '******************************************** 225 ' 230 DIM ADR(14),LNG(14),AKS(4),CPM(4),WS(4) 235 'Store code for CP/M and WordStar arrow keys 240 FOR I=1 TO 4:READ CPM(I):NEXT I 245 FOR I=1 TO 4:READ WS(I):NEXT I 250 DATA &H0B,&H0C,&H0A,&H08,&H05,&H04,&H18,&H13 255 FOR CLS=1 TO 12:PRINT:NEXT CLS 260 PRINT "***************************************************":PRINT 265 PRINT "*** DISKEYS Copyright (C) 1983 Compumagic, Inc. ***":PRINT 270 PRINT "***************************************************":PRINT 275 PRINT "Modified by Daybreak Productions, Vancouver, Canada":PRINT 280 PRINT "This program prints the definitions of the FUNCTION" 285 PRINT "and ARROW KEYS of the disk from which you booted." 290 PRINT "Please re-boot from the disk of interest, then exit" 295 PRINT "to the system and reload MBASIC and this program.":PRINT 300 PRINT "If you have already done this, please ensure that" 305 PRINT "the printer is ON, then press any key to continue.":PRINT 310 A$=INPUT$(1) 315 'Store function key "names" for printing. 320 CK$="0123456789^>v<" 325 'Function to get f.key characters from BIOS. 330 DEF FNA(I)=PEEK(I)+256*PEEK(I+1) 335 'Get pointers to location & length of f.keys 340 A0=256*PEEK(2)+&H6B 345 AOLD=FNA(A0) 350 'Get address & length of each f.key definit. 355 FOR I=1 TO 14 360 ADR(I)=AOLD:A0=A0+2 365 AOLD=FNA(A0) 370 LNG(I)=AOLD-ADR(I) 375 NEXT I 380 'Begin printout with heading and disk name. 385 LINE INPUT "Enter your name for the boot disk: ",TITLE$ 390 IF TITLE$="" THEN TITLE$="boot" 395 LPRINT TAB(11);"***** DISKEYS.BAS *****":LPRINT 400 LPRINT TAB(11);"Function and arrow keys for "; 405 LPRINT TITLE$;" disk:":LPRINT 410 'Make next loop 1 - 14 if printout of each 415 'arrow key is desired, otherwise use 1 - 10. 420 FOR IKEY=1 TO 14 425 LPRINT TAB(11);MID$(CK$,IKEY,1);": "; 430 CK=ADR(IKEY) 435 FOR ICH=1 TO LNG(IKEY) 440 CH=PEEK(CK):CK=CK+1 445 'Character codes past 127 are not pure ASCII 450 'so strip the 8th. bit to get valid ASCII. 455 IF CH>127 THEN CH=CH-127 460 IF CH=0 THEN C$="":GOTO 515 465 IF CH>&H21 THEN C$=CHR$(CH):GOTO 515 470 IF CH<>&H20 THEN 485 ELSE C$="":GOTO 515 475 'For control characters,print appropriately. 480 'Print , and as shown here. 485 IF CH<>&HD THEN 490 ELSE C$="":GOTO 515 490 IF CH<>&HA THEN 495 ELSE C$="":GOTO 515 495 IF CH<>&H1B THEN 500 ELSE C$="":GOTO 515 500 IF CH<>&HC THEN 510 ELSE C$="":GOTO 515 505 'Print other controls CP/M style: "^letter". 510 C$="^"+CHR$(CH+&H40) 515 LPRINT C$; 520 NEXT ICH 525 LPRINT 530 NEXT IKEY 535 'Check definition of arrow keys; first check 540 'whether they are > 1 byte (non-standard!). 545 FOR IKEY=11 TO 14:IF LNG(IKEY)<>1 THEN 605 550 NEXT IKEY: 'if loop ends, all are 1 byte. 555 'Get each arrow-key byte, and examine it. 560 FOR AK=1 TO 4:AD=ADR(11)+AK-1 565 AKS(AK)=PEEK(AD):NEXT AK 570 'Are they CP/M arrow keys? 575 FOR I=1 TO 4:IF AKS(I)<>CPM(I) THEN 590 580 NEXT I:AK$="CP/M":GOTO 610 585 'If not CP/M, are they WordStar arrow keys? 590 FOR I=1 TO 4:IF AKS(I)<>WS(I) THEN 605 595 NEXT I:AK$="WordStar":GOTO 610 600 'Arrow keys definit'ns must be non-standard! 605 AK$="Non-standard" 610 LPRINT:LPRINT TAB(11);"ARROW KEYS: ";AK$ 615 LPRINT CHR$(&HC) 620 PRINT:PRINT "***************************************************" 625 PRINT:PRINT "Printout is completed. You may wish to print these" 630 PRINT "definitions again, or print those of another disk.":GOTO 290 rintout is completed. You may wish to print t LPRINT C$; 520 NEXT ICH 525 LPRINT 530 NEXT IKEY 535 'Check definition of arrow keys; first check 540 'whether they are > 1 byte (non-standard!). 545 FOR IKEY=11 TO 14:IF LNG(IKEY)<>1 THEN 605 550 NEXT IKEY: 'if loop ends, all are 1 byte. 555 'Get each arrow-key byte, and examine it. 560 FOR AK=1 TO 4:AD=ADR(11)+AK-1 565 AKS(AK)=PEEK(AD):NEXT AK 570 'Are they CP/M arrow keys? 575 FOR I=1 TO 4:IF AKS(I)<>CPM(I) THEN 590 580 NEXT I:AK$="CP/M":GOTO 610 585 'If not CP/M, are they WordStar arrow keys? 590 FOR I=1 TO 4:IF AKS(I)<>WS(I) THEN 605 595 NEXT I:AK$="WordStar":GOTO 610 600 'Arrow keys definv4Copyright (C) 1983 BORLAND Inc Osborne 01= ()RP<~7#~= o&ͦoͦc|ͣ}!!" ~#(}:8= +ͥ*!v-!pͥ*|!!:(=2!-: <2!~!!Y:jO:l:kO:m!ͥ*n! !i45(!+/ 0y0( d!9-!I-[[o&  :(y ͠|( r*"x2y( >28!"9!!>2 0&+!0 [ (!ePWA8Q0G: x@!\w# (   L). )!h6# (*(.(!8}(*(Ww#>?> w#a{ |e}nƐ'@'ý7||}>"C ""*B"[R*"^#V#^#V#N#FO/o&9O/o&9!9(> (G!9 w#EMw}8"RB0 >RRR!+k = R!+k = !+k = !+k = !#k = !+k = T]KB!z> S>))0 = |  DMgo>jB0 7?= H<͡z5)<z {0Gɯgo|| }||/g}/o#}o&K[xAJSJDM!b"!6J"DM'oodo o} $yWj _}8(8J`9{T]=o`9y $͙ >" 8# }>(́ x }} ˸T}ٕ(0D= ,= (  0% , 7 R ?(88 x  - 8˸x   ͠ ,-xG} }م 9 .>#n0  = - nx  ,-(-˸G,- }ٕ? 9.>R 88 ?= u+-(> 08  8R ?x  , 78ƀ8ƀ8ox٨!دoGOW_gɷɷ|لg{ً_zيWyىOxوG|ٔg{ٛ_zٚWyٙOx٘Gxٸyٹzٺ{ٻ|ټx٨u xx( ?}ٽR }ց <( 7 = |٤g{٣_z٢Wy١Ox٠G 8͉ }x>"8}ƀ/ƀó ͙ - }0- ,}l˸k 8 ́ # x(͙ -k 8 -k 8, }l8;*!# ! >8# # 8---͙ ,,,-xGg?+2n*8t z~,->"x"$}.́  ,͙ ́ ! >,.-͙ o&0%͔,# ͙ }g }؉}颋.:}8c~I$I~L*.ٷx˸́ }0G,\<}͔,-(- ! >0 $# o8 Á >"m.`1pF,t6|!wS<.z}[|%FXc~ur1}ٯx(<˸k 8́ !~Jk 0ͺO!Z>k 8 =  ͙ # ͙ ́ ͺ͙ 0 - OT0 j oD,:j !I}袋.}8c~I$I~L!>8# # ͙ # = Ù nf^VNF!DLT\I!!53!r1!!> x #-= o˸x(-͙ }(x>8( , `i!>"| | >)=|(DMbo˸y88yx(0 8> x(>-q{(ay(oe z(>.q (o =e{>Eq>+|(|Dg>-q|/ 0:p# ~# +>0w#,-  60# ˸}րogM͇| .( = ~> x0w#xG% % ZJDM% = _~65(+~hìx-Sx9?+{Η@}|  gZJDM0 ,7}o˸ #yO!@9i&  #w#/w#w#!9! E9!!9~(+FM!"9!(#>2*u"|>":( E *6#w*6#6 !\$!u[ (W( #:~CONTRMKBDLSTAUXUSR>2ͭ*#~ u*:> >w###6Õ  #6++p>2Su:*6###ww#w$w#w: ͳ##N#F*B>w#w#[s#rò>2u*6 #-Nw#Fwq#p#6#w#w#w͞* :( Q: *^ F* < >26"~^*-w#ww#Ͳ^"~ <@*u!\  >2*|>! * \$\<(!: [1Á\!(f"́> 2:!"F( #~#6$>!"N>!~8>O6*"w (=(&("( :( 8y(~#ͽ7+ (6*#~́*#~ *~(h#"b=  8ͽ ̶J= B== ͯ}8= ͵}/l !*###~-_~(46*>2>*##w:>*##~*#~(E͋ ( ( ( ͕!] ( ( ((w#(͕́̕6!]~-#8~>7́ Õ͕>O*{͍̈́s #r*{/͍ d͋ ͕ (( #w(͕́̕q*#~ʶ (͕́ ͕ Õ*##~6[O*#~(08ʦ=ʦ==ʩ=ʬò+###~-_q46`>*:4^q}Q*|(|( 6-#Sy[R8 (G> QC~Q#*ͳyC!' !+TRUEFALSEy!9^#~#(G~Q#> Q> Q "F!(#R0ͳ*4#4>R *4 #4(Ͳ>>2*V(/˖:(#~+ x y!t( =( X:(R*:(###~-_-K< =>:("^"*^˞*V˖0 SѷR8A* N#F#s#r 0})jS\*###w* N#FB ^r+s>!T]>)j)0 0= R!#*^#V#N#F#^#V>">!2DM"~ʲx(L* :O(o:" C}=( ?*-N#Fp+qq#p! * F+N+++V+^Bq#p>>>SѷR* s#r$ s#r*"[R0s#r>"[^#VS!9[R8[R>O"w2x2!"" ͵*>2"!"""!\u*: ͭ!~6go(\R*s#r_2x( s x(T]DMR0 -a%Ù}Wo*!~6o&͠|ͣ}^C User break1: I/O Run-time error e, PC=[R"` Program aborted*1!`!#Pͅ!"*n&!*!n&͇"*!!+)! s#r!!+)! s#r!!+)! s#r!!+)!s#r!!+)!s#r!!+)!s#r!!+)!s#r!!+)!s#r!!n&͇!k"t*t͔"r!!z"v!*v+)*rs#r*t!"t*t͔"r!*v+)*r!*v+)^#VRs#r*v#Ì!}2!}2!!z "l!*l+)^#V!E !!zʅ"j!! +)^#V*j!R"h!`*j+)*hn&s#r*j#;!`!+)^#V!!+)^#V!`!+)^#V!!+)^#V}o!`!+)^#V!!+)^#V}o!`!+)^#V!!+)^#V}o}2!`!+)^#V!!+)^#V!`!+)^#V!!+)^#V}o!`!+)^#V!!+)^#V}o!`!+)^#V!!+)^#V}o}2*l# *&E @CP/M!*&E!@WordStar!@ Non-Standard@ Arrow Keys. O!!zʎ!"Z!! +)^#V*Z!R"X*X!*Z+)^#Vs*Z#E!!!z!"R!! +)^#V*R!R"P*P!*R+)^#Vs*R#Ú!!ͱ@+ ArrowKeys [C] 1984 Howard Gerber, WB5YWSO@.Permission granted for non-commercial use onlyOO@Your keyboard is now set to @Change? !͚*&!y$!Y$E#@ Changed to *&E"͏!":!Oro @Change? !͚*&!y$!Y$E@ Changed to *&ERl͏!":!O;!`!+)^#V!!+)^#V!`!+)^#V!!+)^#V}o!`!+)^#V!!+)^#V}o!`!+)^#V!!+)^#V}o}2!`!+)^#V!!+)^#V!`!+)^#V!!+)^#V}o!`!+)^#V!!+)^#V}o!`!+)^#V!!+)^#V}o}2*l# *&E @CP/M!*&E!@WordStar OSARROW.DOC by Howard Gerber [C] 1984 Th Osborn 0 [Tm progra SETUP.CO allow yo t chang you diskette t boo u wit th arro key define a eithe CP/͠ o WordStar howeve i require rebootin th dis ever tim yo wan t mak suc change Thi program writte i Turb Pasca [Tm] wil displa an allo yo t easil chang th arro key o you Osborn 0 compute withou re-bootin th disk Thi allow yo t easil g betwee WordSta an norma CP/ syste activities. Assumin yo hav cop o OSARROW.CO o you curren disk yo woul cal thi progra b simpl typin OSARROW Th program will clear your screen and display the following message: _________________________________________________________________ | | | ArrowKeys [C] 1984 Howard Gerber, WB5YWS | | Permission granted for non-commercial use only | | | | Your keyboard is now set to xxxxxxxxx Arrow Keys. Change? _ | |_______________________________________________________________| wher xxxxxxxx i CP/M WordSta o Non-Standard I yo lik th curren settin jus pres return bu i yo wan t chang you arro key ente 'Y' I yo ente 'Y thi progra wil chang you arro ke settin an displa th ne value I you arro key ar currentl WordSta the the wil becom CP/ arro keys other wis the wil becom t WordSta arro keys. Sinc th progra find th locatio o th arro key base o th locatio o th CP/ BDO war star vector i shoul hav n proble workin wit Osborn ROM 1. - 1.4 o version o CP/ tha hav bee modifie t us ZCPR Problem ma b encountere whe you CP/ i modifie fo cloc board Driv [Tm o Tranto [Tm] I thes case yo probabl wil hav t locat you curren arro ke definition modif th Pasca sourc cod an recompile. Thi progra i th sol propert o Howar Gerber WB5YWS an ma no b sol fo commercia gai i an wa shap o form Permissio i hereb grante fo persona us o thi program. Anyon havin question abou thi progra ma contac Howar b leavin messag o th OZZ-HA RCP/ a (713 893-042 o th Weekende BB a (713 492-8700 o key ar currentl WordSta the the wil becom CP/ arro keys other wis the wil becom t WordSta arro keys. Sinc th progra find th locatio o th arro key base o th locatio o th CP/ BDO war star vector i shoul hav n proble workin wit Osborn ROM 1. - 1.4 o version o CP/ tha hav bee modifie t us ZCPR Problem ma b encountere whe you CP/ i modifie fo cloc board Driv [Tm o Tranto [Tm] I thes case y{ This program, written in Turbo Pascal [Tm], will display and allow you to easily change the arrow keys on your Osborne 01 computer without re-booting the disk. This program is the sole property of Howard Gerber, WB5YWS, and may not be sold for commercial gain in any way shape or form. Permission is hereby granted for personal use of this program. Anyone having questions about this program may contact Howard by leaving a message on the OZZ-HAM RCP/M at (713) 893-0424 or the Weekender BBS at (713) 492-8700. } program ArrowKeys (input, output); const first_cursor = 11; last_cursor = 14; var adr, lng : array [1 .. last_cursor] of integer; cpm, ws : array[1 .. 4] of integer; wordstar, cp_m : boolean; response : char; function contents( location : integer ) : integer; begin contents := mem[location] + $100 * mem[location+1] end; procedure initialize; const bios_entry = 2; var i, address, last_address : integer; begin cpm[1] := $0B; cpm[2] := $0C; cpm[3] := $0A; cpm[4] := $08; ws[1] := $05; ws[2] := $04; ws[3] := $18; ws[4] := $13; address := $100 * mem[bios_entry] + $6B; last_address := contents(address); for i := 1 to last_cursor do begin adr[i] := last_address; address := address + 2; last_address := contents(address); lng[i] := last_address - adr[i]; end; end; procedure display_keys; var i, j, ad : integer; aks : array [1 .. 4] of integer; begin wordstar := false; cp_m := false; for i := 1 to 4 do if lng[i] = 1 then begin for j := 1 to 4 do begin ad := adr[11] + j - 1; aks[j] := mem[ad] end; cp_m := (aks[1]=cpm[1]) and (aks[2]=cpm[2]) and (aks[3]=cpm[3]) and (aks[4]=cpm[4]); wordstar := (aks[1]=ws[1]) and (aks[2]=ws[2]) and (aks[3]=ws[3]) and (aks[4]=ws[4]); end; if cp_m then write('CP/M') else if wordstar then write('WordStar') else write('Non-Standard'); writeln(' Arrow Keys. '); end; procedure make_ws_keys; var i, ad : integer; begin for i := 1 to 4 do begin ad := adr[11] + i - 1; mem[ad] := ws[i]; end; end; procedure make_cpm_keys; var i, ad : integer; begin for i := 1 to 4 do begin ad := adr[11] + i - 1; mem[ad] := cpm[i]; end; end; begin writeln(^Z,' ArrowKeys [C] 1984 Howard Gerber, WB5YWS'); writeln('Permission granted for non-commercial use only'); writeln; write('Your keyboard is now set to '); initialize; display_keys; write('Change? '); readln( response ); if response in ['y', 'Y'] then begin write('Changed to '); if wordstar then make_cpm_keys else make_ws_keys; display_keys; writeln; end; end.tar := (aks[1]=ws[1]) and (aks[2]=ws[2]) and (aks[3]=ws[3]) and (aks[4]=ws[4]); end; if cp_m then write('CP/M') else if wordstar then write('WordStar') else write('Non-Standard'); writeln(' Arrow Keys. '); end; procedure make_ws_keys;10 REM TIME CLOCK PROGRAM 20 REM JAMES J. BRENNAN 30 REM ADAPTED FOR OSBORNE 1 40 REM BY RAY GORDON JR. 50 REM 60 REM FROM KILOBAUD MICROCOMPUTING 70 REM JANUARY 1979, #25, P.95 80 REM 90 PRINT CHR$(26) 100 LET X=62735! 110 PRINT 120 PRINT 130 PRINT " DIGITAL CLOCK PROGRAM" 140 PRINT:PRINT:PRINT 150 PRINT " THE CLOCK DISPLAY IS THE FOLLOWING:" 160 PRINT 170 PRINT 180 PRINT " HH:MM:SS" 190 PRINT:PRINT:PRINT:PRINT:PRINT 200 PRINT " ENTER THE EXACT TIME YOU WILL HIT RETURN." 210 PRINT:PRINT 220 PRINT " USE THE FORMAT GIVEN ABOVE." 230 PRINT 240 PRINT " "; 250 INPUT"",T$ 260 LET TH=VAL(MID$(T$,1,1))+48 270 LET H=VAL(MID$(T$,2,1))+48 280 LET TM=VAL(MID$(T$,4,1))+48 290 LET M=VAL(MID$(T$,5,1))+48 300 LET TS=VAL(MID$(T$,7,1))+48 310 LET S=VAL(MID$(T$,8,1))+48 320 PRINT CHR$(26) 330 IF ST=58 THEN ST+48:S=S+1 340 IF S=58 THEN S=48:TS=TS+1 350 IF TS=54 THEN TS=48:M=M+1 360 IF M=58 THEN M=48:TM=TM+1 370 IF TM=54 THEN TM=48:H=H+1 380 IF H=58 THEN H=48:TH=TH+1 390 IF TH=49 AND H=>51 THEN TH=48:H=(H-2) 400 IF TH=50 AND H=48 THEN TH=48:H=56 410 IF TH=50 AND H=49 THEN TH=48:H=57 420 IF TH=50 AND H=50 THEN TH=49:H=48 430 IF TH=50 AND H=51 THEN TH=49:H=49 440 IF TH=50 AND H=52 THEN TH=48:H=48 450 IF TH>50 THEN GOTO 650 460 IF H>57 THEN GOTO 650 470 IF TM>54 THEN GOTO 650 480 IF M>57 THEN GOTO 650 490 IF TS>54 THEN GOTO 650 500 IF S>57 THEN GOTO 650 510 IF TH=>50 AND H>3 THEN GOTO 650 520 POKE X,TH 530 POKE X+1,H 540 POKE X+2,58 550 POKE X+3,TM 560 POKE X+4,M 570 POKE X+5,58 580 POKE X+6,TS 590 POKE X+7,S 600 LET S=S+1 610 LET Q=551 620 FOR I=1 TO Q 630 NEXT I 640 GOTO 330 650 PRINT "NOT A POSSIBLE TIME. RERUN PROGRAM" 7,S 600(MID$(T$,4,1))+48 290 LET M=VAL(MID$(T$,5,1))+48 300 LET TS=VAL(MID$(T$,7,1))+48 310 LET S=VAL(MID$(T$,8,1))+48 320 PRINT CHR$(26) 330 IF ST=58 THEN ST+48:S=S+1 340 IF S=58 THEN S=48:TS=TS+1 350 IF TS=54 THEN TS=48:M=M+1 360 IF M=58 THEN M=48:TM=TM>OCLOCK Version 1.0 Copyright 1982 Michael M Rubenstein $!91!]ͧʊ*|@0$"*"| g.!5""!" *|@8.3^#VS.^#VSs1[*7R8S* #" {OFF '’( )’? :"DISKEYS BAS#klmnoOSARROW COMEpqrstuvwxOSARROW DOCyz{OSARROW PAS|}~CLOCK BASOCLOCK $$$OCLOCK -- a simple clock counter for the Osborne 1 page 1 Copyright 1982 Michael M Rubenstein This document and the accompanying program may be distributed freely provided the copyright notice is retained and no fee is charged. OCLOCK implements a simple counting clock on the Osborne 1. The clock consists of two bytes at location 000BH. Once the command oclock is executed, this location will be incremented every 1/60 second until the system is cold booted or the command oclock off is executed. The clock's accuracy is limited by the operating system disabling interrupts for disk i/o. Errors of 5-10% are typical during normal activity. OCLOCK uses one page in high memory. However, since it locks the ccp into memory, the net effect is to reduce the tpa by 2.25k. OCLOCK may be used with the Software Toolworks C/80 compiler cprof program to give an execution profile of a c program. Make sure TICCNT is defined as 11 in cprof (it is distributed that way, but may have been modified for no clock). Follow the Software Toolworks C/80 instructions for use of cprof with either AS or M80. There is a bug in cprof which causes the profile to omit some functions from the display, but not from the total time. In particular, if exit is called, the main function will not be displayed in the profile. This bug can be fixed by inserting the line if (!q[-1]) q[-1] = 1; after the line for (q = LINKPT; q != -1; q = q[-3]) { in cprof.c. If this patch is made, the number of calls displayed in the profile will be the number of returns that the function made, except that func- tions which had never executed a return when exit was called will have a count of one. t func- tions which had never executed Software Toolworks C/80 compiler cprof program to give an execution profile of a c program. Make sure TICCNT is defined10 '*** 100 '*** Dump Screen routine for the Osborne I 200 '*** by Jerrold Wayne Silverstein 910 '*** 920 '*** PROGRAM DMPSCR (DUMP SCREEN) WILL DUMP THE 930 '*** 32 LINES OF "L" LENGTH OF THE OSBORNE I SCREEN MEMORY 935 '*** TO DISK FILE "DMPSCR.DAT" ON THE CURRENTLY LOGGED DISK DRIVE. 940 '*** THE FILE CAN THEN BE EDITED BY A WORD PROCESSOR. 945 '*** THE PROGRAM CORRECTS FOR SCREEN SCROLLING AND GIVES A CORRECT 946 '*** SCREEN IMAGE. 950 '*** A MOVING CURSOR ALONG THE LEFT SIDE OF THE SCREEN SHOWS THE 955 '*** LINE THAT THE PROGRAM IS CURRENTLY READING FROM. 960 '*** THE PROGRAM CAN PRINT TO A PRINTER WITH THE FOLLOWING CHANGES: 965 '*** a) REMOVE LINES 1040 AND 1150 970 '*** b) CHANGE ALL "PRINT #1" to "LPRINT" 975 '*** c) RENAME THIS PROGRAM TO "PRTSCR.BAS" (PRINT SCREEN) 980 '*** 990 F$="DMPSCR.DAT" 1000 ML = 128:L= 80 'L is number of characters across the screen to save 1010 FOR I = -4096 TO -1 'find cursor (current line) 1020 IF PEEK(I) > 127 THEN GOTO 1040 1030 NEXT I 1040 OPEN "O",#1,F$ 'found cursor, open disk file 1050 A=0 1052 PRINT #1,CHR$(PEEK(I)-128); 'remove cursor 1056 A=1 1057 K=I 1060 FOR J = I+1 TO -1 'dump screen from cursor to bottom of screen 1070 IF A < L+1 THEN PRINT #1,CHR$(PEEK(J)); 1075 IF A=0 THEN K=J:IF PEEK(K)<128 THEN POKE K,PEEK(K)+128 'place moving cursor 1080 A=A+1 1085 IF A=ML THEN A=0:IF PEEK(K)>128 THEN POKE K,PEEK(K)-128:PRINT #1,"" 'remove moving cursor and print end-of-line 1090 NEXT J 1100 FOR J = -4096 TO I-1 'dump screen from top of screen to cursor 1110 IF A < L+1 THEN PRINT #1,CHR$(PEEK(J)); 1115 IF A=0 THEN K=J:IF PEEK(K)<128 THEN POKE K,PEEK(K)+128 'place moving cursor 1120 A=A+1 1125 IF A=ML THEN A=0:IF PEEK(K)>128 THEN POKE K,PEEK(K)-128:PRINT #1,"" 'remove moving cursor and print end-of-line 1130 NEXT J 1140 PRINT F$;" HAS BEEN SAVED TO DISK. 1150 CLOSE #1 'close disk file 1160 SYSTEM 'return to CP/M 1170 END 1130 NEXT J 1140 PRINT F$;" HAS BEEN SAVED TO DI MISSCELLANEOUS part 1 screen copy routine "DMPSCR.BAS" Jerrold Wayne Silverstein (edited by Jim Woolley) After the April meeting of OUCH SIG, where I gave a demonstration of the CP/M STAT command, several members asked me to write to the TRIBUNE to tell all about STAT. Two problems prevented this. One was a lack of free time. And the second was the problem in CP/M of getting program output from my screen into a disk file. True, I could have copied the screen by hand (since I don't have a printer) and typed it manually into WordStar. However, with my typing bordering on lousy, I decided to spare everyone all my typing mistakes and create a screen dump (or copy) routine which will store anything that is on the screen on disk. This will allow me to show you actual output from the CP/M STAT command (or transient program) with no difficulty whatsoever. But that is in part 2. Since the screen dump program was so short and is so usefull I decided to tell everybody about it first. The screen dump program is a short MBASIC program that can be typed into a file by using WordStar. Note that this program will only work on the Osborne I (all revisions). It can be changed to work with other computers. Since it looks directly at the screen memory, it cannot be written to be portable between all CP/M computers (sorry). It can be run by typing at the CP/M promt "A>" the following: "B: A:MBASIC DMPSCR ". This will have MBASIC run the program in the file on disk drive B called DMPSCR.BAS and whatever appears on the screen at that time will be copied into the file on drive B called DMPSCR.DAT. That file can then be edited by WordStar or be typed on the screen with the TYPE command. The reason you should switch the default logged disk drive to B: is that MBASIC is usually in drive A and the program is on drive B and drive B usually has more free space than drive A. If this is not the case for your computer change the command appropriately. Note that the file DMPSCR.DAT will always appear on the default logged disk drive so make sure that there is 4K of space on that disk before you try to copy the screen. (You can use XDIR or SD or STAT to check for free space on the disk. Once executed MBASIC prints about eight lines saying all is well so that you will actually get only 24 lines of good data even though DMPSCR.BAS copies all 32 lines of the Osborne I screen. In the program you will notice the varible "L" for length. Since WordStar performs an automatic word wrap and the usual length of a line in WordStar is 80 characters I set "L" to 80 so that the program only reads 80 characters per line. You can set it to any number you need or want (52 to 128). The program can be changed to print to a line printer instead of a disk by makeing the indicated changes in the program remarks (comments). I suggest you call the printing program PRTSCR.BAS. The reason there are no options in the program is that prompts take up the screen which you want copied. You want a copy of screen data not a copy of this program's prompts. The program takes about 45 seconds to copy the screen. For the first 20 seconds it will appear that nothing is happening. Then the default disk will start spinning and you should see a cursor traveling down the left side of the screen (from top to bottom). This is the exact line that is being copied. When the program is finished it will remind you that you can find your data in file DMPSCR.DAT. Since the top of the screen is not always (not even usually) the top of screen memory the program will assume the top of the screen is the line with the cursor (usually that line is blank except for the cursor). This creates a good formatted file (trust me). However, (there is always a problem) if more than one cursor exists on the screen (any underlined characters are underlined with cursors) then the data file DMPSCR.DAT may look a little funny. This is usually not a problem unless you type a file with type COM on the screen and then try to copy it with DMPSCR.BAS. Some customized versions of WordStar also use underlines. So be careful and have fun. veling down the left side of the screen (from top to bottom). This is the exact line that is being copied. When the program is finished it will remind you that you can find your data in file DMPSCR.DAT. Since the top of the screen is not always (not even usually) the top of screen memory the program will assume the top of the screen is the line with the cursor (usually that line is blank except for the cursor). This creates a good formatted file (10 REM GRAPHICS SCREEN DUMP FROM OSBORNE 1 TO EPSON MX-80 WITH GRAFTRAX 20 REM written by Gobind Singh Khalsa (June 17, 1983) 30 REM 8371 Redwing Drive 40 REM Liverpool, New York 13088 50 CLEAR 2000:DIM A(960), B(400) 60 REM CONSTRUCT DATA ARRAYS 70 FOR N=1 TO 396:READ B(N):NEXT N 80 REM SET UP PRINTER 90 WIDTH LPRINT 255 100 LPRINT CHR$(27)"A"CHR$(8); 110 REM ANALYZE VIDEO MEMORY 120 FOR X=0 TO 4095 130 Q=PEEK(61440!+X) 140 REM CLASSIFY Q 150 IF (Q>32 AND Q<128) THEN Q=32 160 IF Q>160 THEN Q=32 170 IF (Q>127 AND Q<161) THEN Q=Q-95 180 REM LOAD GRAPHIC DATA INTO PRINT ARRAY 190 FOR I=1 TO 6:A(H+I)=B(Q*6+I):NEXT I 200 REM IF ARRAY FOR ONE LINE IS FILLED, PRINT IT, ELSE GOTO NEXT MEMORY POSITION 210 IF (61440!+X+1)/128<>INT((61440!+X+1)/128) THEN H=H+6:NEXT X 220 LPRINT CHR$(27)"L"CHR$(192)CHR$(3); 230 FOR C=1 TO 960:LPRINT CHR$(A(C));:NEXT C 240 LPRINT:H=0:X=X+1:GOTO 130 250 REM END OF PRINT ROUTINE 260 LPRINT CHR$(27)"@" 270 Y$=INPUT$(1) 280 REM GRAPHIC CHARACTER DATA 290 DATA 255,255,195,195,255,255 300 DATA 255,255,255,0,0,0 310 DATA 15,15,15,240,240,240 320 DATA 15,15,15,255,255,255 330 DATA 0,0,0,255,255,255 340 DATA 240,240,240,255,255,255 350 DATA 15,15,15,0,0,0 360 DATA 0,0,0,15,15,15 370 DATA 255,127,31,15,7,1 380 DATA 0,0,31,31,24,24 390 DATA 1,7,15,31,127,255 400 DATA 0,0,255,255,0,0 410 DATA 24,24,255,255,24,24 420 DATA 0,60,126,126,60,0 430 DATA 240,240,240,15,15,15 440 DATA 24,24,31,31,24,24 450 DATA 24,24,31,31,0,0 460 DATA 255,255,255,240,240,240 470 DATA 240,240,240,0,0,0 480 DATA 239,106,4,234,238,239 490 DATA 0,0,0,240,240,240 500 DATA 128,224,240,248,254,255 510 DATA 255,255,255,255,255,255 520 DATA 240,240,240,240,240,240 530 DATA 15,15,15,15,15,15 540 DATA 255,254,248,240,224,128 550 DATA 255,255,255,15,15,15 560 DATA 24,24,24,24,24,24 570 DATA 0,0,248,248,24,24 580 DATA 239,99,11,224,239,239 590 DATA 24,24,248,248,24,24 600 DATA 24,24,248,248,0,0 610 DATA 0,0,0,0,0,0 620 DATA 255,255,195,195,255,255 630 DATA 255,255,255,1,1,1 640 DATA 15,15,15,241,241,241 650 DATA 15,15,15,255,255,255 660 DATA 1,1,1,255,255,255 670 DATA 241,241,241,255,255,255 680 DATA 15,15,15,1,1,1 690 DATA 1,1,1,15,15,15 700 DATA 255,127,31,15,7,1 710 DATA 1,1,31,31,25,25 720 DATA 1,7,15,31,127,255 730 DATA 1,1,255,255,1,1 740 DATA 25,25,255,255,25,25 750 DATA 1,61,127,127,61,1 760 DATA 241,241,241,15,15,15 770 DATA 25,25,31,31,25,25 780 DATA 25,25,31,31,1,1 790 DATA 255,255,255,241,241,241 800 DATA 241,241,241,1,1,1 810 DATA 239,107,5,235,239,239 820 DATA 1,1,1,241,241,241 830 DATA 129,225,241,249,255,255 840 DATA 255,255,255,255,255,255 850 DATA 241,241,241,241,241,241 860 DATA 15,15,15,15,15,15 870 DATA 255,255,249,241,225,129 880 DATA 255,255,255,15,15,15 890 DATA 25,25,25,25,25,25 900 DATA 1,1,249,249,25,25 910 DATA 239,99,11,225,239,239 920 DATA 25,25,249,249,25,25 930 DATA 25,25,249,249,1,1 940 DATA 1,1,1,1,1,1 950 END 5,25 910 DATA 239,99,11,225,239,239 920 DATA 25,25,249,249,25,25 910 REM SCREEN.BAS 20 ESC$ = CHR$(27) 30 DEF FNCURSOR.POS$(X%,Y%)=ESC$+"="+CHR$(Y%+31)+CHR$(X%+31) 40 DEF FNSCREEN.POS$(X%,Y%)=ESC$+"S"+CHR$(Y%+31)+CHR$(X%+31) 50 GRAPHIC$ = ESC$ + "g" 60 NO.GRAPHIC$ = ESC$ + "G" 70 UNDERLINE$ = ESC$ + "l" 80 NO.UNDERLINE$ = ESC$ + "m" 90 INSERT.CHARACTER$ = ESC$ + "Q" 100 DELETE.CHARACTER$ = ESC$ + "W" 110 INSERT.LINE$ = ESC$ + "E" 120 DELETE.LINE$ = ESC$ + "R" 130 CLEAR.LINE$ = ESC$ + "T" 140 HALF.INTENSITY$ = ESC$ + ")" 150 FULL.INTENSITY$ = ESC$ + "(" 160 BELL$ = CHR$(7) 170 LINE.FEED$ = CHR$(10) 180 FORM.FEED$ = CHR$(12) 190 UP.LINE$ = CHR$(11) 200 LEFT.CHAR$ = CHR$(8) 210 RIGHT.CHAR$ = CHR$(12) 220 CARRIAGE.RETURN$ = CHR$(13) 230 CLEAR.SCREEN$ = CHR$(26) 240 HOME$ = FNCURSOR.POS$(1,1) 250 RETURN .CHAR$ = CHR$(12) 220 CARRIAGE.RETURN$ = CHR$(13) 230 CLEAR.SCREEN$ = CHR$(26) 240 HOME$ = FNCURSOR.POS$(1,1) 25VPatch program, (c) 1982, Mechanized Knowledge corp P.O. Box 298, Sta V, Toronto, Ont. *d}Press 'Y' to proceed any other key to cancel Y§ ʧ22N(} Do you want to patch anyway? Press 'P' to proceed, any other key to abort P§} OK ... good luck!!! ͸:2 pK**9} |([}Consistency error, patched version not as expected Patched version not saved >< ͂à!; ̓Patching !"0*3N#Fx(##^#V#~#fo*0L0S0#*0R*,L0@}Consistency error patches extend beyond specified length "*̓Loading R\̀ \ >o0$ѷR"*̓Saving R**}|G\̀ b <(>o0$D } +++ Error on write !!*7z! R!L̓Verifying *5N#F-ʤ0><çN#Fxʤ-#^#V#~#~# (ZN#F#~#fo x y(} is not as expected "} has already been patched 7!24####**[.L(M8$}Program longer than expected #}Program shorter than expected !24:2͈ ~͑ # x ͷ  ((*C (( 4 x = |}!\$> <̓ +++ Cannot open   ͒} !~ (ͼ!~ . ͼ}System~ #_ ###~ ?# (_ } a{__ 4AAAAAYABGoodbyes;!̈́('(( (( O|(y~ #{;>:Gͣ >K : >  ~ #> R{W͈ͬ-W͈ͬ0 > -!  4x( "yʂ ( > x!o ~#A4Ͳ!*~(#>*Ox_0A~#> -> >2=>(2=!4!10B%+C7RB.#C@RC@RB.#C7RB%+w#Iw+IɩwIɩwI:=GV!d~#_ =&-g    G='-g    G=(-g  G=)-g    G=*-g    G=-) Mechanized PO Box 298=.)Knowledge Station "V"=/)Corp. Toronto, Ont.Press any key to continue!"?O*?yO}o|g0|g}!o "?͑ ͑ [?*?|>           ~#(_                        ! " # $ y ((( ((:Aȯ2A! ".! ",!G "3! "5!.}"9!<  COPY COMk, < K3  !fi/lmsy|V .} <On5 !Ogt Og p_ p# V W  *  s /J K3H XR kG m Sector image constantProgram version noProgram bannerTrack image building routineFormat routineCopy routineSector numbering routineSector count fieldCopy read routineCopy format routineCopy write routineTrack messageTrack no display routineOverall program( PN 2N N 6N Formatt$ Read$ Writ$3.1=",OSBORNE DISK UTILITY Rev 3.1=#(Patches by Mechanized Knowledge Corp.!:/ (!S-R"0:/GB"@F#~#+x~#(!:/G:w##q 1!1!2 F*@,, !) F! FPing Track $'Patches for COPY.COMThis program patches the Osborne I COPY program, version 3.0, primarily to correct the way it formats disks. The program to be patched must exist on the current disk under the name COPY.COM. It is validated to be the correct version of the program. Discrepancies are identified. The updated version replaces the original one. Press any key for further information, the up-arrow key to go back to a previous page There are several reasons for the somewhat unreliable disk I/O on the Osborne I. One of them is the incorrect way that COPY formats disks. The WD1793 floppy disk controller chip used in the OC 1 computer has certain specific requirements for the way control information is recorded on each track. This is not the actual sector data, but rather the special sequences of characters that surround those sectors. The hardware requires a specific sequence of characters at the begining of every track, the track header, followed by another specific sequence around each of the sectors (10 on the OC 1). That track header gives the hardware time (every disk revolution) to synchronize with the clock and data bits from that header, before sectors of real data arive underneath the read/write head. Version 3.0 of COPY, the Osborne disk formatting program for ROM revision 1.3, only puts out the 10 sector formats, not the track header. (It is actually amazing the disks can be read at all!) The formatting program for ROM revision 1.2 (FORMAT version 1.1), did put out that track header. While this fix will somewhat improve the reliability of disk I/O, it will not solve all problems. The I/O routines in the ROM part of the OSBORNE BIOS are at best excedingly convoluted, at worst just plain wrong! Unfortunately, those routines cannot be quite as easily patched as this COPY program. The Copy function of the program is changed to show the action it is performing on the current track (Reading, formatting or writing). Now at least when COPY stops on an error (sorry, they will still occur), it shows at least which disk the problem relates to, i.e. source (reading) or destination. The changes to COPY.COM should be transparent, except for fewer '... Bad Sector ...' errors and the Reading, Formatting and Writing messages. To change existing disks, merely use the Copy function of COPY to transfer the entire disk content to a blank diskette, and back to the original disk again. The Copy function formats each track before writing to it, and will use the same new format. COPY will, of course, still be able to read either format.  Unlike the original program, which used an exact layout of the sector image (304 bytes), this patch uses a table (36 bytes). Actually, there are two tables. Also included is a table to build the format for double density. Changing the byte 62Fh from 0Ah (ten) to 12h (eighteen) sectors per track will cause the program to build the double density track format. This actually cause double density, however! It is merely included for anyone experimenting with double density. Note also that even for DD the character E5h is used as data character, since CP/M uses that to signal unused Directory entries. This patching program is expressly written to provide a general purpose patching facility for proprietary software on CP/M systems. The program validates the program to be patched both before and after patching. The patching program also validates itself. Courtesy of Mechanized Knowledge Corporation, Programming & patches by Frans Van Duinen 18 August 1982, Copyright Mechanized Knowledge Corp /J K3H !4B Aro y6‰zS_Fè~*!~¨#^+F*!~G¿xk@xvkx80kx645>=*!~*!ctors per track will cause the program to build the double density track format. This actually cause double density, however! It is merely included for anyone experimenting with double density. Note also that even for DD the character E5h is used as data character, since CP/M uses that to signal unused Directory entries. This patching program is expressly written to provide a general purpose patching facility for proprietary software on CP/M systems. The program validates the program to be patched both before and after patching. The patching program also validates itself. Courtesy of Mechanized Knowledge Corporation, Programming & patches by Frans Van Duinen 18 August 1982, Copyright Mechanized Knowledge Corp /J K3H  This is the release date of the disk. CLAS6 FON {4FLETTERS u[*CFONT EXE \)$fCONVPRF EXE `$fDELFONTSHP Pn $DOWNLOADEXE %t^'BDSKSPACEEXE h,l%EFONT EXE \,JFANCFONTPRO tou(FFCONFIGEXE ]e@ as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. Osborne 1 Programs. Filename Description -09-00 .86 This is the release date of the disk. -CPM142 .DOC This is the description of the disk contents. AUTOMOD .COM 7247 2K [Auto Start Modify 1 of 5] Single and Double Density Command Line Autostart versions. AUTOMOD .DOC 60BD 5K [Auto Start Modify 2 of 5] AUTOMOD .ASM 38C9 6K [Auto Start Modify 3 of 5] AUTOMODD.COM B10B 2K [Auto Start Modify 4 of 5] AUTOMODD.ASM BBB0 6K [Auto Start Modify 5 of 5] SETAUTO .COM 28CE 1K [SETAUTO 1 of 2] Sets the Automatic boot command. SETAUTO .DOC CF99 2K [SETAUTO 2 of 2] AUTOST .COM B37D 2K [AUTO START 1 of 3] Origional Autostart program for the O-1. Source Code is included. AUTOST .AQM 126E 2K [AUTO START 2 of 3] AUTOST .ASM 61E7 5K [AUTO START 3 of 3] BAUTOST .DOC BDA8 9K Autostart that logs to a specified drive and user. FSTART .COM F8AC 1K [FSTART 1 of 2] Autostart Generator with drive speed patches. FSTART .DOC 253B 1K [FSTART 2 of 2] MAKEAUTO.COM 1517 2K ver. 2 [Make Auto 1 of 5] Allows you to generate a custom autostart file. Second version also includes drive speed patches. MAKEAUTO.DOC FFB8 1K ver. 2 [Make Auto 2 of 5] MAKEAUTO.ASM DC4A 4K ver. 2 [Make Auto 3 of 5] MAKAUTO2.COM B4AA 2K ver. 2 [Make Auto 4 of 5] MAKAUTO2.ASM 0B7A 5K ver. 2 [Make Auto 5 of 5] STARTER .COM C3D2 2K [STARTER 1 of 3] Creates a custom Auto Start program. STARTER .DOC 8A08 2K [STARTER 2 of 3] STARTER .ASM 1780 9K [STARTER 3 of 3] TO .COM 8176 1K [Screen Pack Width 1 of 13] These programs allow you to change the width of your screen if you have Screen-Pac installed. Documentation and Assembler or C source code is included for most. TO .ASM F2A6 3K [Screen Pack Width 2 of 13"] TO80 .ASM E09D 1K [Screen Pack Width 3 of 13] TO80 .DOC AFEE 2K [Screen Pack Width 4 of 13] WID .COM B790 1K [Screen Pack Width 5 of 13] WID .DOC 3E66 2K [Screen Pack Width 6 of 13] WID .ASM 0588 5K [Screen Pack Width 7 of 13] WIDTH .COM C26F 3K [Screen Pack Width 8 of 13] WIDTH .DOC 0F4B 2K [Screen Pack Width 9 of 13] WIDTH .C 901E 1K [Screen Pack Width 10 of 13] OSCHG .COM 16E7 1K [Screen Pack Width 11 of 13] SCREEN .COM F30B 1K [Screen Pack Width 12 of 13] SCREEN .DOC 3BD0 1K [Screen Pack Width 13 of 13] FUNC .COM 0917 2K [Function Key Set 1 of 5] These programs allow you to set the function keys for single and double density machines. FUNCTDD .COM 601C 1K [Function Key Set 2 of 5] FUNCTION.COM 0031 1K [Function Key Set 3 of 5] FUNCTION.DOC 6F07 2K [Function Key Set 4 of 5] OSBKYBD .ASM 368F 3K [Function Key Set 5 of 5] DISKEYS .BAS 3E8D 5K This program allows you to print out the function key settings. OSARROW .COM DB72 9K [OSARROW 1 of 3] This program allows you to toggle between WS and CPM arrow keys. Documentation and Pascal source code are included. OSARROW .DOC 4CC9 3K [OSARROW 2 of 3] OSARROW .PAS CCDB 3K [OSARROW 3 of 3] CLOCK .BAS 2937 2K Digital clock display OCLOCK .COM C5C1 1K [OCLOCK 1 of 2] Set up a simple counter in RAM. OCLOCK .DOC 0E66 2K [OCLOCK 2 of 2] DMPSCR .BAS F9F5 2K [DUMP SCREEN 1 of 2] Screen Dump for the Osborne 1. DMPSCR .DOC 5145 5K [DUMP SCREEN 2 of 2] GRAPH .BAS BC87 3K Graphics screen dump to Epson MX-80 with Graftrax. OSCREEN .BAS A15E 1K Show Screen Characteristics. OSPATCH1.COM 0A1A 8K Patches COPY.COM for more reliable operation. 13] SCREEN .COM F30B 1K [Screen Pack Width 12 of 13] SCREEN .DOC 3BD0 1K [Screen Pack Width 13 of 13] FUNC .COM 0917 2K [Function Key Set 1 of 5] These programs allow you to set the function keys for single and double density machines. FUNCTDD .COM 601C 1K [Function Key Set 2 of 5] FUNCTION.COM 0031 1K [Function Key Set 3 of#$%&'