mirror of
https://github.com/wfjm/w11.git
synced 2026-01-27 12:52:27 +00:00
mcode: use call/return; fix (lp11|pc11)write; add scmd
- tools/mcode - *.mac: use call/return - (lp11|pc11)write: check line count after last char is accepted - pc11copy: kw11-p: use 100 kHz/13.; ensure last puncher interrupt - *.scmd: add SimH startup files when reasonable - tools/simh/setup_w11a_(max|min).scmd: enable pclk
This commit is contained in:
6
tools/mcode/.gitignore
vendored
6
tools/mcode/.gitignore
vendored
@@ -1,5 +1,11 @@
|
||||
*.cof
|
||||
*.lda
|
||||
*.lst
|
||||
|
||||
# simulation stuff
|
||||
rlink_cext_*
|
||||
sysmon_stim
|
||||
tmu_ofile
|
||||
|
||||
# Simh stuff
|
||||
simh_*.dat
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
; $Id: dl11echo.mac 1174 2019-06-29 18:00:47Z mueller $
|
||||
; $Id: dl11echo.mac 1275 2022-08-10 08:10:40Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2019- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
; Copyright 2019-2022 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; Revision History:
|
||||
; Date Rev Version Comment
|
||||
; 2022-08-09 1275 1.0.1 use call/return
|
||||
; 2019-04-21 1134 1.0 Initial version
|
||||
;
|
||||
; DL11 echo
|
||||
@@ -82,8 +83,8 @@ nultsk: mov #pat,r0
|
||||
;
|
||||
vh.tti: mov @#ti.buf,r0 ; read char
|
||||
movb r0,curchr ; and remember
|
||||
jsr pc,@curhdl ; call handler
|
||||
jsr pc,chkesc ; check for ESC
|
||||
call @curhdl ; call handler
|
||||
call chkesc ; check for ESC
|
||||
cmp nfree,#6. ; enough buffer ?
|
||||
bgt 100$ ; if <= 6
|
||||
bic #ti.ie,@#ti.csr ; disable ti irupt
|
||||
@@ -124,16 +125,16 @@ wchar: tst nfree ; free buffer
|
||||
1$: mov r1,wptr ; store pointer
|
||||
bis #to.ie,@#to.csr ; enable to irupt
|
||||
dec nfree
|
||||
100$: rts pc
|
||||
100$: return
|
||||
;
|
||||
; write CR/LF ------------------------------------
|
||||
; use r0
|
||||
;
|
||||
wcrlf: mov #CR,r0
|
||||
jsr pc,wchar
|
||||
call wchar
|
||||
wlf: mov #LF,r0
|
||||
jsr pc,wchar
|
||||
rts pc
|
||||
call wchar
|
||||
return
|
||||
|
||||
;
|
||||
; escape detection -------------------------------
|
||||
@@ -143,7 +144,7 @@ chkesc: movb curchr,r0
|
||||
cmpb #ESC,r0
|
||||
bne 1$
|
||||
incb esccnt
|
||||
rts pc
|
||||
return
|
||||
1$: cmpb esccnt,#2 ; 2 ESC seen ?
|
||||
blt 200$
|
||||
cmpb #'u,r0 ; u -> hdluc
|
||||
@@ -161,20 +162,20 @@ chkesc: movb curchr,r0
|
||||
120$: cmpb #'o,r0 ; o -> hdloct
|
||||
bne 200$
|
||||
mov #hdloct,curhdl
|
||||
jsr pc,wcrlf ; force new line
|
||||
call wcrlf ; force new line
|
||||
clrb octcnt
|
||||
200$: clrb esccnt
|
||||
rts pc
|
||||
return
|
||||
;
|
||||
; character handler ------------------------------
|
||||
; in r0 current character
|
||||
; use r1,r2
|
||||
;
|
||||
hdldir: jsr pc,wchar ; direct mode
|
||||
hdldir: call wchar ; direct mode
|
||||
cmpb #CR,r0 ; CR seen
|
||||
bne 100$
|
||||
jsr pc,wlf ; then add LF
|
||||
100$: rts pc
|
||||
call wlf ; then add LF
|
||||
100$: return
|
||||
|
||||
hdllc: cmpb r0,#'A ; lower case mode
|
||||
blt hdldir
|
||||
@@ -192,22 +193,22 @@ hdluc: cmpb r0,#'a ; upper case mode
|
||||
|
||||
hdloct: mov r0,r2 ; octal mode
|
||||
ash #-6.,r0
|
||||
jsr pc,woct
|
||||
call woct
|
||||
mov r2,r0
|
||||
ash #-3.,r0
|
||||
jsr pc,woct
|
||||
call woct
|
||||
mov r2,r0
|
||||
jsr pc,woct
|
||||
call woct
|
||||
mov #SPC,r0
|
||||
jsr pc,wchar
|
||||
call wchar
|
||||
cmpb #CR,curchr
|
||||
beq 10$
|
||||
incb octcnt
|
||||
cmpb octcnt,#16.
|
||||
blt 100$
|
||||
10$: jsr pc,wcrlf
|
||||
10$: call wcrlf
|
||||
clrb octcnt
|
||||
100$: rts pc
|
||||
100$: return
|
||||
;
|
||||
; print octal digit ------------------------------
|
||||
; in r0 current character
|
||||
|
||||
13
tools/mcode/dl11/dl11echo.scmd
Normal file
13
tools/mcode/dl11/dl11echo.scmd
Normal file
@@ -0,0 +1,13 @@
|
||||
; $Id: dl11echo.scmd 1275 2022-08-10 08:10:40Z mueller $
|
||||
;
|
||||
; Setup file for dl11echo
|
||||
;
|
||||
! make dl11echo.lda
|
||||
;
|
||||
do ../../simh/setup_w11a_mcode.scmd
|
||||
;
|
||||
; attach console to telnet
|
||||
set cons telnet=5670
|
||||
;
|
||||
load dl11echo.lda
|
||||
cont
|
||||
@@ -1,9 +1,10 @@
|
||||
; $Id: dz11echo.mac 1174 2019-06-29 18:00:47Z mueller $
|
||||
; $Id: dz11echo.mac 1275 2022-08-10 08:10:40Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2019- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
; Copyright 2019-2022 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; Revision History:
|
||||
; Date Rev Version Comment
|
||||
; 2022-08-09 1275 1.1 use call/return; better ? text, startup message
|
||||
; 2019-05-25 1152 1.0 Initial version
|
||||
; 2019-05-05 1147 0.1 First draft
|
||||
;
|
||||
@@ -104,6 +105,9 @@ start: mov #stack,sp ; setup stack
|
||||
mov #kl.ie,@#kl.csr ; activate clock
|
||||
mov #<dz.tie!dz.rie!dz.mse>,@#dz.csr
|
||||
spl 0 ; allow interrupts
|
||||
;
|
||||
mov #msgsta,r1 ; print startup message
|
||||
call dlwstr
|
||||
;
|
||||
; blinking lights null task (pattern setup in clock handler)
|
||||
;
|
||||
@@ -126,12 +130,12 @@ start: mov #stack,sp ; setup stack
|
||||
blt 150$ ;;; if lt not
|
||||
mov gentbl(r2),r1 ;;;
|
||||
add #3,r1 ;;; point to last digit of count
|
||||
jsr pc,incnum ;;; increment line counter
|
||||
call incnum ;;; increment line counter
|
||||
mov gentbl(r2),r1 ;;;
|
||||
movb tgline,cline ;;;
|
||||
jsr pc,dzwstr ;;; write head part
|
||||
call dzwstr ;;; write head part
|
||||
mov #gentxt,r1 ;;;
|
||||
jsr pc,dzwstr ;;; write body part
|
||||
call dzwstr ;;; write body part
|
||||
spl 0
|
||||
br 120$
|
||||
150$: spl 0
|
||||
@@ -150,7 +154,7 @@ incnum: mov #4,r0 ; max 4 digits
|
||||
movb #'0,(r1) ; if yes, restore 0
|
||||
dec r1 ; and go for next digit
|
||||
sob r0,1$
|
||||
100$: rts pc
|
||||
100$: return
|
||||
;
|
||||
; cons rx interrupt handler ----------------------
|
||||
;
|
||||
@@ -160,7 +164,7 @@ vh.tti: mov @#ti.buf,r0
|
||||
beq 2$ ; end of list ?
|
||||
cmp r0,(r1)+ ; char match ?
|
||||
bne 1$ ; if not try next
|
||||
jsr pc,(r2) ; else call handler
|
||||
call (r2) ; else call handler
|
||||
rti
|
||||
;
|
||||
2$: sub #'0,r0 ; look for octal digit
|
||||
@@ -172,7 +176,7 @@ vh.tti: mov @#ti.buf,r0
|
||||
rti
|
||||
;
|
||||
3$: mov #msgerr,r1 ; otherwise complain
|
||||
jsr pc,dlwstr
|
||||
call dlwstr
|
||||
rti
|
||||
;
|
||||
; cons tx interrupt handler ----------------------
|
||||
@@ -192,45 +196,45 @@ vh.tto: mov dlrptr,r1 ; load pointer
|
||||
; handler for '?': print help ---------------
|
||||
;
|
||||
conhlp: mov #msghlp,r1
|
||||
jsr pc,dlwstr
|
||||
rts pc
|
||||
call dlwstr
|
||||
return
|
||||
;
|
||||
; handler for 'c': char mode; disable silo --
|
||||
;
|
||||
conchr: bic #dz.sae,@#dz.csr
|
||||
movb #-1,smode
|
||||
rts pc
|
||||
return
|
||||
;
|
||||
; handler for 's': silo mode ----------------
|
||||
;
|
||||
consil: bis #dz.sae,@#dz.csr
|
||||
movb #1,smode
|
||||
rts pc
|
||||
return
|
||||
;
|
||||
; handler for 'a': auto mode for silo -------
|
||||
;
|
||||
conaut: bic #dz.sae,@#dz.csr
|
||||
clrb smode
|
||||
rts pc
|
||||
return
|
||||
;
|
||||
; handler for 'i': print status info --------
|
||||
;
|
||||
coninf: mov #msginf,r1 ; print info header
|
||||
jsr pc,dlwstr
|
||||
call dlwstr
|
||||
clr r3 ; loop over lines
|
||||
1$: mov #msg3b,r1
|
||||
jsr pc,dlwstr ; print 3 blank
|
||||
call dlwstr ; print 3 blank
|
||||
mov r3,r0
|
||||
add #'0,r0
|
||||
jsr pc,dlwchr ; print line number
|
||||
call dlwchr ; print line number
|
||||
movb @#dz.co,r4 ; print co
|
||||
jsr pc,prtinf
|
||||
call prtinf
|
||||
movb @#dz.rin,r4 ; print ring
|
||||
jsr pc,prtinf
|
||||
call prtinf
|
||||
movb @#dz.dtr,r4 ; print dtr
|
||||
jsr pc,prtinf
|
||||
call prtinf
|
||||
movb curbrk,r4 ; print brk
|
||||
jsr pc,prtinf
|
||||
call prtinf
|
||||
|
||||
mov r3,r4
|
||||
asl r4 ; word offset
|
||||
@@ -248,27 +252,27 @@ coninf: mov #msginf,r1 ; print info header
|
||||
cmp #hdloct,r4
|
||||
beq 2$
|
||||
mov #msgerr,r1
|
||||
2$: jsr pc,dlwstr ; print mode
|
||||
2$: call dlwstr ; print mode
|
||||
inc r3
|
||||
cmp r3,#7
|
||||
ble 1$
|
||||
rts pc
|
||||
return
|
||||
;
|
||||
; handler for 'h': hangup line (dtr=0) ------
|
||||
;
|
||||
conhup: jsr pc,getcli
|
||||
conhup: call getcli
|
||||
bicb bitmsk(r2),@#dz.dtr ; clear dtr bit
|
||||
rts pc
|
||||
return
|
||||
;
|
||||
; handler for 'r': line ready (dtr=1) -------
|
||||
;
|
||||
conrdy: jsr pc,getcli
|
||||
conrdy: call getcli
|
||||
bisb bitmsk(r2),@#dz.dtr ; set dtr bit
|
||||
rts pc
|
||||
return
|
||||
;
|
||||
; handler for 'b': break line (brk=1) -------
|
||||
;
|
||||
conbrk: jsr pc,getcli
|
||||
conbrk: call getcli
|
||||
bisb bitmsk(r2),curbrk ; set brk bit
|
||||
movb curbrk,@#dz.brk ; set brk register
|
||||
movb r2,cline ; setup line for dzwchr
|
||||
@@ -277,22 +281,22 @@ conbrk: jsr pc,getcli
|
||||
;
|
||||
; handler for 'a': unbreak line (brk=0) -----
|
||||
;
|
||||
conubr: jsr pc,getcli
|
||||
conubr: call getcli
|
||||
bicb bitmsk(r2),curbrk ; clear brk bit
|
||||
movb curbrk,@#dz.brk ; set brk register
|
||||
rts pc
|
||||
return
|
||||
;
|
||||
; handler for 'g': generate: start traffic generator
|
||||
;
|
||||
contgg: jsr pc,getcli
|
||||
contgg: call getcli
|
||||
bisb bitmsk(r2),curgen ; set gen bit
|
||||
rts pc
|
||||
return
|
||||
;
|
||||
; handler for 'q': quit: stop traffic generator
|
||||
;
|
||||
contgq: jsr pc,getcli
|
||||
contgq: call getcli
|
||||
bicb bitmsk(r2),curgen ; clear gen bit
|
||||
rts pc
|
||||
return
|
||||
;
|
||||
; helper for coninf --------------------
|
||||
; in r3 line number
|
||||
@@ -300,7 +304,7 @@ contgq: jsr pc,getcli
|
||||
; use r0
|
||||
;
|
||||
prtinf: mov #msg3b,r1
|
||||
jsr pc,dlwstr ; print 3 blank
|
||||
call dlwstr ; print 3 blank
|
||||
movb #'0,r0 ; assume 0
|
||||
bitb bitmsk(r3),r4 ; test bit
|
||||
beq 1$
|
||||
@@ -311,7 +315,7 @@ prtinf: mov #msg3b,r1
|
||||
;
|
||||
getcli: movb clnum,r2 ; load line number
|
||||
blt 1$ ; if lt not valid
|
||||
rts pc ; if yes return
|
||||
return ; if yes return
|
||||
1$: tst (sp)+ ; else pop return address
|
||||
mov #msgerr,r1 ; load error message
|
||||
jmp dlwstr ; execute dlwstr instead of handler
|
||||
@@ -325,7 +329,7 @@ vh.kwl:
|
||||
;
|
||||
bit #dz.sae,@#dz.csr ; silo enabled ?
|
||||
beq 10$
|
||||
jsr pc,dzread
|
||||
call dzread
|
||||
;
|
||||
; determine sae when automatic mode
|
||||
;
|
||||
@@ -354,7 +358,7 @@ vh.kwl:
|
||||
beq 100$
|
||||
mov #curco,r5 ; print change messages
|
||||
mov #txtco,msgpre
|
||||
jsr pc,msgpat
|
||||
call msgpat
|
||||
mov #atim,timco ; if yes, setup co timer
|
||||
clr timint ; expire interval timer
|
||||
;
|
||||
@@ -366,7 +370,7 @@ vh.kwl:
|
||||
beq 200$
|
||||
mov #currin,r5 ; print change messages
|
||||
mov #txtrin,msgpre
|
||||
jsr pc,msgpat
|
||||
call msgpat
|
||||
mov #atim,timrin ; if yes, setup ring timer
|
||||
clr timint ; expire interval timer
|
||||
bisb currin,dsprin ; accumulate ring bits
|
||||
@@ -425,7 +429,7 @@ vh.kwl:
|
||||
;
|
||||
; dz11 rx interrupt handler ----------------------
|
||||
;
|
||||
vh.dzr: jsr pc,dzread
|
||||
vh.dzr: call dzread
|
||||
rti
|
||||
;
|
||||
dzread: mov @#dz.rbu,r0 ; read rbuf
|
||||
@@ -440,11 +444,11 @@ dzread: mov @#dz.rbu,r0 ; read rbuf
|
||||
movb r2,cline ; save line
|
||||
asl r2 ; word offset
|
||||
bic #^c377,r0 ; get char
|
||||
jsr pc,@lhdl(r2) ; call char handler
|
||||
jsr pc,chkesc ; check for ESC
|
||||
call @lhdl(r2) ; call char handler
|
||||
call chkesc ; check for ESC
|
||||
; FIXME: ?? disable rie when nfree<=6 ?
|
||||
br dzread ; and go for next
|
||||
999$: rts pc
|
||||
999$: return
|
||||
;
|
||||
; dz11 tx interrupt handler ----------------------
|
||||
;
|
||||
@@ -473,12 +477,12 @@ vh.dzt: movb @#dz.csr+1,r2 ; get tline
|
||||
msgpat: movb (r5)+,r4 ; get cur
|
||||
bicb (r5),r4 ; cur and not lst -> new bits
|
||||
mov #txton,msgsuf
|
||||
jsr pc,msgbit
|
||||
call msgbit
|
||||
movb (r5),r4 ; get lst
|
||||
bicb -(r5),r4 ; lst and not cur -> old bits
|
||||
mov #txtoff,msgsuf
|
||||
jsr pc,msgbit
|
||||
rts pc
|
||||
call msgbit
|
||||
return
|
||||
;
|
||||
; dl11 co/ring change message print --------------
|
||||
; in r4 changed bits
|
||||
@@ -488,15 +492,15 @@ msgbit: mov #7,r3
|
||||
1$: rolb r4 ; probe lsb
|
||||
bcc 2$
|
||||
mov msgpre,r1 ; write prefix (line or ring)
|
||||
jsr pc,dlwstr
|
||||
call dlwstr
|
||||
mov r3,r0
|
||||
add #'0,r0 ; write line number
|
||||
jsr pc,dlwchr
|
||||
call dlwchr
|
||||
mov msgsuf,r1 ; write suffix (on or off)
|
||||
jsr pc,dlwstr
|
||||
call dlwstr
|
||||
2$: dec r3
|
||||
bge 1$
|
||||
rts pc
|
||||
return
|
||||
;
|
||||
; dl11 ring buffer write char routine ------------
|
||||
; in r0 current character
|
||||
@@ -512,7 +516,7 @@ dlwchr: tst dlnfre ; free buffer
|
||||
1$: mov r2,dlwptr ; store pointer
|
||||
bis #to.ie,@#to.csr ; enable to irupt
|
||||
dec dlnfre
|
||||
100$: rts pc
|
||||
100$: return
|
||||
;
|
||||
; dl11 ring buffer write asciz routine -----------
|
||||
; in r1 asciz string pointer
|
||||
@@ -520,9 +524,9 @@ dlwchr: tst dlnfre ; free buffer
|
||||
;
|
||||
dlwstr: movb (r1)+,r0 ; get next char
|
||||
beq 100$ ; end ?
|
||||
jsr pc,dlwchr
|
||||
call dlwchr
|
||||
br dlwstr
|
||||
100$: rts pc
|
||||
100$: return
|
||||
;
|
||||
; dz11 ring buffer write char routine ------------
|
||||
; in r0 current character
|
||||
@@ -543,25 +547,25 @@ dzwchr: movb cline,r2 ; line number
|
||||
bne 100$
|
||||
asr r2 ; byte offset
|
||||
bisb bitmsk(r2),@#dz.len ; and enable line
|
||||
100$: rts pc
|
||||
100$: return
|
||||
;
|
||||
; dz11 ring buffer write string routine ----------
|
||||
; in r1 pointer to asciz string
|
||||
; use r0,r2,r3
|
||||
dzwstr: movb (r1)+,r0 ; get next char
|
||||
beq 100$ ; end ?
|
||||
jsr pc,dzwchr
|
||||
call dzwchr
|
||||
br dzwstr
|
||||
100$: rts pc
|
||||
100$: return
|
||||
;
|
||||
; dz11 write CR/LF -------------------------------
|
||||
; use r0
|
||||
;
|
||||
dzcrlf: mov #CR,r0
|
||||
jsr pc,dzwchr
|
||||
call dzwchr
|
||||
dzlf: mov #LF,r0
|
||||
jsr pc,dzwchr
|
||||
rts pc
|
||||
call dzwchr
|
||||
return
|
||||
;
|
||||
; escape detection -------------------------------
|
||||
; use r0,r2
|
||||
@@ -571,7 +575,7 @@ chkesc: movb cchar,r0
|
||||
cmpb #ESC,r0 ; ESC seen ?
|
||||
bne 1$
|
||||
incb ecnt(r2)
|
||||
rts pc
|
||||
return
|
||||
;
|
||||
1$: cmpb ecnt(r2),#2 ; 2 ESC seen ?
|
||||
blt 200$
|
||||
@@ -592,23 +596,23 @@ chkesc: movb cchar,r0
|
||||
120$: cmpb #'o,r0 ; o -> hdloct
|
||||
bne 200$
|
||||
mov #hdloct,lhdl(r2)
|
||||
jsr pc,dzcrlf ; force new line
|
||||
call dzcrlf ; force new line
|
||||
movb cline,r2
|
||||
clrb ocnt(r2)
|
||||
;
|
||||
200$: movb cline,r2
|
||||
clrb ecnt(r2)
|
||||
rts pc
|
||||
return
|
||||
;
|
||||
; character handler ------------------------------
|
||||
; in r0 current character
|
||||
; use r2
|
||||
;
|
||||
hdldir: jsr pc,dzwchr ; direct mode
|
||||
cmpb #CR,r0 ; CR seen
|
||||
hdldir: call dzwchr ; direct mode
|
||||
cmpb #CR,r0 ; CR seen
|
||||
bne 100$
|
||||
jsr pc,dzlf ; then add LF
|
||||
100$: rts pc
|
||||
call dzlf ; then add LF
|
||||
100$: return
|
||||
|
||||
hdllc: cmpb r0,#'A ; lower case mode
|
||||
blt hdldir
|
||||
@@ -625,24 +629,24 @@ hdluc: cmpb r0,#'a ; upper case mode
|
||||
br hdldir
|
||||
|
||||
hdloct: ash #-6.,r0
|
||||
jsr pc,dzoct
|
||||
call dzoct
|
||||
movb cchar,r0
|
||||
ash #-3.,r0
|
||||
jsr pc,dzoct
|
||||
call dzoct
|
||||
movb cchar,r0
|
||||
jsr pc,dzoct
|
||||
call dzoct
|
||||
mov #SPC,r0
|
||||
jsr pc,dzwchr
|
||||
call dzwchr
|
||||
cmpb #CR,cchar
|
||||
beq 10$
|
||||
movb cline,r2
|
||||
incb ocnt(r2)
|
||||
cmpb ocnt(r2),#16.
|
||||
blt 100$
|
||||
10$: jsr pc,dzcrlf
|
||||
10$: call dzcrlf
|
||||
movb cline,r2
|
||||
clrb ocnt(r2)
|
||||
100$: rts pc
|
||||
100$: return
|
||||
;
|
||||
; print octal digit ------------------------------
|
||||
; in r0 current character
|
||||
@@ -705,6 +709,7 @@ conhdl: .word conhlp,'?
|
||||
.word 0 ; end-of-list
|
||||
;
|
||||
msgerr: .asciz /?/<CR><LF>
|
||||
msgsta: .asciz /dz11echo DZ11 tester. For help type '?'/<CR><LF>
|
||||
msghlp: .ascii /dz11echo console commands:/<CR><LF>
|
||||
.ascii / ? help text/<CR><LF>
|
||||
.ascii / c char: only rie/<CR><LF>
|
||||
@@ -718,6 +723,11 @@ msghlp: .ascii /dz11echo console commands:/<CR><LF>
|
||||
.ascii / u unbreak: set brk=1/<CR><LF>
|
||||
.ascii / g generate test output on line/<CR><LF>
|
||||
.ascii / q quit generating test output/<CR><LF>
|
||||
.ascii /DZ line commands:/<CR><LF>
|
||||
.ascii / ESC + ESC + u -> uppercase/<CR><LF>
|
||||
.ascii / ESC + ESC + l -> lowercase/<CR><LF>
|
||||
.ascii / ESC + ESC + o -> octal echo (16 per line)/<CR><LF>
|
||||
.ascii / ESC + ESC + a -> direct echo/<CR><LF>
|
||||
.byte 0
|
||||
;
|
||||
msginf: .asciz /line co rin dtr brk mode/<CR><LF>
|
||||
|
||||
13
tools/mcode/dz11/dz11echo.scmd
Normal file
13
tools/mcode/dz11/dz11echo.scmd
Normal file
@@ -0,0 +1,13 @@
|
||||
; $Id: dz11echo.scmd 1275 2022-08-10 08:10:40Z mueller $
|
||||
;
|
||||
; Setup file for dz11echo
|
||||
;
|
||||
! make dz11echo.lda
|
||||
;
|
||||
do ../../simh/setup_w11a_mcode.scmd
|
||||
; attach console and DZ11 to telnet
|
||||
set cons telnet=5670
|
||||
att dz -m 5672
|
||||
;
|
||||
load dz11echo.lda
|
||||
cont
|
||||
@@ -1,9 +1,11 @@
|
||||
; $Id: lp11write.mac 1174 2019-06-29 18:00:47Z mueller $
|
||||
; $Id: lp11write.mac 1276 2022-08-12 10:25:13Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2019- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
; Copyright 2019-2022 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; Revision History:
|
||||
; Date Rev Version Comment
|
||||
; 2022-08-10 1276 1.0.2 check line count after last char is accepted
|
||||
; 2022-08-09 1275 1.0.1 use call/return
|
||||
; 2019-04-21 1134 1.0 Initial version
|
||||
;
|
||||
; write test output
|
||||
@@ -65,9 +67,12 @@ start1: mov #stack,sp ; setup stack
|
||||
br 3$
|
||||
;
|
||||
; printer interrupt handler -----------------------
|
||||
; the line count stop is checked after the last char is accepted by LP11
|
||||
;
|
||||
vh.lp: tst @#lp.csr ; printer offline ?
|
||||
bmi perr ; if mi yes, error halt
|
||||
cmp r0,#lcnt ; enough lines send ?
|
||||
beq 200$
|
||||
1$: movb (r1)+,@#lp.buf ; send byte
|
||||
cmp r1,#bend ; end of buffer ?
|
||||
bhis 100$ ; if his yes, handle new line
|
||||
@@ -76,10 +81,8 @@ vh.lp: tst @#lp.csr ; printer offline ?
|
||||
rti ; else quit irupt
|
||||
|
||||
100$: mov #bnum+3,r1 ; if yes, increment number
|
||||
jsr pc,incnum
|
||||
call incnum
|
||||
inc r0 ; inc line counter
|
||||
cmp r0,#lcnt ; enough lines send ?
|
||||
beq 200$
|
||||
mov #bnum,r1 ; ready for next line
|
||||
rti
|
||||
|
||||
@@ -97,7 +100,7 @@ incnum: mov #4,r5 ; max 4 digits
|
||||
movb #'0,(r1) ; if yes, restore 0
|
||||
dec r1 ; and go for next digit
|
||||
sob r5,1$
|
||||
100$: rts pc
|
||||
100$: return
|
||||
;
|
||||
; data area ------------------------------------------------
|
||||
;
|
||||
|
||||
14
tools/mcode/lp11/lp11write.scmd
Normal file
14
tools/mcode/lp11/lp11write.scmd
Normal file
@@ -0,0 +1,14 @@
|
||||
; $Id: lp11write.scmd 1275 2022-08-10 08:10:40Z mueller $
|
||||
;
|
||||
; Setup file for lp11write
|
||||
;
|
||||
! make lp11write.lda
|
||||
;
|
||||
do ../../simh/setup_w11a_mcode.scmd
|
||||
;
|
||||
; attach lp11 output, ensure fresh file
|
||||
! rm -f simh_lp11write.dat
|
||||
att lpt simh_lp11write.dat
|
||||
;
|
||||
load lp11write.lda
|
||||
cont
|
||||
@@ -1,9 +1,10 @@
|
||||
; $Id: bootw11.mac 1237 2022-05-15 07:51:47Z mueller $
|
||||
; $Id: bootw11.mac 1275 2022-08-10 08:10:40Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2019-2022 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; Revision History:
|
||||
; Date Rev Version Comment
|
||||
; 2022-08-09 1275 1.0.2 use call/return
|
||||
; 2022-05-14 1237 1.0.1 BUGFIX: proper init of unit number in getnam
|
||||
; 2019-05-01 1143 1.0 Initial version
|
||||
; 2019-04-19 1133 0.1 First draft
|
||||
@@ -40,19 +41,19 @@ start: spl 7
|
||||
; print prompt
|
||||
;
|
||||
mov #strpro,r1
|
||||
nxtpro: jsr pc,prtstr
|
||||
nxtpro: call prtstr
|
||||
;
|
||||
; read boot device name and unit
|
||||
; out r2 device name
|
||||
; out r3 unit number
|
||||
;
|
||||
getnam: jsr pc,getlet ; get 1st char
|
||||
getnam: call getlet ; get 1st char
|
||||
mov r0,r2 ; move into low byte
|
||||
jsr pc,getlet ; get 2nd char
|
||||
call getlet ; get 2nd char
|
||||
swab r0
|
||||
bis r0,r2 ; move into high byte
|
||||
clr r3 ; default unit is 0
|
||||
jsr pc,getchr ; get unit number or <CR>
|
||||
call getchr ; get unit number or <CR>
|
||||
cmp #CR,r0 ; is <CR> ?
|
||||
beq fnddev ; if eq yes, done
|
||||
mov r0,r3
|
||||
@@ -60,8 +61,8 @@ getnam: jsr pc,getlet ; get 1st char
|
||||
blt errpro ; below 0, error quit
|
||||
cmp r3,#7 ; check 0-7 range
|
||||
bgt errpro ; above 7, error quit
|
||||
jsr pc,prtchr ; echo character
|
||||
jsr pc,getchr ; get <CR>
|
||||
call prtchr ; echo character
|
||||
call getchr ; get <CR>
|
||||
cmp #CR,r0 ; is <CR> ?
|
||||
bne errpro
|
||||
;
|
||||
@@ -80,7 +81,7 @@ fnddev: mov #devtbl,r4
|
||||
2$: cmp r3,(r4)+ ; is unit number in range ?
|
||||
bgt errpro ; if gt not, error quit
|
||||
mov #strnl,r1 ; print <CR><LF>
|
||||
jsr pc,prtstr
|
||||
call prtstr
|
||||
mov r3,r0 ; get unit to r0
|
||||
jmp @(r4)+ ; and execute boot code
|
||||
|
||||
@@ -91,7 +92,7 @@ errpro: mov #strerr,r1 ; point to error string
|
||||
; getlet: read drive name letter ---------------------------
|
||||
; out r0 character (only A-Z, other error quit)
|
||||
;
|
||||
getlet: jsr pc,getchr
|
||||
getlet: call getchr
|
||||
cmp r0,#'Z ; above Z ?
|
||||
ble 1$ ; if le not
|
||||
sub #<'a-'A>,r0 ; otherwise convert to upper
|
||||
@@ -99,8 +100,8 @@ getlet: jsr pc,getchr
|
||||
blt 2$ ; if lt yes, error quit
|
||||
cmp r0,#'Z ; above Z ?
|
||||
bgt 2$ ; if gt yes, error quit
|
||||
jsr pc,prtchr ; echo character
|
||||
rts pc
|
||||
call prtchr ; echo character
|
||||
return
|
||||
2$: tst (sp)+ ; drop return address
|
||||
br errpro ; error quit
|
||||
;
|
||||
@@ -110,7 +111,7 @@ getlet: jsr pc,getchr
|
||||
getchr: tstb @#ti.csr ; wait ti ready
|
||||
bpl getchr
|
||||
mov @#ti.buf,r0 ; and read character
|
||||
rts pc
|
||||
return
|
||||
;
|
||||
; prtstr: print string routine -----------------------------
|
||||
; in r1 pointer to zero terminated string
|
||||
@@ -118,7 +119,7 @@ getchr: tstb @#ti.csr ; wait ti ready
|
||||
;
|
||||
prtstr: movb (r1)+,r0 ; get next char
|
||||
beq prtrts ; if eq return
|
||||
jsr pc,prtchr ; else print char
|
||||
call prtchr ; else print char
|
||||
br prtstr ; and go for next
|
||||
;
|
||||
; prtchr: print character routine --------------------------
|
||||
@@ -127,7 +128,7 @@ prtstr: movb (r1)+,r0 ; get next char
|
||||
prtchr: tstb @#to.csr ; wait to ready
|
||||
bpl prtchr
|
||||
movb r0,@#to.buf ; and print
|
||||
prtrts: rts pc
|
||||
prtrts: return
|
||||
;
|
||||
; rstoff: reset/restart after unit offline detected --------
|
||||
;
|
||||
@@ -304,22 +305,22 @@ bootpc: mov #pr.csr,r5
|
||||
jmp rstoff ; otherwise quit offline
|
||||
;
|
||||
pcrec: clr r2 ; clear checksum
|
||||
1$: jsr pc,pcbyte ; read 000 prefix or 001
|
||||
1$: call pcbyte ; read 000 prefix or 001
|
||||
tstb r0 ; is zero ?
|
||||
beq 1$ ; if eq yes, keep trying
|
||||
dec r0 ; decrement to test for 001
|
||||
bne pcerr1 ; if ne, quit
|
||||
jsr pc,pcbyte ; read 000 after 001
|
||||
call pcbyte ; read 000 after 001
|
||||
tstb r0 ; is zero ?
|
||||
bne pcerr1 ; if ne fail
|
||||
jsr pc,pcword ; read count
|
||||
call pcword ; read count
|
||||
mov r1,r4 ; store count
|
||||
jsr pc,pcword ; read addr
|
||||
call pcword ; read addr
|
||||
mov r1,r3 ; store addr
|
||||
sub #6,r4 ; subtract 6 from count
|
||||
blt pcerr2 ; if <6 fail
|
||||
bgt pcdata ; if >6 read data
|
||||
jsr pc,pcbyte ; read checksum
|
||||
call pcbyte ; read checksum
|
||||
tstb r2 ; test checksum
|
||||
bne pcerr3 ; if ne bad, fail
|
||||
bit #1,r3 ; address odd ?
|
||||
@@ -332,20 +333,20 @@ pcerr2: halt ; halt: bad count
|
||||
pcerr3: halt ; halt: bad checksum
|
||||
pcerr4: halt ; halt: error bit set
|
||||
;
|
||||
pcdata: jsr pc,pcbyte ; read byte
|
||||
pcdata: call pcbyte ; read byte
|
||||
movb r0,(r3)+ ; store byte
|
||||
sob r4,pcdata ; dec count and loop if >0
|
||||
jsr pc,pcbyte ; get checksum
|
||||
call pcbyte ; get checksum
|
||||
tstb r2 ; test checksum
|
||||
bne pcerr3 ; if ne bad, fail
|
||||
br pcrec ; otherwise next record
|
||||
|
||||
pcword: jsr pc,pcbyte ; read low byte
|
||||
pcword: call pcbyte ; read low byte
|
||||
mov r0,r1 ; low byte to r1
|
||||
jsr pc,pcbyte ; read high byte
|
||||
call pcbyte ; read high byte
|
||||
swab r0
|
||||
bis r0,r1 ; high byte to r1
|
||||
rts pc
|
||||
return
|
||||
|
||||
pcbyte: inc (r5) ; set enable
|
||||
1$: tst (r5) ; error set ?
|
||||
@@ -354,6 +355,6 @@ pcbyte: inc (r5) ; set enable
|
||||
bpl 1$ ; if pl not yet
|
||||
mov 2(r5),r0 ; read byte
|
||||
add r0,r2 ; accumulate checksum
|
||||
rts pc
|
||||
return
|
||||
;
|
||||
.end start
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
; $Id: pc11copy.mac 1174 2019-06-29 18:00:47Z mueller $
|
||||
; $Id: pc11copy.mac 1277 2022-08-12 15:00:20Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2019- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
; Copyright 2019-2022 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; Revision History:
|
||||
; Date Rev Version Comment
|
||||
; 2022-08-10 1276 1.2 kw11-p: use 100 kHz/13.; ensure last puncher irupt
|
||||
; 2019-04-25 1138 1.1 add kw11-l/p stress
|
||||
; 2019-04-21 1134 1.0 Initial version
|
||||
;
|
||||
; copy input to output tape
|
||||
; Copy input to output tape
|
||||
; Interrupt stress test with KW11-P (four interrupt sources in parallel)
|
||||
;
|
||||
; definitions ----------------------------------------------
|
||||
;
|
||||
@@ -17,7 +19,7 @@
|
||||
.include |lib/defs_pc.mac|
|
||||
|
||||
bsize = 256. ; elasticity ring buffer size
|
||||
kpwait = 997. ; kp wait (in cycles, intentionally prime)
|
||||
kpwait = 17. ; kp wait (in 100kHz, intentionally prime)
|
||||
cbsize = 250. ; kp-per-kl trace buffer size (for last 5 sec)
|
||||
;
|
||||
; vector area ----------------------------------------------
|
||||
@@ -85,7 +87,7 @@ start1: mov #stack,sp ; setup stack
|
||||
spl 7
|
||||
mov #kl.ie,@#kl.csr ; start kw11-l
|
||||
mov #kpwait,@#kp.csb ; load kw11-p counter
|
||||
mov #<kp.ie!kp.rep!kp.rex!kp.run>,@#kp.csr ; kw11-p: ext down repeat
|
||||
mov #<kp.ie!kp.rep!kp.rhk!kp.run>,@#kp.csr ; kw11-p: 100k down repeat
|
||||
mov #<pr.ie!pr.ena>,@#pr.csr ; start reader
|
||||
spl 0 ; allow interrupts
|
||||
3$: wait ; and idle
|
||||
@@ -119,7 +121,15 @@ vh.ptr: tst @#pr.csr ; at eof ?
|
||||
200$: bic #pr.ie,@#pr.csr ; stop reader
|
||||
rti
|
||||
|
||||
300$: jmp stop
|
||||
; eof detected. ensure program halts after the final puncher interupt is taken
|
||||
; do a wait loop while puncher active, puncher will end program (Simh compat)
|
||||
300$: cmp (sp)+,(sp)+ ; drop vector
|
||||
spl 0 ; allow interrupts
|
||||
310$: bit #pp.ie,@#pp.csr ; puncher still active ?
|
||||
beq 320$ ; if not stop
|
||||
wait ; if yes wait
|
||||
br 310$
|
||||
320$: jmp stop
|
||||
|
||||
rerr: halt ; reader error halt
|
||||
br rerr
|
||||
@@ -128,6 +138,8 @@ rerr: halt ; reader error halt
|
||||
;
|
||||
vh.ptp: tst @#pp.csr ; punch error
|
||||
bmi perr ; if mi yes, error halt
|
||||
tstb r3 ; eof seen ?
|
||||
bne 200$ ; if yes, all done
|
||||
tstb @#pp.csr ; ready ?
|
||||
bpl perr ; if pl no, error halt
|
||||
tst r2 ; test buffer count
|
||||
@@ -143,11 +155,12 @@ vh.ptp: tst @#pp.csr ; punch error
|
||||
mov #<pr.ie!pr.ena>,@#pr.csr ; if not, start reader
|
||||
2$: rti
|
||||
|
||||
100$: bic #pp.ie,@#pp.csr ; stop punch
|
||||
tstb r3 ; eof seen ?
|
||||
bne 200$ ; if yes, all done
|
||||
rti
|
||||
|
||||
; eof detected. ensure that final puncher interrupt is taken (Simh compat)
|
||||
100$: tstb r3 ; eof seen ?
|
||||
bne 110$ ; if yes, go for final interrupt
|
||||
bic #pp.ie,@#pp.csr ; otherwise stop punch
|
||||
110$: rti
|
||||
|
||||
200$: jmp stop
|
||||
|
||||
perr: halt ; puncher error halt
|
||||
|
||||
15
tools/mcode/pc11/pc11copy.scmd
Normal file
15
tools/mcode/pc11/pc11copy.scmd
Normal file
@@ -0,0 +1,15 @@
|
||||
; $Id: pc11copy.scmd 1275 2022-08-10 08:10:40Z mueller $
|
||||
;
|
||||
; Setup file for pc11copy
|
||||
;
|
||||
! make pc11copy.lda
|
||||
;
|
||||
do ../../simh/setup_w11a_mcode.scmd
|
||||
;
|
||||
; attach PC11, ensure new file written
|
||||
! rm -f simh_pc11copy.dat
|
||||
att ptr simh_pc11write.dat
|
||||
att ptp simh_pc11copy.dat
|
||||
;
|
||||
load pc11copy.lda
|
||||
cont
|
||||
@@ -1,9 +1,10 @@
|
||||
; $Id: pc11read.mac 1174 2019-06-29 18:00:47Z mueller $
|
||||
; $Id: pc11read.mac 1275 2022-08-10 08:10:40Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2019- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
; Copyright 2019-2022 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; Revision History:
|
||||
; Date Rev Version Comment
|
||||
; 2022-08-09 1275 1.0.1 use call/return
|
||||
; 2019-04-21 1134 1.0 Initial version
|
||||
;
|
||||
; write test tape
|
||||
@@ -79,7 +80,7 @@ vh.ptr: tst @#pr.csr ; reader error
|
||||
cmp r1,#bend ; end of buffer ?
|
||||
blo 100$
|
||||
mov #bnum+3,r1 ; if yes, increment number
|
||||
jsr pc,incnum
|
||||
call incnum
|
||||
inc r0 ; inc line counter
|
||||
mov #bnum,r1 ; ready for next line
|
||||
100$: inc @#pr.csr ; go for next char
|
||||
@@ -103,7 +104,7 @@ incnum: mov #4,r5 ; max 4 digits
|
||||
movb #'0,(r1) ; if yes, restore 0
|
||||
dec r1 ; and go for next digit
|
||||
sob r5,1$
|
||||
100$: rts pc
|
||||
100$: return
|
||||
;
|
||||
; data area ------------------------------------------------
|
||||
;
|
||||
|
||||
14
tools/mcode/pc11/pc11read.scmd
Normal file
14
tools/mcode/pc11/pc11read.scmd
Normal file
@@ -0,0 +1,14 @@
|
||||
; $Id: pc11read.scmd 1275 2022-08-10 08:10:40Z mueller $
|
||||
;
|
||||
; Setup file for pc11read
|
||||
;
|
||||
! make pc11read.lda
|
||||
;
|
||||
do ../../simh/setup_w11a_mcode.scmd
|
||||
;
|
||||
; attach PC11
|
||||
att ptr simh_pc11write.dat
|
||||
det ptp
|
||||
;
|
||||
load pc11read.lda
|
||||
cont
|
||||
@@ -1,9 +1,11 @@
|
||||
; $Id: pc11write.mac 1174 2019-06-29 18:00:47Z mueller $
|
||||
; $Id: pc11write.mac 1276 2022-08-12 10:25:13Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2019- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
; Copyright 2019-2022 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; Revision History:
|
||||
; Date Rev Version Comment
|
||||
; 2022-08-10 1276 1.0.2 check line count after last char is accepted
|
||||
; 2022-08-09 1275 1.0.1 use call/return
|
||||
; 2019-04-21 1134 1.0 Initial version
|
||||
;
|
||||
; write test tape
|
||||
@@ -65,17 +67,18 @@ start1: mov #stack,sp ; setup stack
|
||||
br 3$
|
||||
;
|
||||
; puncher interrupt handler -----------------------
|
||||
; the line count stop is checked after the last char is accepted by PC11
|
||||
;
|
||||
vh.ptp: tst @#pp.csr ; punch error
|
||||
bmi perr ; if mi yes, error halt
|
||||
cmp r0,#lcnt ; enough lines send ?
|
||||
beq 200$
|
||||
movb (r1)+,@#pp.buf ; send byte
|
||||
cmp r1,#bend ; end of buffer ?
|
||||
blo 100$
|
||||
mov #bnum+3,r1 ; if yes, increment number
|
||||
jsr pc,incnum
|
||||
call incnum
|
||||
inc r0 ; inc line counter
|
||||
cmp r0,#lcnt ; enough lines send ?
|
||||
beq 200$
|
||||
mov #bnum,r1 ; ready for next line
|
||||
100$: rti
|
||||
|
||||
@@ -93,7 +96,7 @@ incnum: mov #4,r5 ; max 4 digits
|
||||
movb #'0,(r1) ; if yes, restore 0
|
||||
dec r1 ; and go for next digit
|
||||
sob r5,1$
|
||||
100$: rts pc
|
||||
100$: return
|
||||
;
|
||||
; data area ------------------------------------------------
|
||||
;
|
||||
|
||||
15
tools/mcode/pc11/pc11write.scmd
Normal file
15
tools/mcode/pc11/pc11write.scmd
Normal file
@@ -0,0 +1,15 @@
|
||||
; $Id: pc11write.scmd 1275 2022-08-10 08:10:40Z mueller $
|
||||
;
|
||||
; Setup file for pc11write
|
||||
;
|
||||
! make pc11write.lda
|
||||
;
|
||||
do ../../simh/setup_w11a_mcode.scmd
|
||||
;
|
||||
; attach PC11, ensure fresh file
|
||||
! rm -f simh_pc11write.dat
|
||||
det ptr
|
||||
att ptp simh_pc11write.dat
|
||||
;
|
||||
load pc11write.lda
|
||||
cont
|
||||
@@ -1,9 +1,10 @@
|
||||
; $Id: blink.mac 1237 2022-05-15 07:51:47Z mueller $
|
||||
; $Id: blink.mac 1275 2022-08-10 08:10:40Z mueller $
|
||||
; SPDX-License-Identifier: GPL-3.0-or-later
|
||||
; Copyright 2019-2022 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
|
||||
;
|
||||
; Revision History:
|
||||
; Date Rev Version Comment
|
||||
; 2022-08-09 1275 1.0.1 use call/return
|
||||
; 2019-04-22 1135 1.0 Initial version
|
||||
;
|
||||
; Show different 'blinking lights' patterns
|
||||
@@ -54,7 +55,7 @@ stack:
|
||||
; main program -----------------------------------
|
||||
;
|
||||
start: mov #stack,sp ; setup stack
|
||||
jsr pc,inir ; setup 'f' mode
|
||||
call inir ; setup 'f' mode
|
||||
spl 7
|
||||
mov #ti.ie,@#ti.csr ; activate input
|
||||
mov #kl.ie,@#kl.csr
|
||||
@@ -66,7 +67,7 @@ nultsk: mov curspd,r5 ; load speed
|
||||
1$: mov pat,r0 ; load pattern
|
||||
wait ; and proudly show it
|
||||
sob r5,1$ ; wait for interrupt
|
||||
jsr pc,@curhdl ; update pattern
|
||||
call @curhdl ; update pattern
|
||||
;
|
||||
tst smode ; static mode ?
|
||||
beq nultsk ; if eq yes, no action
|
||||
@@ -83,18 +84,18 @@ nultsk: mov curspd,r5 ; load speed
|
||||
clr r0
|
||||
2$: mov r0,cursty
|
||||
asl r0 ; index to offset
|
||||
jsr pc,@initbl(r0) ; call initializer
|
||||
call @initbl(r0) ; call initializer
|
||||
br nultsk
|
||||
;
|
||||
100$: cmp smode,#smrand ; random mode ?
|
||||
bne nultsk
|
||||
jsr pc,randzp ; get random number
|
||||
call randzp ; get random number
|
||||
mov r0,r1
|
||||
clr r0
|
||||
div #nstyle,r0 ; calculate: rand % nstyle
|
||||
mov r1,cursty ; reminder is new style index
|
||||
asl r1 ; index to offset
|
||||
jsr pc,@initbl(r1) ; call initializer
|
||||
call @initbl(r1) ; call initializer
|
||||
br nultsk
|
||||
;
|
||||
; receive interrupt handler ----------------------
|
||||
@@ -115,8 +116,8 @@ vh.tti: mov @#ti.buf,r0 ; read char
|
||||
beq 102$
|
||||
cmp (r1)+,(r1)+ ; if not, try next
|
||||
br 101$
|
||||
102$: jsr pc,@(r1)+ ; if yes: call action
|
||||
jsr pc,@(r1)+ ; call initializer
|
||||
102$: call @(r1)+ ; if yes: call action
|
||||
call @(r1)+ ; call initializer
|
||||
|
||||
999$: rti
|
||||
;
|
||||
@@ -130,13 +131,13 @@ vh.kwl: inc styage
|
||||
; style switch
|
||||
;
|
||||
actsty: clr smode ; use static styles
|
||||
actnop: rts pc
|
||||
actnop: return
|
||||
;
|
||||
acta: mov #smauto,smode
|
||||
br actem
|
||||
acts: mov #smrand,smode
|
||||
actem: mov #smtime,styage ; expire timer
|
||||
rts pc
|
||||
return
|
||||
;
|
||||
; other control actions
|
||||
;
|
||||
@@ -146,26 +147,26 @@ actem: mov #smtime,styage ; expire timer
|
||||
inir: mov #170017,pat
|
||||
mov #4,defspd
|
||||
mov #hdlr,curhdl
|
||||
rts pc
|
||||
return
|
||||
;
|
||||
inib: mov #000377,pat
|
||||
mov #2,defspd
|
||||
mov #hdlb,curhdl
|
||||
rts pc
|
||||
return
|
||||
;
|
||||
inif: mov #000001,pat
|
||||
mov #2,defspd
|
||||
mov #hdlf,curhdl
|
||||
rts pc
|
||||
return
|
||||
;
|
||||
inic: clr pat
|
||||
mov #1,defspd
|
||||
mov #hdlc,curhdl
|
||||
rts pc
|
||||
return
|
||||
;
|
||||
inirr: mov #hdlrr,curhdl
|
||||
mov #6,defspd
|
||||
ininop: rts pc
|
||||
ininop: return
|
||||
;
|
||||
;
|
||||
; display pattern handlers -----------------------
|
||||
@@ -178,7 +179,7 @@ hdlr: mov #pat,r1
|
||||
aslb (r1)+
|
||||
rorb (r1)
|
||||
adcb -(r1)
|
||||
rts pc
|
||||
return
|
||||
;
|
||||
; 2.11BSD style ------------------------
|
||||
; code from 2.11BSD mch_xxx.s
|
||||
@@ -188,7 +189,7 @@ hdlb: clc
|
||||
rol pat
|
||||
bpl 1$
|
||||
bis #1,pat
|
||||
1$: rts pc
|
||||
1$: return
|
||||
;
|
||||
; flipper style ------------------------
|
||||
;
|
||||
@@ -208,16 +209,16 @@ hdlf: mov #pat,r0
|
||||
rol (r0) ; and shift
|
||||
|
||||
20$: neg fdir ; and switch direction
|
||||
100$: rts pc
|
||||
100$: return
|
||||
;
|
||||
; counter style ------------------------
|
||||
;
|
||||
hdlc: inc pat
|
||||
rts pc
|
||||
return
|
||||
;
|
||||
; random pattern style -----------------
|
||||
;
|
||||
hdlrr: jsr pc,randzp
|
||||
hdlrr: call randzp
|
||||
mov r0,pat
|
||||
rts pc
|
||||
;
|
||||
|
||||
Reference in New Issue
Block a user