home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
SIMTEL
/
CPMUG
/
CPMUG041.ARK
/
MORSE.ASM
< prev
next >
Wrap
Assembly Source File
|
1984-04-29
|
8KB
|
775 lines
; MORSE PROGRAM FOR 8008
; TAKEN FROM BYTE MAGAZINE
; OCT 1976 PAGE 57
; BY R.J.S. ON 2/2/79
;
;
READ EQU 1
SENSE EQU 06H
STATUS EQU 0
OUTPUT EQU 06H
PRINT EQU 1
MSGSZ EQU 377Q
BUFOUT EQU 60Q
BUFSKY EQU 377Q
BUFSPN EQU 60Q
WIDTH EQU 80
CR EQU 15Q
LF EQU 12Q
ERCHAR EQU 7
ESC EQU 033Q
ESCSYM EQU 44Q
QUEST EQU '?'
DELETE EQU 177Q
DELSYM EQU 134Q
ETX EQU 3
UPARRO EQU 136Q
BLANK EQU 40Q
ORG 100H
;
STRT:
LXI H,MSSGBF
MOV M,A
LXI H,BAUD
MVI M,377Q
CALL INCLH
MVI M,377Q
STRT1:
XRA A
LXI H,KYFIFO
MOV M,A
LXI H,OTFIFO
MOV M,A
LXI H,CMMND
MOV M,A
CALL INCLH
MOV M,A
LXI H,PNFIFO
MOV M,A
OUT OUTPUT
CMA
OUT 0FFH
CMA
RESTRT:
CALL INPEND
CALL KYBD
CALL PNTR
LXI H,CMMND
XRA A
ADD M
JNZ CMMNDR
CALL IDLE
CALL OTPUT
JMP RESTRT
;
ASCTAB:
;
; ASCII TABLE
;
; A-Z
DB 41H
DB 42H
DB 43H
DB 44H
DB 45H
DB 46H
DB 47H
DB 48H
DB 49H
DB 4AH
DB 4BH
DB 4CH
DB 4DH
DB 4EH
DB 4FH
DB 50H
DB 51H
DB 52H
DB 53H
DB 54H
DB 55H
DB 56H
DB 57H
DB 58H
DB 59H
DB 5AH
;
; NUMERALS
;
DB 31H
DB 32H
DB 33H
DB 34H
DB 35H
DB 36H
DB 37H
DB 38H
DB 39H
;
; SPECIAL CHARATERS
;
DB 60Q ;/0
DB 55Q ;/-
DB 56Q ;.
DB 54Q ;,
DB 77Q ;?
DB 57Q ;SLASH
DB 72Q ;:
DB 50Q ;(
DB 51Q ;)
DB 47Q ;'
DB 42Q ;*
DB 12Q ;END OF MESSAGE CR/LF
DB 12Q ;END OF WORK (CR/LF)
ASCEND:
DB 73Q ;;
;
; MORSE TABLE
;
MORTAB:
DB 140Q ;A
DB 210Q ;B
DB 250Q ;C
DB 220Q ;D
DB 100Q ;E
DB 50Q ;F
DB 320Q ;G
DB 10Q ;H
DB 40Q ;H
DB 170Q ;J
DB 260Q ;K
DB 110Q ;L
DB 340Q ;M
DB 240Q ;N
DB 360Q ;O
DB 150Q ;P
DB 330Q ;Q
DB 120Q ;R
DB 20Q ;S
DB 300Q ;T
DB 60Q ;U
DB 30Q ;V
DB 160Q ;W
DB 230Q ;X
DB 270Q ;Y
DB 310Q ;Z
DB 174Q ;1
DB 74Q ;2
DB 34Q ;3
DB 14Q ;4
DB 4Q ;5
DB 204Q ;6
DB 304Q ;7
DB 344Q ;8
DB 364Q ;9
DB 374Q ;0
DB 206Q ;-
DB 126Q ;.
DB 316Q ;,
DB 62Q ;?
DB 224Q ;/
DB 342Q ;:
DB 266Q ;(
DB 266Q ;)
DB 172Q ;'
DB 112Q ;*
DB 124Q ;EOM CR/LF
DB 26Q ;EOW CR/LF
MOREND:
DB 252Q ;;
;
;
ENTPAK:
MOV A,M
DCR C ;******
CMP C ;*****
JZ ERROFL
ADI 1
MOV M,A
ADD L
MOV L,A
JNC OK
INR H
OK:
MOV M,B
XRA A
RET
ERROFL:
ADI 1
RET
;
;
PXP
MOV A,M
SUI 1
MOV M,A
JMP PXPY
;
PXPLOP:
CALL INCLH
MOV C,M
CALL DCRLH
MOV M,C
MOV A,B
SUI 1
PXPY:
RZ
MOV B,A
CALL INCLH
JMP PXPLOP
;
INCLH:
INR L
RNZ
INR H
RET
;
DCRLH:
MOV A,L
SUI 1
MOV L,A
RNC
DCR H
RET
;
TICK:
LXI H,BAUD
MVI C,50Q
WAIT2:
MOV B,M
WAIT1:
DCR B
JNZ WAIT1
DCR C
JNZ WAIT2
CALL KYBD
CALL PNTR
RET
;
TICKI:
LXI H,BAUDI
MVI C,05H
JMP WAIT2
;
DOT:
MVI A,377Q
OUT OUTPUT
CMA
OUT 0FFH
CMA
JMP FINDOT
;
DASH:
MVI A,377Q
OUT OUTPUT
CMA
OUT 0FFH
CMA
CALL TICK
CALL TICK
FINDOT:
CALL TICK
XRA A
OUT OUTPUT
CMA
OUT 0FFH
CMA
CALL TICK
RET
;
CMMNDR:
CALL UNPAK
JZ CMMNDR
CPI ESC
JZ CLRMD
CPI 'L'
JZ LDNXT
CPI 'P'
JZ PRT
CPI 'S'
JZ SNDNX
CPI 'T'
JZ TEST
CPI 'W'
JZ WPM
MVI B,QUEST
CALL PPAK
JMP CMMNDR
;
LDNXT:
LXI H,MSSGBF
MVI M,0
LDNXT1:
CALL UNPAK
JZ LDNXT1
CPI ESC
JZ CLRMD
MOV B,A
LXI H,MSSGBF
CPI DELETE
JNZ LDNXT2
XRA A
ADD M
JZ LDNXT1
SBI 1
MOV M,A
JMP LDNXT1
LDNXT2:
MVI C,MSGSZ
CALL ENTPAK
CNZ WHOOP
JMP LDNXT1
;
WHOOP:
IN STATUS
ANI 02H
JZ WHOOP
MVI A,ERCHAR
OUT PRINT
RET
;
PRT:
LXI H,SOH
MVI M,0
CALL DMPSUB
JMP CLRMD
;
DMPSUB:
LXI H,MSSCNT
MVI M,0
PRT1:
CALL PNTR
CALL KYBD
CALL OTPUT
LXI H,MSSGBF
XRA A
ADD M
RZ
LXI H,MSSCNT
CMP M
RZ
MOV B,M
INR B
MOV M,B
;
PR4:
MVI A,MSSGBF AND 0FFH
ADD M
MOV L,A
MVI H,MSSGBF/256
JNC PR2
INR H
PR2:
MOV B,M
XRA A
LXI H,SOH
ADD M
JNZ SOH1
CALL PPAK
JMP PR3
SOH1:
LXI H,OTFIFO
MVI C,BUFOUT
CALL ENTPAK
PR3:
JZ PRT1
CALL PNTR
CALL KYBD
CALL OTPUT
LXI H,MSSCNT
JMP PR4
;
SNDNX:
LXI H,SOH
MVI M,1
CALL DMPSUB
JMP CLRMD
;
TEST:
LXI H,SOH
MVI M,1
CALL DMPSUB
CALL UNPAK
JZ TEST
CPI ESC
JZ CLRMD
TEST1:
MVI B,QUEST
CALL PPAK
JNZ TEST1
JMP TEST
;
WPM:
CALL UNPAK
JZ WPM
ANI 37Q
RLC
RLC
RLC
ORI 7Q
LXI H,BAUD
MOV M,A
;
CLRMD:
LXI H,CMMND
MVI M,0
JMP RESTRT
;
UNPAK:
CALL PNTR
CALL KYBD
CALL OTPUT
LXI H,KYFIFO
XRA A
ADD M
RZ
CALL INCLH
MOV E,M
CALL DCRLH
CALL PXP
ADD E
RET
;
WAITMT:
IN STATUS
ANI 02
JZ WAITMT
RET
;
KYBD:
IN STATUS
ANI 01
RZ
IN READ
ANI 177Q
CPI ETX
JNZ NETX
XRA A
OUT OUTPUT
CMA
OUT 0FFH
CMA
CALL WAITMT
MVI A,UPARRO
OUT PRINT
CALL WAITMT
MVI A,'C'
OUT PRINT
CALL WAITMT
JMP STRT1
NETX:
LXI H,KYFIFO
MOV B,A
MVI C,BUFSKY
CALL ENTPAK
CNZ WHOOP
;
PPAK:
LXI H,PNFIFO
MVI C,BUFSPN
CALL ENTPAK
RET
;
PNTR:
IN STATUS
ANI 02
RZ
LXI H,TWIDTH
XRA A
ADD M
JNZ PRT2
MVI A,CR
OUT PRINT
CALL WAITMT
MVI A,LF
OUT PRINT
MVI M,WIDTH
RET
PRT2:
LXI H,PNFIFO
XRA A
ADD M
RZ
;
CALL INCLH
NXTPNT:
MOV E,M
LXI H,PNFIFO
CALL PXP
LXI H,TWIDTH
MOV B,M
DCR B
MOV M,B
MOV A,E
CPI LF
JZ INCRLF
CPI CR
JZ INCRLF
CPI DELETE
JZ DEL
CPI ESC
JNZ PNT1
MVI A,ESCSYM
PNT1:
OUT PRINT
RET
INCRLF:
MVI M,0
RET
DEL:
MVI A,DELSYM
OUT PRINT
RET
;
XLATER:
LXI H,ASCTAB
THISIT:
CMP M
JZ CONVT
CALL INCLH
MOV B,A
MVI A,ASCEND/256
CMP H
JC NTFUND
MVI A,ASCEND AND 0FFH
CMP L
JC NTFUND
MOV A,B
JMP THISIT
CONVT:
MVI A,MORTAB AND 0FFH
SUI ASCTAB AND 0FFH
JNC OK1
DCR H
OK1:
ADD L
JNC OK2
INR H
OK2:
MOV L,A
MVI A,MORTAB/256
SBI ASCTAB/256
ADD H
MOV H,A
MOV A,M
RET
NTFUND:
MVI A,200Q
RET
;
XLAT:
CPI 377Q
RAL
JNC $-1
CPI 0
JNZ XLAT1
MVI A,DELSYM
RET
;
XLAT1:
LXI H,MORTAB
THIS:
CMP M
JZ MCONVT
CALL INCLH
MOV B,A
MVI A,MOREND/256
CMP H
JC NTFND
MVI A,MOREND AND 0FFH
CMP L
JC NTFND
MOV A,B
JMP THIS
MCONVT:
MVI A,ASCTAB AND 0FFH
SUI MORTAB AND 0FFH
JC MOK1
DCR H
MOK1:
ADD L
JNC MOK2
INR H
MOK2:
MOV L,A
MVI A,ASCTAB/256
SBI MORTAB/256
ADD H
MOV H,A
MOV A,M
RET
NTFND:
MVI A,BLANK
RET
;
OTPUT:
LXI H,OTFIFO
XRA A
ADD M
RZ
CALL INCLH
MOV A,M
CPI DELETE
JNZ OTPUT1
MVI D,7
OTERR:
CALL DOT
DCR D
JNZ OTERR
JMP OUTEND
OTPUT1:
CALL XLATER
MOV D,A
CPI 200Q
JNZ GOODCH
MVI D,6
SPACE:
CALL TICK
DCR D
JNZ SPACE
JMP OUTEND
GOODCH:
CPI 200Q
JZ OUTEND
JNC DSH
CALL DOT
JMP OTLOOP
DSH:
CALL DASH
OTLOOP:
MOV A,D
ANI 177Q
RLC
MOV D,A
JMP GOODCH
OUTEND:
CALL TICK
CALL TICK
LXI H,OTFIFO
CALL PXP
RET
;
IDLE:
LXI H,KYFIFO
XRA A
ADD M
RZ
CALL INCLH
MOV E,M
CALL DCRLH
CALL PXP
MOV A,E
CPI ESC
JZ IDLE1
LXI H,OTFIFO
MOV B,A
MVI C,BUFOUT AND 0FFH
CALL ENTPAK
CNZ WHOOP
RET
IDLE1:
LXI H,CMMND
MVI M,1
RET
;
INPEND:
IN SENSE
ANI 1
RNZ
LXI H,INCHAR
MVI M,1
INTIME:
LXI H,TIMER
MVI M,0
INSENS:
CALL TICKI
LXI H,TIMER
MOV B,M
INR B
MOV M,B
IN SENSE
ANI 1
JZ INSENS
MVI E,0
MOV A,B
CPI 20Q
JNC INDASH
CPI 6
JNC INPOK
LXI H,BAUDI
MOV A,M
CPI 2
JC INPOK
SBI 1
MOV M,A
JMP INPOK
;
INDASH:
LXI H,BAUDI
MOV A,B
CPI 34Q
JC OKDASH
MOV A,M
CPI 376Q
JNC OKDASH
ADI 1
MOV M,A
OKDASH:
MVI E,1
INPOK:
LXI H,INCHAR
MOV A,M
RAL
ANI 376Q
ORA E
MOV M,A
LXI H,TIMER
MVI M,0
UPTIME:
CALL TICKI
IN SENSE
ANI 1
JZ INTIME
LXI H,TIMER
MOV B,M
INR B
MOV M,B
MOV A,B
CPI 377Q
JNZ NOTEOM
MVI B,LF
CALL PPAK
CALL PPAK
RET
NOTEOM:
CPI 60Q
JNZ ENDLET
MVI A,1
JMP MPAK
ENDLET:
CPI 24Q
JNZ UPTIME
LXI H,INCHAR
MOV A,M
MVI M,1
MPAK:
CALL XLAT
MOV B,A
CALL PPAK
JMP UPTIME
;
;
CMMND DS 1
TWIDTH DS 1
MSSCNT DS 1
SOH DS 1
BAUD DS 1
BAUDI DS 1
TIMER DS 1
INCHAR DS 1
KYFIFO EQU $
PNFIFO EQU KYFIFO+BUFSKY
OTFIFO EQU PNFIFO+BUFSPN
MSSGBF EQU OTFIFO+BUFOUT