1
0
mirror of https://github.com/livingcomputermuseum/UniBone.git synced 2026-05-05 07:24:45 +00:00
Files
livingcomputermuseum.UniBone/10.01_base/3_test/intrtst.lst.hex
Joerg Hoppe 2530d9cbb5 Initial
2019-04-05 11:30:26 +02:00

1149 lines
65 KiB
Plaintext

1
2 .title INTR and DMA test
3
4 ; This program tests the DEC DL11 console interface
5 ; and the INTR and DMA systems.
6 ; The foreground thread runs in 4 phases:
7 ; 1.1. print a start message,
8 ; 1.2. echoes chars typed to the output until ^C is hit
9 ; Chars 0..7 set the new processor priority level.
10 ; 1.3. prints an end message and HALTs.
11 ; 1.4. on CONT it repeats.
12 ;
13 ; 2. For INTR test, the 256 vectors 0,4,10,14,..374 each print
14 ; a string on interrupt.
15 ;
16 ; Contact: Joerg Hoppe / j_hoppe@t-online.de / www.retromcp.com
17
18 FF70h dladr = 177560 ; DL11 console base address
19 FFFEh psw = 177776 ; processor status
20
21
22 ; count of automatically generated interrupt vectors
23 0040h veccnt = 100
24
25 ; ------- macro to define interrupt vector #<vecidx> ------
26 .macro vector vecidx
27 .=4*vecidx ; vector #vecidx
28 .word isr'vecidx ; new PC of ISR
29 .word 340 ; new PSW: priority is max = 7
30 .endm
31
32 ; ----- macro to define ISR for vector #n -------
33 .macro isr vecidx
34 isr'vecidx:
35 mov r0,-(sp)
36 mov #vecidx*4,r0 ; vector in r0
37 call @#doisr ; print message for vector in r0
38 mov (sp)+,r0
39 rti
40 .endm
41
42
43
44
45 .asect
46
47 0000h . = 0
48 ; ---- "veccnt" Interrupt Vectors ---------
49 0000h n=0
50 .rept veccnt
51 vector \n
52 n=n+1
53 .endr
1 vector \n
1 0000h .=4*0 ; vector #0
2 0000h 0100h .word isr0 ; new PC of ISR
3 0002h 00E0h .word 340 ; new PSW: priority is max = 7
2 0001h n=n+1
1 vector \n
1 0004h .=4*1 ; vector #1
2 0004h 010Eh .word isr1 ; new PC of ISR
3 0006h 00E0h .word 340 ; new PSW: priority is max = 7
2 0002h n=n+1
1 vector \n
1 0008h .=4*2 ; vector #2
2 0008h 011Ch .word isr2 ; new PC of ISR
3 000Ah 00E0h .word 340 ; new PSW: priority is max = 7
2 0003h n=n+1
1 vector \n
1 000Ch .=4*3 ; vector #3
2 000Ch 012Ah .word isr3 ; new PC of ISR
3 000Eh 00E0h .word 340 ; new PSW: priority is max = 7
2 0004h n=n+1
1 vector \n
1 0010h .=4*4 ; vector #4
2 0010h 0138h .word isr4 ; new PC of ISR
3 0012h 00E0h .word 340 ; new PSW: priority is max = 7
2 0005h n=n+1
1 vector \n
1 0014h .=4*5 ; vector #5
2 0014h 0146h .word isr5 ; new PC of ISR
3 0016h 00E0h .word 340 ; new PSW: priority is max = 7
2 0006h n=n+1
1 vector \n
1 0018h .=4*6 ; vector #6
2 0018h 0154h .word isr6 ; new PC of ISR
3 001Ah 00E0h .word 340 ; new PSW: priority is max = 7
2 0007h n=n+1
1 vector \n
1 001Ch .=4*7 ; vector #7
2 001Ch 0162h .word isr7 ; new PC of ISR
3 001Eh 00E0h .word 340 ; new PSW: priority is max = 7
2 0008h n=n+1
1 vector \n
1 0020h .=4*10 ; vector #10
2 0020h 0170h .word isr10 ; new PC of ISR
3 0022h 00E0h .word 340 ; new PSW: priority is max = 7
2 0009h n=n+1
1 vector \n
1 0024h .=4*11 ; vector #11
2 0024h 017Eh .word isr11 ; new PC of ISR
3 0026h 00E0h .word 340 ; new PSW: priority is max = 7
2 000Ah n=n+1
1 vector \n
1 0028h .=4*12 ; vector #12
2 0028h 018Ch .word isr12 ; new PC of ISR
3 002Ah 00E0h .word 340 ; new PSW: priority is max = 7
2 000Bh n=n+1
1 vector \n
1 002Ch .=4*13 ; vector #13
2 002Ch 019Ah .word isr13 ; new PC of ISR
3 002Eh 00E0h .word 340 ; new PSW: priority is max = 7
2 000Ch n=n+1
1 vector \n
1 0030h .=4*14 ; vector #14
2 0030h 01A8h .word isr14 ; new PC of ISR
3 0032h 00E0h .word 340 ; new PSW: priority is max = 7
2 000Dh n=n+1
1 vector \n
1 0034h .=4*15 ; vector #15
2 0034h 01B6h .word isr15 ; new PC of ISR
3 0036h 00E0h .word 340 ; new PSW: priority is max = 7
2 000Eh n=n+1
1 vector \n
1 0038h .=4*16 ; vector #16
2 0038h 01C4h .word isr16 ; new PC of ISR
3 003Ah 00E0h .word 340 ; new PSW: priority is max = 7
2 000Fh n=n+1
1 vector \n
1 003Ch .=4*17 ; vector #17
2 003Ch 01D2h .word isr17 ; new PC of ISR
3 003Eh 00E0h .word 340 ; new PSW: priority is max = 7
2 0010h n=n+1
1 vector \n
1 0040h .=4*20 ; vector #20
2 0040h 01E0h .word isr20 ; new PC of ISR
3 0042h 00E0h .word 340 ; new PSW: priority is max = 7
2 0011h n=n+1
1 vector \n
1 0044h .=4*21 ; vector #21
2 0044h 01EEh .word isr21 ; new PC of ISR
3 0046h 00E0h .word 340 ; new PSW: priority is max = 7
2 0012h n=n+1
1 vector \n
1 0048h .=4*22 ; vector #22
2 0048h 01FCh .word isr22 ; new PC of ISR
3 004Ah 00E0h .word 340 ; new PSW: priority is max = 7
2 0013h n=n+1
1 vector \n
1 004Ch .=4*23 ; vector #23
2 004Ch 020Ah .word isr23 ; new PC of ISR
3 004Eh 00E0h .word 340 ; new PSW: priority is max = 7
2 0014h n=n+1
1 vector \n
1 0050h .=4*24 ; vector #24
2 0050h 0218h .word isr24 ; new PC of ISR
3 0052h 00E0h .word 340 ; new PSW: priority is max = 7
2 0015h n=n+1
1 vector \n
1 0054h .=4*25 ; vector #25
2 0054h 0226h .word isr25 ; new PC of ISR
3 0056h 00E0h .word 340 ; new PSW: priority is max = 7
2 0016h n=n+1
1 vector \n
1 0058h .=4*26 ; vector #26
2 0058h 0234h .word isr26 ; new PC of ISR
3 005Ah 00E0h .word 340 ; new PSW: priority is max = 7
2 0017h n=n+1
1 vector \n
1 005Ch .=4*27 ; vector #27
2 005Ch 0242h .word isr27 ; new PC of ISR
3 005Eh 00E0h .word 340 ; new PSW: priority is max = 7
2 0018h n=n+1
1 vector \n
1 0060h .=4*30 ; vector #30
2 0060h 0250h .word isr30 ; new PC of ISR
3 0062h 00E0h .word 340 ; new PSW: priority is max = 7
2 0019h n=n+1
1 vector \n
1 0064h .=4*31 ; vector #31
2 0064h 025Eh .word isr31 ; new PC of ISR
3 0066h 00E0h .word 340 ; new PSW: priority is max = 7
2 001Ah n=n+1
1 vector \n
1 0068h .=4*32 ; vector #32
2 0068h 026Ch .word isr32 ; new PC of ISR
3 006Ah 00E0h .word 340 ; new PSW: priority is max = 7
2 001Bh n=n+1
1 vector \n
1 006Ch .=4*33 ; vector #33
2 006Ch 027Ah .word isr33 ; new PC of ISR
3 006Eh 00E0h .word 340 ; new PSW: priority is max = 7
2 001Ch n=n+1
1 vector \n
1 0070h .=4*34 ; vector #34
2 0070h 0288h .word isr34 ; new PC of ISR
3 0072h 00E0h .word 340 ; new PSW: priority is max = 7
2 001Dh n=n+1
1 vector \n
1 0074h .=4*35 ; vector #35
2 0074h 0296h .word isr35 ; new PC of ISR
3 0076h 00E0h .word 340 ; new PSW: priority is max = 7
2 001Eh n=n+1
1 vector \n
1 0078h .=4*36 ; vector #36
2 0078h 02A4h .word isr36 ; new PC of ISR
3 007Ah 00E0h .word 340 ; new PSW: priority is max = 7
2 001Fh n=n+1
1 vector \n
1 007Ch .=4*37 ; vector #37
2 007Ch 02B2h .word isr37 ; new PC of ISR
3 007Eh 00E0h .word 340 ; new PSW: priority is max = 7
2 0020h n=n+1
1 vector \n
1 0080h .=4*40 ; vector #40
2 0080h 02C0h .word isr40 ; new PC of ISR
3 0082h 00E0h .word 340 ; new PSW: priority is max = 7
2 0021h n=n+1
1 vector \n
1 0084h .=4*41 ; vector #41
2 0084h 02CEh .word isr41 ; new PC of ISR
3 0086h 00E0h .word 340 ; new PSW: priority is max = 7
2 0022h n=n+1
1 vector \n
1 0088h .=4*42 ; vector #42
2 0088h 02DCh .word isr42 ; new PC of ISR
3 008Ah 00E0h .word 340 ; new PSW: priority is max = 7
2 0023h n=n+1
1 vector \n
1 008Ch .=4*43 ; vector #43
2 008Ch 02EAh .word isr43 ; new PC of ISR
3 008Eh 00E0h .word 340 ; new PSW: priority is max = 7
2 0024h n=n+1
1 vector \n
1 0090h .=4*44 ; vector #44
2 0090h 02F8h .word isr44 ; new PC of ISR
3 0092h 00E0h .word 340 ; new PSW: priority is max = 7
2 0025h n=n+1
1 vector \n
1 0094h .=4*45 ; vector #45
2 0094h 0306h .word isr45 ; new PC of ISR
3 0096h 00E0h .word 340 ; new PSW: priority is max = 7
2 0026h n=n+1
1 vector \n
1 0098h .=4*46 ; vector #46
2 0098h 0314h .word isr46 ; new PC of ISR
3 009Ah 00E0h .word 340 ; new PSW: priority is max = 7
2 0027h n=n+1
1 vector \n
1 009Ch .=4*47 ; vector #47
2 009Ch 0322h .word isr47 ; new PC of ISR
3 009Eh 00E0h .word 340 ; new PSW: priority is max = 7
2 0028h n=n+1
1 vector \n
1 00A0h .=4*50 ; vector #50
2 00A0h 0330h .word isr50 ; new PC of ISR
3 00A2h 00E0h .word 340 ; new PSW: priority is max = 7
2 0029h n=n+1
1 vector \n
1 00A4h .=4*51 ; vector #51
2 00A4h 033Eh .word isr51 ; new PC of ISR
3 00A6h 00E0h .word 340 ; new PSW: priority is max = 7
2 002Ah n=n+1
1 vector \n
1 00A8h .=4*52 ; vector #52
2 00A8h 034Ch .word isr52 ; new PC of ISR
3 00AAh 00E0h .word 340 ; new PSW: priority is max = 7
2 002Bh n=n+1
1 vector \n
1 00ACh .=4*53 ; vector #53
2 00ACh 035Ah .word isr53 ; new PC of ISR
3 00AEh 00E0h .word 340 ; new PSW: priority is max = 7
2 002Ch n=n+1
1 vector \n
1 00B0h .=4*54 ; vector #54
2 00B0h 0368h .word isr54 ; new PC of ISR
3 00B2h 00E0h .word 340 ; new PSW: priority is max = 7
2 002Dh n=n+1
1 vector \n
1 00B4h .=4*55 ; vector #55
2 00B4h 0376h .word isr55 ; new PC of ISR
3 00B6h 00E0h .word 340 ; new PSW: priority is max = 7
2 002Eh n=n+1
1 vector \n
1 00B8h .=4*56 ; vector #56
2 00B8h 0384h .word isr56 ; new PC of ISR
3 00BAh 00E0h .word 340 ; new PSW: priority is max = 7
2 002Fh n=n+1
1 vector \n
1 00BCh .=4*57 ; vector #57
2 00BCh 0392h .word isr57 ; new PC of ISR
3 00BEh 00E0h .word 340 ; new PSW: priority is max = 7
2 0030h n=n+1
1 vector \n
1 00C0h .=4*60 ; vector #60
2 00C0h 03A0h .word isr60 ; new PC of ISR
3 00C2h 00E0h .word 340 ; new PSW: priority is max = 7
2 0031h n=n+1
1 vector \n
1 00C4h .=4*61 ; vector #61
2 00C4h 03AEh .word isr61 ; new PC of ISR
3 00C6h 00E0h .word 340 ; new PSW: priority is max = 7
2 0032h n=n+1
1 vector \n
1 00C8h .=4*62 ; vector #62
2 00C8h 03BCh .word isr62 ; new PC of ISR
3 00CAh 00E0h .word 340 ; new PSW: priority is max = 7
2 0033h n=n+1
1 vector \n
1 00CCh .=4*63 ; vector #63
2 00CCh 03CAh .word isr63 ; new PC of ISR
3 00CEh 00E0h .word 340 ; new PSW: priority is max = 7
2 0034h n=n+1
1 vector \n
1 00D0h .=4*64 ; vector #64
2 00D0h 03D8h .word isr64 ; new PC of ISR
3 00D2h 00E0h .word 340 ; new PSW: priority is max = 7
2 0035h n=n+1
1 vector \n
1 00D4h .=4*65 ; vector #65
2 00D4h 03E6h .word isr65 ; new PC of ISR
3 00D6h 00E0h .word 340 ; new PSW: priority is max = 7
2 0036h n=n+1
1 vector \n
1 00D8h .=4*66 ; vector #66
2 00D8h 03F4h .word isr66 ; new PC of ISR
3 00DAh 00E0h .word 340 ; new PSW: priority is max = 7
2 0037h n=n+1
1 vector \n
1 00DCh .=4*67 ; vector #67
2 00DCh 0402h .word isr67 ; new PC of ISR
3 00DEh 00E0h .word 340 ; new PSW: priority is max = 7
2 0038h n=n+1
1 vector \n
1 00E0h .=4*70 ; vector #70
2 00E0h 0410h .word isr70 ; new PC of ISR
3 00E2h 00E0h .word 340 ; new PSW: priority is max = 7
2 0039h n=n+1
1 vector \n
1 00E4h .=4*71 ; vector #71
2 00E4h 041Eh .word isr71 ; new PC of ISR
3 00E6h 00E0h .word 340 ; new PSW: priority is max = 7
2 003Ah n=n+1
1 vector \n
1 00E8h .=4*72 ; vector #72
2 00E8h 042Ch .word isr72 ; new PC of ISR
3 00EAh 00E0h .word 340 ; new PSW: priority is max = 7
2 003Bh n=n+1
1 vector \n
1 00ECh .=4*73 ; vector #73
2 00ECh 043Ah .word isr73 ; new PC of ISR
3 00EEh 00E0h .word 340 ; new PSW: priority is max = 7
2 003Ch n=n+1
1 vector \n
1 00F0h .=4*74 ; vector #74
2 00F0h 0448h .word isr74 ; new PC of ISR
3 00F2h 00E0h .word 340 ; new PSW: priority is max = 7
2 003Dh n=n+1
1 vector \n
1 00F4h .=4*75 ; vector #75
2 00F4h 0456h .word isr75 ; new PC of ISR
3 00F6h 00E0h .word 340 ; new PSW: priority is max = 7
2 003Eh n=n+1
1 vector \n
1 00F8h .=4*76 ; vector #76
2 00F8h 0464h .word isr76 ; new PC of ISR
3 00FAh 00E0h .word 340 ; new PSW: priority is max = 7
2 003Fh n=n+1
1 vector \n
1 00FCh .=4*77 ; vector #77
2 00FCh 0472h .word isr77 ; new PC of ISR
3 00FEh 00E0h .word 340 ; new PSW: priority is max = 7
2 0040h n=n+1
54
55 ; ---- veccnt ISRs ---------
56 0000h n=0
57 .rept veccnt
58 isr \n
59 n=n+1
60 .endr
1 isr \n
1 isr0:
2 0100h 1026h mov r0,-(sp)
3 0102h 15C0h 0000h mov #0*4,r0 ; vector in r0
4 0106h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 010Ah 1580h mov (sp)+,r0
6 010Ch 0002h rti
2 0001h n=n+1
1 isr \n
1 isr1:
2 010Eh 1026h mov r0,-(sp)
3 0110h 15C0h 0004h mov #1*4,r0 ; vector in r0
4 0114h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0118h 1580h mov (sp)+,r0
6 011Ah 0002h rti
2 0002h n=n+1
1 isr \n
1 isr2:
2 011Ch 1026h mov r0,-(sp)
3 011Eh 15C0h 0008h mov #2*4,r0 ; vector in r0
4 0122h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0126h 1580h mov (sp)+,r0
6 0128h 0002h rti
2 0003h n=n+1
1 isr \n
1 isr3:
2 012Ah 1026h mov r0,-(sp)
3 012Ch 15C0h 000Ch mov #3*4,r0 ; vector in r0
4 0130h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0134h 1580h mov (sp)+,r0
6 0136h 0002h rti
2 0004h n=n+1
1 isr \n
1 isr4:
2 0138h 1026h mov r0,-(sp)
3 013Ah 15C0h 0010h mov #4*4,r0 ; vector in r0
4 013Eh 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0142h 1580h mov (sp)+,r0
6 0144h 0002h rti
2 0005h n=n+1
1 isr \n
1 isr5:
2 0146h 1026h mov r0,-(sp)
3 0148h 15C0h 0014h mov #5*4,r0 ; vector in r0
4 014Ch 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0150h 1580h mov (sp)+,r0
6 0152h 0002h rti
2 0006h n=n+1
1 isr \n
1 isr6:
2 0154h 1026h mov r0,-(sp)
3 0156h 15C0h 0018h mov #6*4,r0 ; vector in r0
4 015Ah 09DFh 106Ah call @#doisr ; print message for vector in r0
5 015Eh 1580h mov (sp)+,r0
6 0160h 0002h rti
2 0007h n=n+1
1 isr \n
1 isr7:
2 0162h 1026h mov r0,-(sp)
3 0164h 15C0h 001Ch mov #7*4,r0 ; vector in r0
4 0168h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 016Ch 1580h mov (sp)+,r0
6 016Eh 0002h rti
2 0008h n=n+1
1 isr \n
1 isr10:
2 0170h 1026h mov r0,-(sp)
3 0172h 15C0h 0020h mov #10*4,r0 ; vector in r0
4 0176h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 017Ah 1580h mov (sp)+,r0
6 017Ch 0002h rti
2 0009h n=n+1
1 isr \n
1 isr11:
2 017Eh 1026h mov r0,-(sp)
3 0180h 15C0h 0024h mov #11*4,r0 ; vector in r0
4 0184h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0188h 1580h mov (sp)+,r0
6 018Ah 0002h rti
2 000Ah n=n+1
1 isr \n
1 isr12:
2 018Ch 1026h mov r0,-(sp)
3 018Eh 15C0h 0028h mov #12*4,r0 ; vector in r0
4 0192h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0196h 1580h mov (sp)+,r0
6 0198h 0002h rti
2 000Bh n=n+1
1 isr \n
1 isr13:
2 019Ah 1026h mov r0,-(sp)
3 019Ch 15C0h 002Ch mov #13*4,r0 ; vector in r0
4 01A0h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 01A4h 1580h mov (sp)+,r0
6 01A6h 0002h rti
2 000Ch n=n+1
1 isr \n
1 isr14:
2 01A8h 1026h mov r0,-(sp)
3 01AAh 15C0h 0030h mov #14*4,r0 ; vector in r0
4 01AEh 09DFh 106Ah call @#doisr ; print message for vector in r0
5 01B2h 1580h mov (sp)+,r0
6 01B4h 0002h rti
2 000Dh n=n+1
1 isr \n
1 isr15:
2 01B6h 1026h mov r0,-(sp)
3 01B8h 15C0h 0034h mov #15*4,r0 ; vector in r0
4 01BCh 09DFh 106Ah call @#doisr ; print message for vector in r0
5 01C0h 1580h mov (sp)+,r0
6 01C2h 0002h rti
2 000Eh n=n+1
1 isr \n
1 isr16:
2 01C4h 1026h mov r0,-(sp)
3 01C6h 15C0h 0038h mov #16*4,r0 ; vector in r0
4 01CAh 09DFh 106Ah call @#doisr ; print message for vector in r0
5 01CEh 1580h mov (sp)+,r0
6 01D0h 0002h rti
2 000Fh n=n+1
1 isr \n
1 isr17:
2 01D2h 1026h mov r0,-(sp)
3 01D4h 15C0h 003Ch mov #17*4,r0 ; vector in r0
4 01D8h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 01DCh 1580h mov (sp)+,r0
6 01DEh 0002h rti
2 0010h n=n+1
1 isr \n
1 isr20:
2 01E0h 1026h mov r0,-(sp)
3 01E2h 15C0h 0040h mov #20*4,r0 ; vector in r0
4 01E6h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 01EAh 1580h mov (sp)+,r0
6 01ECh 0002h rti
2 0011h n=n+1
1 isr \n
1 isr21:
2 01EEh 1026h mov r0,-(sp)
3 01F0h 15C0h 0044h mov #21*4,r0 ; vector in r0
4 01F4h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 01F8h 1580h mov (sp)+,r0
6 01FAh 0002h rti
2 0012h n=n+1
1 isr \n
1 isr22:
2 01FCh 1026h mov r0,-(sp)
3 01FEh 15C0h 0048h mov #22*4,r0 ; vector in r0
4 0202h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0206h 1580h mov (sp)+,r0
6 0208h 0002h rti
2 0013h n=n+1
1 isr \n
1 isr23:
2 020Ah 1026h mov r0,-(sp)
3 020Ch 15C0h 004Ch mov #23*4,r0 ; vector in r0
4 0210h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0214h 1580h mov (sp)+,r0
6 0216h 0002h rti
2 0014h n=n+1
1 isr \n
1 isr24:
2 0218h 1026h mov r0,-(sp)
3 021Ah 15C0h 0050h mov #24*4,r0 ; vector in r0
4 021Eh 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0222h 1580h mov (sp)+,r0
6 0224h 0002h rti
2 0015h n=n+1
1 isr \n
1 isr25:
2 0226h 1026h mov r0,-(sp)
3 0228h 15C0h 0054h mov #25*4,r0 ; vector in r0
4 022Ch 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0230h 1580h mov (sp)+,r0
6 0232h 0002h rti
2 0016h n=n+1
1 isr \n
1 isr26:
2 0234h 1026h mov r0,-(sp)
3 0236h 15C0h 0058h mov #26*4,r0 ; vector in r0
4 023Ah 09DFh 106Ah call @#doisr ; print message for vector in r0
5 023Eh 1580h mov (sp)+,r0
6 0240h 0002h rti
2 0017h n=n+1
1 isr \n
1 isr27:
2 0242h 1026h mov r0,-(sp)
3 0244h 15C0h 005Ch mov #27*4,r0 ; vector in r0
4 0248h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 024Ch 1580h mov (sp)+,r0
6 024Eh 0002h rti
2 0018h n=n+1
1 isr \n
1 isr30:
2 0250h 1026h mov r0,-(sp)
3 0252h 15C0h 0060h mov #30*4,r0 ; vector in r0
4 0256h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 025Ah 1580h mov (sp)+,r0
6 025Ch 0002h rti
2 0019h n=n+1
1 isr \n
1 isr31:
2 025Eh 1026h mov r0,-(sp)
3 0260h 15C0h 0064h mov #31*4,r0 ; vector in r0
4 0264h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0268h 1580h mov (sp)+,r0
6 026Ah 0002h rti
2 001Ah n=n+1
1 isr \n
1 isr32:
2 026Ch 1026h mov r0,-(sp)
3 026Eh 15C0h 0068h mov #32*4,r0 ; vector in r0
4 0272h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0276h 1580h mov (sp)+,r0
6 0278h 0002h rti
2 001Bh n=n+1
1 isr \n
1 isr33:
2 027Ah 1026h mov r0,-(sp)
3 027Ch 15C0h 006Ch mov #33*4,r0 ; vector in r0
4 0280h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0284h 1580h mov (sp)+,r0
6 0286h 0002h rti
2 001Ch n=n+1
1 isr \n
1 isr34:
2 0288h 1026h mov r0,-(sp)
3 028Ah 15C0h 0070h mov #34*4,r0 ; vector in r0
4 028Eh 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0292h 1580h mov (sp)+,r0
6 0294h 0002h rti
2 001Dh n=n+1
1 isr \n
1 isr35:
2 0296h 1026h mov r0,-(sp)
3 0298h 15C0h 0074h mov #35*4,r0 ; vector in r0
4 029Ch 09DFh 106Ah call @#doisr ; print message for vector in r0
5 02A0h 1580h mov (sp)+,r0
6 02A2h 0002h rti
2 001Eh n=n+1
1 isr \n
1 isr36:
2 02A4h 1026h mov r0,-(sp)
3 02A6h 15C0h 0078h mov #36*4,r0 ; vector in r0
4 02AAh 09DFh 106Ah call @#doisr ; print message for vector in r0
5 02AEh 1580h mov (sp)+,r0
6 02B0h 0002h rti
2 001Fh n=n+1
1 isr \n
1 isr37:
2 02B2h 1026h mov r0,-(sp)
3 02B4h 15C0h 007Ch mov #37*4,r0 ; vector in r0
4 02B8h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 02BCh 1580h mov (sp)+,r0
6 02BEh 0002h rti
2 0020h n=n+1
1 isr \n
1 isr40:
2 02C0h 1026h mov r0,-(sp)
3 02C2h 15C0h 0080h mov #40*4,r0 ; vector in r0
4 02C6h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 02CAh 1580h mov (sp)+,r0
6 02CCh 0002h rti
2 0021h n=n+1
1 isr \n
1 isr41:
2 02CEh 1026h mov r0,-(sp)
3 02D0h 15C0h 0084h mov #41*4,r0 ; vector in r0
4 02D4h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 02D8h 1580h mov (sp)+,r0
6 02DAh 0002h rti
2 0022h n=n+1
1 isr \n
1 isr42:
2 02DCh 1026h mov r0,-(sp)
3 02DEh 15C0h 0088h mov #42*4,r0 ; vector in r0
4 02E2h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 02E6h 1580h mov (sp)+,r0
6 02E8h 0002h rti
2 0023h n=n+1
1 isr \n
1 isr43:
2 02EAh 1026h mov r0,-(sp)
3 02ECh 15C0h 008Ch mov #43*4,r0 ; vector in r0
4 02F0h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 02F4h 1580h mov (sp)+,r0
6 02F6h 0002h rti
2 0024h n=n+1
1 isr \n
1 isr44:
2 02F8h 1026h mov r0,-(sp)
3 02FAh 15C0h 0090h mov #44*4,r0 ; vector in r0
4 02FEh 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0302h 1580h mov (sp)+,r0
6 0304h 0002h rti
2 0025h n=n+1
1 isr \n
1 isr45:
2 0306h 1026h mov r0,-(sp)
3 0308h 15C0h 0094h mov #45*4,r0 ; vector in r0
4 030Ch 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0310h 1580h mov (sp)+,r0
6 0312h 0002h rti
2 0026h n=n+1
1 isr \n
1 isr46:
2 0314h 1026h mov r0,-(sp)
3 0316h 15C0h 0098h mov #46*4,r0 ; vector in r0
4 031Ah 09DFh 106Ah call @#doisr ; print message for vector in r0
5 031Eh 1580h mov (sp)+,r0
6 0320h 0002h rti
2 0027h n=n+1
1 isr \n
1 isr47:
2 0322h 1026h mov r0,-(sp)
3 0324h 15C0h 009Ch mov #47*4,r0 ; vector in r0
4 0328h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 032Ch 1580h mov (sp)+,r0
6 032Eh 0002h rti
2 0028h n=n+1
1 isr \n
1 isr50:
2 0330h 1026h mov r0,-(sp)
3 0332h 15C0h 00A0h mov #50*4,r0 ; vector in r0
4 0336h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 033Ah 1580h mov (sp)+,r0
6 033Ch 0002h rti
2 0029h n=n+1
1 isr \n
1 isr51:
2 033Eh 1026h mov r0,-(sp)
3 0340h 15C0h 00A4h mov #51*4,r0 ; vector in r0
4 0344h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0348h 1580h mov (sp)+,r0
6 034Ah 0002h rti
2 002Ah n=n+1
1 isr \n
1 isr52:
2 034Ch 1026h mov r0,-(sp)
3 034Eh 15C0h 00A8h mov #52*4,r0 ; vector in r0
4 0352h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0356h 1580h mov (sp)+,r0
6 0358h 0002h rti
2 002Bh n=n+1
1 isr \n
1 isr53:
2 035Ah 1026h mov r0,-(sp)
3 035Ch 15C0h 00ACh mov #53*4,r0 ; vector in r0
4 0360h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0364h 1580h mov (sp)+,r0
6 0366h 0002h rti
2 002Ch n=n+1
1 isr \n
1 isr54:
2 0368h 1026h mov r0,-(sp)
3 036Ah 15C0h 00B0h mov #54*4,r0 ; vector in r0
4 036Eh 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0372h 1580h mov (sp)+,r0
6 0374h 0002h rti
2 002Dh n=n+1
1 isr \n
1 isr55:
2 0376h 1026h mov r0,-(sp)
3 0378h 15C0h 00B4h mov #55*4,r0 ; vector in r0
4 037Ch 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0380h 1580h mov (sp)+,r0
6 0382h 0002h rti
2 002Eh n=n+1
1 isr \n
1 isr56:
2 0384h 1026h mov r0,-(sp)
3 0386h 15C0h 00B8h mov #56*4,r0 ; vector in r0
4 038Ah 09DFh 106Ah call @#doisr ; print message for vector in r0
5 038Eh 1580h mov (sp)+,r0
6 0390h 0002h rti
2 002Fh n=n+1
1 isr \n
1 isr57:
2 0392h 1026h mov r0,-(sp)
3 0394h 15C0h 00BCh mov #57*4,r0 ; vector in r0
4 0398h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 039Ch 1580h mov (sp)+,r0
6 039Eh 0002h rti
2 0030h n=n+1
1 isr \n
1 isr60:
2 03A0h 1026h mov r0,-(sp)
3 03A2h 15C0h 00C0h mov #60*4,r0 ; vector in r0
4 03A6h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 03AAh 1580h mov (sp)+,r0
6 03ACh 0002h rti
2 0031h n=n+1
1 isr \n
1 isr61:
2 03AEh 1026h mov r0,-(sp)
3 03B0h 15C0h 00C4h mov #61*4,r0 ; vector in r0
4 03B4h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 03B8h 1580h mov (sp)+,r0
6 03BAh 0002h rti
2 0032h n=n+1
1 isr \n
1 isr62:
2 03BCh 1026h mov r0,-(sp)
3 03BEh 15C0h 00C8h mov #62*4,r0 ; vector in r0
4 03C2h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 03C6h 1580h mov (sp)+,r0
6 03C8h 0002h rti
2 0033h n=n+1
1 isr \n
1 isr63:
2 03CAh 1026h mov r0,-(sp)
3 03CCh 15C0h 00CCh mov #63*4,r0 ; vector in r0
4 03D0h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 03D4h 1580h mov (sp)+,r0
6 03D6h 0002h rti
2 0034h n=n+1
1 isr \n
1 isr64:
2 03D8h 1026h mov r0,-(sp)
3 03DAh 15C0h 00D0h mov #64*4,r0 ; vector in r0
4 03DEh 09DFh 106Ah call @#doisr ; print message for vector in r0
5 03E2h 1580h mov (sp)+,r0
6 03E4h 0002h rti
2 0035h n=n+1
1 isr \n
1 isr65:
2 03E6h 1026h mov r0,-(sp)
3 03E8h 15C0h 00D4h mov #65*4,r0 ; vector in r0
4 03ECh 09DFh 106Ah call @#doisr ; print message for vector in r0
5 03F0h 1580h mov (sp)+,r0
6 03F2h 0002h rti
2 0036h n=n+1
1 isr \n
1 isr66:
2 03F4h 1026h mov r0,-(sp)
3 03F6h 15C0h 00D8h mov #66*4,r0 ; vector in r0
4 03FAh 09DFh 106Ah call @#doisr ; print message for vector in r0
5 03FEh 1580h mov (sp)+,r0
6 0400h 0002h rti
2 0037h n=n+1
1 isr \n
1 isr67:
2 0402h 1026h mov r0,-(sp)
3 0404h 15C0h 00DCh mov #67*4,r0 ; vector in r0
4 0408h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 040Ch 1580h mov (sp)+,r0
6 040Eh 0002h rti
2 0038h n=n+1
1 isr \n
1 isr70:
2 0410h 1026h mov r0,-(sp)
3 0412h 15C0h 00E0h mov #70*4,r0 ; vector in r0
4 0416h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 041Ah 1580h mov (sp)+,r0
6 041Ch 0002h rti
2 0039h n=n+1
1 isr \n
1 isr71:
2 041Eh 1026h mov r0,-(sp)
3 0420h 15C0h 00E4h mov #71*4,r0 ; vector in r0
4 0424h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0428h 1580h mov (sp)+,r0
6 042Ah 0002h rti
2 003Ah n=n+1
1 isr \n
1 isr72:
2 042Ch 1026h mov r0,-(sp)
3 042Eh 15C0h 00E8h mov #72*4,r0 ; vector in r0
4 0432h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0436h 1580h mov (sp)+,r0
6 0438h 0002h rti
2 003Bh n=n+1
1 isr \n
1 isr73:
2 043Ah 1026h mov r0,-(sp)
3 043Ch 15C0h 00ECh mov #73*4,r0 ; vector in r0
4 0440h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0444h 1580h mov (sp)+,r0
6 0446h 0002h rti
2 003Ch n=n+1
1 isr \n
1 isr74:
2 0448h 1026h mov r0,-(sp)
3 044Ah 15C0h 00F0h mov #74*4,r0 ; vector in r0
4 044Eh 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0452h 1580h mov (sp)+,r0
6 0454h 0002h rti
2 003Dh n=n+1
1 isr \n
1 isr75:
2 0456h 1026h mov r0,-(sp)
3 0458h 15C0h 00F4h mov #75*4,r0 ; vector in r0
4 045Ch 09DFh 106Ah call @#doisr ; print message for vector in r0
5 0460h 1580h mov (sp)+,r0
6 0462h 0002h rti
2 003Eh n=n+1
1 isr \n
1 isr76:
2 0464h 1026h mov r0,-(sp)
3 0466h 15C0h 00F8h mov #76*4,r0 ; vector in r0
4 046Ah 09DFh 106Ah call @#doisr ; print message for vector in r0
5 046Eh 1580h mov (sp)+,r0
6 0470h 0002h rti
2 003Fh n=n+1
1 isr \n
1 isr77:
2 0472h 1026h mov r0,-(sp)
3 0474h 15C0h 00FCh mov #77*4,r0 ; vector in r0
4 0478h 09DFh 106Ah call @#doisr ; print message for vector in r0
5 047Ch 1580h mov (sp)+,r0
6 047Eh 0002h rti
2 0040h n=n+1
61
62
63
64
65 ; ---- foreground thread ---------
66 1000h .=10000
67
68 0FFEh stack = . - 2 ; stack growns down from start
69
70 start:
71 1000h 15C6h 0FFEh mov #stack,sp ; init stack
72 1004h 0A1Fh FFFEh clr @#psw ; clear priority, allow all interupts
73
74 ; 1. print "Hello" msg
75 1008h 15C1h 1104h mov #shello,r1
76 100Ch 09DFh 1096h call @#puts
77
78 ; test vecnum printout
79 ; mov #123456,r0
80 ; call @#isrmsg
81
82 ; 2. echo chars until ^C hit
83 1$:
84 1010h 09DFh 10ECh call @#getc ; wait for char, return in r0
85 1014h 45C0h FF80h bic #177600,r0 ; make 7bit: clear bits <15:7>
86 1018h A017h 0003h cmpb r0,#3 ; break by ^C ?
87 101Ch 0320h beq 9$ ; yes: leave loop
88 101Eh A017h 0030h cmpb r0,#60
89 1022h 871Ah blo 2$ ; char is < '0'
90 1024h A017h 0037h cmpb r0,#67
91 1028h 8217h bhi 2$ ; char is > '7'
92 102Ah 9002h movb r0,r2 ; save
93
94 ; key is 0..7: change priority
95 102Ch 15C1h 11BCh mov #sprio0,r1 ; print info
96 1030h 09DFh 1096h call @#puts
97 1034h 9080h movb r2,r0 ; restore digit
98 1036h 09DFh 10DCh call @#putc ; print level digit
99 103Ah 15C1h 11D0h mov #sprio1,r1
100 103Eh 09DFh 1096h call @#puts
101 ; change PSW
102 1042h 9080h movb r2,r0
103 1044h C5C0h 00F8h bicb #370,r0 ; ASCII -> integer
104 1048h 0CC0h asl r0 ; move level to "priority" field in PSW
105 104Ah 0CC0h asl r0 ; in bits 7,6,5
106 104Ch 0CC0h asl r0
107 104Eh 0CC0h asl r0
108 1050h 0CC0h asl r0
109 1052h 101Fh FFFEh mov r0,@#psw
110
111 1056h 01DCh br 1$
112
113 2$:
114 1058h 09DFh 10DCh call @#putc ; no: echo char in r0 and loop
115 105Ch 01D9h br 1$
116
117 9$:
118
119 ; 3. print "Bye bye" msg and HALT
120 105Eh 15C1h 11D3h mov #sbye,r1
121 1062h 09DFh 1096h call @#puts
122 1066h 0000h halt
123
124 ; 4. loop on CONT
125 1068h 01CBh br start
126
127
128 ; ----------------------
129 ; Common code for all ISRs
130 ; print vector number in r0
131 ; called on interrupt level
132
133 doisr:
134 106Ah 1126h mov r4,-(sp)
135 106Ch 10E6h mov r3,-(sp)
136 106Eh 10A6h mov r2,-(sp)
137 1070h 1066h mov r1,-(sp)
138 1072h 1026h mov r0,-(sp)
139
140 ; print msg
141 1074h 15C1h 10FAh mov #sisr1,r1 ; "ISR "
142 1078h 09DFh 1096h call @#puts
143 107Ch 1380h mov (sp),r0 ; restore vecnum
144 107Eh 09DFh 10B2h call @#putnum
145 1082h 15C1h 1100h mov #sisr2,r1 ; "cr lf
146 1086h 09DFh 1096h call @#puts
147
148 108Ah 1580h mov (sp)+,r0
149 108Ch 1581h mov (sp)+,r1
150 108Eh 1582h mov (sp)+,r2
151 1090h 1583h mov (sp)+,r3
152 1092h 1584h mov (sp)+,r4
153 1094h 0087h return
154
155
156 ; ----------------------
157 ; puts - print a string
158 ; r1 = pointer, r0,r1 changed
159 puts:
160 1096h 9440h movb (r1)+,r0 ; load xmt char
161 1098h 0303h beq 1$ ; string ends with 0
162 109Ah 09DFh 10DCh call @#putc
163 109Eh 01FBh br puts ; transmit nxt char of string
164 10A0h 0087h 1$: return
165
166
167 ; ----------------------
168 ; putnum - print the octal number in r0
169 10A2h numbf0: .blkw 10 ; space to mount number string
170 10B2h numbf1 =.
171 putnum:
172 10B2h 1002h mov r0,r2 ; r2 = shifter
173 10B4h 15C1h 10B2h mov #numbf1,r1 ; r1 = buffer pointer, backwards
174 10B8h 95E1h 0000h movb #0,-(r1) ; set terminating 0
175 ; repeat 6 times
176 10BCh 15C3h 0006h mov #6,r3
177 1$:
178 10C0h 1080h mov r2,r0
179 ; extract lower 3 bits = octal digit
180 10C2h 45C0h FFF8h bic #177770,r0 ; r0 &= 0x07
181 10C6h 65C0h 0030h add #60,r0 ; r0 += '0'
182 10CAh 9021h movb r0,-(r1) ; write in buffer
183 10CCh 00A1h clc
184 10CEh 0C02h ror r2 ; shift to next digit
185 10D0h 0C02h ror r2
186 10D2h 0C02h ror r2
187 10D4h 7ECBh sob r3,1$ ; loop for all 6 digits
188
189 10D6h 09DFh 1096h call @#puts
190 10DAh 0087h return
191
192
193 ; DEC DL11 console I/O
194 ; ----------------------
195 ; putc - output a single char
196 ; r0 = char, r4 changed
197 putc:
198 10DCh 15C4h FF70h mov #dladr,r4 ; set base addr
199 10E0h 9034h 0006h movb r0,6(r4) ; char into transmit buffer
200 10E4h 8BF4h 0004h 1$: tstb 4(r4) ; XMT RDY?
201 10E8h 80FDh bpl 1$ ; no, loop
202 10EAh 0087h return
203
204 ; ----------------------
205 ; getc - input a single char
206 ; result in r0, r4 changed
207 getc:
208 10ECh 15C4h FF70h mov #dladr,r4 ; set base addr
209 10F0h 8BCCh 1$: tstb (r4) ; RCVR DONE?
210 10F2h 80FEh bpl 1$ ; no, loop
211 10F4h 1D00h 0002h mov 2(r4),r0 ; return data
212 10F8h 0087h return
213
214
215 ; ---- Test strings, each 256 chars max ---------
216
217 sisr1: ; start of ISR <vecnum> message
218 10FAh 3Ch 49h 53h .ascii /<ISR /
10FDh 52h 20h
219 10FFh 00h .byte 0 ; NUL=end marker
220 sisr2: ; end of ISR <vecnum> message
221 1100h 3Eh .ascii />/
222 1101h 0Dh 0Ah .byte 15,12 ; CR, LF,
223 1103h 00h .byte 0 ; NUL=end marker
224
225
226 shello:
227 1104h 0Dh 0Ah .byte 15,12 ; CR, LF,
228 1106h 2Ah 2Ah 2Ah .ascii /*** Interrupt and DMA test ***/
1109h 20h 49h 6Eh
110Ch 74h 65h 72h
110Fh 72h 75h 70h
1112h 74h 20h 61h
1115h 6Eh 64h 20h
1118h 44h 4Dh 41h
111Bh 20h 74h 65h
111Eh 73h 74h 20h
1121h 2Ah 2Ah 2Ah
229 1124h 0Dh 0Ah .byte 15,12 ; CR, LF,
230 1126h 54h 68h 65h .ascii /The INTR vectors 0..77 print the vector num./
1129h 20h 49h 4Eh
112Ch 54h 52h 20h
112Fh 76h 65h 63h
1132h 74h 6Fh 72h
1135h 73h 20h 30h
1138h 2Eh 2Eh 37h
113Bh 37h 20h 70h
113Eh 72h 69h 6Eh
1141h 74h 20h 74h
1144h 68h 65h 20h
1147h 76h 65h 63h
114Ah 74h 6Fh 72h
114Dh 20h 6Eh 75h
1150h 6Dh 2Eh
231 1152h 0Dh 0Ah .byte 15,12 ; CR, LF,
232 1154h 54h 68h 65h .ascii /The foreground thread echoes typed chars, ^C HALTs./
1157h 20h 66h 6Fh
115Ah 72h 65h 67h
115Dh 72h 6Fh 75h
1160h 6Eh 64h 20h
1163h 74h 68h 72h
1166h 65h 61h 64h
1169h 20h 65h 63h
116Ch 68h 6Fh 65h
116Fh 73h 20h 74h
1172h 79h 70h 65h
1175h 64h 20h 63h
1178h 68h 61h 72h
117Bh 73h 2Ch 20h
117Eh 5Eh 43h 20h
1181h 48h 41h 4Ch
1184h 54h 73h 2Eh
233 1187h 0Dh 0Ah .byte 15,12 ; CR, LF,
234 1189h 43h 68h 61h .ascii /Chars 0..7 set the new processor priority level./
118Ch 72h 73h 20h
118Fh 30h 2Eh 2Eh
1192h 37h 20h 73h
1195h 65h 74h 20h
1198h 74h 68h 65h
119Bh 20h 6Eh 65h
119Eh 77h 20h 70h
11A1h 72h 6Fh 63h
11A4h 65h 73h 73h
11A7h 6Fh 72h 20h
11AAh 70h 72h 69h
11ADh 6Fh 72h 69h
11B0h 74h 79h 20h
11B3h 6Ch 65h 76h
11B6h 65h 6Ch 2Eh
235 11B9h 0Dh 0Ah .byte 15,12 ; CR, LF,
236 11BBh 00h .byte 0 ; NUL=end marker
237
238 sprio0:
239 11BCh 0Dh 0Ah .byte 15,12 ; CR, LF,
240 11BEh 43h 50h 55h .ascii /CPU priority now /
11C1h 20h 70h 72h
11C4h 69h 6Fh 72h
11C7h 69h 74h 79h
11CAh 20h 6Eh 6Fh
11CDh 77h 20h
241 11CFh 00h .byte 0
242
243 sprio1:
244 11D0h 0Dh 0Ah .byte 15,12 ; CR, LF,
245 11D2h 00h .byte 0 ; NUL=end marker
246
247 sbye:
248 11D3h 0Dh 0Ah .byte 15,12
249 11D5h 47h 6Fh 6Fh .ascii /Good Bye!/
11D8h 64h 20h 42h
11DBh 79h 65h 21h
250 11DEh 0Dh 0Ah 00h .byte 15,12,0 ; CR, LF, NUL=end marker
251
252
253 .end
253