The assembly source is this:
Code: Select all
.INCLUDE MSWI.INC
.INCLUDE MOSHEAD.INC
.INCLUDE MOSVARS.INC
.INCLUDE COMMS.INC
cts .equ 1
ncts .equ 254
dsr .equ 2
rts .equ 4
;; --------------------------------------------------
;; Check for comms link. If present then proceed
;; otherwise just exit
;;
;; --------------------------------------------------
bsr check_present
bcs not_present
;; bra not_present ;
bra is_present
check_present:
bsr 1$ ; PC relative
.ascic "XFEOF" ; leading count byte string
1$: pulx ; PC = address of "XFEOF"
os dv$lkup ; if XFEOF not there, no COMMS LINK
rts ; see tech. ref. manual
;; --------------------------------------------------------------------------------
;;
;; Not present so display a message
;;
not_present:
bsr nocoms
.ascic "No Comms Link"
nocoms: pulx
ldab 0,x
inx
os dp$prnt
os kb$getk
rts
;; --------------------------------------------------------------------------------
;; Comms Link present so sit in loop
;; If X pressed then exit
;; C toggles CTS
;; Status of other lines displayed
is_present:
clrb ; Open for reading and writing
RS rs_open
bcs error ; Deal with error
; Now free to access the port
bra statloop
error:
rts
statloop:
;; Stop kb$test from turning packs off, that would stop us getting
;; access to the port hardware.
ldaa #0
staa kbb_pkof
;; Check the keyboard
os kb$test
cmpb #0
beq nokey
;; Key pressed, but kb$test has put it in the unget buffer
;; where it will get stuck. Use kb$getk to actually get the key
os kb$getk
;; Key pressed, handle it
cmpb #^A'X'
beq doex
;; CTS control
cmpb #^A'S'
beq cts0a
cmpb #^A'T'
beq cts1a
nokey:
;; Display status
;; of serial port handshake lines
ldaa #0 ;Cursor to top left
ldab #0
os dp$stat
ldaa #14
os dp$emit
bsr 1$
.ascic "RTS="
1$: pulx
ldab 0,x
inx
os dp$prnt
;; Get RTS state
ldaa POB_PORT2
anda #4
asra
asra
adda #^A'0'
os dp$emit
bsr tdtr
.ascic " DTR="
; trampolines
statloop1: bra statloop
tdtr: pulx
ldab 0,x
inx
os dp$prnt
;; Get DTR state
ldaa POB_PORT2
anda #2
asra
adda #^A'0'
os dp$emit
bsr 2$
.ascic " CTS="
2$: pulx
ldab 0,x
inx
os dp$prnt
;; Get CTS state
ldab #0
bsr ctsvar
adda #^A'0'
os dp$emit
ldaa #^A' '
os dp$emit
ldaa #10
os dp$emit
ldaa #13
os dp$emit
bsr sub3
.ascic "CTS:S,T Exit:X"
nokey1: bra nokey
cts0a: bra cts0
cts1a: bra cts1
doex: bra doexit
sub3: pulx
ldab 0,x
inx
os dp$prnt
;; Loop back
bra statloop1
;; --------------------------------------------------------------------------------
;;
doexit:
;; Now close the comms link
ldab #0
RS rs_close
;; Allow packs to be turned off again by kb$test
ldaa #255
staa kbb_pkof
rts
;; --------------------------------------------------------------------------------
;; Set CTS to zero
;;
cts0:
aim #ncts, POB_PORT2
ldaa #0
ldab #1
bsr ctsvar
bra nokey1
;; Set CTS to 1
cts1:
oim #cts, POB_PORT2
ldaa #1
ldab #1
bsr ctsvar
bra nokey1
;; --------------------------------------------------------------------------------
;;
;; We have to use a position independent varaible to hold the
;; CTS state as we cn't read the state of the output
ctsvar:
bsr 4$
.byte 0
4$: pulx
;; Set or read the var?
cmpb #0
beq readvar
;; Write variable
staa 0,x
rts
readvar:
ldaa 0,x
rts
;; --------------------------------------------------------------------------------
Code: Select all
statser:
LOCAL MC$(247)
MC$=CHR$($8d)
MC$=MC$+CHR$($04)
MC$=MC$+CHR$($25)
MC$=MC$+CHR$($0e)
MC$=MC$+CHR$($20)
MC$=MC$+CHR$($25)
MC$=MC$+CHR$($8d)
MC$=MC$+CHR$($06)
MC$=MC$+CHR$($05)
MC$=MC$+CHR$($58)
MC$=MC$+CHR$($46)
MC$=MC$+CHR$($45)
MC$=MC$+CHR$($4f)
MC$=MC$+CHR$($46)
MC$=MC$+CHR$($38)
MC$=MC$+CHR$($3f)
MC$=MC$+CHR$($19)
MC$=MC$+CHR$($39)
MC$=MC$+CHR$($8d)
MC$=MC$+CHR$($0e)
MC$=MC$+CHR$($0d)
MC$=MC$+CHR$($4e)
MC$=MC$+CHR$($6f)
MC$=MC$+CHR$($20)
MC$=MC$+CHR$($43)
MC$=MC$+CHR$($6f)
MC$=MC$+CHR$($6d)
MC$=MC$+CHR$($6d)
MC$=MC$+CHR$($73)
MC$=MC$+CHR$($20)
MC$=MC$+CHR$($4c)
MC$=MC$+CHR$($69)
MC$=MC$+CHR$($6e)
MC$=MC$+CHR$($6b)
MC$=MC$+CHR$($38)
MC$=MC$+CHR$($e6)
MC$=MC$+CHR$($00)
MC$=MC$+CHR$($08)
MC$=MC$+CHR$($3f)
MC$=MC$+CHR$($11)
MC$=MC$+CHR$($3f)
MC$=MC$+CHR$($48)
MC$=MC$+CHR$($39)
MC$=MC$+CHR$($5f)
MC$=MC$+CHR$($bd)
MC$=MC$+CHR$($21)
MC$=MC$+CHR$($74)
MC$=MC$+CHR$($00)
MC$=MC$+CHR$($25)
MC$=MC$+CHR$($02)
MC$=MC$+CHR$($20)
MC$=MC$+CHR$($01)
MC$=MC$+CHR$($39)
MC$=MC$+CHR$($86)
MC$=MC$+CHR$($00)
MC$=MC$+CHR$($b7)
MC$=MC$+CHR$($20)
MC$=MC$+CHR$($c1)
MC$=MC$+CHR$($3f)
MC$=MC$+CHR$($4b)
MC$=MC$+CHR$($c1)
MC$=MC$+CHR$($00)
MC$=MC$+CHR$($27)
MC$=MC$+CHR$($0e)
MC$=MC$+CHR$($3f)
MC$=MC$+CHR$($48)
MC$=MC$+CHR$($c1)
MC$=MC$+CHR$($58)
MC$=MC$+CHR$($27)
MC$=MC$+CHR$($81)
MC$=MC$+CHR$($c1)
MC$=MC$+CHR$($53)
MC$=MC$+CHR$($27)
MC$=MC$+CHR$($71)
MC$=MC$+CHR$($c1)
MC$=MC$+CHR$($54)
MC$=MC$+CHR$($27)
MC$=MC$+CHR$($6f)
MC$=MC$+CHR$($86)
MC$=MC$+CHR$($00)
MC$=MC$+CHR$($c6)
MC$=MC$+CHR$($00)
MC$=MC$+CHR$($3f)
MC$=MC$+CHR$($14)
MC$=MC$+CHR$($86)
MC$=MC$+CHR$($0e)
MC$=MC$+CHR$($3f)
MC$=MC$+CHR$($10)
MC$=MC$+CHR$($8d)
MC$=MC$+CHR$($05)
MC$=MC$+CHR$($04)
MC$=MC$+CHR$($52)
MC$=MC$+CHR$($54)
MC$=MC$+CHR$($53)
MC$=MC$+CHR$($3d)
MC$=MC$+CHR$($38)
MC$=MC$+CHR$($e6)
MC$=MC$+CHR$($00)
MC$=MC$+CHR$($08)
MC$=MC$+CHR$($3f)
MC$=MC$+CHR$($11)
MC$=MC$+CHR$($96)
MC$=MC$+CHR$($03)
MC$=MC$+CHR$($84)
MC$=MC$+CHR$($04)
MC$=MC$+CHR$($47)
MC$=MC$+CHR$($47)
MC$=MC$+CHR$($8b)
MC$=MC$+CHR$($30)
MC$=MC$+CHR$($3f)
MC$=MC$+CHR$($10)
MC$=MC$+CHR$($8d)
MC$=MC$+CHR$($08)
MC$=MC$+CHR$($05)
MC$=MC$+CHR$($20)
MC$=MC$+CHR$($44)
MC$=MC$+CHR$($54)
MC$=MC$+CHR$($52)
MC$=MC$+CHR$($3d)
MC$=MC$+CHR$($20)
MC$=MC$+CHR$($bc)
MC$=MC$+CHR$($38)
MC$=MC$+CHR$($e6)
MC$=MC$+CHR$($00)
MC$=MC$+CHR$($08)
MC$=MC$+CHR$($3f)
MC$=MC$+CHR$($11)
MC$=MC$+CHR$($96)
MC$=MC$+CHR$($03)
MC$=MC$+CHR$($84)
MC$=MC$+CHR$($02)
MC$=MC$+CHR$($47)
MC$=MC$+CHR$($8b)
MC$=MC$+CHR$($30)
MC$=MC$+CHR$($3f)
MC$=MC$+CHR$($10)
MC$=MC$+CHR$($8d)
MC$=MC$+CHR$($06)
MC$=MC$+CHR$($05)
MC$=MC$+CHR$($20)
MC$=MC$+CHR$($43)
MC$=MC$+CHR$($54)
MC$=MC$+CHR$($53)
MC$=MC$+CHR$($3d)
MC$=MC$+CHR$($38)
MC$=MC$+CHR$($e6)
MC$=MC$+CHR$($00)
MC$=MC$+CHR$($08)
MC$=MC$+CHR$($3f)
MC$=MC$+CHR$($11)
MC$=MC$+CHR$($c6)
MC$=MC$+CHR$($00)
MC$=MC$+CHR$($8d)
MC$=MC$+CHR$($4f)
MC$=MC$+CHR$($8b)
MC$=MC$+CHR$($30)
MC$=MC$+CHR$($3f)
MC$=MC$+CHR$($10)
MC$=MC$+CHR$($86)
MC$=MC$+CHR$($20)
MC$=MC$+CHR$($3f)
MC$=MC$+CHR$($10)
MC$=MC$+CHR$($86)
MC$=MC$+CHR$($0a)
MC$=MC$+CHR$($3f)
MC$=MC$+CHR$($10)
MC$=MC$+CHR$($86)
MC$=MC$+CHR$($0d)
MC$=MC$+CHR$($3f)
MC$=MC$+CHR$($10)
MC$=MC$+CHR$($8d)
MC$=MC$+CHR$($13)
MC$=MC$+CHR$($0e)
MC$=MC$+CHR$($43)
MC$=MC$+CHR$($54)
MC$=MC$+CHR$($53)
MC$=MC$+CHR$($3a)
MC$=MC$+CHR$($53)
MC$=MC$+CHR$($2c)
MC$=MC$+CHR$($54)
MC$=MC$+CHR$($20)
MC$=MC$+CHR$($45)
MC$=MC$+CHR$($78)
MC$=MC$+CHR$($69)
MC$=MC$+CHR$($74)
MC$=MC$+CHR$($3a)
MC$=MC$+CHR$($58)
MC$=MC$+CHR$($20)
MC$=MC$+CHR$($16)
MC$=MC$+CHR$($20)
MC$=MC$+CHR$($1f)
MC$=MC$+CHR$($38)
MC$=MC$+CHR$($e6)
MC$=MC$+CHR$($00)
MC$=MC$+CHR$($08)
MC$=MC$+CHR$($3f)
MC$=MC$+CHR$($11)
MC$=MC$+CHR$($20)
MC$=MC$+CHR$($b0)
MC$=MC$+CHR$($c6)
MC$=MC$+CHR$($00)
MC$=MC$+CHR$($bd)
MC$=MC$+CHR$($21)
MC$=MC$+CHR$($74)
MC$=MC$+CHR$($01)
MC$=MC$+CHR$($86)
MC$=MC$+CHR$($ff)
MC$=MC$+CHR$($b7)
MC$=MC$+CHR$($20)
MC$=MC$+CHR$($c1)
MC$=MC$+CHR$($39)
MC$=MC$+CHR$($71)
MC$=MC$+CHR$($fe)
MC$=MC$+CHR$($03)
MC$=MC$+CHR$($86)
MC$=MC$+CHR$($00)
MC$=MC$+CHR$($c6)
MC$=MC$+CHR$($01)
MC$=MC$+CHR$($8d)
MC$=MC$+CHR$($0d)
MC$=MC$+CHR$($20)
MC$=MC$+CHR$($70)
MC$=MC$+CHR$($72)
MC$=MC$+CHR$($01)
MC$=MC$+CHR$($03)
MC$=MC$+CHR$($86)
MC$=MC$+CHR$($01)
MC$=MC$+CHR$($c6)
MC$=MC$+CHR$($01)
MC$=MC$+CHR$($8d)
MC$=MC$+CHR$($02)
MC$=MC$+CHR$($20)
MC$=MC$+CHR$($65)
MC$=MC$+CHR$($8d)
MC$=MC$+CHR$($01)
MC$=MC$+CHR$($00)
MC$=MC$+CHR$($38)
MC$=MC$+CHR$($c1)
MC$=MC$+CHR$($00)
MC$=MC$+CHR$($27)
MC$=MC$+CHR$($03)
MC$=MC$+CHR$($a7)
MC$=MC$+CHR$($00)
MC$=MC$+CHR$($39)
MC$=MC$+CHR$($a6)
MC$=MC$+CHR$($00)
MC$=MC$+CHR$($39)
RETURN USR(ADDR(MC$)+1,0)
I use 'statserial' on Linux to look at the other end of the USB.
Andrew