* THIS VERSION MODIFIED FOR TEESSIDE X68K PC-2.2 CROSS ASSEMBLER * ftp://nyquist.ee.ualberta.ca/pub/motorola/m68k/x68k.zip * CHANGES FROM ORIGINAL MOTOROLA SOURCE: * MANY "MOVE.L" CHANGED TO "MOVEQ" * SIMILAR CHANGES ON A FEW OTHER COMMANDS WHERE * X68K DOES NOT AUTOMATICALLY MOTOROLA-IZE. * X68K HANDLES CHARACTER CONSTANTS DIFFERENTLY * DC.W '1' --> $3100 (GOOD) * DC.W '1'+0 --> $0031 (WHAT!) * ONE DIFFERENCE REMAINS IN A "DON'T CARE" BYTE * $008FE0 1A3C00FF MOVE.B #-1,D5 * ^^ $00 INSTEAD OF $FF *=======================================================================* * MOTOROLA EDUCATION COMPUTER BOARD ROM PROGRAM "TUTOR" REVISION # 1.3 * *=======================================================================* * MACROS ADDR2MEM MACRO PEA \1(PC) MOVE ADDRESS TO MEMORY; POSITION MOVE.L (A7)+,\2 INDEPENDANT = TO "MOVE.L #\1,\2" ENDM SAVEREGS MACRO MOVE.L A7,REGA7 SAVE STACK POINTER LEA SV\@(PC),A7 A7 = RETURN ADDRESS (FOR CALL TO SAVE) MOVE.L A7,TEMP TEMP = RETURN ADDRESS BRA SAVE BSR WITHOUT USING STACK SV\@ DS 0 ENDM *------------------------------------------------------------------------- * EQUATES (in alphabetical order) BELL EQU $07 BLANK EQU $20 BKPOINT EQU $4AFB BUFFSIZE EQU $80 BUFSIZE EQU 80 CR EQU $0D CTLD EQU $04 CTLH EQU $08 CTLW EQU $17 CTLX EQU $18 DEL EQU $7F DELAYC1 EQU $1000 EOT EQU $04 LF EQU $0A LOCVARSZ EQU 16 RESET EQU $43 MASTER RESET FOR ACIA *------------------------------------------------------------------------- * File ARAM DATA VARIABLES 05/10/82 **************************************************************** * N O T E: Ram locations: starting at zero * **************************************************************** ORG $000000 * DEC HEX DESCRIPTION DS.L 1 0 $00 AREA OVERLAID BY ROM SR DS.L 1 1 $01 AND PC AV2 DS.L 1 2 $02 BUS ERROR "BUS " AV3 DS.L 1 3 $03 ADDRESS ERROR "ADDR" AV4 DS.L 1 4 $04 ILL INSTRUCTION "OPCO" DS.L 1 5 $05 DIVIDE BY ZERO "DIV0" DS.L 1 6 $06 CHECK TRAP "CHCK" DS.L 1 7 $07 TRAP V "TP V" AV8 DS.L 1 8 $08 PRIVILEDGE VIOLATION "PRIV" AV9 DS.L 1 9 $09 TRACE DS.L 1 10 $0A 1010 LINE EMULATION "1010" AV11 DS.L 1 11 $0B 1111 LINE EMULATION "1111" AV12 DS.L 1 12 $0C USED AS TEMPORARY STORAGE FOR VECTOR MSGS. DS.L 1 13 $0D NOT USED DS.L 1 14 $0E DS.L 1 15 $0F DS.L 1 16 $10 DS.L 1 17 $11 DS.L 1 18 $12 DS.L 1 19 $13 DS.L 1 20 $14 DS.L 1 21 $15 DS.L 1 22 $16 DS.L 1 23 $17 AV24 DS.L 1 24 $18 0 AUTO VECTORS "SPUR" DS.L 1 25 $19 1 "AV#1" DS.L 1 26 $1A 2 "AV#2" TEST BUTTON DS.L 1 27 $1B 3 "AV#3" DS.L 1 28 $1C 4 "AV#4" DS.L 1 29 $1D 5 "AV#5" DS.L 1 30 $1E 6 "AV#6" AV31 DS.L 1 31 $1F 7 "AV#7 [ABORT BUTTON] DS.L 1 32 $20 TRAP 0 "UT 0" DS.L 1 33 $21 TRAP 1 "UT 1" DS.L 1 34 $22 TRAP 2 "UT 2" DS.L 1 35 $23 TRAP 3 "UT 3" DS.L 1 36 $24 TRAP 4 "UT 4" DS.L 1 37 $25 TRAP 5 "UT 5" DS.L 1 38 $26 TRAP 6 "UT 6" DS.L 1 39 $27 TRAP 7 "UT 7" DS.L 1 40 $28 TRAP 8 "UT 8" DS.L 1 41 $29 TRAP 9 "UT 9" DS.L 1 42 $2A TRAP 10 "UT A" DS.L 1 43 $2B TRAP 11 "UT B" DS.L 1 44 $2C TRAP 12 "UT C" DS.L 1 45 $2D TRAP 13 "UT D" AV46 DS.L 1 46 $2E TRAP 14 "UT E" AV47 DS.L 1 47 $2F TRAP 15 "UT F" AV48 DS.L 1 48 $30 DS.L 1 49 $31 DS.L 1 50 $32 DS.L 1 51 $33 DS.L 1 52 $34 DS.L 1 53 $35 DS.L 1 54 $36 DS.L 1 55 $37 DS.L 1 56 $38 DS.L 1 57 $39 DS.L 1 58 $3A DS.L 1 59 $3B DS.L 1 60 $3C DS.L 1 61 $3D DS.L 1 62 $3E DS.L 1 63 $3F DS.L 1 64 $40 DS.L 1 65 $41 DS.L 1 66 $42 DS.L 1 67 $43 DS.L 1 68 $44 DS.L 1 69 $45 DS.L 1 70 $46 DS.L 1 71 $47 DS.L 1 72 $48 DS.L 1 73 $49 DS.L 1 74 $4A DS.L 1 75 $4B DS.L 1 76 $4C DS.L 1 77 $4D DS.L 1 78 $4E DS.L 1 79 $4F DS.L 1 80 $50 DS.L 1 81 $51 DS.L 1 82 $52 DS.L 1 83 $53 DS.L 1 84 $54 DS.L 1 85 $55 DS.L 1 86 $56 DS.L 1 87 $57 DS.L 1 88 $58 DS.L 1 89 $59 DS.L 1 90 $5A DS.L 1 91 $5B DS.L 1 92 $5C DS.L 1 93 $5D DS.L 1 94 $5E DS.L 1 95 $5F DS.L 1 96 $60 DS.L 1 97 $61 DS.L 1 98 $62 DS.L 1 99 $63 DS.L 1 100 $64 DS.L 1 101 $65 DS.L 1 102 $66 DS.L 1 103 $67 DS.L 1 104 $68 DS.L 1 105 $69 DS.L 1 106 $6A DS.L 1 107 $6B DS.L 1 108 $6C DS.L 1 109 $6D DS.L 1 110 $6E DS.L 1 111 $6F DS.L 1 112 $70 DS.L 1 113 $71 DS.L 1 114 $72 DS.L 1 115 $73 DS.L 1 116 $74 DS.L 1 117 $75 DS.L 1 118 $76 DS.L 1 119 $77 DS.L 1 120 $78 DS.L 1 121 $79 DS.L 1 122 $7A DS.L 1 123 $7B DS.L 1 124 $7C DS.L 1 125 $7D DS.L 1 126 $7E DS.L 1 127 $7F DS.L 1 128 $80 DS.L 1 129 $81 DS.L 1 130 $82 DS.L 1 131 $83 DS.L 1 132 $84 DS.L 1 133 $85 DS.L 1 134 $86 DS.L 1 135 $87 DS.L 1 136 $88 DS.L 1 137 $89 DS.L 1 138 $8A DS.L 1 139 $8B DS.L 1 140 $8C DS.L 1 141 $8D DS.L 1 142 $8E DS.L 1 143 $8F DS.L 1 144 $90 DS.L 1 145 $91 DS.L 1 146 $92 DS.L 1 147 $93 DS.L 1 148 $94 DS.L 1 149 $95 DS.L 1 150 $96 DS.L 1 151 $97 DS.L 1 152 $98 DS.L 1 153 $99 DS.L 1 154 $9A DS.L 1 155 $9B DS.L 1 156 $9C DS.L 1 157 $9D DS.L 1 158 $9E DS.L 1 159 $9F DS.L 1 160 $A0 DS.L 1 161 $A1 DS.L 1 162 $A2 DS.L 1 163 $A3 DS.L 1 164 $A4 DS.L 1 165 $A5 DS.L 1 166 $A6 DS.L 1 167 $A7 DS.L 1 168 $A8 DS.L 1 169 $A9 DS.L 1 170 $AA DS.L 1 171 $AB DS.L 1 172 $AC DS.L 1 173 $AD DS.L 1 174 $AE DS.L 1 175 $AF DS.L 1 176 $B0 DS.L 1 177 $B1 DS.L 1 178 $B2 DS.L 1 179 $B3 DS.L 1 180 $B4 DS.L 1 181 $B5 DS.L 1 182 $B6 DS.L 1 183 $B7 DS.L 1 184 $B8 DS.L 1 185 $B9 DS.L 1 186 $BA DS.L 1 187 $BB DS.L 1 188 $BC DS.L 1 189 $BD DS.L 1 190 $BE DS.L 1 191 $BF DS.L 1 192 $C0 DS.L 1 193 $C1 DS.L 1 194 $C2 DS.L 1 195 $C3 DS.L 1 196 $C4 DS.L 1 197 $C5 DS.L 1 198 $C6 DS.L 1 199 $C7 DS.L 1 200 $C8 DS.L 1 201 $C9 DS.L 1 202 $CA DS.L 1 203 $CB DS.L 1 204 $CC DS.L 1 205 $CD DS.L 1 206 $CE DS.L 1 207 $CF DS.L 1 208 $D0 DS.L 1 209 $D1 DS.L 1 210 $D2 DS.L 1 211 $D3 DS.L 1 212 $D4 DS.L 1 213 $D5 DS.L 1 214 $D6 DS.L 1 215 $D7 DS.L 1 216 $D8 DS.L 1 217 $D9 DS.L 1 218 $DA DS.L 1 219 $DB DS.L 1 220 $DC DS.L 1 221 $DD DS.L 1 222 $DE DS.L 1 223 $DF DS.L 1 224 $E0 DS.L 1 225 $E1 DS.L 1 226 $E2 DS.L 1 227 $E3 DS.L 1 228 $E4 DS.L 1 229 $E5 DS.L 1 230 $E6 DS.L 1 231 $E7 DS.L 1 232 $E8 DS.L 1 233 $E9 DS.L 1 234 $EA DS.L 1 235 $EB DS.L 1 236 $EC DS.L 1 237 $ED DS.L 1 238 $EE DS.L 1 239 $EF DS.L 1 240 $F0 DS.L 1 241 $F1 DS.L 1 242 $F2 DS.L 1 243 $F3 DS.L 1 244 $F4 DS.L 1 245 $F5 DS.L 1 246 $F6 DS.L 1 247 $F7 DS.L 1 248 $F8 DS.L 1 249 $F9 DS.L 1 250 $FA DS.L 1 251 $FB DS.L 1 252 $FC DS.L 1 253 $FD 3RD DS.L 1 254 $FE 2ND DS.L 1 255 $FF VECTOR FOR 1ST IPC DISK CONTROLLER * PSEUDO REGISTERS REGPC DS.L 1 USERS PROGRAM COUNTER REGSR DS.L 1 USERS CONDITION CODES REGS DS.L 8 D REGISTERS DS.L 7 A0 THROUGH A6 REGISTERS REGA7 DS.L 1 A7 REGISTER REGUS DS.L 1 USER STACK **************************************************************** * WORKING STORAGE * * NOTE: SUBROUTINE "INITHRAM" ZEROES RAM... * * FROM "BEGHRAM" THROUGH "ENDHRAM" WHEN IT IS EXECUTED * **************************************************************** BEGHRAM DS 0 INITIALIZE STARTS HERE OFFSET DS.L 8 ASSUMED OFFSETS (VIA "R@" FORMAT) MEMSIZE DS.L 1 MEMORY SIZE IN BYTES BPADD DS.L 8 BREAKPOINT ADDRESSES BPTILL DS.L 1 TEMPORARY BREAKPOINT BPCNT DS.L 9 BREAKPOINT COUNTS BPDATA DS.W 9 HOLD USER WORDS REPLACED BY TRAP IN SET BP BERRD DS.L 2 SPECIAL DATA FOR BUS AND ADDR ERROR EXCEPTIONS SAVEAV4 DS.L 1 HOLDS USER'S AV4 VECTOR (WE USE FOR BP) TEMP DS.L 1 TEMP TRACECNT DS.L 1 TRACE COUNTER (-1=TRACE 1 & RUN) TRACEON DS.W 1 FLAG FOR TRACE ON BPSTATUS DS.W 1 1=PB ARE IN 0=ARE OUT OF MEMORY ECHOPT1 DS.L 1 ECHO FLAG TO PORT ONE * THE FOLLOWING MUST REMAIN AS IS * User docomentation DEPENDS upon it! * OPTIONS DS.W 0 FORCE WORD BOUNDRY DS.B 1 X-ON CHARACTER DS.B 1 X-OFF CHARACTER DS.B 1 NO NO-AUTO LINEFEED DS.B 1 SHORT FORM REGISTER DISPLAY DS.B 1 TM trailing character DS.B 1 TM exit character XONOFF EQU OPTIONS TMCHARS EQU OPTIONS+4 * END of as is section *************************** * TARGET SUPERVISOR STACK * *************************** DS.L 20 SSA7 DS.L 1 ************** * I/O BUFFER * ************** BUFFER DS.B BUFFSIZE DUMPTEMP DS.B 80 HEADER TEMP BUFFER SCREEN1 DS.L 1 PRINT THIS BEFORE TRACE DISPLAY SCREEN2 DS.L 1 PRINT THIS AFTER TRACE DISPLAY NULLPADS DS.B 2 CHARACTER NULL PADS CRPADS DS.B 2 CARRIAGE RETURN NULL PADS OUTTO DS.L 1 HOLDS ADDRESS OF OUTPUT ROUTINE INFROM DS.L 1 HOLDS ADDRESS OF INPUT ROUTINE ALTSER1 DS.L 1 ALTERNATE SERIAL PORT#1 ALTSER2 DS.L 1 ALTERNATE SERIAL PORT#2 INPORT1 DS.L 1 INPUT ROUTINE ADDRESS OUTPORT1 DS.L 1 ADDRESS FOR OUPUT ROUTINE INPORT2 DS.L 1 ADDRESS FOR INPUT ROUTINE OUTPORT2 DS.L 1 FOR OUTPURT ROUTINE INPORT3 DS.L 1 THIS MIGHT BE FOR TAPE OUTPORT3 DS.L 1 THIS MIGHT BE FOR PRINTER INPORT4 DS.L 1 CASSETTE OUTPORT4 DS.L 1 CASSETTE MD1CON DS.W 1 ACIA PROFILE (PORT1/PORT2) PDIPORT DS.L 1 PDIPORT ADDRESS CRTPNT DS.W 1 OUTPUT TO PRINTER AND CRT TAPENULS DS.B 1 NULLS FOR CASSETTE DS.B 1 PAD BYTE CTLINK DS.L 1 POINTER TO FIRST TABLE ENDHRAM DS.W 0 MUST START ON WORD BOUNDRY ********************* * SYSTEM STACK AREA * ********************* DS.W 0 FORCE ON WORD BOUNDRY DS.B 300 ROOM FOR STACK SYSTACK DS.W 1 START OF STACK (ADDRESS DECREASES) DS.B 4 STRETCHED STACK (USED BY 'SAVE') DS.B 120 EXTENDED AREA USED IF DISASSEMBLER DS.B 0 LAST LOW MEMORY LOCATION USED + 1 *------------------------------------------------------------------------- *CODE68K * OFFSET 0 ESKB EQU $00000000 DS 0 TDATA EQU $00000000 DS.B 10 TNB EQU $0000000A DS.B 1 TLSPEC EQU $0000000B DS.B 1 TLENGTH EQU $0000000C DS.W 1 PCOUNTER EQU $0000000E DS.L 1 PTROP EQU $00000012 DS.L 1 POINTER TO OPERAND PENDOP EQU $00000016 DS.L 1 POINTER END OF OPERAND PTRBUFE EQU $0000001A DS.L 1 POINTER TO END OF FORMATED SOURCE LINK EQU $0000001E DS.L 1 SAVE FOR UNLINK ESKE EQU $00000022 DS.B 0 *DCODE68K * OFFSET -LOCVARSZ DDATA EQU $FFFFFFF0 DS.L 3 HISPC EQU $FFFFFFFC DS.L 1 *LOAD * OFFSET -((BUFFSIZE/2)+4) CC EQU $FFFFFFBC DS.L 1 CC (BYTE COUNT) ADDRESS EQU $FFFFFFC0 DS.L 1 ADDRESS + OFFSET LDATA EQU $FFFFFFC4 DS.B 1 *------------------------------------------------------------------------- * File B Init Vectors+Ram 05/29/82 ORG $020000 FIRST DC.L REGA7 SUPERVISOR STACK DC.L START PROGRAM COUNTER V2 BRA.L TRACE ********************************** * INITIALIZE HIGH RAM SUBROUTINE * ********************************** INITHRAM LEA BEGHRAM,A0 START OF WORK RAM (PAST REGISTERS) MOVE.L #(ENDHRAM-BEGHRAM),D0 BYTES TO ZERO CLR.L D1 INIT MOVE.B D1,(A0)+ ZERO MEMORY SUBQ.L #1,D0 BNE INIT ADDR2MEM BERRMSG,AV2 POINT AT BUS TRAP ERROR MESSAGE ROUTINE ADDR2MEM ADDRMSG,AV3 POINT AT ADDRESS TRAP ERROR MESSAGE ROUTINE RTS **************************************************** * SPECIAL HANDLING FOR BUS ERROR AND ADDRESS ERROR * **************************************************** BERRMSG MOVE.L #'BUS ',$30 BRA.S VECTBE ADDRMSG MOVE.L #'ADDR',$30 VECTBE MOVE.L (A7)+,BERRD MOVE.L (A7)+,BERRD+4 SAVEREGS BSR FIXBUF MOVE.W #$D0A,(A6)+ MOVE.W BERRD,D0 BSR PNT4HX FORMAT FUNCTION CODE MOVE.B #BLANK,(A6)+ SPACE MOVE.L BERRD+2,D0 BSR PNT8HX FORMAT ACCESS ADDRESS MOVE.B #BLANK,(A6)+ SPACE MOVE.W BERRD+6,D0 BSR PNT4HX FORMAT INSTRUCTION REGISTER BSR OUTPUT BRA EVECT2 GO DISPLAY REGISTERS & PROMPT MSG008 DC.B 'SYNTAX ' MSG008E DC.B 'ERROR ' MSGEOT DC.B EOT MSG021 DC.B 'WHAT',EOT DC.B 0 PAD BYTE * PRINT WHAT WHAT LEA MSG021(PC),A5 PRINT 'WHAT' AND ENTER MACSBUG WHAT93 BSR.S FIXDATA CLR.W TRACEON MSG BSR OUT1CR BRA MACSBUG * PRINT ERROR ERROR LEA MSG008E(PC),A5 BRA WHAT93 SYNTAX LEA MSG008(PC),A5 'SYNTAX ERROR' BRA WHAT93 * FORMAT PHYSICAL ADDRESS FROM (D0) PPHY LEA MSG019(PC),A5 BSR.S FIXDATA BRA.S P2PHY2 * FORMAT TWO PHYSICAL ADDRESSES FROM (A0) & (A1) P2PHY LEA MSG019(PC),A5 'PHYSICAL ADDRESS=' BSR.S FIXDATA MOVE.L A0,D0 BSR PNT8HX FORMAT ADDR1 MOVE.B #BLANK,(A6)+ SPACE FOR FORMATING MOVE.L A1,D0 P2PHY2 BSR PNT8HX FORMAT ADDR2 BSR OUT1CR DISPLAY IT RTS MSG019 DC.B 'PHYSICAL ADDRESS=',EOT ************************************************************* * -FIXDATA- SUBROUTINE... MOVES MESSAGE POINTED TO BY (A5) * * INTO "BUFFER". EOT, ($04), ENDS * * THE MOVE. AT COMPLETION (A5) IS * * POINTING AT THE BEGINNING, (A6) * * POINTS AT END. * ************************************************************* FIXDATA LEA BUFFER,A6 FIXDADD CMPI.B #EOT,(A5) BEQ.S FIXD2 MOVE.B (A5)+,(A6)+ BRA FIXDADD FIXD2 LEA BUFFER,A5 RTS ************************************************************ * -FIXDCRLF- SUBROUTINE INSERTS A CARRIAGE RETURN AND LINE * * FEED IN FRONT OF THE TEXT, THEN * * USES THE REMAINING PORTION OF THE * * FIXDATA. * ************************************************************ FIXDCRLF LEA BUFFER,A6 MOVE.W #$0D0A,(A6)+ CR,LF BRA FIXDADD *------------------------------------------------------------------------- * File E VERSAbug entry point 01/08/81 ********************** * INITIALIZE VECTORS * ********************** * Set most vectors to point at "????" routine INITVECT LEA 8,A0 Skip (Restart) STACK & ADDRESS vectors LEA ABORTE(PC),A1 A1 = "Default" TRAP ERROR routine address INIT0 MOVE.L A1,(A0)+ INITIALIZE VECTOR CMPA.L #$400,A0 Done? BMI.S INIT0 * RTS * SPECIAL ENTRY THAT DOES NOT CHANGE VECTORS START1S MOVEM.W D0,REGSR+2 Assure good parity. MOVE.W SR,REGSR+2 SAVE TARGET'S STATUS REGISTER MOVE.L A7,REGA7 SAVE TARGET'S STACK MOVE.L (A7),REGPC .PROGRAM COUNTER LEA REGA7,A7 MOVEM.L D0-D7/A0-A6,-(A7) .REGISTERS LEA SYSTACK,A7 BRA START11 ************************ * INITIALIZATION * ************************ * SAVE PROCESSOR REGISTERS (EXCEPT A7 & PC) START MOVEM.W D0,REGSR+2 Assure good parity MOVE.W SR,REGSR+2 SAVE STATUS REGISTER MOVEM.L D0-D7/A0-A6,-(A7) LEA SYSTACK,A7 SET UP STACK MOVE.L A7,REGA7 CLR.L D1 MOVE.L D1,REGPC PC = 000000 BSR INITVECT START11 MOVE.W #$2700,SR MASK OFF INTERRUPTS MOVE.L USP,A0 MOVE.L A0,REGUS USER STACK BSR INITHRAM ZERO (INITIALIZE) HIGH RAM * VECTMSG.SA BSR INITVMSG * H.SA ADDR2MEM CHKBP,AV4 ILLEGAL INSTRUCTION * TM.SA MOVE.W #$1801,TMCHARS CNTLX,CNTL/A * W.SA ADDR2MEM ABORTB,AV31 ABORT * Y.SA ADDR2MEM OUT1CR0,OUTPORT1 INITIALIZE I/O ROUTINES ADDR2MEM OUTPUT20,OUTPORT2 ADDR2MEM PRCRLF,OUTPORT3 PRINTER DRIVER ADDR2MEM TAPEOUT,OUTPORT4 CASSETTE ADDR2MEM PORTIN10,INPORT1 ADDR2MEM PORTIN20,INPORT2 ADDR2MEM PORTIN10,INPORT3 ADDR2MEM TAPEIN,INPORT4 CASSETTE MOVE.B #8,TAPENULS NULLS FOR CASSETTE MOVE.L #PDI1,PDIPORT PRINTER * INITIALIZE MC68230 PI/T MOVE.L #PDI1,A0 BASE ADDRESS OF PI/T MOVE.L #$0000FF00,D0 MOVEP.L D0,1(A0) * SELECT MODE 0 * IRQ'S INACTIVATED * PORT A--ALL BITS OUTPUTS * PORT B--ALL BITS INPUTS MOVE.B #$60,13(A0) SUBMODE 01 FOR PORT A; INTERLOCKED HANDS MOVE.B #$A0,15(A0) SUBMODE 1X FOR PORT B MOVE.B #$30,1(A0) ENABLE HANDSHAKE LINES MOVE.B #$A8,15(A0) RESET AND INIT PRINTER MOVE.L #PDI1+$10,PDIPORT MOVE.B #$A0,15(A0) CLEAR INIT * INITIALIZE THE PDI'S MOVE.W #$1515,MD1CON BSR INITSER RESET & PROGRAM PDI * INITIALIZE XON/XOFF (READER ON / READER OFF) * AUTO-LINE FEED OVERRIDE MOVE.L #$00000000,XONOFF * TRAP14.SA ADDR2MEM TRAP14,AV46 MOVE.L #(254<<24)+CT,CTLINK ************************************************************************ * V E R S I O N N U M B E R A N D P R O M P T * ************************************************************************ MACSBUG MOVE.W #$2700,SR MASK OFF INTERRUPTS LEA SYSTACK,A7 RESTORE SYSTEM STACK BSR SWAPOUT GET BP OUT OF USER MEMORY CLR.L BPTILL GET RID OF 'TILL' BREAKPOINT CLR.L OUTTO INITIALIZE I/O TO DEFAULT CLR.L INFROM INITIALIZE I/O TO DEFAULT CLR.B ECHOPT1 NO ECHO TO PORT1 LEA MSG001(PC),A5 > (Prompt) BSR FIXDATA TST.W TRACEON SEE IF IN TRACE MODE BEQ.S MACSBUG1 MOVE.B #':',(A6)+ IN TRACE MODE MACSBUG1 MOVE.B #'>',(A6)+ PROMPT MOVE.B #BLANK,(A6)+ .. SPACE BSR OUTPUT GO PRINT IT * INPUT LINE BSR FIXBUF GET READY FOR INPUT BSR PORTIN1 GET A COMMAND DECODE6 MOVE.B #BLANK,(A6) BLANK OUT END+1 * DECODE A COMMAND * * DECODE SPECIAL CHARACTER USAGE: * LEADING SPACES IGNORED * LEADING NULLS IGNORED * IF SECOND CHAR * CHAR CAN BE ANY CHAR CMP.L A6,A5 SEE IF ANYTHING ENTERED BMI.S DECODE1 TST.W TRACEON SEE IF IN TRACE MODE BNE TCMDHOT DIRECT TO TRACE 1 COMMAND DECODE1 CMP.L A6,A5 SEE IF AT END OF BUFFER BHI WHAT GO TO 'WHAT' IF CONFUSED MOVE.B (A5),D0 GRAB FIRST CHARACTER CMPI.B #'*',D0 SEND LINE COMMAND BNE.S DECODE10 ADDQ.L #1,A5 GET PAST PHOENY PROMPT BSR OUTPUT2 SEND LINE+CR (NO LF) TO PORT2 BRA MACSBUG REENTER COMMAND MODE DECODE10 CMPI.B #$20,D0 IGNORE LEADING SPACES BNE.S DECODE2 WHERE TO GO IF NOT A SPACE ADDQ.L #1,A5 BUMP START OF BUFFER BRA.S DECODE1 TRY NEXT CHARACTER * DECODE2 MOVE.B (A5),D1 GET 2 LETTERS OF COMMAND LSL.W #8,D1 MAKE ROOM FOR SECOND CHAR MOVE.B 1(A5),D1 GET SECOND CHAR CLR.L D3 D3 = CLEAR "NO" SWITCH DECODE21 LEA SOLIST(PC),A1 A1 = COMMAND LIST ADDRESS DECODE4 MOVE.W (A1)+,D2 D2 = 2 CHAR COMMAND FROM LIST CLR.L D0 CLEAR HIGH BITS MOVE.W (A1)+,D0 D0 = OFFSET FROM START OF ROM TST.L D3 BEQ.S DECODE41 NOT A "NO" TST.B D2 IS "NO" OPTION SUPPORTED THIS COMMAND? BPL DECODE4 NO...THEN RUN OUT OF COMMANDS DECODE41 ANDI.W #$7F7F,D2 CLEAR "INVISABLE" & "NO" BITS CMPI.W #$7F7F,D2 END OF LIST? BEQ WHAT Command not found CMPI.B #'*',D2 SEE IF DON'T CARE CHARACTER BNE.S DECODE3 MOVE.B D1,D2 DEFAULT DECODE3 CMP.W D1,D2 Command from table = the input? BNE DECODE4 COMMAND NOT FOUND CLR.W TRACEON TURN OFF TRACE MODE ADDQ.L #2,A5 POINT A5 PAST 2 DIGIT COMMAND PEA FIRST(PC) BUILD GO TO ADDRESS ADD.L D0,(A7) ON STACK. ADD.L D3,(A7) MOVE.L (A7)+,A0 GO TO COMMAND JSR (A0) * SAVE MARK FOR RETURN BRA MACSBUG * RETURN HERE * * NO COMMAND * NOCMD MOVEQ #-4,D3 SET "NO" SWITCH MOVE.B (A5),D1 MOVE CHAR #3 ASL.W #8,D1 MOVE OVER 1 CHAR MOVE.B 1(A5),D1 MOVE CHAR #4 BRA DECODE21 WHICH "NO" COMMAND? *------------------------------------------------------------------------- * File COMMANDS Command list 06/20/82 MSG001 DC.B CR,LF,'TUTOR 1.3 ',EOT "PROMPT" ******************************************************* * C O P Y R I G H T . 1 9 8 1 . B Y . M O T O R O L A * ******************************************************* * VERSAbug command generation macro CMD MACRO FLAG SET 0 * IFC '\2','HELP=NO' FLAG SET FLAG+$8000 * "Help" will not display this command ENDC IFC '\3','HELP=NO' FLAG SET FLAG+$8000 * "Help" will not display this command ENDC IFC '\2','NORTN=YES' FLAG SET FLAG+$80 * "NO\1".Command ENDC IFC '\3','NORTN=YES' FLAG SET FLAG+$80 * "NO\1".Command ENDC IFC '\1','PER' Check for the "PER" command DC.W '.*'+FLAG * Reg commands (.A2 .D6 .PC .R0 etc.) DC.W \1CMD-FIRST ************************************* ENDC IFNC '\1','PER' If not PERCMD... IFEQ '\1'&($FF00) If 1 digit code, 2nd will be a blank. DC.W '\1 '+FLAG * "\1"....Command - - (Single Digit) ENDC IFNE '\1'&($FF00) If 2 digit code, leave as is. DC.W '\1'+FLAG * "\1"...Command ENDC DC.W \1CMD-FIRST ************************************* ENDC ENDM SOLIST DS 0 Start Of LIST CMD PER,HELP=NO,X,X CMD NO,HELP=NO,X,X CMD BF,X,X CMD BM,X,X CMD BR,NORTN=YES,X,X CMD BS,X,X CMD BT,X,X CMD DC,X,X CMD DF,X,X CMD DU,X,X CMD G,X,X CMD GD,X,X CMD GO,X,X CMD GT,X,X CMD HE,X,X CMD LO,X,X CMD M,X,X CMD MD,X,X CMD MM,X,X CMD MS,X,X CMD OF,X,X CMD PA,NORTN=YES,X,X CMD PF,X,X CMD T,X,X CMD TM,X,X CMD TR,X,X CMD TT,X,X CMD VE,X,X DC.W $FFFF End of list indicator *------------------------------------------------------------------------- * File VECTMSG Messages for vectors 05/29/82 ************************************************************ *Reprogram some VECTORS to specific ERROR handler routines * ************************************************************ INITVMSG LEA VECT(PC),A0 A0 = START OF VECTOR TABLE LEA AV4,A1 A1 = FIRST VECTOR TO INITIALIZE MOVEQ #10,D0 D0 = COUNT VECTI MOVE.L A0,(A1)+ MOVE ADDRESS TO VECTOR ADD.L D0,A0 BUMP ADDRESS CMPA.L #AV11+4,A1 BNE VECTI LEA AV24,A1 A1 = NEXT VECTOR TO INITIALIZE VECTI2 MOVE.L A0,(A1)+ MOVE ADDRESS TO VECTOR ADD.L D0,A0 BUMP ADDRESS CMPA.L #AV48,A1 BNE VECTI2 RTS ************************************************************************* * STANDARD VECTOR "MESSAGE" HANDLING ROUTINE ($30 IS TEMP STORAGE AREA) * ************************************************************************* VECT MOVE.L #'OPCO',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT5 MOVE.L #'DIV0',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT5 MOVE.L #'CHCK',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT5 MOVE.L #'TP V',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT5 MOVE.L #'PRIV',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT5 MOVE.L #'TRAC',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT5 MOVE.L #'1010',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT5 MOVE.L #'1111',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT5 MOVE.L #'SPUR',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT EVECT5 BRA.S EVECT6 MOVE.L #'AV#1',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT6 MOVE.L #'AV#2',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT6 MOVE.L #'AV#3',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT6 MOVE.L #'AV#4',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT6 MOVE.L #'AV#5',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT6 MOVE.L #'AV#6',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT6 MOVE.L #'AV#7',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT EVECT6 BRA.S EVECT7 MOVE.L #'UT 0',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT7 MOVE.L #'UT 1',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT7 MOVE.L #'UT 2',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT7 MOVE.L #'UT 3',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT7 MOVE.L #'UT 4',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT7 MOVE.L #'UT 5',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT7 MOVE.L #'UT 6',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT7 MOVE.L #'UT 7',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT EVECT7 BRA.S EVECT MOVE.L #'UT 8',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT MOVE.L #'UT 9',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT MOVE.L #'UT A',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT MOVE.L #'UT B',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT MOVE.L #'UT C',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT MOVE.L #'UT D',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BRA.S EVECT MOVE.L #'UT E',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT BSR.S EVECT MOVE.L #'UT F',$30 MOVE TO $30, USE SHORT BRANCHES AND PRINT IT * * SAVE REGISTERS AND PRINT VECTOR MSG * EVECT BRA EVECTL *------------------------------------------------------------------------- * File BF Block Fill command 06/16/82 * BLOCK FILL ADDRESS1 ADDRESS2 WORD-DATA BFCMD LEA SYNTAX(PC),A0 BSR FNEXTF BSR GETA BSR CKWADR CHECK WORD BOUNDRY ADDRESS MOVE.L D0,D6 D6 = FROM BEGIN ADDRESS BSR FNEXTF BSR GETA BSR CKWADR CHECK WORD BOUNDRY ADDRESS MOVE.L D0,A1 A1 = FROM END ADDRESS BSR FNEXTF FIND NEXT FIELD BSR GETNUMA D0 = VALUE MOVE.L D0,D7 MOVE.L D6,A0 A0 = FROM BEGIN ADDRESS BSR P2PHY DISPLAY ADDRESSES CMP.L A0,A1 BCS SYNTAX END ADDR TOO SMALL CMPI.L #$10000,D7 BCC SYNTAX WORD OVERFLOW BFCMD11 MOVE.W D7,(A0) STORE DATA MOVE.W (A0)+,D1 CMP.W D7,D1 VERIFY DATA BNE MM90 'DATA DID NOT STORE' CMP.L A0,A1 BCC BFCMD11 BRA MACSBUG *------------------------------------------------------------------------- * File BM BM (Block Move) Command 11/27/81 * BLOCK MOVE BMCMD LEA SYNTAX(PC),A0 BSR FNEXTF BSR GETA MOVE.L D0,A3 A3 = FROM BEGIN ADDRESS BSR FNEXTF BSR GETA MOVE.L D0,A1 A1 = FROM END ADDRESS BSR FNEXTF BSR GETA MOVE.L D0,A2 A2 = TO BEGIN ADDRESS MOVE.L A3,A0 BSR P2PHY PRINT ADDRESSES (A0) & (A1) MOVE.L A2,D0 BSR PPHY PRINT TO ADDRESS MOVE.L A1,D1 SUB.L A3,D1 D1 = SIZE - 1 BCS SYNTAX END LESS THAN BEGIN ADDQ.L #1,D1 D1 = COUNT (SIZE) CMP.L A3,A2 BCC.S BM122 MOVING LOW TO HIGH BM112 MOVE.B (A3)+,(A2)+ MOVING HIGH TO LOW SUBQ.L #1,D1 COUNT BNE BM112 BRA.S BM142 BM122 ADD.L D1,A3 MOVING LOW TO HIGH ADD.L D1,A2 BM132 MOVE.B -(A3),-(A2) SUBQ.L #1,D1 BNE BM132 BM142 BRA MACSBUG *------------------------------------------------------------------------- * File BR BR, GD, GT, TR, TT, PER Commands 12/04/81 * ***T*** TRACE COMMAND TCMD DS 0 "T" Alias for "TR" command TRCMD LEA TCMDHOT(PC),A0 IF NO PARAMTERS BSR FNEXTF FIND NEXT FIELD BSR GETNUMA FIND NUMBER OF INST TO TRACE BSR CKADDR INSURE 24 BITS OR LESS TST.L D0 BNE.S TCMD15 TCMDHOT DS 0 SPECIAL ENTRY FROM DECODE MOVEQ #1,D0 ZERO; MAKE TRACE ONE TCMD15 MOVE.L D0,TRACECNT BRA.S TRACE2 * ** TT ** "TRACE TILL" COMMAND * TTCMD LEA SYNTAX(PC),A0 BSR FNEXTF FIND NEXT FIELD BSR GETA GET ADDRESS BSR CKWADR CHECK WORD BOUNDRY ADDRESS MOVE.L D0,D6 BSR PPHY DISPLAY TILL ADDRESS MOVE.L D6,BPTILL 9TH BP MOVE.L #$FFFF,TRACECNT SET FOR A VERY LONG TIME TRACE2 MOVE.W #-1,TRACEON FOR DECODE OF NEXT COMMAND MOVE.L REGPC,D0 BSR PPHY DISPLAY START (PC) ADDRESS BRA UNTRACE * * ***GT*** RUN PROGRAM TO TEMP BREAKPOINT * GTCMD LEA SYNTAX(PC),A0 GET NUMBER ELSE PRINT "WHAT" BSR FNEXTF FIND NEXT FIELD BSR GETA GET ADDRESS BSR CKWADR CHECK WORD BOUNDRY ADDRESS MOVE.L D0,D6 D6 = UNTIL ADDRESS BSR PPHY PRINT PHYSICAL ADDRESS * IF TILL ADDRESS IN BREAKPOINT TABLE; DISPLAY WHAT LEA BPADD,A0 A0 = POINTER TO BP ADDRESSES MOVEQ #8,D7 D7 = # OF ADDRESS ALLOWED GT21 CMP.L (A0)+,D6 BEQ BCMD55 ALREADY IN TABLE -SHOW TABLE- SUBQ.L #1,D7 BNE GT21 MOVE.L D6,BPTILL 9TH BREAKPOINT BSR.S GOCMD1A NORMAL STARTUP BRA.S GOCMD1 GOSET1 LEA GOCMD1A(PC),A0 WHERE TO GO IF NO PARAMERS BSR FNEXTF FIND NEXT FIELD BSR GETA GET ADDRESS BSR CKWADR CHECK WORD BOUNDRY ADDRESS MOVE.L D0,REGPC GOCMD1A MOVE.L REGPC,D0 (ALSO SUBROUTINE ENTRY) BSR PPHY PRINT ".PC" PHYSICAL ADDRESS RTS GCMD DS 0 "G" ALIAS FOR "GO" GOCMD BSR GOSET1 "GO" (AFTER TRACING ONE INST) GOCMD1 MOVE.L #-1,TRACECNT "FLAG" COUNTER AS SPECIAL BRA UNTRACE GDCMD BSR GOSET1 "GO DIRECT" Command BRA UNSTACK * ***BR*** SET AND PRINT BREAKPOINTS * DELETE ALL BREAKPOINTS NOBRCMD BSR.S FIXBP GET POINTERS BCMD01 CLR.L (A0)+ CLEAR THE ADDRESS TABLE SUBQ.L #1,D7 DO IT 8 TIMES BNE BCMD01 BRA.S BCMD7 DISPLAY EMPTY TABLE FIXBP LEA BPADD,A0 SET UP ADDRESS & COUNTER MOVEQ #8,D7 COUNTER LEA BPCNT,A2 COUNTS RTS ************************************************************ * THIS COMMAND SUPPORTS THE "NO" OPTION. COMMANDS THAT ALLOW * THE "NO" OPTION PROVIDE A HARD BRANCH 4 BYTES BEFORE THE * REGULAR COMMAND. ************************************************************ BRA.L NOBR0 ENTRY FOR "NOBR" (IT LOOKS FOR PARMS OR NOT) BRCMD LEA BCMD7(PC),A0 WHERE TO GO IF NO PARMS BCMD0 BSR FNEXTF FIND NEXT FIELD BSR GETA GET ADDRESS BSR CKWADR CHECK WORD BOUNDRY ADDRESS BSR FIXBP SET UP COUNTER & ADDRESS BCMD00 CMP.L (A0),D0 SEE IF ALREADY IN TABLE BEQ.S BCMD33 GO CHECK FOR COUNT ADDQ.L #4,A2 BUMP OTHER POINTER ADDQ.L #4,A0 BUMP MAIN POINTER SUBQ.L #1,D7 BNE BCMD00 BSR FIXBP GET ADDRESS & POINTERS BCMD3 TST.L (A0) FIND AN EMPTY STOP BNE.S BCMD5 MOVE.L D0,(A0) PUT NEW ADDRESS IN TABLE BCMD33 CLR.L (A2) CLEAR CURRENT COUNT MOVE.B (A5),D1 CHECK INPUT FOR COUNT CMPI.B #';',D1 BNE.S BCMD6 NO COUNT ADDQ.L #1,A5 BUMP THE BUFFER SCANNER BSR GETNUMA GO GET THE COUNT MOVE.L D0,(A2) MOVE TO TABLE BCMD6 LEA BCMD7(PC),A0 WHERE TO GO IF NO MORE PARAMETERS BRA BCMD0 BCMD5 ADDQ.L #4,A0 BUMP TABLE POINTER ADDQ.L #4,A2 BUMP POINTER TO COUNTS SUBQ.L #1,D7 LOOP AROUND BNE BCMD3 BCMD55 LEA MSG008E(PC),A5 TABLE FULL; ERROR MESSAGE BSR FIXDATA BRA.S BCMD77 BCMD7 LEA MSGBR(PC),A5 "BREAKPOINTS" BSR FIXDCRLF BCMD77 BSR OUT1CR BSR FIXBP SET ADDRESS & COUNTER BCMD8 MOVE.L (A2)+,D6 D6 = COUNT MOVE.L (A0),D0 D0 = ADDRESS BEQ.S BCMD9 ZERO ADDRESS BSR FRELADDR FORMAT RELATIVE ADDRESS MOVE.B #BLANK,(A6)+ MOVE.L (A0),D0 FORMAT ABSOLUTE ADDRESS BSR PNT6HX MOVE.L D6,D0 BEQ.S BCMD81 DON'T PRINT ZERO COUNT MOVE.B #';',(A6)+ BSR PNTZHX PRINT WITH ZERO SURPRESS BCMD81 BSR OUT1CR BCMD9 ADDQ.L #4,A0 SUBQ.L #1,D7 LOOP AROUND BNE BCMD8 BRA MACSBUG MSGBR DC.B 'BREAKPOINTS',EOT * NOBR COMMAND NOBR0 LEA NOBRCMD(PC),A0 WHERE TO GO IF NO PARAMETERS NOBR1 BSR FNEXTF FIND NEXT FIELD BSR GETA GO DECODE NUMBER/ADDRESS TST.L D0 BEQ BCMD55 ZERO NOT VALID BREAKPOINT BSR CKWADR CHECK WORD BOUNDRY ADDRESS LEA BPADD,A0 SET UP TABLE POINTER MOVEQ #8,D7 COUNTER NOBR3 MOVE.L (A0),D1 GET BREAKPOINT IN TABLE CMP.L D1,D0 SEE IF SAME BEQ.S NOBR4 ADDQ.L #4,A0 SUBQ.L #1,D7 BNE NOBR3 NOBR4 CLR.L (A0) CLEAR THIS BREAKPOINT LEA BCMD7(PC),A0 WHERE TO GO IF NO PARAMETER BRA NOBR1 *------------------------------------------------------------------------- * File BS BS (Block Search) Command 11/27/81 * * BLOCK SEARCH BS 'LITERAL STRING' * BS [] [;