From 08b6ddcaf78280f317dd83fc57be71e23bd7055c Mon Sep 17 00:00:00 2001 From: wfjm Date: Tue, 23 Apr 2019 18:43:43 +0200 Subject: [PATCH] new tools/mcode area - for test and demonstration, starting with - dl11/dl11echo.mac: console interface echo tester - sys/blink.mac: 'blinking lights' demo (rsx,bsd and other modes) - retire tools/asm-11/w11 area --- doc/CHANGELOG.md | 3 + tools/README.md | 1 + tools/asm-11/w11/sys/dl11/.gitignore | 3 - tools/asm-11/w11/sys/dl11/Makefile | 30 --- tools/asm-11/w11/sys/dl11/noboot.mac | 31 --- tools/asm-11/w11/sys/dl11/simple_echo.mac | 38 ---- tools/asm-11/w11/sys/dl11/simple_out.mac | 34 --- tools/mcode/README.md | 6 + tools/mcode/dl11/README.md | 5 + tools/mcode/dl11/dl11echo.mac | 235 ++++++++++++++++++++ tools/mcode/sys/README.md | 5 + tools/mcode/sys/blink.mac | 258 ++++++++++++++++++++++ 12 files changed, 513 insertions(+), 136 deletions(-) delete mode 100644 tools/asm-11/w11/sys/dl11/.gitignore delete mode 100644 tools/asm-11/w11/sys/dl11/Makefile delete mode 100644 tools/asm-11/w11/sys/dl11/noboot.mac delete mode 100644 tools/asm-11/w11/sys/dl11/simple_echo.mac delete mode 100644 tools/asm-11/w11/sys/dl11/simple_out.mac create mode 100644 tools/mcode/README.md create mode 100644 tools/mcode/dl11/README.md create mode 100644 tools/mcode/dl11/dl11echo.mac create mode 100644 tools/mcode/sys/README.md create mode 100644 tools/mcode/sys/blink.mac diff --git a/doc/CHANGELOG.md b/doc/CHANGELOG.md index 9543b790..0f6076ad 100644 --- a/doc/CHANGELOG.md +++ b/doc/CHANGELOG.md @@ -35,6 +35,9 @@ The full set of tests is only run for tagged releases. - w11a_ibmon/*: tbench for ibd_ibmon - w11a/test_w11a_sdreg.tcl: tbench for sdreg - test_lp11_all.tcl: tbench for lp11 and lp11_buf +- new test and demonstration codes under tools/mcode + - dl11/dl11echo.mac: console interface echo tester + - sys/blink.mac: 'blinking lights' demo (rsx,bsd and other modes) - new tools - ldadump: lda file dumper diff --git a/tools/README.md b/tools/README.md index 6eb33925..b1c78ae8 100644 --- a/tools/README.md +++ b/tools/README.md @@ -9,6 +9,7 @@ This directory tree contains **many tools** and is organized in | [fx2](fx2) | firmware for Cypress FX2 USB interface | | [make](make) | make includes | | [man](man) | man pages | +| [mcode](mcode) | miscellaneous codes | | [oskit](oskit) | support files for OS disk/tape image kits | | [simh](simh) | configuration files for `simh pdp11` | | [src](src) | C++ sources for rlink backend | diff --git a/tools/asm-11/w11/sys/dl11/.gitignore b/tools/asm-11/w11/sys/dl11/.gitignore deleted file mode 100644 index 35c294cc..00000000 --- a/tools/asm-11/w11/sys/dl11/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -*.lda -*.ldart -*.lstrt diff --git a/tools/asm-11/w11/sys/dl11/Makefile b/tools/asm-11/w11/sys/dl11/Makefile deleted file mode 100644 index 91437749..00000000 --- a/tools/asm-11/w11/sys/dl11/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -# $Id: Makefile 733 2016-02-20 12:24:13Z mueller $ -# -# Revision History: -# Date Rev Version Comment -# 2013-03-22 496 1.0 Initial version -#--- -# -MAC_all = $(wildcard *.mac) -LDA_all = $(MAC_all:.mac=.lda) -COF_all = $(MAC_all:.mac=.cof) -# -include ${RETROBASE}/tools/make/generic_asm11.mk -# -.PHONY : alllda allcof alllst clean -# -def : alllda -# -alllda : $(LDA_all) -# -allcof : $(COF_all) -# -alllst : $(LST_all) -# -clean : - @ rm -f $(LDA_all) - @ echo "Object files removed" - @ rm -f $(COF_all) - @ echo "Compound files removed" - @ rm -f $(LST_all) - @ echo "Listing files removed" diff --git a/tools/asm-11/w11/sys/dl11/noboot.mac b/tools/asm-11/w11/sys/dl11/noboot.mac deleted file mode 100644 index baa91bef..00000000 --- a/tools/asm-11/w11/sys/dl11/noboot.mac +++ /dev/null @@ -1,31 +0,0 @@ -; $Id: noboot.mac 521 2013-05-20 22:16:45Z mueller $ -; -; Boot blocker, when loaded and started at 0, writes -; This is not a hardware bootable disk -; - RCSR = 177560 - RBUF = 177562 - XCSR = 177564 - XBUF = 177566 -; - CR = 015 - LF = 012 -; -; starts at 0 ! -; - .asect - . = 0 -; -start: mov #text, r0 -1$: tstb (r0) - beq 3$ -2$: tstb @#XCSR - bpl 2$ - movb (r0)+,@#XBUF - br 1$ -3$: halt -; - . = 100 -text: .asciz /This is not a hardware bootable disk/ -; - .end diff --git a/tools/asm-11/w11/sys/dl11/simple_echo.mac b/tools/asm-11/w11/sys/dl11/simple_echo.mac deleted file mode 100644 index 4730dfd2..00000000 --- a/tools/asm-11/w11/sys/dl11/simple_echo.mac +++ /dev/null @@ -1,38 +0,0 @@ -; $Id: simple_echo.mac 504 2013-04-13 15:37:24Z mueller $ -; -; simple echo test for DL11 interface -; - RCSR = 177560 - RBUF = 177562 - XCSR = 177564 - XBUF = 177566 -; - CR = 015 - LF = 012 -; -; transfer vector -; - .asect - . = 200 - jmp start -; -; test code -; - . = 1000 -; -start: mov #start,sp -; -1$: tstb @#RCSR ; input ready ? - bpl 1$ ; if not poll - movb @#RBUF,r0 ; get input char -2$: tstb @#XCSR ; output ready ? - bpl 2$ ; if not poll - movb r0,@#XBUF ; echo received char - cmpb #CR,r0 ; was it CR ? - bne 1$ ; if not, wait for next input -3$: tstb @#XCSR ; output ready ? - bpl 3$ - movb #LF,@#XBUF ; send LF - br 1$ -; - .end diff --git a/tools/asm-11/w11/sys/dl11/simple_out.mac b/tools/asm-11/w11/sys/dl11/simple_out.mac deleted file mode 100644 index 61e8349d..00000000 --- a/tools/asm-11/w11/sys/dl11/simple_out.mac +++ /dev/null @@ -1,34 +0,0 @@ -; $Id: simple_out.mac 503 2013-04-06 19:44:13Z mueller $ -; -; simple output test for DL11 interface -; - RCSR = 177560 - RBUF = 177562 - XCSR = 177564 - XBUF = 177566 -; - CR = 015 - LF = 012 -; -; transfer vector -; - .asect - . = 200 - jmp start -; -; test code -; - . = 1000 -; -start: mov #start,sp - mov #hw, r0 -1$: tstb (r0) - beq start -2$: tstb @#XCSR - bpl 2$ - movb (r0)+,@#XBUF - br 1$ -; -hw: .asciz /Hello world!/ -; - .end diff --git a/tools/mcode/README.md b/tools/mcode/README.md new file mode 100644 index 00000000..6a58ef31 --- /dev/null +++ b/tools/mcode/README.md @@ -0,0 +1,6 @@ +This directory tree contains **miscellaneous codes** and is organized in + +| Directory | Content | +| --------- | ------- | +| [dl11](dl11) | for DL11 | +| [sys](sys) | for whole system | diff --git a/tools/mcode/dl11/README.md b/tools/mcode/dl11/README.md new file mode 100644 index 00000000..6c4a7328 --- /dev/null +++ b/tools/mcode/dl11/README.md @@ -0,0 +1,5 @@ +This directory tree contains **DL11 test codes** and contains + +| File | Docu | Comments | +| --------- | --------- | ------- | +| [dl11echo.mac](dl11echo.mac) | - | echo test for DL11 | diff --git a/tools/mcode/dl11/dl11echo.mac b/tools/mcode/dl11/dl11echo.mac new file mode 100644 index 00000000..7cce21a2 --- /dev/null +++ b/tools/mcode/dl11/dl11echo.mac @@ -0,0 +1,235 @@ +; $Id: dl11echo.mac 1135 2019-04-23 12:56:23Z mueller $ +; Copyright 2019- by Walter F.J. Mueller +; License disclaimer see License.txt in $RETROBASE directory +; +; Revision History: +; Date Rev Version Comment +; 2019-04-21 1134 1.0 Initial version +; +; DL11 echo +; default is direct echo, only modification is to add a LF after CR +; other mode can be selected by two ESC plus a character: +; ESC + ESC + u -> uppercase +; ESC + ESC + l -> lowercase +; ESC + ESC + o -> octal echo (16 per line) +; ESC + ESC + a -> direct echo +; +; definitions ---------------------------------------------- +; + .include |lib/defs_cpu.mac| + .include |lib/defs_kwl.mac| + .include |lib/defs_dl.mac| + + bsize = 1024. +; + CR = 015 + LF = 012 + ESC = 033 + SPC = 040 +; +; vector area ---------------------------------------------- +; + .include |lib/vec_cpucatch.mac| + .include |lib/vec_devcatch.mac| + + . = v..dlr ; DL11 rx vector + .word vh.dlr + .word cp.ars!cp.pr7 ; use alt-reg-set ! + + . = v..dlt ; DL11 tx vector + .word vh.dlt + .word cp.ars!cp.pr7 ; use alt-reg-set ! + + . = v..kwl ; KW11-L vector + .word vh.kwl + .word cp.ars!cp.pr7 ; use alt-reg-set ! +; +; stack area ----------------------------------------------- +; + . = 1000 ; stack (below); code (above) +stack: +; +; code area ------------------------------------------------ +; +; main program ----------------------------------- +; +start: mov #stack,sp ; setup stack + spl 7 + mov #ti.ie,@#ti.csr ; activate input + mov #kl.ie,@#kl.csr + spl 0 ; allow interrupts +; +; simple blinking lights null task +; RSX-11M style display, code from RSX-11M V3.1 NULTK.MAC +; +nultsk: mov #pat,r0 + aslb (r0)+ + rorb (r0) + adcb -(r0) +; + mov pat,r0 ; load pattern + wait ; and wait + mov pat,r0 + wait + mov pat,r0 + wait + mov pat,r0 + wait +; + br nultsk +; +; receive interrupt handler ---------------------- +; +vh.dlr: mov @#ti.buf,r0 ; read char + movb r0,curchr ; and remember + jsr pc,@curhdl ; call handler + jsr pc,chkesc ; check for ESC + cmp nfree,#6. ; enough buffer ? + bgt 100$ ; if <= 6 + bic #ti.ie,@#ti.csr ; disable ti irupt +100$: rti +; +; transmit interrupt handler --------------------- +; +vh.dlt: mov rptr,r1 ; load pointer + movb (r1)+,@#to.buf ; send char + cmp r1,#bufe ; ring wrap ? + blo 1$ + mov #buf,r1 +1$: mov r1,rptr ; store pointer + inc nfree + cmp nfree,#bsize ; more to do ? + bne 2$ + bic #to.ie,@#to.csr ; if not disable to irupt +2$: cmp nfree,#6. ; enough buffer ? + ble 100$ ; if > 6 + bis #ti.ie,@#ti.csr ; enable ti irupt +100$: rti +; +; kw11-l line clock handler ---------------------- +; +vh.kwl: rti +; +; ring buffer write routine ---------------------- +; in r0 current character +; use r1 +; +wchar: tst nfree ; free buffer + beq 100$ ; if not, discard ! + mov wptr,r1 ; load pointer + movb r0,(r1)+ ; store char + cmp r1,#bufe ; ring wrap ? + blo 1$ + mov #buf,r1 +1$: mov r1,wptr ; store pointer + bis #to.ie,@#to.csr ; enable to irupt + dec nfree +100$: rts pc +; +; write CR/LF ------------------------------------ +; use r0 +; +wcrlf: mov #CR,r0 + jsr pc,wchar +wlf: mov #LF,r0 + jsr pc,wchar + rts pc + +; +; escape detection ------------------------------- +; use r0 +; +chkesc: movb curchr,r0 + cmpb #ESC,r0 + bne 1$ + incb esccnt + rts pc +1$: cmpb esccnt,#2 ; 2 ESC seen ? + blt 200$ + cmpb #'u,r0 ; u -> hdluc + bne 100$ + mov #hdluc,curhdl + br 200$ +100$: cmpb #'l,r0 ; l -> hdllc + bne 110$ + mov #hdllc,curhdl + br 200$ +110$: cmpb #'a,r0 ; a -> hdldir + bne 120$ + mov #hdldir,curhdl + br 200$ +120$: cmpb #'o,r0 ; o -> hdloct + bne 200$ + mov #hdloct,curhdl + jsr pc,wcrlf ; force new line + clrb octcnt +200$: clrb esccnt + rts pc +; +; character handler ------------------------------ +; in r0 current character +; use r1,r2 +; +hdldir: jsr pc,wchar ; direct mode + cmp #CR,r0 ; CR seen + bne 100$ + jsr pc,wlf ; then add LF +100$: rts pc + +hdllc: cmp r0,#'A ; lower case mode + blt hdldir + cmp r0,#'Z + bgt hdldir + add #<'a-'A>,r0 + br hdldir + +hdluc: cmp r0,#'a ; upper case mode + blt hdldir + cmp r0,#'z + bgt hdldir + sub #<'a-'A>,r0 + br hdldir + +hdloct: mov r0,r2 ; octal mode + ash #-6.,r0 + jsr pc,woct + mov r2,r0 + ash #-3.,r0 + jsr pc,woct + mov r2,r0 + jsr pc,woct + mov #SPC,r0 + jsr pc,wchar + cmpb #CR,curchr + beq 10$ + incb octcnt + cmpb octcnt,#16. + blt 100$ +10$: jsr pc,wcrlf + clrb octcnt +100$: rts pc +; +; print octal digit ------------------------------ +; in r0 current character +; +woct: bic #370,r0 ; mask + add #'0,r0 ; bin->ascii + jmp wchar ; and print +; +; data area ------------------------------------------------ +; +pat: .word 170017 +; +curhdl: .word hdldir +curchr: .byte 0 +esccnt: .byte 0 +octcnt: .byte 0 + .even +; +nfree: .word bsize +wptr: .word buf +rptr: .word buf +buf: .blkb bsize +bufe: + + .end start diff --git a/tools/mcode/sys/README.md b/tools/mcode/sys/README.md new file mode 100644 index 00000000..e35eadaf --- /dev/null +++ b/tools/mcode/sys/README.md @@ -0,0 +1,5 @@ +This directory tree contains **system codes** and contains + +| File | Docu | Comments | +| --------- | --------- | ------- | +| [blink.mac](blink.mac) | - | _blinking lights_ demo | diff --git a/tools/mcode/sys/blink.mac b/tools/mcode/sys/blink.mac new file mode 100644 index 00000000..726a3ad4 --- /dev/null +++ b/tools/mcode/sys/blink.mac @@ -0,0 +1,258 @@ +; $Id: blink.mac 1135 2019-04-23 12:56:23Z mueller $ +; Copyright 2019- by Walter F.J. Mueller +; License disclaimer see License.txt in $RETROBASE directory +; +; Revision History: +; Date Rev Version Comment +; 2019-04-22 1135 1.0 Initial version +; +; Show different 'blinking lights' patterns +; can be controlled with single letter keyboard commands +; styles +; r RSX-11M style +; b 2.11BSD style +; f flipper +; c counter +; R random pattern +; other controls +; 0 use default speed +; 1-9 set update speed +; a auto, cycle styles ! to come ! +; s surprise, random styles ! to come ! +; +; definitions ---------------------------------------------- +; + .include |lib/defs_cpu.mac| + .include |lib/defs_kwl.mac| + .include |lib/defs_dl.mac| +; + smstat = 0 ; static styles + smauto = 1 ; auto styles + smrand = 2 ; random styles + smtime = 500 ; time to style switch (50Hz cycles) +; +; vector area ---------------------------------------------- +; + .include |lib/vec_cpucatch.mac| + .include |lib/vec_devcatch.mac| + + . = v..dlr ; DL11 rx vector + .word vh.dlr + .word cp.ars!cp.pr7 ; use alt-reg-set ! + + . = v..kwl ; KW11-L vector + .word vh.kwl + .word cp.ars!cp.pr7 ; use alt-reg-set ! +; +; stack area ----------------------------------------------- +; + . = 1000 ; stack (below); code (above) +stack: +; +; code area ------------------------------------------------ +; +; main program ----------------------------------- +; +start: mov #stack,sp ; setup stack + jsr pc,inir ; setup 'f' mode + spl 7 + mov #ti.ie,@#ti.csr ; activate input + mov #kl.ie,@#kl.csr + spl 0 ; allow interrupts +; +nultsk: mov curspd,r5 ; load speed + bne 1$ ; if eq + mov defspd,r5 ; use default +1$: mov pat,r0 ; load pattern + wait ; and proudly show it + sob r5,1$ ; wait for interrupt + jsr pc,@curhdl ; update pattern +; + tst smode ; static mode ? + beq nultsk ; if eq yes, no action + cmp styage,#smtime ; time to change style ? + blo nultsk ; if lo, not yet + clr styage ; reset timer +; + cmp smode,#smauto ; auto mode ? + bne 100$ + mov cursty,r0 ; get style index + inc r0 ; get next + cmp r0,#nstyle ; wrap ? + blt 2$ + clr r0 +2$: mov r0,cursty + asl r0 ; index to offset + jsr pc,@initbl(r0) ; call initializer + br nultsk +; +100$: cmp smode,#smrand ; random mode ? + bne nultsk + jsr pc,randzp ; get random number + mov r0,r1 + clr r0 + div #nstyle,r0 ; do rand % %nstyle + mov r1,cursty ; reminder is new style index + asl r1 ; index to offset + jsr pc,@initbl(r1) ; call initializer + br nultsk +; +; receive interrupt handler ---------------------- +; +vh.dlr: mov @#ti.buf,r0 ; read char + mov r0,r1 + sub #'0,r1 ; in 0..9 range ? + blt 100$ + cmp r1,#9. + bgt 100$ + mov r1,curspd ; if yes, set current speed + br 999$ +; +100$: mov #acttbl,r1 ; ptr to action table +101$: mov (r1)+,r2 ; next char + beq 999$ ; end of table ? + cmp r0,r2 ; match ? + beq 102$ + cmp (r1)+,(r1)+ ; if not, try next + br 101$ +102$: jsr pc,@(r1)+ ; if yes: call action + jsr pc,@(r1)+ ; call initializer + +999$: rti +; +; kw11-l line clock handler ---------------------- +; +vh.kwl: inc styage + rti +; +; control character actions ---------------------- +; +; style switch +; +actsty: clr smode ; use static styles +actnop: rts pc +; +acta: mov #smauto,smode + br actem +acts: mov #smrand,smode +actem: mov #smtime,styage ; expire timer + rts pc +; +; other control actions +; +; +; style initializer ------------------------------ +; +inir: mov #170017,pat + mov #4,defspd + mov #hdlr,curhdl + rts pc +; +inib: mov #000377,pat + mov #2,defspd + mov #hdlb,curhdl + rts pc +; +inif: mov #000001,pat + mov #2,defspd + mov #hdlf,curhdl + rts pc +; +inic: clr pat + mov #1,defspd + mov #hdlc,curhdl + rts pc +; +inirr: mov #hdlrr,curhdl + mov #6,defspd +ininop: rts pc +; +; +; display pattern handlers ----------------------- +; +; RSX-11M style ------------------------ +; code from RSX-11M V3.1 NULTK.MAC +; note: RSX-11M updates every 4 wait fall-thru +; +hdlr: mov #pat,r1 + aslb (r1)+ + rorb (r1) + adcb -(r1) + rts pc +; +; 2.11BSD style ------------------------ +; code from 2.11BSD mch_xxx.s +; note: 2.11BSD updates every 2 wait fall-thru +; +hdlb: clc + rol pat + bpl 1$ + bis #1,pat +1$: rts pc +; +; flipper style ------------------------ +; +hdlf: mov #pat,r0 + tst fdir ; shift direction ? + blt 10$ ; if -1 to right + + rol (r0) ; if +1 to left + bcc 100$ ; end reached ? + ror (r0) ; get bit back + ror (r0) ; and shift + br 20$ + +10$: ror (r0) ; shift right + bcc 100$ ; end reached ? + rol (r0) ; get bit back + rol (r0) ; and shift + +20$: neg fdir ; and switch direction +100$: rts pc +; +; counter style ------------------------ +; +hdlc: inc pat + rts pc +; +; random pattern style ----------------- +; +hdlrr: jsr pc,randzp + mov r0,pat + rts pc +; +; code imports +; + .include |lib/randzp.mac| + +; +; data area ------------------------------------------------ +; +acttbl: .word 'r,actsty,inir ; 'r -> use RSX-11M style + .word 'b,actsty,inib ; 'b -> use 2.11BSD style + .word 'f,actsty,inif ; 'f -> use flipper style + .word 'c,actsty,inic ; 'c -> use counter style + .word 'R,actsty,inirr ; 'R -> use random number style + .word 'a,acta ,ininop ; 'a -> auto: cycle through styles + .word 's,acts ,ininop ; 's -> surprise: random styles + .word 0 +; +initbl: .word inir + .word inib + .word inif + .word inic + .word inirr + nstyle = <. - initbl / 2> +; +defspd: .word 2 ; default speed of style +curspd: .word 0 ; current speed +curhdl: .word hdlf ; style handler +cursty: .word 2 ; current style index +; +pat: .word 000001 ; display pattern +smode: .word 0 ; switching mode +styage: .word 0 ; style age +; +fdir: .word 1 + + .end start