home *** CD-ROM | disk | FTP | other *** search
- ; 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
-