SMAL32 (rev 10/08) "MP3, Douglas Jones" 13:50:14 Page 1 Wed Nov 4 2009 11 SUBTITLE "KBNGETS routine" 68 SUBTITLE "Main Program to test KBNGETS" SMAL32 (rev 10/08) "MP3, Douglas Jones" 13:50:14 Page 2 Wed Nov 4 2009 1 TITLE "MP3, Douglas Jones" 2 USE "hawk.macs" 3 USE "monitor.h" 4 S START 5 EXT UNUSED 6 7 ; ASCII character constants 8 LF = #0A 9 CR = #0D 10 SMAL32 (rev 10/08) "MP3, Douglas Jones" 13:50:14 Page 3 "KBNGETS routine" Wed Nov 4 2009 11 SUBTITLE "KBNGETS routine" 12 ; activation record of kbngets 13 ;RETAD = 0 14 R8SV = 4 15 R9SV = 8 16 ARSIZE = 12 17 18 KBNGETS: ; get a null-terminated string from keyboard 19 ; expects R3 - pointer to buffer p 20 ; expects R4 - length of buffer n 21 ; conforms to usual calling conventions 22 STORES R1,R2 +000000: F1 A2 23 STORE R8,R2,R8SV +000002: F8 22 0004 24 STORE R9,R2,R9SV +000006: F9 22 0008 25 26 MOVE R8,R3 ; -- put p in place +00000A: F8 F3 27 MOVECC R9,R4 ; -- put n in place +00000C: F9 E4 28 BEQ KBNQT ; if (n != 0) { +00000E: 02 20 29 30 KBNGLP: ; for (;;) { 31 ADDI R2,R2,ARSIZE +000010: F2 62 000C 32 LIL R1,KBGETC +000014: E1 +000000 33 JSRS R1,R1 ; ch = kbgetc() +000018: F1 B1 34 ADDI R2,R2,-ARSIZE +00001A: F2 62 FFF4 35 36 CMPI R3,CR +00001E: F0 63 FFF3 37 BEQ KBNGLQ ; if (ch = CR) break +000022: 02 13 38 CMPI R3,LF +000024: F0 63 FFF6 39 BEQ KBNGLQ ; if (ch = LF) break +000028: 02 10 40 41 CMPI R9,1 +00002A: F0 69 FFFF 42 BLEU KBNGEI ; if (n > 1) { -- if ch fits in the buffer +00002E: 07 0C 43 44 ADDI R2,R2,ARSIZE +000030: F2 62 000C 45 LIL R1,DSPCH +000034: E1 +000000 46 JSRS R1,R1 ; dspch(ch) -- does not change R3 +000038: F1 B1 47 ADDI R2,R2,-ARSIZE +00003A: F2 62 FFF4 48 49 LOADS R4,R8 +00003E: F4 D8 50 STUFFB R4,R3,R8 +000040: 74 38 51 STORES R4,R8 ; *p = ch +000042: F4 A8 52 ADDSI R8,1 ; p = p + 1 +000044: 18 C1 53 ADDSI R9,-1 ; n = n - 1 +000046: 19 CF 54 55 KBNGEI: ; } 56 BR KBNGLP +000048: 00 E3 57 KBNGLQ: ; } 58 LOADS R4,R8 +00004A: F4 D8 59 STUFFB R4,R0,R8 +00004C: 74 08 60 STORES R4,R8 ; *p = NULL +00004E: F4 A8 61 62 KBNQT: ; } 63 LOAD R8,R2,R8SV +000050: F8 52 0004 64 LOAD R9,R2,R9SV +000054: F9 52 0008 65 LOADS R1,R2 SMAL32 (rev 10/08) "MP3, Douglas Jones" 13:50:14 Page 4 "KBNGETS routine" Wed Nov 4 2009 +000058: F1 D2 66 JUMPS R1 ; return +00005A: F0 B1 67 SMAL32 (rev 10/08) "MP3, Douglas Jones" 13:50:14 Page 5 "Main Program to test KBNG Wed Nov 4 2009 68 SUBTITLE "Main Program to test KBNGETS" 69 ; activation record of main program 70 BUFFER = 0 71 ARSIZE = 16 72 73 START: 74 LIL R2,UNUSED +00005C: E2 +000000 75 LIL R1,DSPINI +000060: E1 +000000 76 JSRS R1,R1 +000064: F1 B1 77 78 LOOP: ; do { 79 LIS R3,1 +000066: D3 01 80 LIS R4,1 +000068: D4 01 81 ADDI R2,R2,ARSIZE +00006A: F2 62 0010 82 LIL R1,DSPAT +00006E: E1 +000000 83 JSRS R1,R1 ; dspat( 1, 1 ) +000072: F1 B1 84 ADDI R2,R2,-ARSIZE +000074: F2 62 FFF0 85 86 LEA R3,BLANKS +000078: F3 70 00A8 87 ADDI R2,R2,ARSIZE +00007C: F2 62 0010 88 LIL R1,DSPST +000080: E1 +000000 89 JSRS R1,R1 ; dspstr( "- -" ) +000084: F1 B1 90 ADDI R2,R2,-ARSIZE +000086: F2 62 FFF0 91 92 LIS R3,2 +00008A: D3 02 93 LIS R4,1 +00008C: D4 01 94 ADDI R2,R2,ARSIZE +00008E: F2 62 0010 95 LIL R1,DSPAT +000092: E1 +000000 96 JSRS R1,R1 ; dspat( 2, 1 ) +000096: F1 B1 97 ADDI R2,R2,-ARSIZE +000098: F2 62 FFF0 98 99 LEA R3,R2,BUFFER +00009C: F3 72 0000 100 LIS R4,16 +0000A0: D4 10 101 ADDI R2,R2,ARSIZE +0000A2: F2 62 0010 102 JSR R1,KBNGETS ; kbngets( buffer, 16 ) +0000A6: F1 30 FF56 103 ADDI R2,R2,-ARSIZE +0000AA: F2 62 FFF0 104 105 LEA R3,R2,BUFFER ; p = buffer +0000AE: F3 72 0000 106 LOOPA: ; do (;;) { 107 LOADS R4,R3 +0000B2: F4 D3 108 EXTB R5,R4,R3 +0000B4: 55 43 109 BZS LOOPAQ ; if ( *p == NULL ) break +0000B6: 02 08 110 111 CMPI R5,' ' +0000B8: F0 65 FFE0 112 BZR LOOPEI ; if ( *p == ' ' ) { +0000BC: 0A 03 113 114 LIS R5,'-' +0000BE: D5 2D 115 STUFFB R4,R5,R3 +0000C0: 74 53 116 STORES R4,R3 ; *p = '-' +0000C2: F4 A3 117 118 LOOPEI: ; } 119 ADDSI R3,1 ; p = p + 1 +0000C4: 13 C1 120 121 BR LOOPA +0000C6: 00 F5 122 LOOPAQ: ; } SMAL32 (rev 10/08) "MP3, Douglas Jones" 13:50:14 Page 6 "Main Program to test KBNG Wed Nov 4 2009 123 124 LIS R3,1 +0000C8: D3 01 125 LIS R4,2 +0000CA: D4 02 126 ADDI R2,R2,ARSIZE +0000CC: F2 62 0010 127 LIL R1,DSPAT +0000D0: E1 +000000 128 JSRS R1,R1 ; dspat( 1, 2 ) +0000D4: F1 B1 129 ADDI R2,R2,-ARSIZE +0000D6: F2 62 FFF0 130 131 LEA R3,BLANKS +0000DA: F3 70 0046 132 ADDI R2,R2,ARSIZE +0000DE: F2 62 0010 133 LIL R1,DSPST +0000E2: E1 +000000 134 JSRS R1,R1 ; dspstr( "- -" ) +0000E6: F1 B1 135 ADDI R2,R2,-ARSIZE +0000E8: F2 62 FFF0 136 137 LIS R3,2 +0000EC: D3 02 138 LIS R4,2 +0000EE: D4 02 139 ADDI R2,R2,ARSIZE +0000F0: F2 62 0010 140 LIL R1,DSPAT +0000F4: E1 +000000 141 JSRS R1,R1 ; dspat( 2, 2 ) +0000F8: F1 B1 142 ADDI R2,R2,-ARSIZE +0000FA: F2 62 FFF0 143 144 LEA R3,R2,BUFFER +0000FE: F3 72 0000 145 ADDI R2,R2,ARSIZE +000102: F2 62 0010 146 LIL R1,DSPST +000106: E1 +000000 147 JSRS R1,R1 ; dspstr( buffer ) +00010A: F1 B1 148 ADDI R2,R2,-ARSIZE +00010C: F2 62 FFF0 149 150 LEA R3,R2,BUFFER +000110: F3 72 0000 151 LOADS R4,R3 +000114: F4 D3 152 EXTB R4,R4,R3 +000116: 54 43 153 CMPI R4,'q' +000118: F0 64 FF8F 154 BZR LOOP ; } while (buffer[0] != q) +00011C: 0A A4 155 156 LIL R1,EXIT +00011E: E1 +000000 157 JSRS R1,R1 +000122: F1 B1 158 +000124: 2D 20 20 20 159 BLANKS: ASCII "- -",0 ; 16 spaces between dashes 20 20 20 20 20 20 20 20 20 20 20 20 20 2D 00 160 ; -1234567890123456- 161 162 END no errors