From 13a72d1b4bb85b43ec63230edd5befd074a9b3e2 Mon Sep 17 00:00:00 2001 From: wfjm Date: Sat, 13 Aug 2022 07:45:28 +0200 Subject: [PATCH] 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 --- doc/CHANGELOG.md | 2 + tools/mcode/.gitignore | 6 ++ tools/mcode/dl11/dl11echo.mac | 41 +++++---- tools/mcode/dl11/dl11echo.scmd | 13 +++ tools/mcode/dz11/dz11echo.mac | 152 ++++++++++++++++--------------- tools/mcode/dz11/dz11echo.scmd | 13 +++ tools/mcode/lp11/lp11write.mac | 15 +-- tools/mcode/lp11/lp11write.scmd | 14 +++ tools/mcode/m9312/bootw11.mac | 51 ++++++----- tools/mcode/pc11/pc11copy.mac | 35 ++++--- tools/mcode/pc11/pc11copy.scmd | 15 +++ tools/mcode/pc11/pc11read.mac | 9 +- tools/mcode/pc11/pc11read.scmd | 14 +++ tools/mcode/pc11/pc11write.mac | 15 +-- tools/mcode/pc11/pc11write.scmd | 15 +++ tools/mcode/sys/blink.mac | 41 +++++---- tools/simh/setup_w11a_max.scmd | 7 +- tools/simh/setup_w11a_mcode.scmd | 76 ++++++++++++++++ tools/simh/setup_w11a_min.scmd | 4 +- 19 files changed, 370 insertions(+), 168 deletions(-) create mode 100644 tools/mcode/dl11/dl11echo.scmd create mode 100644 tools/mcode/dz11/dz11echo.scmd create mode 100644 tools/mcode/lp11/lp11write.scmd create mode 100644 tools/mcode/pc11/pc11copy.scmd create mode 100644 tools/mcode/pc11/pc11read.scmd create mode 100644 tools/mcode/pc11/pc11write.scmd create mode 100644 tools/simh/setup_w11a_mcode.scmd diff --git a/doc/CHANGELOG.md b/doc/CHANGELOG.md index 6fb668af..0f4b4762 100644 --- a/doc/CHANGELOG.md +++ b/doc/CHANGELOG.md @@ -68,6 +68,8 @@ The full set of tests is only run for tagged releases. - rtl/sys_gen/tst_rlink_cuff/atlys/sys_tst_rlink_cuff_atlys - rtl/sys_gen/tst_snhumanio/atlys/sys_tst_snhumanio_atlys ### Bug Fixes + - tools/asm-11/lib + - tcode_std_start.mac: fix sdreg probe code - tools/mcode - m9312/bootw11.mac: proper init of unit number in getnam - src/librwxxtpp diff --git a/tools/mcode/.gitignore b/tools/mcode/.gitignore index a75dedfa..3296df07 100644 --- a/tools/mcode/.gitignore +++ b/tools/mcode/.gitignore @@ -1,5 +1,11 @@ *.cof *.lda *.lst + +# simulation stuff rlink_cext_* sysmon_stim +tmu_ofile + +# Simh stuff +simh_*.dat diff --git a/tools/mcode/dl11/dl11echo.mac b/tools/mcode/dl11/dl11echo.mac index 47e9f5d5..b31ee85d 100644 --- a/tools/mcode/dl11/dl11echo.mac +++ b/tools/mcode/dl11/dl11echo.mac @@ -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 +; Copyright 2019-2022 by Walter F.J. Mueller ; ; 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 diff --git a/tools/mcode/dl11/dl11echo.scmd b/tools/mcode/dl11/dl11echo.scmd new file mode 100644 index 00000000..ee660480 --- /dev/null +++ b/tools/mcode/dl11/dl11echo.scmd @@ -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 diff --git a/tools/mcode/dz11/dz11echo.mac b/tools/mcode/dz11/dz11echo.mac index e877069f..a9caad07 100644 --- a/tools/mcode/dz11/dz11echo.mac +++ b/tools/mcode/dz11/dz11echo.mac @@ -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 +; Copyright 2019-2022 by Walter F.J. Mueller ; ; 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.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 /?/ +msgsta: .asciz /dz11echo DZ11 tester. For help type '?'/ msghlp: .ascii /dz11echo console commands:/ .ascii / ? help text/ .ascii / c char: only rie/ @@ -718,6 +723,11 @@ msghlp: .ascii /dz11echo console commands:/ .ascii / u unbreak: set brk=1/ .ascii / g generate test output on line/ .ascii / q quit generating test output/ + .ascii /DZ line commands:/ + .ascii / ESC + ESC + u -> uppercase/ + .ascii / ESC + ESC + l -> lowercase/ + .ascii / ESC + ESC + o -> octal echo (16 per line)/ + .ascii / ESC + ESC + a -> direct echo/ .byte 0 ; msginf: .asciz /line co rin dtr brk mode/ diff --git a/tools/mcode/dz11/dz11echo.scmd b/tools/mcode/dz11/dz11echo.scmd new file mode 100644 index 00000000..e5c56689 --- /dev/null +++ b/tools/mcode/dz11/dz11echo.scmd @@ -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 diff --git a/tools/mcode/lp11/lp11write.mac b/tools/mcode/lp11/lp11write.mac index d56a5c03..fd7ab3ea 100644 --- a/tools/mcode/lp11/lp11write.mac +++ b/tools/mcode/lp11/lp11write.mac @@ -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 +; Copyright 2019-2022 by Walter F.J. Mueller ; ; 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 ------------------------------------------------ ; diff --git a/tools/mcode/lp11/lp11write.scmd b/tools/mcode/lp11/lp11write.scmd new file mode 100644 index 00000000..ef518f9d --- /dev/null +++ b/tools/mcode/lp11/lp11write.scmd @@ -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 diff --git a/tools/mcode/m9312/bootw11.mac b/tools/mcode/m9312/bootw11.mac index 1722d443..4f83bf92 100644 --- a/tools/mcode/m9312/bootw11.mac +++ b/tools/mcode/m9312/bootw11.mac @@ -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 ; ; 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 + call getchr ; get unit number or cmp #CR,r0 ; is ? 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 + call prtchr ; echo character + call getchr ; get cmp #CR,r0 ; is ? 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 - 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 diff --git a/tools/mcode/pc11/pc11copy.mac b/tools/mcode/pc11/pc11copy.mac index 4c0e2acb..6a9240ed 100644 --- a/tools/mcode/pc11/pc11copy.mac +++ b/tools/mcode/pc11/pc11copy.mac @@ -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 +; Copyright 2019-2022 by Walter F.J. Mueller ; ; 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.csr ; kw11-p: ext down repeat + mov #,@#kp.csr ; kw11-p: 100k down repeat mov #,@#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.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 diff --git a/tools/mcode/pc11/pc11copy.scmd b/tools/mcode/pc11/pc11copy.scmd new file mode 100644 index 00000000..758667f0 --- /dev/null +++ b/tools/mcode/pc11/pc11copy.scmd @@ -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 diff --git a/tools/mcode/pc11/pc11read.mac b/tools/mcode/pc11/pc11read.mac index eff0af27..eb5bf4bd 100644 --- a/tools/mcode/pc11/pc11read.mac +++ b/tools/mcode/pc11/pc11read.mac @@ -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 +; Copyright 2019-2022 by Walter F.J. Mueller ; ; 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 ------------------------------------------------ ; diff --git a/tools/mcode/pc11/pc11read.scmd b/tools/mcode/pc11/pc11read.scmd new file mode 100644 index 00000000..ee800cc9 --- /dev/null +++ b/tools/mcode/pc11/pc11read.scmd @@ -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 diff --git a/tools/mcode/pc11/pc11write.mac b/tools/mcode/pc11/pc11write.mac index dee3338f..88923c08 100644 --- a/tools/mcode/pc11/pc11write.mac +++ b/tools/mcode/pc11/pc11write.mac @@ -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 +; Copyright 2019-2022 by Walter F.J. Mueller ; ; 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 ------------------------------------------------ ; diff --git a/tools/mcode/pc11/pc11write.scmd b/tools/mcode/pc11/pc11write.scmd new file mode 100644 index 00000000..a171b02d --- /dev/null +++ b/tools/mcode/pc11/pc11write.scmd @@ -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 diff --git a/tools/mcode/sys/blink.mac b/tools/mcode/sys/blink.mac index 5fc7850d..a62c8856 100644 --- a/tools/mcode/sys/blink.mac +++ b/tools/mcode/sys/blink.mac @@ -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 ; ; 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 ; diff --git a/tools/simh/setup_w11a_max.scmd b/tools/simh/setup_w11a_max.scmd index 43a0beb0..c641a51e 100644 --- a/tools/simh/setup_w11a_max.scmd +++ b/tools/simh/setup_w11a_max.scmd @@ -1,4 +1,4 @@ -; $Id: setup_w11a_max.scmd 1256 2022-07-15 09:14:14Z mueller $ +; $Id: setup_w11a_max.scmd 1275 2022-08-10 08:10:40Z mueller $ ; SPDX-License-Identifier: GPL-3.0-or-later ; Copyright 2008-2022 by Walter F.J. Mueller ; @@ -8,8 +8,8 @@ ; --> 4 MByte, 2 DL11, DZ+LP+PC, RK05+RL02+RP06+TM11, DEUNA ; ; 11/70 CPU no FPP, 4 MByte memory -; 1 KL11-L 177546/100/BR6 -; 1 KL11-P 172540/104/BR6 +; 1 KW11-L 177546/100/BR6 +; 1 KW11-P 172540/104/BR6 ; 2 DL11 177560/060/BR4 (cons) ; 176500/300/BR4 * (2nd) ; 1 DZ11 160100/310/BR5 * @@ -37,6 +37,7 @@ set cpu idle ; clock options ; set clk 50hz +set pclk enabled set pclk 50hz ; ; setup pdp11 console via telnet (default is mixed with simh console) diff --git a/tools/simh/setup_w11a_mcode.scmd b/tools/simh/setup_w11a_mcode.scmd new file mode 100644 index 00000000..97f10b93 --- /dev/null +++ b/tools/simh/setup_w11a_mcode.scmd @@ -0,0 +1,76 @@ +; $Id: setup_w11a_mcode.scmd 1276 2022-08-12 10:25:13Z mueller $ +; SPDX-License-Identifier: GPL-3.0-or-later +; Copyright 2022- by Walter F.J. Mueller +; +; Setup file for absolut minimal w11a configuration under simh 3.8 and above +; Use for mcodes and other applications. Defines 2 DL11, DZ, KW11-L and KW11-P. +; No telnet or other attachments, no log files +; +; 11/70 CPU no FPP, 4 MByte memory +; 1 KW11-L 177546/100/BR6 +; 1 KW11-P 172540/104/BR6 +; 2 DL11 177560/060/BR4 (cons) +; 176500/300/BR4 * (2nd) +; 1 DZ11 160100/310/BR5 * +; 1 LP11 177514/200/BR4 +; 1 PC11 177550/070/BR4 +; +; Revision History: +; Date Rev Version Comment +; 2022-08-10 1275 1.0 Initial version (derived from setup_w11a_max.scmd) +; +; processor options +; +set cpu 11/70 +set cpu nofpp +set cpu 4m +set cpu oct +set cpu idle +set cpu hist=1000 +; +; clock options +; +set clk 50hz +set pclk enabled +set pclk 50hz +; +; setup pdp11 console +; +dep tti time 50000 +set tto 7b +; +; 2nd DL11 interface options +; Note: default for DLO's is UC ! -> set to 7bit (for some MAINDEC's) +; +set dli enabled +set dli lines=1 +set dlo0 7b +; +set dz enabled +set dz lines=8 +; +; line printer +; +set lpt enabled +; +; paper tape read/punch +; +set ptr enabled +set ptp enabled +; +; DISABLE all else +; +set rk disabled +set rl disabled +set rp disabled +set tm disabled +set xu disabled +; +set cr disabled +set hk disabled +set rx disabled +set rq disabled +set tq disabled +; +;sho conf +; diff --git a/tools/simh/setup_w11a_min.scmd b/tools/simh/setup_w11a_min.scmd index 9744eed5..b1db7b44 100644 --- a/tools/simh/setup_w11a_min.scmd +++ b/tools/simh/setup_w11a_min.scmd @@ -1,4 +1,4 @@ -; $Id: setup_w11a_min.scmd 1256 2022-07-15 09:14:14Z mueller $ +; $Id: setup_w11a_min.scmd 1275 2022-08-10 08:10:40Z mueller $ ; SPDX-License-Identifier: GPL-3.0-or-later ; Copyright 2009-2022 by Walter F.J. Mueller ; @@ -11,7 +11,7 @@ ; These assignments match the real w11a implementation ; ; 11/70 CPU no FPP, 1 MByte memory -; 1 KL11-L 177546/100/BR6 +; 1 KW11-L 177546/100/BR6 ; 2 DL11 177560/060/BR4 (cons) ; 176500/300/BR4 * (2nd) ; 0 DZ11 -