home *** CD-ROM | disk | FTP | other *** search
- ;Originally by Bill Catchings, Columbia University
- ;From KERMIT-Manual Changed 22-May-86 B.E. EIBEN@DEC-MARLBORO
- ;
- ;Usage/Goal: Minimal [ungarded] text-capture into memory
- ; via transmission of CR to HOST and capture
- ; of sent char's till '@' seen. Saving of data
- ; on disk.
- ;
- ;Limits: File-length = TPA -300H roughly 40K most micro's
- ; Beware current CP4KER.HEX is already 36K.
- ; NO ERROR checking whatsoever...
- ;
- ; 1. Example [TOPS-20 and FOO.HEX assumed]
- ;
- ; TER NO PAUSE END ;let terminal run loose
- ; REFUSE SYSTEM-MESSAGES ;avoid interfering messages.
- ; REFUSE LINKS
- ; SET NO ALERT
- ; TYPE FOO.HEX ;DO NOT type confirming CR !!
- ;
- ; .. then on MICRO [assuming that RDR/PUNCH are already pointing
- ; to Communication-port and same is at 'right' Baud-rate ,Bits
- ; and Parity setting; FETCH.COM generated via DDT , enough free
- ; space on connected floppy . FETCH has NO ERROR-checking what-
- ; soever to keep brevity ]
- ;
- ; FETCH FOO.HEX ;receive/create FOO.HEX
- ; ;FOO.HEX can't exist already
- ;
- ; You should now see the characters being echoed on the screen
- ;
-
- ;Assembly [assume on disk B:] ASM FETCH.BBB or LASM FETCH.BBB
- ;Linkage LOAD FETCH or MLOAD FETCH
- ;
-
- ORG 100H ;let's start at a standard address
- MEMADR equ 300H ;Where we start storing bytes
- MEMOFF equ 2H ;Linked to MEMADR [offset in 2 sector pairs]
- MEMST equ MEMADR-2 ;We 'swallow' first two bytes
- BYTPTR equ 200H ;Here we keep the pointer
- BYTHI equ BYTPTR+1 ;High order byte
- BYTLOW equ BYTPTR ;Low order byte
- DMAPTR equ BYTPTR+2 ;Sector pointer to write
-
- SECLEN equ 80H ;128 bytes are a 'sector'
- SEVBIT equ 7FH ;parity mask
- MONE equ 0FFFFH ;Minus one in 16 bits
-
- BDOS equ 5H ;System call
- Punch equ 4H ;Send to Punch {to Host}
- Reader equ 3H ;Read from Reader {from Host}
- Screen equ 2H ;Write to screen
- CLSFIL equ 10H ;Close file
- WRTSEC equ 15H ;Write a sector
- MAKFIL equ 16H ;Write NEW file
- SETDMA equ 1AH ;Set DMA address
- FCB1 equ 5CH ;File Control Block 1
-
- CR equ 0DH ;ASCII Carriage Return
- CTRLZ equ 1AH ;ASCII Control-Z
-
- ;Note--The following may need to be changed when downloading from other
- ;systems, e.g. to '.' for TOPS-10, '$' for VAX/VMS, etc. Alternatively,
- ;the hex file itself can have an '@' added to it, after its last line.
-
- ENDSIG equ 40H ;Tops-20 prompt '@'
-
- ;Here's the program:
-
- start: lxi h,MEMST ;Where to store in memory
- shld BYTPTR ;keep address there
- mvi e,CR ;oct 15 is CR
- mvi c,PUNCH ;Output to PUNCH {send to HOST}
- call BDOS
-
- gbyte: mvi c,READER ;Input from RDR {read from HOST}
- call BDOS
- ani 7FH ;mask to 7-bit {strip parity}
- push psw ;save a and flags
- mov e,a ;char to e for echo-call
- mvi c,SCREEN ;Output to screen
- call BDOS
- pop psw ;restore a and flags
- cpi ENDSIG ;End signal (system's prompt)?
- jz donfil ;Yes, we have whole file in memory
- call stuff ;No, store byte
- jmp gbyte ;go back for next byte
-
- donfil: mvi a,CTRLZ ;Control-Z is EOF
- call stuff ;Store Control-Z
- lxi h,MEMADR ;Pointer to file in memory
- shld DMAPTR ;Save here for DMA pointer
- ;a long divide by 256 follows
- lda BYTHI ;get HI byte
- sta BYTLOW ;store as low byte
- xra a ;zero a
- sta BYTHI ;wipe old HI byte
- mvi c,MAKFIL ;MAKE new FILE
- lxi d,FCB1
- call BDOS
-
- again: call nsect ;write 128 bytes
- call nsect ;and another 128 bytes
- lxi h,MONE ;stick a -1
- xchg ;into DE
- lhld BYTPTR ;get modified pointer (per 256 bytes)
- dad d ;decrement
- shld BYTPTR ;and store back
- mvi a,MEMOFF ; getting
- cmp l ; done ?
- jz done ;Yes, we hit it on the nail
- jmp again ;Not quite
-
- nsect: lhld DMAPTR ;Get the file-pointer
- xchg ;move into DE
- mvi c,SETDMA ;Set DMA
- call BDOS
- mvi c,WRTSEC ;Write sector to file
- lxi d,FCB1
- call BDOS
- lhld DMAPTR ;Get the file-pointer
- lxi d,SECLEN ;128 bytes got moved
- dad d ;add them to adjust pointer
- shld DMAPTR ;and save again
- ret ;and return
-
- stuff: lhld BYTPTR ;Get the pointer
- mov m,a ;store the character
- inx h ;Increment the pointer
- shld BYTPTR ;and save again
- ret ;and return
-
- done: mvi c,CLSFIL ;Close file
- lxi d,FCB1
- call BDOS
- jmp 0 ;Do warm-reboot to always come back
-
- END START
-