; 68EC000 MONITOR Version 3.00, modified 1/5/2006. ; ; Version 3.00 modification makes the SBC capable of ; ececuting the EASy68K TRAP #15 tasks 0-2, 4-7, 9 ; and 12-14. This enables the user to switch to the ; windows oriented, public domain, EASy68K ; assembler-emulator package. ; ; Based on Antonakos's monitor with substantial changes ; since the original version lacked many features. ; Register display, register modify, tracing and ; break-pointing were added by Sol Rosenstark (SR). ; Disassembly was added by Dave Harrison (DH). ; ; Serial port assignments <00010000> DREG EQU $10000 ;serial data port <00010001> CSREG EQU $10001 ;control/status port <02> DAVBIT EQU $2 ;data available bit <01> BFEBIT EQU $1 ;buffer empty bit ; Ram storage assignments. <8000> RAM EQU $8000 ;Change for other decoding <8000> RAMLEN EQU $8000 ;$8000 for 62256 <00010000> ENDRAM EQU RAM+RAMLEN USTCK EQU ENDRAM-$150 ;user stack pointer STACK EQU ENDRAM-$CA ;system stack pointer OLD_PC EQU ENDRAM-$CA ;preceding PC UNADR EQU ENDRAM-$C6 ;unasm start address UASMCMD EQU ENDRAM-$C2 ;unasm cmd buf. 32 char UASMOPR EQU ENDRAM-$BA ;****** SPARE EQU ENDRAM-$B9 ;spare byte for future ;use REGTYP EQU ENDRAM-$B8 ;information for return ;from regmod cmd PRTBUF EQU ENDRAM-$A0 ;16 char print buffer INPBUF EQU ENDRAM-$90 ;32 char input buffer SAVREGS EQU ENDRAM-$70 ;D0-D7/A0-A6 storage SAV_A7 EQU ENDRAM-$34 ;A7 storage SAV_PC EQU ENDRAM-$30 ;PC storage SAV_SR EQU ENDRAM-$2C ;SR storage DUMPADR EQU ENDRAM-$2A ;dump start address ; The 2 permanent breakpoint addresses go below BP_AD3 EQU ENDRAM-$26 BP_AD4 EQU ENDRAM-$22 ; Temporary breakpoint addresses go below BP_ADS1 EQU ENDRAM-$1E BP_ADS2 EQU ENDRAM-$1A BP_ADS3 EQU ENDRAM-$16 BP_ADS4 EQU ENDRAM-$12 ; Saved breakpoint opcodes go below OPCOD1 EQU ENDRAM-$E OPCOD2 EQU ENDRAM-$C OPCOD3 EQU ENDRAM-$A OPCOD4 EQU ENDRAM-$8 ; FP_FLG EQU ENDRAM-$6 ;TRACE 1st pass flag SKIPFLG EQU ENDRAM-$5 ;Go skip 1 instruction flag S2_FLG EQU ENDRAM-$4 ;LOAD S2 line flag ECHOFLG EQU ENDRAM-$3 ;Flag for task 12 of EASy68K ; miscellaneous equates <4E4A> TRPTEN EQU $4E4A <4E4B> TRPELF EQU $4E4B <0D> NUMCMD EQU 13 ;# commands checked <8F> DUMPBYT EQU $8F ;# of chars in dump <0D> CR EQU $D <0A> LF EQU $A <08> BS EQU 8 ; equates for RAM testing of exceptions <8000> TRP_11 EQU RAM ;TRAP #11 <8004> TRP_12 EQU RAM+4 ;TRAP #12 <8008> TRP_13 EQU RAM+8 ;TRAP #13 <800C> TRP_14 EQU RAM+12 ;TRAP #14 <8010> FUTURE EQU RAM+16 ; 000000 ORG 0 ; The code below goes into the ROM vector table 000000 0000 FF36 DC.L STACK ;RESET: initial SSP 000004 0000 0400 DC.L START ;RESET: initial PC 000008 0000 1E9A DC.L BUSERR 00000C 0000 1EA8 DC.L ADDERR 000010 0000 1EEA DC.L ILEGAL 000014 0000 1F1C DC.L DIVZERO 000018 0000 0400 DC.L START ;CHK not implemented 00001C 0000 1FA4 DC.L TRAP_V 000020 0000 1FB0 DC.L PRIVIOL ;Privilege violation 000024 0000 0F62 DC.L TRACE 000028 0000 1F40 DC.L LINE_A 00002C 0000 1F72 DC.L LINE_F ;As a precaution, skip reserved vectors 00007C ORG $7C 00007C 0000 1FBC DC.L LEVEL_7 000080 0000 1FD6 DC.L TO_CHARIN ;TRAP #0 000084 0000 1FDC DC.L TO_CHAROUT ;TRAP #1 000088 0000 1FE2 DC.L TO_CRLF ;TRAP #2 00008C 0000 1FE8 DC.L TO_PRTMSG ;TRAP #3 000090 0000 1FEE DC.L TO_PRT_BYT ;TRAP #4 000094 0000 1FF4 DC.L TO_PRT_WRD ;TRAP #5 000098 0000 1FFA DC.L TO_PRT_LON ;TRAP #6 00009C 0000 2000 DC.L TO_GET_BYT ;TRAP #7 0000A0 0000 2006 DC.L TO_GETADR ;TRAP #8 0000A4 0000 062A DC.L TRP_9 ;TRAP #9 0000A8 0000 0650 DC.L TRP_10 ;TRAP #10 0000AC 0000 8000 DC.L TRP_11 ;TRAP #11 0000B0 0000 8004 DC.L TRP_12 ;TRAP #12 0000B4 0000 8008 DC.L TRP_13 ;TRAP #13 0000B8 0000 800C DC.L TRP_14 ;TRAP #14 0000BC 0000 08C0 DC.L TRP_15 ;TRAP #15 ; ; The address below can be much lower if ; few interrupts are used. 000400 ORG $400 ;start of monitor ; 000400 6100 075E START BSR NULLREG ;init user regs 000404 6100 0436 BSR SERINI ;init ser. chip 000408 6100 05DA BSR SIGN_ON ;greet user ; ; This point is reentered after each command ; is executed, so various things are reset. It ; then sends the prompt and calls GETLIN to ; obtain a line of KBD input terminated by ; a CR. The typed line is in the INPBUF. 00040C 027C 7FFF GET_CMD ANDI.W #$7FFF,SR ;disable tracing 000410 0279 7FFF 0000 ANDI.W #$7FFF,SAV_SR ;fix the USR 000416 FFD4 000418 2E7C 0000 FF36 MOVEA.L #STACK,A7 ;init stack 00041E 6100 0484 BSR CRLF 000422 123C 0025 MOVE.B #'%',D1 ;output prompt 000426 6100 0450 BSR CHAROUT 00042A 6100 06D2 BSR GETLIN ;fill INPBUF from KBD 00042E 2C7C 0000 FF70 MOVEA.L #INPBUF,A6 ;repoint to buffer 000434 6100 071E BSR SKIPSP ;skip leading SPs ; ; A6 now points to the first non SP char. ; This is put in D1, changed to UC. It will ; put the last character preceding a CR or ; SP into D2 and go on to SEARCH. Thus ; typing command ABCD is the same as D. ; This routine leaves A6 pointing one beyond ; the CR or SP which follows the principal ; command character where it stays until the ; command service routine is executed. 000438 121E INCOM MOVE.B (A6)+,D1 00043A 6100 06B0 BSR UP_CASE 00043E 0C01 000D CMPI.B #CR,D1 ;test for CR 000442 670A BEQ.S SEARCH 000444 0C01 0020 CMPI.B #' ',D1 ;test for SP 000448 6704 BEQ.S SEARCH 00044A 1401 MOVE.B D1,D2 ;insert it into D2 00044C 60EA BRA.S INCOM ;get next char ; ; Put the # of commands in D5, the command ; addresses in A1 and the command character ; addresses in A2. If the command letter is ; legit then jump to the command routine, ; else signal by typing "Bad Command." 00044E 1A3C 000D SEARCH MOVE.B #NUMCMD,D5 ;# of cmds 000452 227C 0000 2526 MOVEA.L #CMD_ADR,A1 ;A1 -> cmd addrs 000458 247C 0000 255A MOVEA.L #COMANDS,A2 ;A2 -> cmd chars 00045E B41A TSTNEXT CMP.B (A2)+,D2 ;test again 000460 670A BEQ.S DO_JUMP 000462 5889 ADDQ.L #4,A1 ;point to next cmd 000464 5305 SUBQ.B #1,D5 ;all cmds checked? 000466 66F6 BNE.S TSTNEXT 000468 6000 05D4 BRA CMDERR ;illegal command 00046C 2251 DO_JUMP MOVEA.L (A1),A1 ;get command addr 00046E 4ED1 JMP (A1) ;and go execute it ; ; Fill memory between 2 addresses with a ; HEX value. 000470 6100 064E FILL BSR GETADR ;get start addr 000474 2242 MOVEA.L D2,A1 000476 6100 0648 BSR GETADR ;get end addr 00047A 5282 ADDQ.L #1,D2 ;Needed because using (A1)+ 00047C 2442 MOVEA.L D2,A2 00047E 6100 0640 BSR GETADR ;get HEX byte 000482 B5C9 FILLEM CMPA.L A1,A2 ;at end yet? 000484 6700 FF86 BEQ GET_CMD 000488 12C2 MOVE.B D2,(A1)+ ;move'em 00048A 60F6 BRA.S FILLEM ; ; Dumps memory. The starting address is ; fixed to end in 00. Displays in rows of ; 16 bytes. Displays ASCII equivalents too. 00048C 0C2E 000D FFFF DUMP CMPI.B #CR,-1(A6) ;is previous CR? 000492 6612 BNE.S DUMP0 ;no, so proceed 000494 2439 0000 FFD6 MOVE.L DUMPADR,D2 ;get old starting address 00049A 2842 MOVEA.L D2,A4 00049C 0682 0000 008F ADDI.L #DUMPBYT,D2 ;get standard # of lines 0004A2 2A42 MOVEA.L D2,A5 0004A4 603A BRA.S ADR_OUT ;all done, so dump 0004A6 0C16 002C DUMP0 CMPI.B #',',(A6) ;is char a comma? 0004AA 660C BNE.S DUMP0A ;no, then get new start addr 0004AC 2439 0000 FFD6 MOVE.L DUMPADR,D2 ;get old dump addr 0004B2 2A42 MOVEA.L D2,A5 ;into A5 0004B4 528E ADDQ.L #1,A6 ;point past comma 0004B6 601C BRA.S DUMP1 ;get count 0004B8 6100 0606 DUMP0A BSR GETADR ;get start address 0004BC 0202 00F0 ANDI.B #$F0,D2 ;zero lower nibble 0004C0 2842 MOVEA.L D2,A4 0004C2 0C2E 000D FFFF CMPI.B #CR,-1(A6) ;is previous CR? 0004C8 660A BNE.S DUMP1 ;no, so proceed 0004CA 0682 0000 008F ADDI.L #DUMPBYT,D2 0004D0 2A42 MOVEA.L D2,A5 0004D2 600C BRA.S ADR_OUT 0004D4 6100 05EA DUMP1 BSR GETADR ;get # of lines to display 0004D8 5382 SUBQ.L #1,D2 ;reduce by 1 0004DA E98A LSL.L #4,D2 ;x16 bytes per line 0004DC 2A42 MOVEA.L D2,A5 0004DE DBCC ADDA.L A4,A5 ;add the start address 0004E0 6100 03C2 ADR_OUT BSR CRLF ;new line please 0004E4 240C MOVE.L A4,D2 ;print address 0004E6 6100 0532 BSR PRT_SIX 0004EA 6100 03CE BSR TWO_SP ;and some spaces 0004EE 141C BYTEOUT MOVE.B (A4)+,D2 ;get a byte 0004F0 6100 04FE BSR PRT_BYT ;print the byte 0004F4 6100 03BC BSR SPACE 0004F8 220C MOVE.L A4,D1 ;done 16 yet? 0004FA 0281 0000 000F ANDI.L #$F,D1 000500 66EC BNE.S BYTEOUT 000502 99FC 0000 0010 SUBA.L #16,A4 ;back up 16 bytes 000508 6100 03A8 BSR SPACE 00050C 121C ASC_OUT MOVE.B (A4)+,D1 ;get a byte 00050E 0C01 0020 CMPI.B #' ',D1 ;is it printable? 000512 6B06 BMI.S UN_PRT 000514 0C01 007D CMPI.B #$7D,D1 000518 6B04 BMI.S SEND_IT 00051A 123C 002E UN_PRT MOVE.B #'.',D1 ;unprintables -> . 00051E 6100 0358 SEND_IT BSR CHAROUT ;print ASCII equiv 000522 240C MOVE.L A4,D2 ;done 16 yet? 000524 0282 0000 000F ANDI.L #$F,D2 00052A 66E0 BNE.S ASC_OUT 00052C 23CC 0000 FFD6 MOVE.L A4,DUMPADR 000532 6100 0320 BSR INSTAT ;key pressed? 000536 670C BEQ.S SEND1 ;no, go on 000538 6100 032E BSR CHARIN ;yes, get the char 00053C 0C01 0003 CMPI.B #3,D1 ;Is it ^C? 000540 6700 FECA BEQ GET_CMD ;If yes then quit 000544 BBCC SEND1 CMPA.L A4,A5 ;Is A4 > A5? 000546 6B00 FEC4 BMI GET_CMD ;Yes, then quit 00054A 6094 BRA.S ADR_OUT ; ; Set breakpoints and transfer execution ; to the user program. ; G starts execution at current address ; G is obvious ; G , continues from current ; program counter. 00054C 0C2E 000D FFFF GO CMPI.B #CR,-1(A6) ;is previous CR? 000552 6738 BEQ.S GO3 ;yes, so start 000554 0C16 002C CMPI.B #',',(A6) ;is char a comma? 000558 6604 BNE.S GO1 ;no, then go on 00055A 528E ADDQ.L #1,A6 ;point past comma 00055C 6012 BRA.S GO2 ;get breakpoints ; get execution address 00055E 6100 0560 GO1 BSR GETADR 000562 23C2 0000 FFD0 MOVE.L D2,SAV_PC ;save it 000568 0C2E 000D FFFF CMPI.B #CR,-1(A6) ;is previous CR? 00056E 671C BEQ.S GO3 ;yes, so start ; get first breakpoint address 000570 6100 054E GO2 BSR GETADR 000574 23C2 0000 FFE2 MOVE.L D2,BP_ADS1 ;save it 00057A 0C2E 000D FFFF CMPI.B #CR,-1(A6) ;is previous CR? 000580 670A BEQ.S GO3 ;yes, so start ; get second breakpoint address 000582 6100 053C BSR GETADR 000586 23C2 0000 FFE6 MOVE.L D2,BP_ADS2 ;save it ; Now move-in the 2 permanent addresses 00058C 23F9 0000 FFDA GO3 MOVE.L BP_AD3,BP_ADS3 000592 0000 FFEA 000596 23F9 0000 FFDE MOVE.L BP_AD4,BP_ADS4 00059C 0000 FFEE ; Duplicate breakpoints wreak havoc when set. To avoid ; these problems RID_EQ nulls duplicate entries. 0005A0 6100 0062 BSR RID_EQ ; Now all breakpoints are in place. If a breakpoint ; address is 0 then it's not set. If not 0 then ; proceed to see if the address is the same as that ; at SAV_PC. If yes then execute 1 instruction and ; now proceed to set the breakpoint by saving its ; opcode and replacing it with TRAP #10. This is to ; be done but once. 0005A4 207C 0000 FFE2 MOVEA.L #BP_ADS1,A0 ;A0 -> BP_ADS1 0005AA 227C 0000 FFF2 MOVEA.L #OPCOD1,A1 ;A1 -> OPCOD1 0005B0 51C1 SF D1 ;succcesive instructions flag 0005B2 303C 0003 MOVE.W #3,D0 ;loop counter in D0.W 0005B6 4A90 GO4 TST.L (A0) 0005B8 6722 BEQ.S GO6 ;if bkpt addr is 0 then ignore 0005BA 2439 0000 FFD0 MOVE.L SAV_PC,D2 ;Not 0, so compare bkpt 0005C0 B490 CMP.L (A0),D2 ;addr. with user PC 0005C2 6610 BNE.S GO5 ;Go and set if not same 0005C4 4A01 TST.B D1 ;Is this the 1st occurrence? 0005C6 660C BNE.S GO5 ;No, the go set it. 0005C8 48E7 80C0 MOVEM.L D0/A0-A1,-(A7) ;If bkpt = (SAV_PC) 0005CC 6120 BSR.S GOSKIP ;then skip one instruction 0005CE 4CDF 0301 MOVEM.L (A7)+,D0/A0-A1 0005D2 50C1 ST D1 ;Make sure this happens but once ; Okay, now finally set the breakpoints. 0005D4 2450 GO5 MOVEA.L (A0),A2 ;get bkpt addr 0005D6 3292 MOVE.W (A2),(A1) ;save and replace 0005D8 34BC 4E4A MOVE.W #TRPTEN,(A2) ;its opcode ; Bump pointers to the next breakpoint 0005DC 41E8 0004 GO6 LEA 4(A0),A0 ;bump A0 0005E0 43E9 0002 LEA 2(A1),A1 ;bump A1 0005E4 51C8 FFD0 DBRA D0,GO4 0005E8 6100 05CC BSR REGREST ;restore user regs 0005EC 4E73 RTE ;and go to user program ; ; This is the routine for doing a hidden ; trace tracing of a single line of code. 0005EE 50F9 0000 FFFB GOSKIP ST SKIPFLG ;set the flag 0005F4 51F9 0000 FFFA SF FP_FLG ;clear flag 0005FA 6100 05BA BSR REGREST ;restore user regs 0005FE 007C 8000 ORI.W #$8000,SR ;enable tracing 000602 4E73 RTE ; ; This routine nulls duplicate entries. 000604 323C 0003 RID_EQ MOVE.W #3,D1 000608 207C 0000 FFE2 MOVEA.L #BP_ADS1,A0 ;point to 1st num 00060E 3801 RID1 MOVE.W D1,D4 000610 43E8 0004 LEA 4(A0),A1 ;point to 2nd num 000614 2410 RID2 MOVE.L (A0),D2 ;put it in D2 000616 B491 CMP.L (A1),D2 000618 6602 BNE.S RID3 ;skip if not equal 00061A 4291 CLR.L (A1) 00061C 5889 RID3 ADDQ.L #4,A1 ;point to next enty 00061E 5344 SUBQ.W #1,D4 ;decrement inner loop counter 000620 66F2 BNE.S RID2 000622 5888 ADDQ.L #4,A0 ;point to next enty 000624 5341 SUBQ.W #1,D1 000626 66E6 BNE.S RID1 000628 4E75 RTS ; ; This routine saves the user registers ; after a TRAP #9 program termination, ; prints the address at which the TRAP #9 ; instruction was found and puts back the ; original opcodes at all breakpoints. 00062A 6100 055E TRP_9 BSR REG_SAV 00062E 267C 0000 2D3A MOVEA.L #MSG_NIN,A3 ;point to message 000634 6100 025E BSR PRTMSG 000638 2439 0000 FFD0 MOVE.L SAV_PC,D2 ;get user PC value 00063E 5582 SUBQ.L #2,D2 ;adjust address 000640 6100 03D8 BSR PRT_SIX 000644 6100 025E BSR CRLF 000648 6100 0030 BSR CLR_BK ;clear the bkpts 00064C 6000 FDBE BRA GET_CMD ;all done ; ; This TRAP #10 routine is executed when a ; breakpoint is encountered. It saves the ; registers and prints MSG_TEN. It then ; puts back the original opcodes at all ; breakpoints. 000650 6100 0538 TRP_10 BSR REG_SAV 000654 267C 0000 2D5B MOVEA.L #MSG_TEN,A3 ;point to message 00065A 6100 0238 BSR PRTMSG 00065E 2439 0000 FFD0 MOVE.L SAV_PC,D2 ;get user PC value 000664 5582 SUBQ.L #2,D2 ;adjust address 000666 23C2 0000 FFD0 MOVE.L D2,SAV_PC ;store adjusted PC 00066C 6100 03AC BSR PRT_SIX 000670 6100 0232 BSR CRLF 000674 6104 BSR.S CLR_BK ;clear the bkpts 000676 6000 FD94 BRA GET_CMD ;all done ; ; Removes any breakpoints that existed and ; puts back the appropriate opcodes. ; First remove bkpts set by GO command. 00067A 207C 0000 FFE2 CLR_BK MOVEA.L #BP_ADS1,A0 ;A0 -> BP_AD1 000680 227C 0000 FFF2 MOVEA.L #OPCOD1,A1 ;A1 -> OPCOD1 000686 7003 MOVEQ #3,D0 ;loop 4 times 000688 4A90 CLR_BK1 TST.L (A0) 00068A 6706 BEQ.S CLR_BK2 ;if 0 then ignore 00068C 2450 MOVEA.L (A0),A2 ;get breakpoint addr 00068E 3491 MOVE.W (A1),(A2) ;restore opcode 000690 4290 CLR.L (A0) 000692 41E8 0004 CLR_BK2 LEA 4(A0),A0 ;bump A0 000696 43E9 0002 LEA 2(A1),A1 ;bump A1 00069A 51C8 FFEC DBRA D0,CLR_BK1 00069E 4E75 RTS ; 0006A0 6100 041E VERIFY BSR GETADR ;get start addr 0006A4 2242 MOVEA.L D2,A1 ;start addr in A1 0006A6 6100 0418 BSR GETADR ;get end addr 0006AA 2442 MOVEA.L D2,A2 ;end addr in A2 0006AC 528A ADDQ.L #1,A2 ;Needed because using (A1)+ 0006AE 6100 0410 BSR GETADR ;get dest addr 0006B2 2642 MOVEA.L D2,A3 ;dest addr in A3 0006B4 B709 VERIF1 CMPM.B (A1)+,(A3)+ ;compare bytes 0006B6 660C BNE.S FAIL 0006B8 B5C9 CMPA.L A1,A2 ;at end addr yet? 0006BA 66F8 BNE.S VERIF1 0006BC 47F9 0000 2DAC LEA PASSMSG,A3 ;POINT TO MESSAGE 0006C2 6006 BRA.S QUIT 0006C4 47F9 0000 2DC7 FAIL LEA FAILMSG,A3 ;POINT TO MESSAGE 0006CA 6100 01C8 QUIT BSR PRTMSG 0006CE 6000 FD3C BRA GET_CMD ; 0006D2 6100 03EC MOOV BSR GETADR ;get start addr 0006D6 2242 MOVEA.L D2,A1 0006D8 6100 03E6 BSR GETADR ;get end addr 0006DC 2442 MOVEA.L D2,A2 0006DE 528A ADDQ.L #1,A2 ;Needed because using (A1)+ 0006E0 6100 03DE BSR GETADR ;get dest addr 0006E4 2642 MOVEA.L D2,A3 0006E6 16D9 MOOV1 MOVE.B (A1)+,(A3)+ ;move bytes 0006E8 B5C9 CMPA.L A1,A2 ;at end addr yet? 0006EA 66FA BNE.S MOOV1 0006EC 6000 FD1E BRA GET_CMD ; ; Edit data on the screen 0006F0 6100 03CE EDIT BSR GETADR ;get start address 0006F4 2442 MOVEA.L D2,A2 ;point A2 to memory 0006F6 6100 01AC BSR CRLF ;new line please 0006FA 240A NEW_DAT MOVE.L A2,D2 ;print data address 0006FC 6100 031C BSR PRT_SIX 000700 6100 01B0 BSR SPACE 000704 1412 MOVE.B (A2),D2 ;get the data stored 000706 6100 02E8 BSR PRT_BYT ;and show it 00070A 123C 003F MOVE.B #'?',D1 ;Print change prompt 00070E 6100 0168 BSR CHAROUT 000712 6100 035E BSR GET_BYT ;get new data 000716 4A02 TST.B D2 ;no change desired? 000718 6702 BEQ.S ENTR_IT ;jump if new data 00071A 1212 MOVE.B (A2),D1 ;reget old data 00071C 14C1 ENTR_IT MOVE.B D1,(A2)+ ;save data and bump 00071E 61DA BSR.S NEW_DAT ;pointer ; ; Display or modify register data as ; required. SEARCH left A6 pointing one ; beyond the CR or SP which follows the ; principal command character. ; Next line added in mon209 to set where to return 000720 13FC 0000 0000 REGMOD MOVE.B #$00,REGTYP 000726 FF48 000728 0C2E 000D FFFF CMPI.B #CR,-1(A6) ;is previous CR? 00072E 6608 BNE.S REGMOD0 ;no, so skip 000730 6100 04AA BSR REGPRT1 000734 6000 FCD6 BRA GET_CMD 000738 6100 041A REGMOD0 BSR SKIPSP ;skip leading SPs 00073C 121E MOVE.B (A6)+,D1 ;get the next char 00073E 6100 03AC BSR UP_CASE 000742 267C 0000 FFB0 MOVEA.L #SAVREGS+32,A3 ;temporary 000748 0C01 0041 CMPI.B #'A',D1 00074C 6778 BEQ.S REGMOD1 ;A reg so jump 00074E 267C 0000 FF90 MOVEA.L #SAVREGS,A3 ;temporary 000754 0C01 0044 CMPI.B #'D',D1 000758 676C BEQ.S REGMOD1 ;D reg so jump 00075A 267C 0000 FFD0 MOVEA.L #SAV_PC,A3 ;temporary 000760 0C01 0050 CMPI.B #'P',D1 000764 6600 00C8 BNE REGME ; No command errors, so we modify the PC. 000768 1801 MOVE.B D1,D4 ;will need 'P' later 00076A 121E MOVE.B (A6)+,D1 ;get next char 00076C 6100 037E BSR UP_CASE 000770 0C01 0043 CMPI.B #'C',D1 ;is it 'C'? 000774 6600 00B8 BNE REGME ;no,so quit 000778 1601 MOVE.B D1,D3 ;will need 'C' later 00077A 121E MOVE.B (A6)+,D1 ;get last char 00077C 0C01 000D CMPI.B #CR,D1 ;is it CR? 000780 6600 00AC BNE REGME ;no,so quit 000784 6100 011E BSR CRLF ;passed all tests 000788 1204 MOVE.B D4,D1 ;display the 'P' 00078A 6100 00EC BSR CHAROUT 00078E 1203 MOVE.B D3,D1 ;display the 'C' 000790 6100 00E6 BSR CHAROUT 000794 123C 003A MOVE.B #':',D1 ;also a ':' 000798 6100 00DE BSR CHAROUT 00079C 6100 0114 BSR SPACE ;a ' ' looks good 0007A0 241B MOVE.L (A3)+,D2 ;get the data in D2 0007A2 6100 026C BSR PRT_LON ;display it 0007A6 6100 010A BSR SPACE ;another ' ' 0007AA 123C 003F MOVE.B #'?',D1 ;now a '?' 0007AE 6100 00C8 BSR CHAROUT 0007B2 6100 00FE BSR SPACE ;one more ' ' 0007B6 6100 02F4 BSR GETADRT ;get new data in D2 0007BA 4A06 TST.B D6 ;check flag for CR 0007BC 6600 0062 BNE REGMQ ;was FF so quit it 0007C0 2702 MOVE.L D2,-(A3) ;save it 0007C2 6000 005C BRA REGMQ ;done ;This portion modifies the A and D registers 0007C6 1801 REGMOD1 MOVE.B D1,D4 ;save the A or D 0007C8 121E MOVE.B (A6)+,D1 ;get register # 0007CA 0C01 0030 CMPI.B #'0',D1 ;within bounds? 0007CE 6B5E BMI.S REGME ;< than, no good 0007D0 0C01 0037 CMPI.B #'7',D1 0007D4 6E58 BGT.S REGME ;> than, no good 0007D6 1601 MOVE.B D1,D3 ;will need # later 0007D8 121E MOVE.B (A6)+,D1 ;get last char 0007DA 0C01 000D CMPI.B #CR,D1 ;is it CR? 0007DE 664E BNE.S REGME ;no, so quit 0007E0 1203 MOVE.B D3,D1 ;find displacement 0007E2 0281 0000 000F ANDI.L #$F,D1 ;remove ASCII bias 0007E8 E581 ASL.L #2,D1 ;multiply by 4 0007EA D7C1 ADDA.L D1,A3 ;A3 points correctly 0007EC 1204 MOVE.B D4,D1 ;display 'A' or 'D' 0007EE 6100 0088 BSR CHAROUT 0007F2 1203 MOVE.B D3,D1 ;display the # 0007F4 6100 0082 BSR CHAROUT 0007F8 123C 003A MOVE.B #':',D1 ;also a ':' 0007FC 617A BSR.S CHAROUT 0007FE 6100 00B2 BSR SPACE ;a ' ' looks good 000802 241B MOVE.L (A3)+,D2 ;get the data in D2 000804 6100 020A BSR PRT_LON ;display it 000808 6100 00A8 BSR SPACE ;another ' ' 00080C 123C 003F MOVE.B #'?',D1 ;now a '?' 000810 6166 BSR.S CHAROUT 000812 6100 009E BSR SPACE ;one more ' ' 000816 6100 0294 BSR GETADRT ;get new data in D2 00081A 4A06 TST.B D6 ;check flag for CR 00081C 6602 BNE.S REGMQ ;was FF so quit it 00081E 2702 MOVE.L D2,-(A3) ;save it ; ; Added in mon209 to exit from different regmod types 000820 0C39 00FF 0000 REGMQ CMPI.B #$FF,REGTYP 000826 FF48 000828 6600 FBE2 BNE GET_CMD 00082C 4E75 RTS ; 00082E 0C39 00FF 0000 REGME CMPI.B #$FF,REGTYP 000834 FF48 000836 6600 0206 BNE CMDERR 00083A 4E75 RTS ; 00083C 207C 0001 0001 SERINI MOVEA.L #CSREG,A0 000842 10BC 00AA MOVE.B #$AA,(A0) 000846 10BC 0040 MOVE.B #$40,(A0) 00084A 10BC 004E MOVE.B #$4E,(A0) ;$CE for 2 stops 00084E 10BC 0027 MOVE.B #$27,(A0) 000852 4E75 RTS ; ; Returns Z-flag = 0 if no char. 000854 48E7 8000 INSTAT MOVEM.L D0,-(A7) 000858 1039 0001 0001 MOVE.B CSREG,D0 ;get status 00085E 0200 0002 ANDI.B #DAVBIT,D0 ;mask 000862 4CDF 0001 MOVEM.L (A7)+,D0 ;Movem affects no flags 000866 4E75 RTS ; ; Returns 7-bit char in D1.B 000868 61EA CHARIN BSR.S INSTAT ;get status 00086A 67FC BEQ.S CHARIN ;no char so loop 00086C 1239 0001 0000 MOVE.B DREG,D1 ;get char 000872 0201 007F ANDI.B #$7F,D1 ;reset bit 7 000876 4E75 RTS ; ; Sends out char in D1.B 000878 48E7 8000 CHAROUT MOVEM.L D0,-(A7) 00087C 1039 0001 0001 MOVE.B CSREG,D0 ;get status 000882 0200 0001 ANDI.B #BFEBIT,D0 ;is buffer empty? 000886 4CDF 0001 MOVEM.L (A7)+,D0 ;Movem affects no flags 00088A 67EC BEQ.S CHAROUT ;no, so loop 00088C 13C1 0001 0000 MOVE.B D1,DREG ;buffer's empty, send 000892 4E75 RTS ; ; This routine prints a message pointed to ; by A3. The message must end in a NULL. 000894 121B PRTMSG MOVE.B (A3)+,D1 ;get a char 000896 6704 BEQ.S PRTMEX ;quit on 0 000898 61DE BSR.S CHAROUT ;display the char 00089A 60F8 BRA.S PRTMSG ;do it again 00089C 4E75 PRTMEX RTS ; ; Inputs and echoes a character 00089E 61C8 CHARIO BSR.S CHARIN 0008A0 61D6 BSR.S CHAROUT 0008A2 4E75 RTS ; ; Send out CR and LF 0008A4 123C 000D CRLF MOVE.B #CR,D1 ;send ASCII CR 0008A8 61CE BSR.S CHAROUT 0008AA 123C 000A MOVE.B #LF,D1 ;send ASCII LF 0008AE 61C8 BSR.S CHAROUT 0008B0 4E75 RTS ; ; Send out a SP 0008B2 123C 0020 SPACE MOVE.B #' ',D1 ;send ASCII SP 0008B6 61C0 BSR.S CHAROUT 0008B8 4E75 RTS ; ; Send two spaces to the screen 0008BA 61F6 TWO_SP BSR.S SPACE 0008BC 61F4 BSR.S SPACE 0008BE 4E75 RTS ; *************************************** ; The TRAP #15 routines below were added ; to make the SBC capable of ececuting ; the EASy68K tasks 0-2, 4-7, 9 and ; 12-14. ; *************************************** ;Implementation of the EASy68K trap #15 tasks. 0008C0 trp_15 ; Task #0. Displays string at (A1), D1.W long, with CR, LF. 0008C0 4A00 tst.b d0 0008C2 6758 beq.s task0 ; Task #1. Displays string at (A1), D1.W long, without CR, LF. 0008C4 0C00 0001 cmpi.b #1,d0 0008C8 6758 beq.s task1 ; Task #2. Read, and echo, string from KBD and store at (A1). ; Length returned in D1.W (max 80). 0008CA 0C00 0002 cmpi.b #2,d0 0008CE 6764 beq.s task2 ; Task #4. It converts a typed decimal string into a HEX ; number in D1.L. Max DEC number is 655,359. Input is ; terminated with . 0008D0 0C00 0004 cmpi.b #4,d0 0008D4 6700 0092 beq task4 ; Task #5. Get a KBD char into D1.B. If ECHOFLG is ; set then echo char to screen. 0008D8 0C00 0005 cmpi.b #5,d0 0008DC 6700 00BA beq task5 ; Task #6. Send the char in D1.B to the screen. 0008E0 0C00 0006 cmpi.b #6,d0 0008E4 6700 00C4 beq task6 ; Task #7. Get KBD status in D1.B. 1 if key was pressed, 0 if not. 0008E8 0C00 0007 cmpi.b #7,d0 0008EC 6700 00C2 beq task7 ; Task #9. Make a graceful exit using the old TRAP #9 feature. 0008F0 0C00 0009 cmpi.b #9,d0 0008F4 6700 FD34 beq trp_9 ; Task #12. If D1.B is zero then clear the ECHOFLG, else set it. 0008F8 0C00 000C cmpi.b #12,d0 0008FC 6700 00C0 beq task12 ; Task #13. Print on screen the NULL terminated string pointed ; to by A1, followed by CR, LF. 000900 0C00 000D cmpi.b #13,d0 000904 6700 00CA beq task13 ; Task #14. Print on screen the NULL terminated string pointed ; to by A1 without CR, LF. 000908 0C00 000E cmpi.b #14,d0 00090C 6700 00CE beq task14 ; If none of the above then send message and terminate the program. 000910 47F9 0000 2E05 lea uimpmsg,a3 000916 4E43 trap #3 000918 6000 FD10 bra trp_9 ; Implementation of the task #0. Displays string at (A1), D1.W long, ; with CR, LF. 00091C 6108 task0 bsr.s prtstr 00091E 6184 bsr.s crlf 000920 4E73 rte ; ; Implementation of the task #1. Displays string at (A1), D1.W long, ; without CR, LF. 000922 6102 task1 bsr.s prtstr 000924 4E73 rte ; 000926 3E01 prtstr move.w d1,d7 ;D7.W is the loop counter 000928 1219 prtstr1 move.b (a1)+,d1 00092A 6100 FF4C bsr charout ;print it 00092E 5347 subq.w #1,d7 000930 66F6 bne.s prtstr1 000932 4E75 rts ; ; Implementation of the task #2. Read, and echo, string from KBD and ; store at (A1). Length returned in D1.W (max $FFFF). BS is implemented. ; Process teminated with . Screen gets a CR, LF at end of input. 000934 4247 task2 clr.w d7 ;temporary char counter 000936 6100 FF30 task2a bsr charin ;get a char 00093A 0C01 000D cmpi.b #cr,d1 ;if CR then done 00093E 6720 beq.s task2ex 000940 0C01 0008 cmpi.b #bs,d1 000944 670A beq.s task2bs 000946 6100 FF30 bsr charout ;echo it 00094A 12C1 move.b d1,(a1)+ ;store it 00094C 5247 addq.w #1,d7 ;add to count 00094E 60E6 bra.s task2a ;go back for more 000950 5307 task2bs subq.b #1,d7 ;adjust count 000952 5389 subq.l #1,a1 ;adjust pointer 000954 267C 0000 2D32 movea.l #bsspbs,a3 ;fix up screen 00095A 6100 FF38 bsr prtmsg 00095E 60D6 bra.s task2a 000960 6100 FF42 task2ex bsr crlf 000964 3207 move.w d7,d1 000966 4E73 rte ; ; Implementation of the task #4. It converts a typed decimal ; string into a HEX ; number in D1.L. Max DEC number is 655,359. ; Input is terminated with . If a non-decimal char is typed ; then it is discarded and cleared off the screen. 000968 4287 task4 clr.l d7 00096A 6100 FEFC task4a bsr charin 00096E 0C01 000D cmpi.b #cr,d1 000972 6720 beq.s task4ex 000974 0C01 0039 cmpi.b #'9',d1 000978 62F0 bhi.s task4a ;If >9 then get another 00097A 0C01 0030 cmpi.b #'0',d1 00097E 6DEA blt.s task4a ;If <0 then get another 000980 6100 FEF6 bsr charout ;It's good so echo it 000984 0281 0000 000F andi.l #$f,d1 ;strip ASCII bias and clear upper part 00098A CEFC 000A mulu #10,d7 00098E DE81 add.l d1,d7 000990 6000 FFD8 bra task4a 000994 2207 task4ex move.l d7,d1 000996 4E73 rte ; ; Implementation of the task #5 feature. It gets a KBD char ; into D1.B. If ECHOFLG is set then it echos char to screen. 000998 6100 FECE task5 bsr charin ;get KBD char into D1.B. 00099C 4A39 0000 FFFD tst.b echoflg 0009A2 6704 beq.s task5ex 0009A4 6100 FED2 bsr charout 0009A8 4E73 task5ex rte ; ; Implementation of the task #6 feature. Sends a char in D1.B ; to the screen. 0009AA 6100 FECC task6 bsr charout 0009AE 4E73 rte ; ; Task #7 implementation. Get KBD status in D1.B. ; 1 if key was pressed, 0 if not. 0009B0 4201 task7 clr.b d1 0009B2 6100 FEA0 bsr instat 0009B6 6704 beq.s task7ex 0009B8 123C 0001 move.b #1,d1 0009BC 4E73 task7ex rte ; Task #12 implementation. If D1.B is zero then clear the ; ECHOFLG, else set it. 0009BE 4239 0000 FFFD task12 clr.b echoflg 0009C4 4A01 tst.b d1 0009C6 6706 beq.s tsk12ex 0009C8 50F9 0000 FFFD st.b echoflg 0009CE 4E73 tsk12ex rte ; ; Task #13 implementation. Print on screen the NULL terminated ; string pointed to by A1, followed by a CR, LF 0009D0 2649 task13 movea.l a1,a3 0009D2 6100 FEC0 bsr prtmsg 0009D6 6100 FECC bsr crlf 0009DA 4E73 rte ; ; Task #14 implementation. Print on screen the NULL terminated ; string pointed to by A1 without a CR, LF. 0009DC 2649 task14 movea.l a1,a3 0009DE 6100 FEB4 bsr prtmsg 0009E2 4E73 rte ; *************************************** ; Prints sign-on message 0009E4 267C 0000 2C5F SIGN_ON MOVEA.L #HELLO,A3 ;point to 'HELLO' 0009EA 6100 FEA8 BSR PRTMSG ;send it out 0009EE 4E75 RTS ; ; Takes a byte in D2.B, converts to 2 ; ASCII characters and puts them on screen. 0009F0 2202 PRT_BYT MOVE.L D2,D1 ;init conversion reg 0009F2 E919 ROL.B #4,D1 ;do upper nibble first 0009F4 6100 006A BSR NUM_ASC ;convert to ASCII 0009F8 6100 FE7E BSR CHAROUT 0009FC 2202 MOVE.L D2,D1 ;now do lower nibble 0009FE 6160 BSR.S NUM_ASC 000A00 6100 FE76 BSR CHAROUT ;send character 000A04 4E75 RTS ; ; Takes a word in D2.W, converts to 4 ; ASCII characters and puts them on screen. 000A06 E15A PRT_WRD ROL.W #8,D2 ;swap bytes in word 000A08 61E6 BSR.S PRT_BYT ;output MSB 000A0A E15A ROL.W #8,D2 ;reswap bytes 000A0C 61E2 BSR.S PRT_BYT ;output LSB 000A0E 4E75 RTS ; ; Takes a long word in D2.L, converts to 8 ; ASCII characters and puts them on screen. 000A10 4842 PRT_LON SWAP D2 ;get upper 16 bits 000A12 61F2 BSR.S PRT_WRD ;convert 4 chars 000A14 4842 SWAP D2 ;get lower 16 bits 000A16 61EE BSR.S PRT_WRD 000A18 4E75 RTS ; ; Takes a long word in D2.L, and prints the ; least significand 6 ASCII on the screen. 000A1A 4842 PRT_SIX SWAP D2 ;get upper 16 bits 000A1C 61D2 BSR.S PRT_BYT ;convert 4 chars 000A1E 4842 SWAP D2 ;get lower 16 bits 000A20 61E4 BSR.S PRT_WRD 000A22 4E75 RTS ; ; Checks to see if D1.B contains a valid HEX ; digit. 000A24 0C01 0046 VALDIG CMPI.B #'F',D1 ;char > 'F' ? 000A28 6E1E BGT.S DATAERR ;yes, so alert 000A2A 0C01 0030 CMPI.B #'0',D1 ;char < '0' ? 000A2E 6D18 BLT.S DATAERR ;yes, so alert 000A30 0C01 0039 CMPI.B #'9',D1 ;char < = '9'? 000A34 6F06 BLE.S VALDIGE ;'0' < char < '9' 000A36 0C01 0041 CMPI.B #'A',D1 ;char < 'A'? 000A3A 6D0C BLT.S DATAERR ;yes, so alert 000A3C 4E75 VALDIGE RTS ;'A' < char < 'F' ; ; Prints out the message "Bad Command" ; then looks for another command. 000A3E 267C 0000 2C35 CMDERR MOVEA.L #BADCMD,A3 ;point to message 000A44 6000 1580 BRA REPORT ;restart monitor ; ; Prints out the message "Invalid address ; or hex data." Then it restarts monitor. 000A48 267C 0000 2C42 DATAERR MOVEA.L #INVDATA,A3 ;point to message 000A4E 6000 1576 BRA REPORT ;restart monitor ; ; Converts legit ASCII #s to BCD. 000A52 0401 0030 ASC_BCD SUBI.B #$30,D1 ;remove ASCII bias 000A56 0C01 000A CMPI.B #10,D1 ;0-9? 000A5A 6B02 BMI.S ASC_BX ;Yes, so job's done 000A5C 5F01 SUBQ.B #7,D1 ;remove alpha bias 000A5E 4E75 ASC_BX RTS ; ; Convert HEX digit in D1.B to ASCII 000A60 0201 000F NUM_ASC ANDI.B #$F,D1 ;reset upper nibble 000A64 0601 0030 ADDI.B #$30,D1 ;add ASCII bias 000A68 0C01 003A CMPI.B #$3A,D1 ;test if > '9' 000A6C 6B02 BMI.S NUM_EX ;< '9' so done 000A6E 5E01 ADDQ.B #7,D1 ;> '9', so add 7 000A70 4E75 NUM_EX RTS ; ; It first fills INPBUF with chars until a ; CR occurs. The chars are then examined. ; If 1st char is CR then it sets D2.B and ; quits. Else it resets D2.B and proceeds to ; change valid hex digits to ASCII numbers. ; This routine is only used by EDIT. 000A72 6100 008A GET_BYT BSR GETLIN ;get chars from kbd 000A76 2C7C 0000 FF70 MOVEA.L #INPBUF,A6 ;reset A6 000A7C 6100 00D6 GETB1 BSR SKIPSP ;get rid if spaces 000A80 121E MOVE.B (A6)+,D1 ;get first char 000A82 50C2 ST D2 ;set D2.B for now 000A84 6166 BSR.S UP_CASE ;convert to UC 000A86 0C01 000D CMPI.B #CR,D1 ;test for CR 000A8A 671E BEQ.S GETBX ;if CR, no change 000A8C 6196 BSR.S VALDIG ;valid digit? 000A8E 61C2 BSR.S ASC_BCD ;convert into hex 000A90 1401 MOVE.B D1,D2 ;save 1st digit 000A92 121E MOVE.B (A6)+,D1 ;get second digit 000A94 6156 BSR.S UP_CASE 000A96 0C01 000D CMPI.B #CR,D1 ;test for CR 000A9A 6604 BNE.S GETB2 ;not CR, so process 000A9C 1202 MOVE.B D2,D1 ;reget 1st digit 000A9E 6008 BRA.S GETB3 ;and get out 000AA0 6182 GETB2 BSR.S VALDIG ;valid digit? 000AA2 61AE BSR.S ASC_BCD ;convert into hex 000AA4 E91A ROL.B #4,D2 ;move first digit 000AA6 D202 ADD.B D2,D1 ;form final result 000AA8 51C2 GETB3 SF D2 ;signal change 000AAA 4E75 GETBX RTS ; ; Gets keyboard input and transforms it into ; a longword into D2. If only a CR was typed ; then D6.B contains $FF, else it's 0. 000AAC 6100 0050 GETADRT BSR GETLIN ;fill buffer 000AB0 2C7C 0000 FF70 MOVEA.L #INPBUF,A6 ;repoint A6 000AB6 50C6 ST D6 ;set flag in D6.B 000AB8 0C16 000D CMPI.B #CR,(A6) ;check 1st char 000ABC 672C BEQ.S EX_ADR ;if it's CR then exit 000ABE 51C6 SF D6 ;not CR, so reset D6.B 000AC0 6100 0092 GETADR BSR SKIPSP ;skip over SPs 000AC4 4281 CLR.L D1 ;init temp register 000AC6 4282 CLR.L D2 ;init result register 000AC8 121E NEXTCHR MOVE.B (A6)+,D1 ;get a char 000ACA 6120 BSR.S UP_CASE 000ACC 0C01 000D CMPI.B #CR,D1 ;exit if CR 000AD0 6718 BEQ.S EX_ADR 000AD2 0C01 0020 CMPI.B #' ',D1 ;exit if SP 000AD6 6712 BEQ.S EX_ADR 000AD8 6100 FF4A BSR VALDIG ;valid digit? 000ADC 6100 FF74 BSR ASC_BCD ;convert it to hex 000AE0 E99A ROL.L #4,D2 ;next digit in D2 000AE2 0202 00F0 ANDI.B #$F0,D2 000AE6 D401 ADD.B D1,D2 ;insert new digit 000AE8 60DE BRA.S NEXTCHR ;and continue 000AEA 4E75 EX_ADR RTS ; ; Changes chars in the range 'a'=buffer 000B42 5206 ADDQ.B #1,D6 ;update char count 000B44 6100 FD32 BSR CHAROUT ;echo the char 000B48 60C0 BRA.S GETCHAR ;get another char 000B4A 1C81 GETCHX MOVE.B D1,(A6) ;Place CR in buffer 000B4C 5206 ADDQ.B #1,D6 ;and count it 000B4E 6100 FD54 BSR CRLF ;send a CR & LF 000B52 4E75 RTS ; ; If not SP do nothing. If SP increment ; pointer A6 by one. 000B54 0C16 0020 SKIPSP CMPI.B #' ',(A6) 000B58 6604 BNE.S SKIPSPE 000B5A 528E ADDQ.L #1,A6 000B5C 60F6 BRA.S SKIPSP 000B5E 4E75 SKIPSPE RTS ; ; Initializes the user registers to zeros. 000B60 227C 0000 FF90 NULLREG MOVEA.L #SAVREGS,A1 000B66 247C 0001 0000 MOVEA.L #ENDRAM,A2 000B6C 4219 NULLR1 CLR.B (A1)+ ;clear them 000B6E B5C9 CMPA.L A1,A2 ;done yet? 000B70 66FA BNE.S NULLR1 000B72 23FC 0000 FEB0 MOVE.L #USTCK,SAV_A7 000B78 0000 FFCC 000B7C 42B9 0000 FF3A CLR.L UNADR 000B82 50F9 0000 FFFD ST.B ECHOFLG 000B88 4E75 RTS ; ; This routine saves the registers of the ; executed program for future display and ; future restoration. 000B8A 48F9 7FFF 0000 REG_SAV MOVEM.L D0-D7/A0-A6,SAVREGS ;d0-a6 000B90 FF90 000B92 201F MOVE.L (A7)+,D0 ;pop ret address 000B94 33DF 0000 FFD4 MOVE.W (A7)+,SAV_SR ;pop SR 000B9A 23F9 0000 FFD0 MOVE.L SAV_PC,OLD_PC 000BA0 0000 FF36 000BA4 23DF 0000 FFD0 MOVE.L (A7)+,SAV_PC ;pop PC 000BAA 2F00 MOVE.L D0,-(A7) ;repush ret addr 000BAC 4E6D MOVE.L USP,A5 ;get user's A7 000BAE 23CD 0000 FFCC MOVE.L A5,SAV_A7 ;save it 000BB4 4E75 RTS ; ; This routine restores the registers of a ; program whose execution terminates with ; either a trap #9 or some other trap put ; in place to breakpoint a program. Transfer ; to the user program is then accomplished ; with an RTE instruction. 000BB6 201F REGREST MOVE.L (A7)+,D0 ;pop ret address 000BB8 2A79 0000 FFCC MOVEA.L SAV_A7,A5 ;get user's A7 000BBE 4E65 MOVE.L A5,USP ;restore it 000BC0 2F39 0000 FFD0 MOVE.L SAV_PC,-(A7) ;push PC 000BC6 3F39 0000 FFD4 MOVE.W SAV_SR,-(A7) ;push SR 000BCC 2F00 MOVE.L D0,-(A7) ;repush ret addr 000BCE 4CF9 7FFF 0000 MOVEM.L SAVREGS,D0-D7/A0-A6 ;d0-a6 000BD4 FF90 000BD6 4E75 RTS ; ; This routine will diplay the register ; information saved by REG_SAV. 000BD8 6100 0020 REG_PRT BSR PRTOLD ;Old PC with disassembly 000BDC 207C 0000 FF90 REGPRT1 MOVEA.L #SAVREGS,A0 ;A0 -> reg. data 000BE2 1E3C 0044 MOVE.B #'D',D7 ;print the D regs 000BE6 6100 009A BSR REGDISP 000BEA 1E3C 0041 MOVE.B #'A',D7 ;print the A regs 000BEE 6100 0092 BSR REGDISP 000BF2 6156 BSR.S PRTNEW 000BF4 6100 00C8 BSR PRTSR 000BF8 4E75 RTS ; ; Disassebly and display of the OPCODE at OLD_PC. 000BFA 2A79 0000 FF36 PRTOLD MOVEA.L OLD_PC,A5 ;Disassem address in A5 000C00 6100 0572 BSR UNASMB ;call unasm core routine 000C04 240D MOVE.L A5,D2 ;move instruction address 000C06 6100 FE12 BSR PRT_SIX 000C0A 6100 FCAE BSR TWO_SP 000C0E 4283 CLR.L D3 ;blank spaces counter (BSC) 000C10 341D PRTOLD1 MOVE.W (A5)+,D2 ;get word 000C12 6100 FDF2 BSR PRT_WRD ;print word of hex code 000C16 6100 FC9A BSR SPACE ;space 000C1A 5403 ADDQ.B #2,D3 ;add 2 bytes to BSC 000C1C 5506 SUBQ.B #2,D6 ;reduce length counter by 2 000C1E 66F0 BNE.S PRTOLD1 ;if more bytes print again 000C20 0C03 000A PRTOLD2 CMPI.B #10,D3 ;is the string 10 bytes 000C24 6C10 BGE.S PRTOLD3 000C26 6100 FC92 BSR TWO_SP 000C2A 6100 FC8E BSR TWO_SP 000C2E 6100 FC82 BSR SPACE 000C32 5403 ADDQ.B #2,D3 000C34 60EA BRA.S PRTOLD2 000C36 6100 FC7A PRTOLD3 BSR SPACE 000C3A 267C 0000 FF3E MOVEA.L #UASMCMD,A3 ;point A3 to unasm cmd buff 000C40 6100 FC52 BSR PRTMSG ;display commant text 000C44 6100 FC5E BSR CRLF 000C48 4E75 RTS ; ; Next PC is printed and disassembled. 000C4A 267C 0000 2DF5 PRTNEW MOVEA.L #PC_MSG,A3 000C50 6100 FC42 BSR PRTMSG 000C54 2439 0000 FFD0 MOVE.L SAV_PC,D2 ;get the register 000C5A 6100 FDBE BSR PRT_SIX 000C5E 267C 0000 2DDE MOVEA.L #SP24MSG,A3 000C64 6100 FC2E BSR PRTMSG 000C68 2A79 0000 FFD0 MOVEA.L SAV_PC,A5 000C6E 6100 0504 BSR UNASMB 000C72 267C 0000 FF3E MOVEA.L #UASMCMD,A3 ;A3 -> to unasm cmd buffer 000C78 6100 FC1A BSR PRTMSG ;display command text 000C7C 6100 FC26 BSR CRLF 000C80 4E75 RTS ; 000C82 1A3C 0030 REGDISP MOVE.B #'0',D5 ;register # in here 000C86 1207 REGD1 MOVE.B D7,D1 ;print reg letter 000C88 6100 FBEE BSR CHAROUT 000C8C 1205 MOVE.B D5,D1 ;print reg number 000C8E 6100 FBE8 BSR CHAROUT 000C92 6100 00D6 BSR COL_SP ;print :, space 000C96 2418 MOVE.L (A0)+,D2 ;print the register 000C98 6100 FD76 BSR PRT_LON 000C9C 6100 FC1C BSR TWO_SP ;print 2 spaces 000CA0 6100 FC10 BSR SPACE 000CA4 5205 ADDQ.B #1,D5 000CA6 0C05 0038 CMPI.B #'8',D5 ; D5 = '8' yet? 000CAA 670C BEQ.S REGDFIN ; if yes then exit 000CAC 0C05 0034 CMPI.B #'4',D5 ; D5 = '4' yet? 000CB0 66D4 BNE.S REGD1 ; no, then next reg 000CB2 6100 FBF0 BSR CRLF ; D5 = '4' send CRLF 000CB6 60CE BRA.S REGD1 ; and do next reg 000CB8 6100 FBEA REGDFIN BSR CRLF 000CBC 4E75 RTS ; ; Print the USR 000CBE 267C 0000 2DFC PRTSR MOVEA.L #SR_MSG,A3 000CC4 6100 FBCE BSR PRTMSG 000CC8 3439 0000 FFD4 MOVE.W SAV_SR,D2 000CCE 3802 MOVE.W D2,D4 ;copy SR to D4 000CD0 6100 FD34 BSR PRT_WRD ;print the register 000CD4 6100 FBE4 BSR TWO_SP ;print 2 spaces ; Print "Flags: X = " and X flag 000CD8 267C 0000 2567 MOVEA.L #MESGFLG,A3 000CDE 6100 FBB4 BSR PRTMSG 000CE2 123C 0031 MOVE.B #'1',D1 000CE6 0804 0004 BTST #4,D4 000CEA 6604 BNE.S REGETC1 000CEC 123C 0030 MOVE.B #'0',D1 000CF0 6100 FB86 REGETC1 BSR CHAROUT ;Print ", N = " and N flag 000CF4 267C 0000 2574 MOVEA.L #MESGN,A3 000CFA 6100 FB98 BSR PRTMSG 000CFE 123C 0031 MOVE.B #'1',D1 000D02 0804 0003 BTST #3,D4 000D06 6604 BNE.S REGETC2 000D08 123C 0030 MOVE.B #'0',D1 000D0C 6100 FB6A REGETC2 BSR CHAROUT ;Print ", Z = " and Z flag 000D10 267C 0000 257B MOVEA.L #MESGZ,A3 000D16 6100 FB7C BSR PRTMSG 000D1A 123C 0031 MOVE.B #'1',D1 000D1E 0804 0002 BTST #2,D4 000D22 6604 BNE.S REGETC3 000D24 123C 0030 MOVE.B #'0',D1 000D28 6100 FB4E REGETC3 BSR CHAROUT ;Print ", V = " and V flag 000D2C 267C 0000 2582 MOVEA.L #MESGV,A3 000D32 6100 FB60 BSR PRTMSG 000D36 123C 0031 MOVE.B #'1',D1 000D3A 0804 0001 BTST #1,D4 000D3E 6604 BNE.S REGETC4 000D40 123C 0030 MOVE.B #'0',D1 000D44 6100 FB32 REGETC4 BSR CHAROUT ;Print " C = " and C flag 000D48 267C 0000 2589 MOVEA.L #MESGC,A3 000D4E 6100 FB44 BSR PRTMSG 000D52 123C 0031 MOVE.B #'1',D1 000D56 0804 0000 BTST #0,D4 000D5A 6604 BNE.S REGETC5 000D5C 123C 0030 MOVE.B #'0',D1 000D60 6100 FB16 REGETC5 BSR CHAROUT 000D64 6100 FB3E BSR CRLF 000D68 4E75 RTS ; ; Send : and space to the screen 000D6A 123C 003A COL_SP MOVE.B #':',D1 000D6E 6100 FB08 BSR CHAROUT 000D72 123C 0020 MOVE.B #' ',D1 000D76 6100 FB00 BSR CHAROUT 000D7A 4E75 RTS ; ; Download a .HEX file in ASCII S-format. ; A .HEX file consists of pure ASCII chars. ; (See MacKenzie p.50.) The explanation ; below with typical file lines is perfectly ; general and applies to all files. ; ; The 1st line S00700007465737438 signifies: ; S0 = header line ; 07 = $7 bytes to load ; 0000 = address, in this case meaningless ; 74 65 73 74 = ASCII filename "TEST." ; 38 = hex check byte used as follows: 16 ; bit check sum = 07+00+00+74+65+73+74+38=FF ; ; The following lines contain code and data. ; A typical line S10780003200428183 means: ; S1 = code line with 16 bit load address ; 07 = $7 bytes to load ; 8000 = start loading at this HEX address ; 32 00 42 81 = code or data to load ; 83 = hex check sum as above ; ; Another typical line S208AF800032004281D3 ; signifies: ; S2 = code line with 24 bit load address ; 08 = $8 bytes to load ; AF8000 = start loading at this HEX address ; 32 00 42 81 = execution code to load ; D3 = hex check sum as always ; ; There are two kinds of footer line: ; The line S90380007C signifies: ; S9 = This line contains a 16-bit entry ; address, in this case 8000. The byte ; count is 03 and 7C is the check sum. ; ; The second kind of footer line is, e.g. ; S804AF8000CC signifies: ; S8 = This line contains a 24-bit entry ; address, in this case AF8000. The byte ; count is 04 and CC is the check sum. ; ; S5 lines exist too. They inform you of ; the number of lines of code in the file. ; Nothing will happen if we simply ignore ; these lines. ; ; The code directly below steers the ; loading. 000D7C 2A7C 0000 0000 LD_FILE MOVEA.L #0,A5 ;A5 holds offset address 000D82 0C2E 000D FFFF CMPI.B #CR,-1(A6) ;Is previous CHAR a CR? 000D88 6706 BEQ.S LD_FIL0 ;Yes so skip 000D8A 6100 FD34 BSR GETADR ;get offset address 000D8E 2A42 MOVEA.L D2,A5 ;save for later 000D90 267C 0000 2CDF LD_FIL0 MOVEA.L #LS_MSG,A3 ;Tell'em to start 000D96 6100 FAFC BSR PRTMSG ;sending the file 000D9A 6100 FACC LD_FIL1 BSR CHARIN ;Get first char 000D9E 0C01 0003 CMPI.B #3,D1 ;Is it ^C? 000DA2 6700 F668 BEQ GET_CMD ;Yes, so abandon 000DA6 0C01 0053 CMPI.B #'S',D1 ;Is it 'S'? 000DAA 670C BEQ.S IS_S ;Yes, get next char ; The end of line CR and LF are handled here. If ; it's a CR then send a CRLF else get another char 000DAC 0C01 000D CMPI.B #CR,D1 ;Is it CR? 000DB0 66E8 BNE.S LD_FIL1 ;No, so dump LFs 000DB2 6100 FAF0 BSR CRLF ;If CR, then do CRLF 000DB6 66E2 BNE.S LD_FIL1 ;get another char 000DB8 6100 FABE IS_S BSR CHAROUT ;Print the 'S' 000DBC 6100 FAE0 BSR CHARIO ;get next char 000DC0 0C01 0030 CMPI.B #'0',D1 ;Is it '0'? 000DC4 673A BEQ.S S0 ;if so branch 000DC6 51F9 0000 FFFC SF S2_FLG ;Reset flag 000DCC 0C01 0031 CMPI.B #'1',D1 ;Is it '1'? 000DD0 6766 BEQ.S S12 ;It's '1' so process 000DD2 50F9 0000 FFFC ST S2_FLG ;Set flag 000DD8 0C01 0032 CMPI.B #'2',D1 ;Is it '2'? 000DDC 675A BEQ.S S12 ;It's '2' so process 000DDE 0C01 0035 CMPI.B #'5',D1 ;Is it '5'? 000DE2 6766 BEQ.S S5 ;Yes, go dump line 000DE4 50F9 0000 FFFC ST S2_FLG ;Set flag 000DEA 0C01 0038 CMPI.B #'8',D1 ;Is it '8'? 000DEE 676E BEQ.S S89 ;if so branch 000DF0 51F9 0000 FFFC SF S2_FLG ;Reset flag 000DF6 0C01 0039 CMPI.B #'9',D1 ;Is it '9'? 000DFA 6762 BEQ.S S89 ;if so branch 000DFC 6000 013E BRA LD_ERR ;None of above, err ; ; A line that begins with S0 is the header ; containing the name 000E00 4204 S0 CLR.B D4 ;Null hex check sum 000E02 6100 00A2 BSR LD_NUM ;line length in D2.B 000E06 6100 00B8 BSR LD_ADR ;discard 0000 000E0A 207C 0000 FF60 MOVEA.L #PRTBUF,A0 000E10 0C02 0001 CMPI.B #1,D2 ;hex check byte yet? 000E14 6718 BEQ.S S0B ;jump if there's no name 000E16 2F02 S0A MOVE.L D2,-(A7) ;push line length 000E18 6100 008C BSR LD_NUM ;get a name char 000E1C 1202 MOVE.B D2,D1 000E1E 241F MOVE.L (A7)+,D2 ;pop line length 000E20 6100 FCCA BSR UP_CASE ;change to UC 000E24 10C1 MOVE.B D1,(A0)+ ;store it 000E26 5302 SUBQ.B #1,D2 ;length counter = 1? 000E28 0C02 0001 CMPI.B #1,D2 ;hex check byte yet? 000E2C 66E8 BNE.S S0A ;if not then loop 000E2E 4210 S0B CLR.B (A0) ;end name with NULL 000E30 6100 00EC BSR LD_CHK ;branch chk 000E34 6000 FF64 BRA LD_FIL1 ;Go to next line ; ; Loads an S1 or S2 line 000E38 4204 S12 CLR.B D4 ;Null hex check sum 000E3A 616A BSR.S LD_NUM ;line length in D2.B 000E3C 6100 0082 BSR LD_ADR ;line address in A4 000E40 D9CD ADDA.L A5,A4 ;Add offset to address 000E42 6100 00B6 BSR LD_DATA ;load data 000E46 6000 FF52 BRA LD_FIL1 ;Go to next line ; ; Discard all chars in the S5 line 000E4A 6100 005A S5 BSR LD_NUM ;line length in D2.B 000E4E D402 ADD.B D2,D2 ;double it and add 2 000E50 5402 ADDQ.B #2,D2 ;to discard the CRLF 000E52 6100 FA4A S5A BSR CHARIO ;Input and echo char 000E56 5302 SUBQ.B #1,d2 000E58 66F8 BNE.S S5A 000E5A 6000 FF3E BRA LD_FIL1 ;Go to next line ; ; End of file line. Its data is used to ; change the value of the user PC. Works ; with S8 and S9 lines. 000E5E 4204 S89 CLR.B D4 ;Null hex check sum 000E60 6144 BSR.S LD_NUM ;line length in D2.B 000E62 615C BSR.s LD_ADR ;load address in A4 000E64 23CC 0000 FFD0 MOVE.L A4,SAV_PC ;save it 000E6A B9FC 0000 0000 CMPA.L #0,A4 000E70 670C BEQ.S S89A 000E72 23CC 0000 FF3A MOVE.L A4,UNADR 000E78 23CC 0000 FFD6 MOVE.L A4,DUMPADR 000E7E 6100 009E S89A BSR LD_CHK 000E82 6100 FA1A BSR CHARIO ;read the final CR 000E86 6100 FA16 BSR CHARIO ;and LF 000E8A 6100 FA18 BSR CRLF 000E8E 267C 0000 FF60 MOVEA.L #PRTBUF,A3 ;print file name 000E94 6100 F9FE BSR PRTMSG 000E98 267C 0000 2CBE MOVEA.L #LG_MSG,A3 ;print 000E9E 6100 F9F4 BSR PRTMSG ;successful load 000EA2 6000 F568 BRA GET_CMD ;go to prompt ; ; Reads and echos the two ASCII bytes repre- ; senting a number and converts them to a HEX ; number in D2.B. Thus a '2' & 'E' is conver- ; ted to $2E. Also updates checksum in D4.B 000EA6 6100 F9F6 LD_NUM BSR CHARIO ;get first char 000EAA 6100 FBA6 BSR ASC_BCD ;convert it to BCD 000EAE E919 ROL.B #4,D1 ;move it to MSB 000EB0 1401 MOVE.B D1,D2 ;copy to reg D2 000EB2 6100 F9EA BSR CHARIO ;get second char 000EB6 6100 FB9A BSR ASC_BCD ;convert it to hex 000EBA D401 ADD.B D1,D2 ;add them 000EBC D802 ADD.B D2,D4 ;update check sum 000EBE 4E75 RTS ; ; Routine to extract 16 or 24 bit address ; from S-file into A4. The line count in D2.B ; represents the # of words in the S-line. ; The address info takes 2 or 3 words so the ; line count is reduced by 2 or 3 at routine's ; end. Also updates checksum in D4.B 000EC0 4283 LD_ADR CLR.L D3 ;D3.L = 0 000EC2 3A3C 0003 MOVE.W #3,D5 ;Get set for 4 times 000EC6 4A39 0000 FFFC TST.B S2_FLG ;See if set 000ECC 6702 BEQ.S LD_AD1 ;Not set, so skip 000ECE 5445 ADDQ.W #2,D5 ;Change to 6 times 000ED0 E99B LD_AD1 ROL.L #4,D3 ;move it up a nibble 000ED2 6100 F9CA BSR CHARIO ;Get char & convert 000ED6 6100 FB7A BSR ASC_BCD ;to hex in D1.B 000EDA D601 ADD.B D1,D3 ;Add it to D3.B and 000EDC 51CD FFF2 DBRA D5,LD_AD1 ;Loop 4 or 6 times 000EE0 2843 MOVEA.L D3,A4 ;Put address in A4 000EE2 D803 ADD.B D3,D4 ;Update check sum 000EE4 E15B ROL.W #8,D3 ;for both bytes in 000EE6 D803 ADD.B D3,D4 ;D3.W 000EE8 4843 SWAP D3 ;Update 3rd byte too 000EEA D803 ADD.B D3,D4 ;Checksum now in D4.B 000EEC 5502 SUBQ.B #2,D2 ;line counter-2 000EEE 4A39 0000 FFFC TST.B S2_FLG ;If not set, skip 000EF4 6702 BEQ.S LD_AD2 ;Set, so do one more 000EF6 5302 SUBQ.B #1,D2 ;subtraction 000EF8 4E75 LD_AD2 RTS ; ; Loads, into RAM, data in a HEX file whose ; line begins with S1 or S2. D2 holds the ; byte count and A4 the loading address. Also ; updates checksum which is finally checked ; by the routine that follows. 000EFA 0C02 0001 LD_DATA CMPI.B #1,D2 ;At check byte? 000EFE 671E BEQ.S LD_CHK ;Yes, jump 000F00 6100 F99C BSR CHARIO ;get char 000F04 6100 FB4C BSR ASC_BCD ;convert to hex 000F08 E919 ROL.B #4,D1 ;move it to MSB 000F0A 1601 MOVE.B D1,D3 ;copy to reg D3 000F0C 6100 F990 BSR CHARIO ;get second char 000F10 6100 FB40 BSR ASC_BCD ;convert it to hex 000F14 D601 ADD.B D1,D3 ;add them 000F16 18C3 MOVE.B D3,(A4)+ ;move to load addr 000F18 D803 ADD.B D3,D4 ;update check sum 000F1A 5302 SUBQ.B #1,D2 ;decr. line counter 000F1C 60DC BRA.S LD_DATA ;Go for more ; Gets the last byte in an S line. If check ; sum is not 0FFH it flags an error. 000F1E 6100 F97E LD_CHK BSR CHARIO ;get char 000F22 6100 FB2E BSR ASC_BCD ;convert it to hex 000F26 E919 ROL.B #4,D1 ;move it to MSB 000F28 1601 MOVE.B D1,D3 ;copy to reg D3 000F2A 6100 F972 BSR CHARIO ;get second char 000F2E 6100 FB22 BSR ASC_BCD ;convert it to hex 000F32 D601 ADD.B D1,D3 ;add them 000F34 D803 ADD.B D3,D4 ;should = 0FFH 000F36 5204 ADDQ.B #1,D4 ;Should be 0 000F38 6602 BNE.S LD_ERR ;Not 0, so flag it 000F3A 4E75 RTS ; ; Flags loading error and goes to GET_CMD 000F3C 267C 0000 2C99 LD_ERR MOVEA.L #LE_MSG,A3 ;get message ptr 000F42 6000 1082 BRA REPORT ;restart monitor ; ; Routine that initializes the tracing 000F46 0C2E 000D FFFF BEG_TRC CMPI.B #CR,-1(A6) ;is previous CR? 000F4C 670A BEQ.S BEG1 ;yes, so start 000F4E 6100 FB70 BSR GETADR ;get execution addr 000F52 23C2 0000 FFD0 MOVE.L D2,SAV_PC ;save it 000F58 6100 FC5C BEG1 BSR REGREST ;restore user regs 000F5C 007C 8000 ORI.W #$8000,SR ;enable tracing 000F60 4E73 RTE ; ; If the SKIPFLG is set then jump to TRACE5, else ; proceed normally. In the regular trace no tracing ; is done on the 1st pass. If a TRAP instruction is ; next then tracing is terminated. Tracing continues ; when a CR is typed. Any other chararacter causes ; termination of tracing. The FP_FLG is 0 in entry. 000F62 6100 FC26 TRACE BSR REG_SAV ;save USER registers 000F66 4A39 0000 FFFA TST.B FP_FLG ;is flag = 0? 000F6C 6608 BNE.S TRACE0 ;no, so continue 000F6E 50F9 0000 FFFA ST FP_FLG ;it was 0, so set it 000F74 6068 BRA.S TRACE4 ;do nothing this time 000F76 4A39 0000 FFFB TRACE0 TST.B SKIPFLG ;If not 0 000F7C 6676 BNE.S TRACE5 ;then jump 000F7E 6100 FC58 BSR REG_PRT ;display them ; Check if TRAP is the next instruction. 000F82 2079 0000 FFD0 MOVEA.L SAV_PC,A0 000F88 0C50 4E4F CMPI.W #$4E4F,(A0) ;> TRAP #15? 000F8C 6E12 BGT.S TRACE1 ;you're okay 000F8E 0C50 4E40 CMPI.W #$4E40,(A0) ;< TRAP #0? 000F92 6D0C BLT.S TRACE1 ;okay again 000F94 267C 0000 2D80 MOVEA.L #TRC_MSG,A3 000F9A 6100 F8F8 BSR PRTMSG 000F9E 6020 BRA.S TRACE2 ; Check for CHARIN. If CR then keep tracing. 000FA0 123C 003E TRACE1 MOVE.B #'>',D1 000FA4 6100 F8D2 BSR CHAROUT 000FA8 6100 F8BE BSR CHARIN 000FAC 0C01 000D CMPI.B #CR,D1 000FB0 6728 BEQ.S TRACE3 000FB2 6100 F8C4 BSR CHAROUT ; If R modify register 000FB6 6100 FB34 BSR UP_CASE ; <<<< Added in mon209 >>>> 000FBA 0C01 0052 CMPI.B #'R',D1 ; <<<< Added in mon209 >>>> 000FBE 6752 BEQ.S TRACE6 ; <<<< Added in mon209 >>>> ; Turn off all tracing and put out prompt. 000FC0 027C 7FFF TRACE2 ANDI.W #$7FFF,SR ;disable tracing 000FC4 007C 2000 ORI.W #$2000,SR ;enable supervisor 000FC8 0279 7FFF 0000 ANDI.W #$7FFF,SAV_SR ;fix the USR 000FCE FFD4 000FD0 51F9 0000 FFFA SF FP_FLG ;clear flag 000FD6 6000 F434 BRA GET_CMD ; Continue tracing 000FDA 6100 F8C8 TRACE3 BSR CRLF 000FDE 0279 0FFF 0000 TRACE4 ANDI.W #$0FFF,SAV_SR ;enable user 000FE4 FFD4 000FE6 0079 8000 0000 ORI.W #$8000,SAV_SR ;enable tracing 000FEC FFD4 000FEE 6100 FBC6 BSR REGREST 000FF2 4E73 RTE ; ; TRACE saved the USER registers. This means ; that the return address of the routine ; that called GOSKIP is next on the stack. 000FF4 027C 7FFF TRACE5 ANDI.W #$7FFF,SR ;disable tracing 000FF8 007C 2000 ORI.W #$2000,SR ;enable supervisor 000FFC 0279 7FFF 0000 ANDI.W #$7FFF,SAV_SR ;fix the USR 001002 FFD4 001004 51F9 0000 FFFB SF SKIPFLG ;clear flag 00100A 51F9 0000 FFFA SF FP_FLG ;clear flag 001010 4E75 RTS ;pick up where you left off ; ; <<<< Added in mon209 >>>> ; Get register to be modified then ; set register value 001012 6100 FAEA TRACE6 BSR GETLIN 001016 2C7C 0000 FF70 MOVEA.L #INPBUF,A6 ;point to buffer 00101C 13FC 00FF 0000 MOVE.B #$0FF,REGTYP 001022 FF48 001024 6100 F712 BSR REGMOD0 001028 6000 FF76 BRA TRACE1 ; ; Set (at most two) permanent breakpoints. ; B displays the current breakpoints. ; B 1
sets breakpoint 1. ; B 1 clears breakpoint 1. 00102C 0C2E 000D FFFF BREAK CMPI.B #CR,-1(A6) ;is previous CR? 001032 6728 BEQ.S DSPBRK ; get breakpoint number in D2.L 001034 207C 0000 FFDA MOVEA.L #BP_AD3,A0 00103A 0C16 0031 CMPI.B #'1',(A6) ;is char a '1'? 00103E 6706 BEQ.S BREAK1 ;no, then go on 001040 207C 0000 FFDE MOVEA.L #BP_AD4,A0 001046 528E BREAK1 ADDQ.L #1,A6 ;point past # 001048 0C16 000D CMPI.B #CR,(A6) ;is it a CR? 00104C 6604 BNE.S BREAK2 00104E 4290 CLR.L (A0) 001050 6006 BRA.S BREAK3 001052 6100 FA6C BREAK2 BSR GETADR 001056 2082 MOVE.L D2,(A0) ;save it 001058 6000 F3B2 BREAK3 BRA GET_CMD ; ;Deal with 1st breakpoint first. 00105C 267C 0000 2620 DSPBRK MOVEA.L #MSG_8,A3 ;breakpoint 1: 001062 6100 F830 BSR PRTMSG 001066 207C 0000 FFDA MOVEA.L #BP_AD3,A0 ;A0 -> #BP_AD3 00106C 4A90 TST.L (A0) 00106E 660C BNE.S DSPBRK1 001070 267C 0000 2642 MOVEA.L #MSG_10,A3 001076 6100 F81C BSR PRTMSG 00107A 6006 BRA.S DSPBRK2 00107C 2410 DSPBRK1 MOVE.L (A0),D2 00107E 6100 F99A BSR PRT_SIX ;Deal with 2nd breakpoint next. 001082 267C 0000 2631 DSPBRK2 MOVEA.L #MSG_9,A3 ;breakpoint 1: 001088 6100 F80A BSR PRTMSG 00108C 207C 0000 FFDE MOVEA.L #BP_AD4,A0 ;A0 -> #BP_AD3 001092 4A90 TST.L (A0) 001094 660C BNE.S DSPBRK3 001096 267C 0000 2642 MOVEA.L #MSG_10,A3 00109C 6100 F7F6 BSR PRTMSG 0010A0 6006 BRA.S DSPBRK4 0010A2 2410 DSPBRK3 MOVE.L (A0),D2 0010A4 6100 F974 BSR PRT_SIX 0010A8 6000 F362 DSPBRK4 BRA GET_CMD ; ; Finds and prints the sum and difference ; of 2 HEX numbers 0010AC 6100 FA12 HEXCALC BSR GETADR ;get first number 0010B0 2602 MOVE.L D2,D3 ;move it to D3 0010B2 6100 FA0C BSR GETADR ;get second number 0010B6 2802 MOVE.L D2,D4 ;make a spare in D4 0010B8 D483 ADD.L D3,D2 ;add them 0010BA 267C 0000 2D1E MOVEA.L #HS_MSG,A3 0010C0 6100 F7D2 BSR PRTMSG ;print sum msg 0010C4 6100 F94A BSR PRT_LON ;print sum 0010C8 2404 MOVE.L D4,D2 ;reload original D2 0010CA 9682 SUB.L D2,D3 ;subtract them 0010CC 2403 MOVE.L D3,D2 ;move to D2 to print 0010CE 267C 0000 2D28 MOVEA.L #HD_MSG,A3 0010D4 6100 F7BE BSR PRTMSG ;print diff msg 0010D8 6100 F936 BSR PRT_LON ;print difference 0010DC 6000 F32E BRA GET_CMD ;put out prompt ; ;**************************************************** ;Begin Unassemble Routines ;**************************************************** ; ;First get the disassembly start address and # of lines 0010E0 1E3C 000A UNASM MOVE.B #10,D7 ;Prepare to do 10 lines 0010E4 0C2E 000D FFFF CMPI.B #CR,-1(A6) ;is previous CR? 0010EA 660A BNE.S UNASMS1 ;no, so proceed 0010EC 2439 0000 FF3A MOVE.L UNADR,D2 ;get old disassebly addr 0010F2 2A42 MOVEA.L D2,A5 ;into A5 0010F4 6028 BRA.S UNASMS3 ;stick with 10 lines & go on 0010F6 0C16 002C UNASMS1 CMPI.B #',',(A6) ;is char a comma? 0010FA 660C BNE.S USM1 ;no, then get start address 0010FC 2439 0000 FF3A MOVE.L UNADR,D2 ;get old disassebly addr 001102 2A42 MOVEA.L D2,A5 ;into A5 001104 528E ADDQ.L #1,A6 ;point past comma 001106 6010 BRA.S UNASMS2 ;get count 001108 6100 F9B6 USM1 BSR GETADR ;get start address into D2 00110C 2A42 MOVEA.L D2,A5 ;and put into A5 00110E 0C2E 000D FFFF CMPI.B #CR,-1(A6) ;is previous CR? 001114 6602 BNE.S UNASMS2 ;no, so proceed 001116 6006 BRA.S UNASMS3 001118 6100 F9A6 UNASMS2 BSR GETADR ;get # of lines to display 00111C 1E02 MOVE.B D2,D7 ;Command line is totally parsed, so do the disassembly 00111E 6100 0054 UNASMS3 BSR UNASMB ;call unasm core routine 001122 240D MOVE.L A5,D2 ;move instruction address 001124 6100 F8F4 BSR PRT_SIX ;into D2 and print it 001128 6100 F790 BSR TWO_SP ;two space 00112C 4283 CLR.L D3 ;blank spaces counter (BSC) 00112E 341D UNASMS4 MOVE.W (A5)+,D2 ;get word 001130 6100 F8D4 BSR PRT_WRD ;print word of hex code 001134 6100 F77C BSR SPACE ;space 001138 5403 ADDQ.B #2,D3 ;add 2 bytes to BSC 00113A 5506 SUBQ.B #2,D6 ;reduce length counter by 2 00113C 66F0 BNE.S UNASMS4 ;if more bytes print again 00113E 0C03 000A UNASMS5 CMPI.B #10,D3 ;is the string 10 bytes 001142 6C10 BGE.S UNASMS6 001144 6100 F774 BSR TWO_SP 001148 6100 F770 BSR TWO_SP 00114C 6100 F764 BSR SPACE 001150 5403 ADDQ.B #2,D3 001152 60EA BRA.S UNASMS5 001154 6100 F75C UNASMS6 BSR SPACE ;space 001158 267C 0000 FF3E MOVEA.L #UASMCMD,A3 ;point A3 to unasm cmd buff 00115E 6100 F734 BSR PRTMSG ;display commant text 001162 6100 F740 BSR CRLF 001166 5307 SUBQ.B #1,D7 001168 66B4 BNE.S UNASMS3 00116A 23CD 0000 FF3A MOVE.L A5,UNADR 001170 6000 F29A BRA GET_CMD ; ; 32 bytes of ram are reserved above the stacks ; for the text of the disassembled command. ; UNASMCMD points to the beginning and ; UNASMOPR points 9 characters in, so the operands ; are always evenly spaced. The text is ternminated ; with a zero and can be displayed with a call to ; PRTMSG. ; ;example ;12345678901234567890123456789012 ;MOVE.B #$01,D0 ;^ ^ ;| |---UNASMOPR ;| ;|------UNASMCMD ; ; Disasemble routine. When called, A5 points to code. ; Use of Registers ; D0-Varies A0-Varies ; D1-Varies A1-Varies ; D2-Varies A2-Varies ; D3-Varies A3-Varies ; D4-cmd size (B,W,L) A4-Instruction text buffer ; D5-instruction hex (W) A5-Ptr. to 1st byte of code ; D6-instr lngth (bytes) A6-Varies ; D7-loop count A7-stack ; 001174 3A15 UNASMB MOVE.W (A5),D5 ;D5 gets 1st byte of code 001176 2C3C 0000 0002 MOVE.L #2,D6 ;D6 will have # of bytes in code 00117C 287C 0000 FF3E MOVEA.L #UASMCMD,A4 ;A4 -> to unasm cmd buff ; 001182 123C 0020 MOVE.B #32,D1 ;Prefill UASMCMD with 32 ' 's 001186 18FC 0020 UNASML MOVE.B #' ',(A4)+ 00118A 5301 SUBQ.B #1,D1 00118C 66F8 BNE.S UNASML ; 00118E 287C 0000 FF3E MOVEA.L #UASMCMD,A4 ;Repoint A4 001194 6114 BSR.S UNSEAR ;Returns with A3 -> matching cmd 001196 226B 000A MOVEA.L 10(A3),A1 ;put sub-routine addr in A1 00119A 588B ADDQ.L #4,A3 ;point A3 to inst txt 00119C 121B UNASM1 MOVE.B (A3)+,D1 ;get a char 00119E 6704 BEQ.S UNASM2 ;stop on 0 0011A0 18C1 MOVE.B D1,(A4)+ ;move to cmd buff 0011A2 60F8 BRA.S UNASM1 ;do it again 0011A4 4E91 UNASM2 JSR (A1) ;run sub-routine 0011A6 421C CLR.B (A4)+ ;end cmd text with zero 0011A8 4E75 RTS ; ; This routine searches through the list of commands ; UNINSTR, comparing to the code. When a match is ; found, the routine returns with A3 pointing to it. 0011AA 267C 0000 200C UNSEAR MOVEA.L #UNINSTR,A3 ;point A3 to first cmd 0011B0 3005 UNSEAR0 MOVE.W D5,D0 ;Get opcode into D0 0011B2 C06B 0002 AND.W 2(A3),D0 ;AND opcode word with mask 0011B6 B053 CMP.W (A3),D0 ;CMP result with stored word 0011B8 6708 BEQ.S UNSEARE ;Same, so done 0011BA D7FC 0000 000E ADDA.L #14,A3 ;Test failed, so try next one 0011C0 60EE BRA.S UNSEAR0 0011C2 4E75 UNSEARE RTS ; ; The following subroutines are for the specific ; commands. They all follow a similar format. ; First, if need be, move the length info to the end ; of the instruction, i.e. (.B, .L, .W). Next shift A4 ; to UNASMOPR, then find the operands. ; ;for commands with no operands 0011C4 4E75 U00 RTS ; ; ILLEGAL adds AL to end of instruction 0011C6 18FC 0041 U01 MOVE.B #'A',(A4)+ 0011CA 18FC 004C MOVE.B #'L',(A4)+ 0011CE 4E75 RTS ; ; ADD, SUB, AND, EOR, OR, CMP 0011D0 4280 U02 CLR.L D0 0011D2 103C 0007 MOVE.B #7,D0 0011D6 6100 0B88 BSR USZ 0011DA 287C 0000 FF46 MOVEA.L #UASMOPR,A4 0011E0 103C 0008 MOVE.B #8,D0 0011E4 0105 BTST D0,D5 0011E6 6716 BEQ.S U02_01 0011E8 18FC 0044 MOVE.B #'D',(A4)+ 0011EC 103C 000B MOVE.B #11,D0 0011F0 6100 0B3C BSR UREG 0011F4 18FC 002C MOVE.B #',',(A4)+ 0011F8 6100 08BE BSR UEA 0011FC 6014 BRA.S U02_02 0011FE 6100 08B8 U02_01 BSR UEA 001202 18FC 002C MOVE.B #',',(A4)+ 001206 18FC 0044 MOVE.B #'D',(A4)+ 00120A 103C 000B MOVE.B #11,D0 00120E 6100 0B1E BSR UREG 001212 4E75 U02_02 RTS ; ; ADDA, SUBA, CMPA 001214 4280 U03 CLR.L D0 001216 103C 0008 MOVE.B #8,D0 00121A 0105 BTST D0,D5 00121C 6712 BEQ.S U03_01 00121E 18FC 002E MOVE.B #'.',(A4)+ 001222 18FC 004C MOVE.B #'L',(A4)+ 001226 18FC 0020 MOVE.B #' ',(A4)+ 00122A 183C 004C MOVE.B #'L',D4 00122E 6010 BRA.S U03_02 001230 18FC 002E U03_01 MOVE.B #'.',(A4)+ 001234 18FC 0057 MOVE.B #'W',(A4)+ 001238 18FC 0020 MOVE.B #' ',(A4)+ 00123C 183C 0057 MOVE.B #'W',D4 001240 287C 0000 FF46 U03_02 MOVEA.L #UASMOPR,A4 001246 6100 0870 BSR UEA 00124A 18FC 002C MOVE.B #',',(A4)+ 00124E 18FC 0041 MOVE.B #'A',(A4)+ 001252 103C 000B MOVE.B #11,D0 001256 6100 0AD6 BSR UREG 00125A 4E75 RTS ; ; ADDX, SUBX 00125C 4280 U04 CLR.L D0 00125E 103C 0007 MOVE.B #7,D0 001262 6100 0AFC BSR USZ 001266 287C 0000 FF46 MOVEA.L #UASMOPR,A4 00126C 103C 0003 MOVE.B #3,D0 001270 0105 BTST D0,D5 001272 6736 BEQ.S U04_01 001274 18FC 002D MOVE.B #'-',(A4)+ 001278 18FC 0028 MOVE.B #'(',(A4)+ 00127C 18FC 0041 MOVE.B #'A',(A4)+ 001280 103C 0002 MOVE.B #2,D0 001284 6100 0AA8 BSR UREG 001288 18FC 0029 MOVE.B #')',(A4)+ 00128C 18FC 002C MOVE.B #',',(A4)+ 001290 18FC 002D MOVE.B #'-',(A4)+ 001294 18FC 0028 MOVE.B #'(',(A4)+ 001298 18FC 0041 MOVE.B #'A',(A4)+ 00129C 103C 000B MOVE.B #11,D0 0012A0 6100 0A8C BSR UREG 0012A4 18FC 0029 MOVE.B #')',(A4)+ 0012A8 601C BRA.S U04_02 0012AA 18FC 0044 U04_01 MOVE.B #'D',(A4)+ 0012AE 103C 0002 MOVE.B #2,D0 0012B2 6100 0A7A BSR UREG 0012B6 18FC 002C MOVE.B #',',(A4)+ 0012BA 18FC 0044 MOVE.B #'D',(A4)+ 0012BE 103C 000B MOVE.B #11,D0 0012C2 6100 0A6A BSR UREG 0012C6 4E75 U04_02 RTS ; ; CMPM 0012C8 4280 U05 CLR.L D0 0012CA 103C 0007 MOVE.B #7,D0 0012CE 6100 0A90 BSR USZ 0012D2 287C 0000 FF46 MOVEA.L #UASMOPR,A4 0012D8 18FC 0028 MOVE.B #'(',(A4)+ 0012DC 18FC 0041 MOVE.B #'A',(A4)+ 0012E0 103C 0002 MOVE.B #02,D0 0012E4 6100 0A48 BSR UREG 0012E8 18FC 0029 MOVE.B #')',(A4)+ 0012EC 18FC 002B MOVE.B #'+',(A4)+ 0012F0 18FC 002C MOVE.B #',',(A4)+ 0012F4 18FC 0028 MOVE.B #'(',(A4)+ 0012F8 18FC 0041 MOVE.B #'A',(A4)+ 0012FC 103C 000B MOVE.B #11,D0 001300 6100 0A2C BSR UREG 001304 18FC 0029 MOVE.B #')',(A4)+ 001308 18FC 002B MOVE.B #'+',(A4)+ 00130C 4E75 RTS ; ; DIVU, DIVS, MULU, MULS 00130E 4280 U06 CLR.L D0 001310 183C 0057 MOVE.B #'W',D4 001314 287C 0000 FF46 MOVEA.L #UASMOPR,A4 00131A 6100 079C BSR UEA 00131E 18FC 002C MOVE.B #',',(A4)+ 001322 18FC 0044 MOVE.B #'D',(A4)+ 001326 103C 000B MOVE.B #11,D0 00132A 6100 0A02 BSR UREG 00132E 4E75 RTS ; ; ASL, ASR, LSL, LSR, ROXL, ROXR, ROL, ROR ; memory shifts 001330 4280 U07 CLR.L D0 001332 103C 0008 MOVE.B #8,D0 ;check direction 001336 0105 BTST D0,D5 001338 6706 BEQ.S U07_01 00133A 18FC 004C MOVE.B #'L',(A4)+ 00133E 6004 BRA.S U07_02 001340 18FC 0052 U07_01 MOVE.B #'R',(A4)+ 001344 18FC 002E U07_02 MOVE.B #'.',(A4)+ 001348 18FC 0057 MOVE.B #'W',(A4)+ 00134C 183C 0057 MOVE.B #'W',D4 001350 287C 0000 FF46 MOVEA.L #UASMOPR,A4 001356 6100 0760 BSR UEA 00135A 4E75 RTS ; ; ASL, ASR, LSL, LSR, ROXL, ROXR, ROL, ROR ; register shifts 00135C 4280 U08 CLR.L D0 00135E 103C 0008 MOVE.B #8,D0 ;check direction 001362 0105 BTST D0,D5 001364 6706 BEQ.S U08_01 001366 18FC 004C MOVE.B #'L',(A4)+ 00136A 6004 BRA.S U08_02 00136C 18FC 0052 U08_01 MOVE.B #'R',(A4)+ 001370 103C 0007 U08_02 MOVE.B #7,D0 001374 6100 09EA BSR USZ 001378 287C 0000 FF46 MOVEA.L #UASMOPR,A4 00137E 103C 0005 MOVE.B #5,D0 001382 0105 BTST D0,D5 ;i/r = 0 then count is within 001384 670E BEQ.S U08_03 ;bits 9,10,11 so jump 001386 18FC 0044 MOVE.B #'D',(A4)+ ;i/r = 1 so count is in Dn 00138A 103C 000B MOVE.B #11,D0 00138E 6100 099E BSR UREG 001392 601E BRA.S U08_08 001394 18FC 0023 U08_03 MOVE.B #'#',(A4)+ ;Store a # symbol 001398 3205 MOVE.W D5,D1 ;Don't trash D5 00139A 203C 0000 0009 MOVE.L #9,D0 ;Put shift size in D0 0013A0 E069 LSR.W D0,D1 ;Move shift-count bits down 9 0013A2 0201 0007 ANDI.B #7,D1 ;Mask out unwanted stuff 0013A6 6604 BNE.S U08_06 ;If not 0 then it's ready 0013A8 123C 0008 MOVE.B #8,D1 ;If 0 replace with 8 0013AC 0601 0030 U08_06 ADDI.B #'0',D1 ;Add the 30H to D1 0013B0 18C1 MOVE.B D1,(A4)+ ;Store it 0013B2 18FC 002C U08_08 MOVE.B #',',(A4)+ ;Add a ',' 0013B6 18FC 0044 MOVE.B #'D',(A4)+ ;Now add a 'D' 0013BA 203C 0000 0002 MOVE.L #2,D0 ;Point to register bits 0013C0 6100 096C BSR UREG 0013C4 4E75 RTS ; ; ANDI, ORI, EORI to CCR 0013C6 4280 U09 CLR.L D0 0013C8 18FC 002E MOVE.B #'.',(A4)+ 0013CC 18FC 0042 MOVE.B #'B',(A4)+ 0013D0 287C 0000 FF46 MOVEA.L #UASMOPR,A4 0013D6 18FC 0023 MOVE.B #'#',(A4)+ 0013DA 18FC 0024 MOVE.B #'$',(A4)+ 0013DE 3235 6800 MOVE.W 0(A5,D6.L),D1 0013E2 6100 0966 BSR UGBYT 0013E6 5406 ADDQ.B #2,D6 0013E8 18FC 002C MOVE.B #',',(A4)+ 0013EC 18FC 0043 MOVE.B #'C',(A4)+ 0013F0 18FC 0043 MOVE.B #'C',(A4)+ 0013F4 18FC 0052 MOVE.B #'R',(A4)+ 0013F8 4E75 RTS ; ; ANDI, ORI, EORI to SR 0013FA 4280 U10 CLR.L D0 0013FC 18FC 002E MOVE.B #'.',(A4)+ 001400 18FC 0057 MOVE.B #'W',(A4)+ 001404 183C 004C MOVE.B #'L',D4 001408 287C 0000 FF46 MOVEA.L #UASMOPR,A4 00140E 18FC 0023 MOVE.B #'#',(A4)+ 001412 18FC 0024 MOVE.B #'$',(A4)+ 001416 3235 6800 MOVE.W 0(A5,D6.L),D1 00141A E159 ROL.W #8,D1 00141C 6100 092C BSR UGBYT 001420 3235 6800 MOVE.W 0(A5,D6.L),D1 001424 6100 0924 BSR UGBYT 001428 5406 ADDQ.B #2,D6 00142A 18FC 002C MOVE.B #',',(A4)+ 00142E 18FC 0053 MOVE.B #'S',(A4)+ 001432 18FC 0052 MOVE.B #'R',(A4)+ 001436 4E75 RTS ; ; ADDI, ANDI, ORI, EORI, SUBI, CMPI 001438 4280 U11 CLR.L D0 00143A 103C 0007 MOVE.B #7,D0 00143E 6100 0920 BSR USZ 001442 287C 0000 FF46 MOVEA.L #UASMOPR,A4 001448 18FC 0023 MOVE.B #'#',(A4)+ 00144C 18FC 0024 MOVE.B #'$',(A4)+ 001450 0C04 0042 CMPI.B #'B',D4 001454 660C BNE.S U11_01 001456 3235 6800 MOVE.W 0(A5,D6.L),D1 00145A 6100 08EE BSR UGBYT 00145E 5406 ADDQ.B #2,D6 001460 6042 BRA.S U11_03 001462 0C04 0057 U11_01 CMPI.B #'W',D4 001466 6616 BNE.S U11_02 001468 3235 6800 MOVE.W 0(A5,D6.L),D1 00146C E159 ROL.W #8,D1 00146E 6100 08DA BSR UGBYT 001472 3235 6800 MOVE.W 0(A5,D6.L),D1 001476 6100 08D2 BSR UGBYT 00147A 5406 ADDQ.B #2,D6 00147C 6026 BRA.S U11_03 00147E 3235 6800 U11_02 MOVE.W 0(A5,D6.L),D1 001482 E159 ROL.W #8,D1 001484 6100 08C4 BSR UGBYT 001488 3235 6800 MOVE.W 0(A5,D6.L),D1 00148C 6100 08BC BSR UGBYT 001490 3235 6802 MOVE.W 2(A5,D6.L),D1 001494 E159 ROL.W #8,D1 001496 6100 08B2 BSR UGBYT 00149A 3235 6802 MOVE.W 2(A5,D6.L),D1 00149E 6100 08AA BSR UGBYT 0014A2 5806 ADDQ.B #4,D6 0014A4 18FC 002C U11_03 MOVE.B #',',(A4)+ 0014A8 6100 060E BSR UEA 0014AC 4E75 RTS ; ; BRA, BSR 0014AE 4280 U12 CLR.L D0 0014B0 0C05 0000 CMPI.B #0,D5 0014B4 6708 BEQ.S U12_00 0014B6 18FC 002E MOVE.B #'.',(A4)+ 0014BA 18FC 0053 MOVE.B #'S',(A4)+ 0014BE 287C 0000 FF46 U12_00 MOVEA.L #UASMOPR,A4 0014C4 18FC 0024 MOVE.B #'$',(A4)+ 0014C8 220D MOVE.L A5,D1 0014CA 5481 ADDQ.L #2,D1 0014CC 0C05 0000 CMPI.B #0,D5 0014D0 670C BEQ.S U12_01 0014D2 0C05 00FF CMPI.B #$FF,D5 0014D6 6710 BEQ.S U12_02 0014D8 1005 MOVE.B D5,D0 0014DA D200 ADD.B D0,D1 0014DC 6012 BRA.S U12_03 0014DE 3035 6800 U12_01 MOVE.W 0(A5,D6.L),D0 0014E2 D240 ADD.W D0,D1 0014E4 5406 ADDQ.B #2,D6 0014E6 6008 BRA.S U12_03 0014E8 2035 6800 U12_02 MOVE.L 0(A5,D6.L),D0 0014EC D280 ADD.L D0,D1 0014EE 5806 ADDQ.B #4,D6 0014F0 103C 0004 U12_03 MOVE.B #4,D0 0014F4 E199 U12_04 ROL.L #8,D1 0014F6 6100 0852 BSR UGBYT 0014FA 5300 SUBQ.B #1,D0 0014FC 66F6 BNE.S U12_04 0014FE 4E75 RTS ; ; JMP, JSR 001500 287C 0000 FF46 U13 MOVEA.L #UASMOPR,A4 001506 6100 05B0 BSR UEA 00150A 4E75 RTS ; ; BTST, BCHG, BCLR, BSET immediate data. These don't ; need .B or .L. If the destination is a data register ; then it's automatically .L, otherwise it's always .B 00150C 183C 0042 U14 MOVE.B #'B',D4 001510 287C 0000 FF46 MOVEA.L #UASMOPR,A4 001516 18FC 0023 MOVE.B #'#',(A4)+ 00151A 18FC 0024 MOVE.B #'$',(A4)+ 00151E 3235 6800 MOVE.W 0(A5,D6.L),D1 001522 6100 0826 BSR UGBYT ;Change imm data to ASCII & store 001526 5406 ADDQ.B #2,D6 001528 18FC 002C MOVE.B #',',(A4)+ 00152C 6100 058A BSR UEA 001530 4E75 RTS ; ; BTST, BCHG, BCLR, BSET ; register data 001532 4280 U15 CLR.L D0 001534 183C 004C MOVE.B #'L',D4 001538 287C 0000 FF46 MOVEA.L #UASMOPR,A4 00153E 18FC 0044 MOVE.B #'D',(A4)+ 001542 103C 000B MOVE.B #11,D0 001546 6100 07E6 BSR UREG 00154A 18FC 002C MOVE.B #',',(A4)+ 00154E 6100 0568 BSR UEA 001552 4E75 RTS ; ; MOVE 001554 4280 U16 CLR.L D0 001556 103C 000D MOVE.B #13,D0 00155A 6100 0838 BSR USZM 00155E 287C 0000 FF46 MOVEA.L #UASMOPR,A4 001564 6100 0552 BSR UEA 001568 18FC 002C MOVE.B #',',(A4)+ 00156C 2F05 MOVE.L D5,-(A7) ;<<< these lines 00156E 3005 MOVE.W D5,D0 ;flip destination addr. 001570 EF5D ROL.W #7,D5 ;RRRMMM to MMMRRR format 001572 CA7C 0007 AND.W #7,D5 ;in EA location 001576 E658 ROR.W #3,D0 001578 0240 0038 ANDI.W #$38,D0 00157C DA40 ADD.W D0,D5 00157E 6100 0538 BSR UEA ;<<<< end flip 001582 2A1F MOVE.L (A7)+,D5 ;get back D5 001584 4E75 RTS ; ; MOVEA 001586 4280 U17 CLR.L D0 001588 103C 000D MOVE.B #13,D0 00158C 6100 0806 BSR USZM 001590 287C 0000 FF46 MOVEA.L #UASMOPR,A4 001596 6100 0520 BSR UEA 00159A 18FC 002C MOVE.B #',',(A4)+ 00159E 18FC 0041 MOVE.B #'A',(A4)+ 0015A2 103C 000B MOVE.B #11,D0 0015A6 6100 0786 BSR UREG 0015AA 4E75 RTS ; ; Bcc 0015AC 203C 0000 0008 U18 MOVE.L #8,D0 0015B2 6100 0814 BSR UCC 0015B6 6100 FEF6 BSR U12 ;bsr routine 0015BA 4E75 RTS ; ; DBcc 0015BC 203C 0000 0008 U19 MOVE.L #8,D0 0015C2 6100 0804 BSR UCC 0015C6 287C 0000 FF46 MOVEA.L #UASMOPR,A4 0015CC 18FC 0044 MOVE.B #'D',(A4)+ 0015D0 103C 0002 MOVE.B #2,D0 0015D4 6100 0758 BSR UREG 0015D8 18FC 002C MOVE.B #',',(A4)+ 0015DC 18FC 0024 MOVE.B #'$',(A4)+ 0015E0 220D MOVE.L A5,D1 0015E2 5481 ADDQ.L #2,D1 0015E4 3035 6800 MOVE.W 0(A5,D6.L),D0 0015E8 D240 ADD.W D0,D1 0015EA 5406 ADDQ.B #2,D6 0015EC 103C 0004 MOVE.B #4,D0 0015F0 E199 U19_01 ROL.L #8,D1 0015F2 6100 0756 BSR UGBYT 0015F6 5300 SUBQ.B #1,D0 0015F8 66F6 BNE.S U19_01 0015FA 4E75 RTS ; ; Scc 0015FC 203C 0000 0008 U20 MOVE.L #8,D0 001602 6100 07C4 BSR UCC 001606 183C 0042 MOVE.B #'B',D4 00160A 287C 0000 FF46 MOVEA.L #UASMOPR,A4 001610 183C 0042 MOVE.B #'B',D4 001614 6100 04A2 BSR UEA 001618 4E75 RTS ; ; NEGX, CLR, NEG, NOT, TST 00161A 4280 U21 CLR.L D0 00161C 103C 0007 MOVE.B #7,D0 001620 6100 073E BSR USZ 001624 287C 0000 FF46 MOVEA.L #UASMOPR,A4 00162A 6100 048C BSR UEA 00162E 4E75 RTS ; ; TAS 001630 4280 U22 CLR.L D0 001632 183C 0042 MOVE.B #'B',D4 001636 287C 0000 FF46 MOVEA.L #UASMOPR,A4 00163C 6100 047A BSR UEA 001640 4E75 RTS ; ; SWAP 001642 4280 U23 CLR.L D0 001644 287C 0000 FF46 MOVEA.L #UASMOPR,A4 00164A 18FC 0044 MOVE.B #'D',(A4)+ 00164E 103C 0002 MOVE.B #2,D0 001652 6100 06DA BSR UREG 001656 4E75 RTS ; ; UNLK 001658 4280 U24 CLR.L D0 00165A 287C 0000 FF46 MOVEA.L #UASMOPR,A4 001660 18FC 0041 MOVE.B #'A',(A4)+ 001664 103C 0002 MOVE.B #2,D0 001668 6100 06C4 BSR UREG 00166C 4E75 RTS ; ; LINK 00166E 287C 0000 FF46 U25 MOVEA.L #UASMOPR,A4 001674 18FC 0041 MOVE.B #'A',(A4)+ 001678 103C 000B MOVE.B #11,D0 00167C 6100 06B0 BSR UREG 001680 18FC 002C MOVE.B #',',(A4)+ 001684 18FC 0023 MOVE.B #'#',(A4)+ 001688 18FC 0024 MOVE.B #'$',(A4)+ 00168C 3235 6800 MOVE.W 0(A5,D6.L),D1 001690 5406 ADDQ.B #2,D6 001692 103C 0002 MOVE.B #2,D0 001696 E159 U25_01 ROL.W #8,D1 001698 6100 06B0 BSR UGBYT 00169C 5300 SUBQ.B #1,D0 00169E 66F6 BNE.S U25_01 0016A0 4E75 RTS ; ; ABCD, SBCD 0016A2 4280 U26 CLR.L D0 ;Mnemonic is already in buffer 0016A4 287C 0000 FF46 MOVEA.L #UASMOPR,A4 ;A4 -> to argument storage 0016AA 0805 0003 BTST #3,D5 ;D5 contains the hex opcode 0016AE 6624 BNE.S U26_01 0016B0 287C 0000 FF46 MOVEA.L #UASMOPR,A4 0016B6 18FC 0044 MOVE.B #'D',(A4)+ 0016BA 103C 0002 MOVE.B #2,D0 0016BE 6100 066E BSR UREG 0016C2 18FC 002C MOVE.B #',',(A4)+ 0016C6 18FC 0044 MOVE.B #'D',(A4)+ 0016CA 103C 000B MOVE.B #11,D0 0016CE 6100 065E BSR UREG 0016D2 6034 BRA.S U26_02 0016D4 18FC 002D U26_01 MOVE.B #'-',(A4)+ 0016D8 18FC 0028 MOVE.B #'(',(A4)+ 0016DC 18FC 0041 MOVE.B #'A',(A4)+ 0016E0 103C 0002 MOVE.B #02,D0 0016E4 6100 0648 BSR UREG 0016E8 18FC 0029 MOVE.B #')',(A4)+ 0016EC 18FC 002C MOVE.B #',',(A4)+ 0016F0 18FC 002D MOVE.B #'-',(A4)+ 0016F4 18FC 0028 MOVE.B #'(',(A4)+ 0016F8 18FC 0041 MOVE.B #'A',(A4)+ 0016FC 103C 000B MOVE.B #11,D0 001700 6100 062C BSR UREG 001704 18FC 0029 MOVE.B #')',(A4)+ 001708 4E75 U26_02 RTS ; ; ADDQ, SUBQ 00170A 4280 U27 CLR.L D0 00170C 103C 0007 MOVE.B #7,D0 001710 6100 064E BSR USZ 001714 287C 0000 FF46 MOVEA.L #UASMOPR,A4 00171A 18FC 0023 MOVE.B #'#',(A4)+ 00171E 18FC 0024 MOVE.B #'$',(A4)+ 001722 2F05 MOVE.L D5,-(A7) ;get back D5 001724 EF5D ROL.W #7,D5 001726 CA7C 0007 AND.W #7,D5 00172A 0605 0030 ADDI.B #$30,D5 00172E 18C5 MOVE.B D5,(A4)+ 001730 2A1F MOVE.L (A7)+,D5 ;get back D5 001732 18FC 002C MOVE.B #',',(A4)+ 001736 6100 0380 BSR UEA 00173A 4E75 RTS ; ; CHK 00173C 4280 U28 CLR.L D0 00173E 183C 0057 MOVE.B #'W',D4 001742 287C 0000 FF46 MOVEA.L #UASMOPR,A4 001748 6100 036E BSR UEA 00174C 18FC 002C MOVE.B #',',(A4)+ 001750 18FC 0044 MOVE.B #'D',(A4)+ 001754 103C 000B MOVE.B #11,D0 001758 6100 05D4 BSR UREG 00175C 4E75 RTS ; ; EXG Dn,Dm. It's always long. 00175E 4280 U29DD CLR.L D0 001760 287C 0000 FF46 MOVEA.L #UASMOPR,A4 001766 18FC 0044 MOVE.B #'D',(A4)+ 00176A 103C 000B MOVE.B #11,D0 00176E 6100 05BE BSR UREG 001772 18FC 002C MOVE.B #',',(A4)+ 001776 18FC 0044 MOVE.B #'D',(A4)+ 00177A 103C 0002 MOVE.B #2,D0 00177E 6100 05AE BSR UREG 001782 4E75 RTS ; ; EXG An,Am. It's always long. 001784 4280 U29AA CLR.L D0 001786 287C 0000 FF46 MOVEA.L #UASMOPR,A4 00178C 18FC 0041 MOVE.B #'A',(A4)+ 001790 103C 000B MOVE.B #11,D0 001794 6100 0598 BSR UREG 001798 18FC 002C MOVE.B #',',(A4)+ 00179C 18FC 0041 MOVE.B #'A',(A4)+ 0017A0 103C 0002 MOVE.B #2,D0 0017A4 6100 0588 BSR UREG 0017A8 4E75 RTS ; ; EXG. It's always long. 0017AA 4280 U29DA CLR.L D0 0017AC 287C 0000 FF46 MOVEA.L #UASMOPR,A4 0017B2 18FC 0044 MOVE.B #'D',(A4)+ 0017B6 103C 000B MOVE.B #11,D0 0017BA 6100 0572 BSR UREG 0017BE 18FC 002C MOVE.B #',',(A4)+ 0017C2 18FC 0041 MOVE.B #'A',(A4)+ 0017C6 103C 0002 MOVE.B #2,D0 0017CA 6100 0562 BSR UREG 0017CE 4E75 RTS ; ; EXT 0017D0 4280 U30 CLR.L D0 0017D2 18FC 002E MOVE.B #'.',(A4)+ 0017D6 0805 0006 BTST #6,D5 0017DA 6706 BEQ.S U30_01 0017DC 18FC 004C MOVE.B #'L',(A4)+ 0017E0 6004 BRA.S U30_02 0017E2 18FC 0057 U30_01 MOVE.B #'W',(A4)+ 0017E6 287C 0000 FF46 U30_02 MOVEA.L #UASMOPR,A4 0017EC 18FC 0044 MOVE.B #'D',(A4)+ 0017F0 103C 0002 MOVE.B #2,D0 0017F4 6100 0538 BSR UREG 0017F8 4E75 RTS ; ; LEA 0017FA 4280 U31 CLR.L D0 0017FC 18FC 002E MOVE.B #'.',(A4)+ ; D5 contains the instruction word 001800 0805 0000 BTST #0,D5 001804 660A BNE.S U31A 001806 18FC 0057 MOVE.B #'W',(A4)+ 00180A 183C 0057 MOVE.B #'W',D4 00180E 6008 BRA.S U31B 001810 18FC 004C U31A MOVE.B #'L',(A4)+ 001814 183C 004C MOVE.B #'L',D4 001818 287C 0000 FF46 U31B MOVEA.L #UASMOPR,A4 00181E 6100 0298 BSR UEA 001822 18FC 002C MOVE.B #',',(A4)+ 001826 18FC 0041 MOVE.B #'A',(A4)+ 00182A 103C 000B MOVE.B #11,D0 00182E 6100 04FE BSR UREG 001832 4E75 RTS ; ; NBCD 001834 183C 0042 U32 MOVE.B #'B',D4 001838 287C 0000 FF46 MOVEA.L #UASMOPR,A4 00183E 6100 0278 BSR UEA 001842 4E75 RTS ; ; PEA 001844 183C 004C U33 MOVE.B #'L',D4 001848 287C 0000 FF46 MOVEA.L #UASMOPR,A4 00184E 6100 0268 BSR UEA 001852 4E75 RTS ; ; STOP 001854 287C 0000 FF46 U34 MOVEA.L #UASMOPR,A4 00185A 18FC 0023 MOVE.B #'#',(A4)+ 00185E 18FC 0024 MOVE.B #'$',(A4)+ 001862 3235 6800 MOVE.W $00(A5,D6.L),D1 001866 E159 ROL.W #8,D1 001868 6100 04E0 BSR UGBYT 00186C 3235 6800 MOVE.W 0(A5,D6.L),D1 001870 6100 04D8 BSR UGBYT 001874 5406 ADDQ.B #2,D6 001876 4E75 RTS ; ; TRAP 001878 287C 0000 FF46 U35 MOVEA.L #UASMOPR,A4 00187E 18FC 0023 MOVE.B #'#',(A4)+ 001882 18FC 0024 MOVE.B #'$',(A4)+ 001886 1205 MOVE.B D5,D1 001888 6100 F1D6 BSR NUM_ASC 00188C 18C1 MOVE.B D1,(A4)+ 00188E 4E75 RTS ; ; MOVE TO CCR 001890 18FC 002E U36 MOVE.B #'.',(A4)+ 001894 18FC 0057 MOVE.B #'W',(A4)+ 001898 183C 0057 MOVE.B #'W',D4 00189C 287C 0000 FF46 MOVEA.L #UASMOPR,A4 0018A2 6100 0214 BSR UEA 0018A6 18FC 002C MOVE.B #',',(A4)+ 0018AA 18FC 0043 MOVE.B #'C',(A4)+ 0018AE 18FC 0043 MOVE.B #'C',(A4)+ 0018B2 18FC 0052 MOVE.B #'R',(A4)+ 0018B6 4E75 RTS ; ; MOVE from SR 0018B8 18FC 002E U37 MOVE.B #'.',(A4)+ 0018BC 18FC 0057 MOVE.B #'W',(A4)+ 0018C0 183C 0057 MOVE.B #'W',D4 0018C4 287C 0000 FF46 MOVEA.L #UASMOPR,A4 0018CA 18FC 0053 MOVE.B #'S',(A4)+ 0018CE 18FC 0052 MOVE.B #'R',(A4)+ 0018D2 18FC 002C MOVE.B #',',(A4)+ 0018D6 6100 01E0 BSR UEA 0018DA 4E75 RTS ; ; MOVE to SR 0018DC 18FC 002E U38 MOVE.B #'.',(A4)+ 0018E0 18FC 0057 MOVE.B #'W',(A4)+ 0018E4 183C 0057 MOVE.B #'W',D4 0018E8 287C 0000 FF46 MOVEA.L #UASMOPR,A4 0018EE 6100 01C8 BSR UEA 0018F2 18FC 002C MOVE.B #',',(A4)+ 0018F6 18FC 0053 MOVE.B #'S',(A4)+ 0018FA 18FC 0052 MOVE.B #'R',(A4)+ 0018FE 4E75 RTS ; ; MOVE An <-> USP 001900 18FC 002E U39 MOVE.B #'.',(A4)+ 001904 18FC 004C MOVE.B #'L',(A4)+ 001908 287C 0000 FF46 MOVEA.L #UASMOPR,A4 00190E 0805 0003 BTST #3,D5 001912 671E BEQ.S U39_01 001914 18FC 0055 MOVE.B #'U',(A4)+ 001918 18FC 0053 MOVE.B #'S',(A4)+ 00191C 18FC 0050 MOVE.B #'P',(A4)+ 001920 18FC 002C MOVE.B #',',(A4)+ 001924 18FC 0041 MOVE.B #'A',(A4)+ 001928 103C 0002 MOVE.B #2,D0 00192C 6100 0400 BSR UREG 001930 601C BRA.S U39_02 001932 18FC 0041 U39_01 MOVE.B #'A',(A4)+ 001936 103C 0002 MOVE.B #2,D0 00193A 6100 03F2 BSR UREG 00193E 18FC 002C MOVE.B #',',(A4)+ 001942 18FC 0055 MOVE.B #'U',(A4)+ 001946 18FC 0053 MOVE.B #'S',(A4)+ 00194A 18FC 0050 MOVE.B #'P',(A4)+ 00194E 4E75 U39_02 RTS ; ; MOVEQ 001950 18FC 002E U40 MOVE.B #'.',(A4)+ 001954 18FC 004C MOVE.B #'L',(A4)+ 001958 287C 0000 FF46 MOVEA.L #UASMOPR,A4 00195E 18FC 0023 MOVE.B #'#',(A4)+ 001962 18FC 0024 MOVE.B #'$',(A4)+ 001966 1205 MOVE.B D5,D1 001968 6100 03E0 BSR UGBYT 00196C 18FC 002C MOVE.B #',',(A4)+ 001970 18FC 0044 MOVE.B #'D',(A4)+ 001974 103C 000B MOVE.B #11,D0 001978 6100 03B4 BSR UREG 00197C 4E75 RTS ; ; MOVEP 00197E 0805 0006 U41 BTST #6,D5 001982 670A BEQ.S U41_01 001984 18FC 002E MOVE.B #'.',(A4)+ 001988 18FC 004C MOVE.B #'L',(A4)+ 00198C 6008 BRA.S U41_02 00198E 18FC 002E U41_01 MOVE.B #'.',(A4)+ 001992 18FC 0057 MOVE.B #'W',(A4)+ 001996 287C 0000 FF46 U41_02 MOVEA.L #UASMOPR,A4 00199C 0805 0007 BTST #7,D5 0019A0 6716 BEQ.S U41_03 ;If 0 then it's d(Ay),Dx 0019A2 18FC 0044 MOVE.B #'D',(A4)+ ;It's 1 so do Dx,d(Ay) 0019A6 103C 000B MOVE.B #11,D0 ;point to bit 11 and put in 0019AA 6100 0382 BSR UREG ;place the data register # 0019AE 18FC 002C MOVE.B #',',(A4)+ 0019B2 6100 001A BSR DOIT 0019B6 6014 BRA.S U41_04 0019B8 6100 0014 U41_03 BSR DOIT 0019BC 18FC 002C MOVE.B #',',(A4)+ 0019C0 18FC 0044 MOVE.B #'D',(A4)+ 0019C4 103C 000B MOVE.B #11,D0 0019C8 6100 0364 BSR UREG 0019CC 4E75 U41_04 RTS ; 0019CE 18FC 0024 DOIT MOVE.B #'$',(A4)+ 0019D2 3235 6800 MOVE.W $00(A5,D6.L),D1 0019D6 E159 ROL.W #8,D1 0019D8 6100 0370 BSR UGBYT 0019DC 3235 6800 MOVE.W 0(A5,D6.L),D1 0019E0 6100 0368 BSR UGBYT 0019E4 5406 ADDQ.B #2,D6 0019E6 18FC 0028 MOVE.B #'(',(A4)+ 0019EA 18FC 0041 MOVE.B #'A',(A4)+ 0019EE 7002 MOVEQ #2,D0 0019F0 6100 033C BSR UREG 0019F4 18FC 0029 MOVE.B #')',(A4)+ 0019F8 4E75 RTS ; ; MOVEM 0019FA 0805 0006 U42 BTST #6,D5 0019FE 670A BEQ.S U42_01 001A00 18FC 002E MOVE.B #'.',(A4)+ 001A04 18FC 004C MOVE.B #'L',(A4)+ 001A08 6008 BRA.S U42_02 001A0A 18FC 002E U42_01 MOVE.B #'.',(A4)+ 001A0E 18FC 0057 MOVE.B #'W',(A4)+ 001A12 287C 0000 FF46 U42_02 MOVEA.L #UASMOPR,A4 001A18 362D 0002 MOVE.W 2(A5),D3 001A1C 0805 0005 U42_03 BTST #5,D5 001A20 6726 BEQ.S U42_04 001A22 0805 0004 BTST #4,D5 001A26 6620 BNE.S U42_04 001A28 0805 0003 BTST #3,D5 001A2C 661A BNE.S U42_04 001A2E 4280 CLR.L D0 001A30 4282 CLR.L D2 001A32 323C 000F MOVE.W #$F,D1 001A36 0303 U42_06 BTST D1,D3 001A38 6702 BEQ.S U42_05 001A3A 01C2 BSET D0,D2 001A3C 5200 U42_05 ADDQ.B #1,D0 001A3E 5301 SUBQ.B #1,D1 001A40 0C00 000F CMPI.B #$F,D0 001A44 6FF0 BLE.S U42_06 001A46 3602 MOVE.W D2,D3 001A48 103C 000A U42_04 MOVE.B #10,D0 001A4C 0105 BTST D0,D5 001A4E 6734 BEQ.S U42_07 001A50 6100 0066 BSR UEA 001A54 18FC 002C MOVE.B #',',(A4)+ 001A58 143C 0044 MOVE.B #'D',D2 001A5C 5406 ADDQ.B #2,D6 001A5E 6100 0386 BSR UM 001A62 3203 MOVE.W D3,D1 001A64 E15B ROL.W #8,D3 001A66 0C41 0100 CMPI.W #$100,D1 001A6A 6D0E BLT.S U42_10 001A6C C27C 00FF AND.W #$FF,D1 001A70 0C41 0001 CMPI.W #1,D1 001A74 6D04 BLT.S U42_10 001A76 18FC 002F MOVE.B #'/',(A4)+ 001A7A 143C 0041 U42_10 MOVE.B #'A',D2 001A7E 6100 0366 BSR UM 001A82 6032 BRA.S U42_08 001A84 143C 0044 U42_07 MOVE.B #'D',D2 001A88 5406 ADDQ.B #2,D6 001A8A 6100 035A BSR UM 001A8E 3203 MOVE.W D3,D1 001A90 E15B ROL.W #8,D3 001A92 0C41 0100 CMPI.W #$100,D1 001A96 6D0E BLT.S U42_09 001A98 C27C 00FF AND.W #$FF,D1 001A9C 0C41 0001 CMPI.W #1,D1 001AA0 6D04 BLT.S U42_09 001AA2 18FC 002F MOVE.B #'/',(A4)+ 001AA6 143C 0041 U42_09 MOVE.B #'A',D2 001AAA 6100 033A BSR UM 001AAE 18FC 002C MOVE.B #',',(A4)+ 001AB2 6100 0004 BSR UEA 001AB6 4E75 U42_08 RTS ; ; Tests effective address field ; D0 points to first bit of ; D4.B is length of cmd 'B','W','L' ; moves result to cmd line (A4) ; format MMMRRR 001AB8 4280 UEA CLR.L D0 001ABA 103C 0005 MOVE.B #05,D0 001ABE 0105 BTST D0,D5 ;check first bit XMM 001AC0 6700 0212 BEQ UEA0 ;is 0MM, jmp 001AC4 5300 SUBQ.B #1,D0 001AC6 0105 BTST D0,D5 ;check second bit 1XM 001AC8 6700 01C0 BEQ UEA1 ;is 10M, jmp 001ACC 5300 SUBQ.B #1,D0 001ACE 0105 BTST D0,D5 ;check third bit 11X 001AD0 6700 0156 BEQ UEA2 ;is 110, jmp 001AD4 5300 SUBQ.B #1,D0 ;<<<<<<<< 111-RRR 001AD6 0105 BTST D0,D5 ;test register bits 001AD8 6764 BEQ.S UEA7 ;is 0RR, jmp 001ADA 18FC 0023 MOVE.B #'#',(A4)+ ;<<<<<<<< 111-100 # 001ADE 18FC 0024 MOVE.B #'$',(A4)+ 001AE2 0C04 0042 CMPI.B #'B',D4 001AE6 660E BNE.S UEA11 001AE8 322D 0002 MOVE.W 2(A5),D1 001AEC 6100 025C BSR UGBYT 001AF0 5406 ADDQ.B #2,D6 001AF2 6000 0238 BRA UEAD ;go to RTS ; 001AF6 0C04 0057 UEA11 CMPI.B #'W',D4 001AFA 6618 BNE.S UEA12 001AFC 3235 6800 MOVE.W 0(A5,D6.L),D1 001B00 E159 ROL.W #8,D1 001B02 6100 0246 BSR UGBYT 001B06 3235 6800 MOVE.W 0(A5,D6.L),D1 001B0A 6100 023E BSR UGBYT 001B0E 5406 ADDQ.B #2,D6 001B10 6000 021A BRA UEAD 001B14 3235 6800 UEA12 MOVE.W $00(A5,D6.L),D1 001B18 E159 ROL.W #8,D1 001B1A 6100 022E BSR UGBYT 001B1E 3235 6800 MOVE.W 0(A5,D6.L),D1 001B22 6100 0226 BSR UGBYT 001B26 3235 6802 MOVE.W 2(A5,D6.L),D1 001B2A E159 ROL.W #8,D1 001B2C 6100 021C BSR UGBYT 001B30 3235 6802 MOVE.W 2(A5,D6.L),D1 001B34 6100 0214 BSR UGBYT 001B38 5806 ADDQ.B #4,D6 001B3A 6000 01F0 BRA UEAD ; 001B3E 5300 UEA7 SUBQ.B #1,D0 001B40 0105 BTST D0,D5 ;test register bits 001B42 6700 0094 BEQ UEA8 ;is 00R, jmp 001B46 5300 SUBQ.B #1,D0 001B48 0105 BTST D0,D5 001B4A 6760 BEQ.S UEA9 ;is 010, jmp 001B4C 18FC 0024 MOVE.B #'$',(A4)+ ;<<<<<<<< 111-011 (d8,PC,Xn) 001B50 322D 0002 MOVE.W 2(A5),D1 001B54 6100 01F4 BSR UGBYT 001B58 5406 ADDQ.B #2,D6 001B5A 18FC 0028 MOVE.B #'(',(A4)+ 001B5E 18FC 0050 MOVE.B #'P',(A4)+ 001B62 18FC 0043 MOVE.B #'C',(A4)+ 001B66 18FC 002C MOVE.B #',',(A4)+ 001B6A 322D 0002 MOVE.W 2(A5),D1 001B6E 103C 000F MOVE.B #15,D0 001B72 0101 BTST D0,D1 001B74 6706 BEQ.S UEA17 001B76 18FC 0041 MOVE.B #'A',(A4)+ 001B7A 6004 BRA.S UEA18 001B7C 18FC 0044 UEA17 MOVE.B #'D',(A4)+ 001B80 5300 UEA18 SUBQ.B #1,D0 001B82 2605 MOVE.L D5,D3 001B84 3A2D 0002 MOVE.W 2(A5),D5 001B88 6100 01A4 BSR UREG 001B8C 2A03 MOVE.L D3,D5 001B8E 18FC 002E MOVE.B #'.',(A4)+ 001B92 103C 000B MOVE.B #11,D0 001B96 0101 BTST D0,D1 001B98 6706 BEQ.S UEA19 001B9A 18FC 004C MOVE.B #'L',(A4)+ 001B9E 6004 BRA.S UEA20 001BA0 18FC 0057 UEA19 MOVE.B #'W',(A4)+ 001BA4 18FC 0029 UEA20 MOVE.B #')',(A4)+ 001BA8 6000 0182 BRA UEAD ;go to RTS ; 001BAC 18FC 0024 UEA9 MOVE.B #'$',(A4)+ ;<<<<<<<< 111-010 (d16,PC) 001BB0 3235 6800 MOVE.W 0(A5,D6.L),D1 001BB4 E159 ROL.W #8,D1 001BB6 6100 0192 BSR UGBYT 001BBA 3235 6800 MOVE.W 0(A5,D6.L),D1 001BBE 6100 018A BSR UGBYT 001BC2 5406 ADDQ.B #2,D6 001BC4 18FC 0028 MOVE.B #'(',(A4)+ 001BC8 18FC 0050 MOVE.B #'P',(A4)+ 001BCC 18FC 0043 MOVE.B #'C',(A4)+ 001BD0 18FC 0029 MOVE.B #')',(A4)+ 001BD4 6000 0156 BRA UEAD ;go to RTS ; 001BD8 5300 UEA8 SUBQ.B #1,D0 001BDA 0105 BTST D0,D5 001BDC 672E BEQ.S UEA10 ;is 000, jmp 001BDE 18FC 0024 MOVE.B #'$',(A4)+ ;<<<<<<<< 111-001 (xxx).L 001BE2 3235 6800 MOVE.W $00(A5,D6.L),D1 001BE6 E159 ROL.W #8,D1 001BE8 6100 0160 BSR UGBYT 001BEC 3235 6800 MOVE.W 0(A5,D6.L),D1 001BF0 6100 0158 BSR UGBYT 001BF4 3235 6802 MOVE.W 2(A5,D6.L),D1 001BF8 E159 ROL.W #8,D1 001BFA 6100 014E BSR UGBYT 001BFE 3235 6802 MOVE.W 2(A5,D6.L),D1 001C02 6100 0146 BSR UGBYT 001C06 5806 ADDQ.B #4,D6 001C08 6000 0122 BRA UEAD ; 001C0C 18FC 0024 UEA10 MOVE.B #'$',(A4)+ ;<<<<<<<< 111-000 (xxx).W 001C10 3235 6800 MOVE.W 0(A5,D6.L),D1 001C14 E159 ROL.W #8,D1 001C16 6100 0132 BSR UGBYT 001C1A 3235 6800 MOVE.W 0(A5,D6.L),D1 001C1E 6100 012A BSR UGBYT 001C22 5406 ADDQ.B #2,D6 001C24 6000 0106 BRA UEAD 001C28 18FC 0024 UEA2 MOVE.B #'$',(A4)+ ;<<<<<<<< 110 (d8,An,Xn) 001C2C 322D 0002 MOVE.W 2(A5),D1 001C30 6100 0118 BSR UGBYT 001C34 5406 ADDQ.B #2,D6 001C36 18FC 0028 MOVE.B #'(',(A4)+ 001C3A 18FC 0041 MOVE.B #'A',(A4)+ 001C3E 5300 SUBQ.B #1,D0 001C40 6100 00EC BSR UREG 001C44 18FC 002C MOVE.B #',',(A4)+ 001C48 322D 0002 MOVE.W 2(A5),D1 001C4C 103C 000F MOVE.B #15,D0 001C50 0101 BTST D0,D1 001C52 6706 BEQ.S UEA13 001C54 18FC 0041 MOVE.B #'A',(A4)+ 001C58 6004 BRA.S UEA14 001C5A 18FC 0044 UEA13 MOVE.B #'D',(A4)+ 001C5E 5300 UEA14 SUBQ.B #1,D0 001C60 2605 MOVE.L D5,D3 001C62 3A2D 0002 MOVE.W 2(A5),D5 001C66 6100 00C6 BSR UREG 001C6A 2A03 MOVE.L D3,D5 001C6C 18FC 002E MOVE.B #'.',(A4)+ 001C70 103C 000B MOVE.B #11,D0 001C74 0101 BTST D0,D1 001C76 6706 BEQ.S UEA15 001C78 18FC 004C MOVE.B #'L',(A4)+ 001C7C 6004 BRA.S UEA16 001C7E 18FC 0057 UEA15 MOVE.B #'W',(A4)+ 001C82 18FC 0029 UEA16 MOVE.B #')',(A4)+ 001C86 6000 00A4 BRA UEAD ; 001C8A 5300 UEA1 SUBQ.B #1,D0 001C8C 0105 BTST D0,D5 ;check third bit 10X 001C8E 672C BEQ.S UEA3 ;is 100, jmp 001C90 18FC 0024 UEA1A MOVE.B #'$',(A4)+ ;<<<<<<<< 101 (d16,An) 001C94 3235 6800 MOVE.W $00(A5,D6.L),D1 001C98 E159 ROL.W #8,D1 001C9A 6100 00AE BSR UGBYT 001C9E 3235 6800 MOVE.W 0(A5,D6.L),D1 001CA2 6100 00A6 BSR UGBYT 001CA6 5406 ADDQ.B #2,D6 001CA8 18FC 0028 MOVE.B #'(',(A4)+ 001CAC 18FC 0041 MOVE.B #'A',(A4)+ 001CB0 5300 SUBQ.B #1,D0 001CB2 6100 007A BSR UREG 001CB6 18FC 0029 MOVE.B #')',(A4)+ 001CBA 6070 BRA.S UEAD ; 001CBC 18FC 002D UEA3 MOVE.B #'-',(A4)+ ;<<<<<<<< 100 -(An) 001CC0 18FC 0028 MOVE.B #'(',(A4)+ 001CC4 18FC 0041 MOVE.B #'A',(A4)+ 001CC8 5300 SUBQ.B #1,D0 001CCA 6100 0062 BSR UREG 001CCE 18FC 0029 MOVE.B #')',(A4)+ 001CD2 6058 BRA.S UEAD ; 001CD4 5300 UEA0 SUBQ.B #1,D0 001CD6 0105 BTST D0,D5 ;check second bit 0XM 001CD8 6732 BEQ.S UEA4 ;is 00M, jmp 001CDA 5300 SUBQ.B #1,D0 001CDC 0105 BTST D0,D5 ;check third bit 01X 001CDE 6718 BEQ.S UEA5 ;is 010, jmp 001CE0 18FC 0028 MOVE.B #'(',(A4)+ ;<<<<<<<< 011 (An)+ 001CE4 18FC 0041 MOVE.B #'A',(A4)+ 001CE8 5300 SUBQ.B #1,D0 001CEA 6100 0042 BSR UREG 001CEE 18FC 0029 MOVE.B #')',(A4)+ 001CF2 18FC 002B MOVE.B #'+',(A4)+ 001CF6 6034 BRA.S UEAD ; 001CF8 18FC 0028 UEA5 MOVE.B #'(',(A4)+ ;<<<<<<<< 010 (An) 001CFC 18FC 0041 MOVE.B #'A',(A4)+ 001D00 5300 SUBQ.B #1,D0 001D02 6100 002A BSR UREG 001D06 18FC 0029 MOVE.B #')',(A4)+ 001D0A 6020 BRA.S UEAD ; 001D0C 5300 UEA4 SUBQ.B #1,D0 001D0E 0105 BTST D0,D5 ;check third bit 00X 001D10 670C BEQ.S UEA6 ;is 000, jmp 001D12 18FC 0041 MOVE.B #'A',(A4)+ ;<<<<<<<< 001 An 001D16 5300 SUBQ.B #1,D0 001D18 6100 0014 BSR UREG 001D1C 600E BRA.S UEAD ; 001D1E 18FC 0044 UEA6 MOVE.B #'D',(A4)+ ;<<<<<<<< 000 Dn 001D22 5300 SUBQ.B #1,D0 001D24 6100 0008 BSR UREG 001D28 6000 0002 BRA UEAD 001D2C 4E75 UEAD RTS ; ; Gets the register number and adds it to printout ; buffer. D0.B points to MSB of register in OPCODE. ; A4 points to next place in printout buffer. 001D2E 3205 UREG MOVE.W D5,D1 ;Don't trash D5 001D30 0400 0002 SUBI.B #2,D0 ;Point D0 to lowest bit 001D34 0280 0000 00FF ANDI.L #$FF,D0 ;Reset the upper 3 bytes in D0 001D3A 6702 BEQ.S UREG1 ;If shift size is 0 then skip 001D3C E069 LSR.W D0,D1 ;Shift down the register num 001D3E 0201 0007 UREG1 ANDI.B #7,D1 ;Mask out irrelevant bits 001D42 0601 0030 ADDI.B #'0',D1 ;Add 30H to convert to ASCII 001D46 18C1 MOVE.B D1,(A4)+ ;Store it 001D48 4E75 RTS ; ; Converts byte in D1.B to ASCII and moves it to ; cmd line 001D4A 2401 UGBYT MOVE.L D1,D2 ;init conversion reg 001D4C E919 ROL.B #4,D1 ;do upper nibble first 001D4E 6100 ED10 BSR NUM_ASC ;convert to ASCII 001D52 18C1 MOVE.B D1,(A4)+ 001D54 2202 MOVE.L D2,D1 ;now do lower nibble 001D56 6100 ED08 BSR NUM_ASC 001D5A 18C1 MOVE.B D1,(A4)+ 001D5C 2202 MOVE.L D2,D1 001D5E 4E75 RTS ; ; cmd size. 00=byte 01=word 10=long ; moves .B, .W or .L to cmd line ; D0 points to first size bit ; also moves L or W or B to D4 001D60 0105 USZ BTST D0,D5 001D62 670E BEQ.S USZ1 001D64 18FC 002E MOVE.B #'.',(A4)+ 001D68 18FC 004C MOVE.B #'L',(A4)+ 001D6C 183C 004C MOVE.B #'L',D4 001D70 6020 BRA.S USZE 001D72 5300 USZ1 SUBQ.B #1,D0 001D74 0105 BTST D0,D5 001D76 670E BEQ.S USZ2 001D78 18FC 002E MOVE.B #'.',(A4)+ 001D7C 18FC 0057 MOVE.B #'W',(A4)+ 001D80 183C 0057 MOVE.B #'W',D4 001D84 600C BRA.S USZE 001D86 18FC 002E USZ2 MOVE.B #'.',(A4)+ 001D8A 18FC 0042 MOVE.B #'B',(A4)+ 001D8E 183C 0042 MOVE.B #'B',D4 001D92 4E75 USZE RTS ; ; cmd size for move 01=byte 11=word 10=long ; moves .B, .W or .L to cmd line ; D0 points to first size bit ; also moves L or W or B to D4 001D94 0105 USZM BTST D0,D5 001D96 660E BNE.S USZM1 001D98 18FC 002E MOVE.B #'.',(A4)+ 001D9C 18FC 0042 MOVE.B #'B',(A4)+ 001DA0 183C 0042 MOVE.B #'B',D4 001DA4 6020 BRA.S USZME 001DA6 5300 USZM1 SUBQ.B #1,D0 001DA8 0105 BTST D0,D5 001DAA 670E BEQ.S USZM2 001DAC 18FC 002E MOVE.B #'.',(A4)+ 001DB0 18FC 0057 MOVE.B #'W',(A4)+ 001DB4 183C 0057 MOVE.B #'W',D4 001DB8 600C BRA.S USZME 001DBA 18FC 002E USZM2 MOVE.B #'.',(A4)+ 001DBE 18FC 004C MOVE.B #'L',(A4)+ 001DC2 183C 004C MOVE.B #'L',D4 001DC6 4E75 USZME RTS ; ; Condition codes routine ; D0 contains nubmber of bits to roll 001DC8 3205 UCC MOVE.W D5,D1 001DCA E079 ROR.W D0,D1 001DCC C2BC 0000 000F AND.L #$F,D1 001DD2 C2FC 0002 MULU.W #2,D1 001DD6 207C 0000 2506 MOVEA.L #UCCLST,A0 001DDC 18F0 1800 MOVE.B 0(A0,D1.L),(A4)+ 001DE0 18F0 1801 MOVE.B 1(A0,D1.L),(A4)+ 001DE4 4E75 RTS ; ; <<<<<< Fixed in mon209 >>>>>> ; Routine for move multiple. ; D3 contains byte in X7-X0 format ; D2 contains letter (ie A,D) 001DE6 4280 UM CLR.L D0 001DE8 123C 00FF MOVE.B #$FF,D1 001DEC 0103 UM00 BTST.L D0,D3 001DEE 6600 0012 BNE UM01 001DF2 0600 0001 ADDI.B #$01,D0 001DF6 0C00 0008 CMPI.B #$08,D0 001DFA 6700 0074 BEQ UME 001DFE 6000 FFEC BRA UM00 001E02 1200 UM01 MOVE.B D0,D1 001E04 6100 0078 BSR UMP 001E08 0600 0001 ADDI.B #$01,D0 001E0C 0C00 0008 CMPI.B #$08,D0 001E10 6700 005E BEQ UME 001E14 0103 BTST.L D0,D3 001E16 6600 0012 BNE UM02 001E1A 0600 0001 ADDI.B #$01,D0 001E1E 0C00 0008 CMPI.B #$08,D0 001E22 6700 004C BEQ UME 001E26 6000 002A BRA UM03 001E2A 1200 UM02 MOVE.B D0,D1 001E2C 0600 0001 ADDI.B #$01,D0 001E30 0C00 0008 CMPI.B #$08,D0 001E34 6700 003A BEQ UME 001E38 0103 BTST.L D0,D3 001E3A 6600 FFEE BNE UM02 001E3E 18FC 002D MOVE.B #'-',(A4)+ 001E42 6100 003A BSR UMP 001E46 0600 0001 ADDI.B #$01,D0 001E4A 0C00 0008 CMPI.B #$08,D0 001E4E 6700 0020 BEQ UME 001E52 0103 UM03 BTST.L D0,D3 001E54 6600 0012 BNE UM04 001E58 0600 0001 ADDI.B #$01,D0 001E5C 0C00 0008 CMPI.B #$08,D0 001E60 6700 000E BEQ UME 001E64 6000 FFEC BRA UM03 001E68 18FC 002F UM04 MOVE.B #'/',(A4)+ 001E6C 6000 FF94 BRA UM01 001E70 0C01 00FF UME CMPI.B #$FF,D1 001E74 6700 0006 BEQ UME0 001E78 6100 0004 BSR UMP 001E7C 4E75 UME0 RTS 001E7E 18C2 UMP MOVE.B D2,(A4)+ 001E80 0601 0030 ADDI.B #$30,D1 001E84 18C1 MOVE.B D1,(A4)+ 001E86 123C 00FF MOVE.B #$FF,D1 001E8A 4E75 RTS ; ;**************************************************** ;End Unassemble Routines ;**************************************************** ; 001E8C 267C 0000 26A9 HELP MOVEA.L #H_MSG1,A3 ;help menu 001E92 6100 EA00 BSR PRTMSG ;now the help menu 001E96 6000 E574 BRA GET_CMD ; 001E9A 6100 E7DE BUSERR BSR CLR_BK ;clear the bkpts 001E9E 267C 0000 2590 MOVEA.L #MSG_1,A3 001EA4 6000 0120 BRA REPORT ; ; The address error exception stores more infomation ; than other exceptions. 8 additonal bytes are pushed ; to the stack before the SR and PC so a modified ; version of REG_SAV is used. 001EA8 48F9 7FFF 0000 ADDERR MOVEM.L D0-D7/A0-A6,SAVREGS ;d0-a6 001EAE FF90 001EB0 DFFC 0000 0008 ADDA.L #$08,A7 001EB6 33DF 0000 FFD4 MOVE.W (A7)+,SAV_SR ;pop SR 001EBC 23DF 0000 FFD0 MOVE.L (A7)+,SAV_PC ;pop PC (It points to ;next instruction) 001EC2 4E6D MOVE.L USP,A5 ;get user's A7 001EC4 23CD 0000 FFCC MOVE.L A5,SAV_A7 ;save it 001ECA 267C 0000 259A MOVEA.L #MSG_2,A3 ;point to message 001ED0 6100 E9C2 BSR PRTMSG 001ED4 2439 0000 FFD0 MOVE.L SAV_PC,D2 ;get user PC value 001EDA 6100 EB3E BSR PRT_SIX 001EDE 6100 E9C4 BSR CRLF 001EE2 6100 E796 BSR CLR_BK ;clear the bkpts 001EE6 6000 E524 BRA GET_CMD ;all done ; 001EEA 6100 EC9E ILEGAL BSR REG_SAV 001EEE 267C 0000 25B0 MOVEA.L #MSG_3,A3 ;point to message 001EF4 6100 E99E BSR PRTMSG 001EF8 2439 0000 FFD0 MOVE.L SAV_PC,D2 ;get user PC value (illegal instruction) 001EFE 6100 EB1A BSR PRT_SIX 001F02 5482 ADDQ.L #2,D2 ;skip a longword in SAV_PC 001F04 23C2 0000 FFD0 MOVE.L D2,SAV_PC 001F0A 51F9 0000 FFFA SF FP_FLG ;clear flag 001F10 6100 E992 BSR CRLF 001F14 6100 E764 BSR CLR_BK ;clear the bkpts 001F18 6000 E4F2 BRA GET_CMD ;all done ; 001F1C 6100 EC6C DIVZERO BSR REG_SAV 001F20 267C 0000 25CE MOVEA.L #MSG_4,A3 ;point to message 001F26 6100 E96C BSR PRTMSG 001F2A 2439 0000 FFD0 MOVE.L SAV_PC,D2 ;get user PC value (next instruction) 001F30 6100 EAE8 BSR PRT_SIX 001F34 6100 E96E BSR CRLF 001F38 6100 E740 BSR CLR_BK ;clear the bkpts 001F3C 6000 E4CE BRA GET_CMD ;all done ; 001F40 6100 EC48 LINE_A BSR REG_SAV 001F44 267C 0000 264B MOVEA.L #MSG_A,A3 ;point to message 001F4A 6100 E948 BSR PRTMSG 001F4E 2439 0000 FFD0 MOVE.L SAV_PC,D2 ;get user PC value (illegal instruction) 001F54 6100 EAC4 BSR PRT_SIX 001F58 5482 ADDQ.L #2,D2 ;skip a longword in SAV_PC 001F5A 23C2 0000 FFD0 MOVE.L D2,SAV_PC 001F60 51F9 0000 FFFA SF FP_FLG ;clear flag 001F66 6100 E93C BSR CRLF 001F6A 6100 E70E BSR CLR_BK ;clear the bkpts 001F6E 6000 E49C BRA GET_CMD ;all done ; 001F72 6100 EC16 LINE_F BSR REG_SAV 001F76 267C 0000 267A MOVEA.L #MSG_F,A3 ;point to message 001F7C 6100 E916 BSR PRTMSG 001F80 2439 0000 FFD0 MOVE.L SAV_PC,D2 ;get user PC value (illegal instruction) 001F86 6100 EA92 BSR PRT_SIX 001F8A 5482 ADDQ.L #2,D2 ;skip a longword in SAV_PC 001F8C 23C2 0000 FFD0 MOVE.L D2,SAV_PC 001F92 6100 E910 BSR CRLF 001F96 51F9 0000 FFFA SF FP_FLG ;clear flag 001F9C 6100 E6DC BSR CLR_BK ;clear the bkpts 001FA0 6000 E46A BRA GET_CMD ;all done ; 001FA4 6100 E6D4 TRAP_V BSR CLR_BK ;clear the bkpts 001FA8 267C 0000 25EB MOVEA.L #MSG_5,A3 001FAE 6016 BRA.S REPORT ; 001FB0 6100 E6C8 PRIVIOL BSR CLR_BK ;clear the bkpts 001FB4 267C 0000 25FA MOVEA.L #MSG_6,A3 001FBA 600A BRA.S REPORT ; 001FBC 6100 E6BC LEVEL_7 BSR CLR_BK ;clear the bkpts 001FC0 267C 0000 260E MOVEA.L #MSG_7,A3 001FC6 6100 E8DC REPORT BSR CRLF 001FCA 6100 E8C8 BSR PRTMSG ;now the help menu 001FCE 6100 E8D4 BSR CRLF 001FD2 6000 E438 BRA GET_CMD ; 001FD6 6100 E890 TO_CHARIN BSR CHARIN 001FDA 4E73 RTE ; 001FDC 6100 E89A TO_CHAROUT BSR CHAROUT 001FE0 4E73 RTE ; 001FE2 6100 E8C0 TO_CRLF BSR CRLF 001FE6 4E73 RTE ; 001FE8 6100 E8AA TO_PRTMSG BSR PRTMSG 001FEC 4E73 RTE ; 001FEE 6100 EA00 TO_PRT_BYT BSR PRT_BYT 001FF2 4E73 RTE ; 001FF4 6100 EA10 TO_PRT_WRD BSR PRT_WRD 001FF8 4E73 RTE ; 001FFA 6100 EA14 TO_PRT_LON BSR PRT_LON 001FFE 4E73 RTE ; 002000 6100 EA70 TO_GET_BYT BSR GET_BYT 002004 4E73 RTE ; 002006 6100 EAA4 TO_GETADR BSR GETADRT 00200A 4E73 RTE ; ;****************************************************** ; Begin Unassemble of Instructions. Each entry is in ; the following format: The 1st word is the opcode ; with all variable bits made 0. The 2nd word is ; the mask consisting of all 1's in the bit positions ; in which the instruction is fully defined and 0's ; in the positions in which the bits can change. Next ; are 6 ASCII bytes of null-padded instruction text. ; Next is one long word pointing to the subroutine ; that handles the disassembly of the opcode. ; The order of the commands is extremely important. ; The most specific commands, those that have more ; ones bits in their mask, must come first. With each ; instruction you'll find the bit count of its mask. ; ; HEX opcode examples ;----------------------------------------------------- ; NOP This instruction is fully defined ; BITS (X's for variable bits) 0100111001110001 ; 1st word (X bits converted to 0) 0100111001110001 ; 2nd word (The mask, see CMPA below) 1111111111111111 ; Mask bit count of ones = 16 ; ; CMPA ; BITS (X's for variable bits) 1011XXXX11XXXXXX ; 1st word (X bits converted to 0) 1011000011000000 ; 2nd word (Defined bits = 1, X = 0) 1111000011000000 ; Mask bit count of ones = 6 ; ;****************************************************** 00200C UNINSTR ; Instructions with 1st nibble = 0000. ; ORI to CCR. Number of bits in mask = (16) 00200C 003C FFFF DC.W $3C,$FFFF 002010 4F52 4900 0000 DC.B 'ORI',0,0,0 002016 0000 13C6 DC.L U09 ; ORI to SR (16) 00201A 007C FFFF DC.W $7C,$FFFF 00201E 4F52 4900 0000 DC.B 'ORI',0,0,0 002024 0000 13FA DC.L U10 ; ANDI to CCR (16) 002028 023C FFFF DC.W $23C,$FFFF 00202C 414E 4449 0000 DC.B 'ANDI',0,0 002032 0000 13C6 DC.L U09 ; ANDI to SR (16) 002036 027C FFFF DC.W $27C,$FFFF 00203A 414E 4449 0000 DC.B 'ANDI',0,0 002040 0000 13FA DC.L U10 ; EORI to CCR (16) 002044 0A3C FFFF DC.W $A3C,$FFFF 002048 454F 5249 0000 DC.B 'EORI',0,0 00204E 0000 13C6 DC.L U09 ; EORI to SR (16) 002052 0A7C FFFF DC.W $A7C,$FFFF 002056 454F 5249 0000 DC.B 'EORI',0,0 00205C 0000 13FA DC.L U10 ; BTST (10) 002060 0800 FFC0 DC.W $800,$FFC0 002064 4254 5354 0000 DC.B 'BTST',0,0 00206A 0000 150C DC.L U14 ; BCHG (10) 00206E 0840 FFC0 DC.W $840,$FFC0 002072 4243 4847 0000 DC.B 'BCHG',0,0 002078 0000 150C DC.L U14 ; BCLR (10) 00207C 0880 FFC0 DC.W $880,$FFC0 002080 4243 4C52 0000 DC.B 'BCLR',0,0 002086 0000 150C DC.L U14 ; BSET (10) 00208A 08C0 FFC0 DC.W $8C0,$FFC0 00208E 4253 4554 0000 DC.B 'BSET',0,0 002094 0000 150C DC.L U14 ; Ordinary ORI (8) 002098 0000 FF00 DC.W $0,$FF00 00209C 4F52 4900 0000 DC.B 'ORI',0,0,0 0020A2 0000 1438 DC.L U11 ; Ordinary ANDI (8) 0020A6 0200 FF00 DC.W $200,$FF00 0020AA 414E 4449 0000 DC.B 'ANDI',0,0 0020B0 0000 1438 DC.L U11 ; SUBI (8) 0020B4 0400 FF00 DC.W $400,$FF00 0020B8 5355 4249 0000 DC.B 'SUBI',0,0 0020BE 0000 1438 DC.L U11 ; ADDI (8) 0020C2 0600 FF00 DC.W $600,$FF00 0020C6 4144 4449 0000 DC.B 'ADDI',0,0 0020CC 0000 1438 DC.L U11 ; Ordinary EORI (8) 0020D0 0A00 FF00 DC.W $A00,$FF00 0020D4 454F 5249 0000 DC.B 'EORI',0,0 0020DA 0000 1438 DC.L U11 ; CMPI (8) 0020DE 0C00 FF00 DC.W $C00,$FF00 0020E2 434D 5049 0000 DC.B 'CMPI',0,0 0020E8 0000 1438 DC.L U11 ; MOVEP (8) 0020EC 0108 F138 DC.W $108,$F138 0020F0 4D4F 5645 5000 DC.B 'MOVEP',0 0020F6 0000 197E DC.L U41 ; BTST (7) 0020FA 0100 F1C0 DC.W $100,$F1C0 0020FE 4254 5354 0000 DC.B 'BTST',0,0 002104 0000 1532 DC.L U15 ; BCHG (7) 002108 0140 F1C0 DC.W $140,$F1C0 00210C 4243 4847 0000 DC.B 'BCHG',0,0 002112 0000 1532 DC.L U15 ; BCLR (7) 002116 0180 F1C0 DC.W $180,$F1C0 00211A 4243 4C52 0000 DC.B 'BCLR',0,0 002120 0000 1532 DC.L U15 ; BSET (7) 002124 01C0 F1C0 DC.W $1C0,$F1C0 002128 4253 4554 0000 DC.B 'BSET',0,0 00212E 0000 1532 DC.L U15 ; MOVEA (5) 002132 0040 C1C0 DC.W $40,$C1C0 002136 4D4F 5645 4100 DC.B 'MOVEA',0 00213C 0000 1586 DC.L U17 ; MOVE (2) 002140 0000 C000 DC.W $0,$C000 002144 4D4F 5645 0000 DC.B 'MOVE',0,0 00214A 0000 1554 DC.L U16 ; Instructions with 1st nibble = 0100 ; ILLEGAL (16) 00214E 4AFC FFFF DC.W $4AFC,$FFFF 002152 494C 4C45 4700 DC.B 'ILLEG',0 002158 0000 11C6 DC.L U01 ; RESET (16) 00215C 4E70 FFFF DC.W $4E70,$FFFF 002160 5245 5345 5400 DC.B 'RESET',0 002166 0000 11C4 DC.L U00 ; NOP (16) 00216A 4E71 FFFF DC.W $4E71,$FFFF 00216E 4E4F 5000 0000 DC.B 'NOP',0,0,0 002174 0000 11C4 DC.L U00 ; STOP (16) 002178 4E72 FFFF DC.W $4E72,$FFFF 00217C 5354 4F50 0000 DC.B 'STOP',0,0 002182 0000 1854 DC.L U34 ; RTE (16) 002186 4E73 FFFF DC.W $4E73,$FFFF 00218A 5254 4500 0000 DC.B 'RTE',0,0,0 002190 0000 11C4 DC.L U00 ; RTS (16) 002194 4E75 FFFF DC.W $4E75,$FFFF 002198 5254 5300 0000 DC.B 'RTS',0,0,0 00219E 0000 11C4 DC.L U00 ; TRAPV (16) 0021A2 4E76 FFFF DC.W $4E76,$FFFF 0021A6 5452 4150 5600 DC.B 'TRAPV',0 0021AC 0000 11C4 DC.L U00 ; RTR (16) 0021B0 4E77 FFFF DC.W $4E77,$FFFF 0021B4 5254 5200 0000 DC.B 'RTR',0,0,0 0021BA 0000 11C4 DC.L U00 ; SWAP (13) 0021BE 4840 FFF8 DC.W $4840,$FFF8 0021C2 5357 4150 0000 DC.B 'SWAP',0,0 0021C8 0000 1642 DC.L U23 ; LINK (13) 0021CC 4E50 FFF8 DC.W $4E50,$FFF8 0021D0 4C49 4E4B 0000 DC.B 'LINK',0,0 0021D6 0000 166E DC.L U25 ; UNLK (13) 0021DA 4E58 FFF8 DC.W $4E58,$FFF8 0021DE 554E 4C4B 0000 DC.B 'UNLK',0,0 0021E4 0000 1658 DC.L U24 ; MOVE An <-> USP (12) 0021E8 4E60 FFF0 DC.W $4E60,$FFF0 0021EC 4D4F 5645 0000 DC.B 'MOVE',0,0 0021F2 0000 1900 DC.L U39 ; TRAP (12) 0021F6 4E40 FFF0 DC.W $4E40,$FFF0 0021FA 5452 4150 0000 DC.B 'TRAP',0,0 002200 0000 1878 DC.L U35 ; JSR (12) 002204 4E80 FFC0 DC.W $4E80,$FFC0 002208 4A53 5200 0000 DC.B 'JSR',0,0,0 00220E 0000 1500 DC.L U13 ; JMP (12) 002212 4EC0 FFC0 DC.W $4EC0,$FFC0 002216 4A4D 5000 0000 DC.B 'JMP',0,0,0 00221C 0000 1500 DC.L U13 ; EXT (11) 002220 4880 FEB8 DC.W $4880,$FEB8 002224 4558 5400 0000 DC.B 'EXT',0,0,0 00222A 0000 17D0 DC.L U30 ; MOVE from SR (10) 00222E 40C0 FFC0 DC.W $40C0,$FFC0 002232 4D4F 5645 0000 DC.B 'MOVE',0,0 002238 0000 18B8 DC.L U37 ; MOVE to CCR (10) 00223C 44C0 FFC0 DC.W $44C0,$FFC0 002240 4D4F 5645 0000 DC.B 'MOVE',0,0 002246 0000 1890 DC.L U36 ; MOVE to SR (10) 00224A 46C0 FFC0 DC.W $46C0,$FFC0 00224E 4D4F 5645 0000 DC.B 'MOVE',0,0 002254 0000 18DC DC.L U38 ; NBCD (10) 002258 4800 FFC0 DC.W $4800,$FFC0 00225C 4E42 4344 0000 DC.B 'NBCD',0,0 002262 0000 1834 DC.L U32 ; PEA (10) 002266 4840 FFC0 DC.W $4840,$FFC0 00226A 5045 4100 0000 DC.B 'PEA',0,0,0 002270 0000 1844 DC.L U33 ; TAS (10) 002274 4AC0 FFC0 DC.W $4AC0,$FFC0 002278 5441 5300 0000 DC.B 'TAS',0,0,0 00227E 0000 1630 DC.L U22 ; NEGX (8) 002282 4000 FF00 DC.W $4000,$FF00 002286 4E45 4758 0000 DC.B 'NEGX',0,0 00228C 0000 161A DC.L U21 ; CLR (8) 002290 4200 FF00 DC.W $4200,$FF00 002294 434C 5200 0000 DC.B 'CLR',0,0,0 00229A 0000 161A DC.L U21 ; NEG (8) 00229E 4400 FF00 DC.W $4400,$FF00 0022A2 4E45 4700 0000 DC.B 'NEG',0,0,0 0022A8 0000 161A DC.L U21 ; NOT (8) 0022AC 4600 FF00 DC.W $4600,$FF00 0022B0 4E4F 5400 0000 DC.B 'NOT',0,0,0 0022B6 0000 161A DC.L U21 ; TST (8) 0022BA 4A00 FF00 DC.W $4A00,$FF00 0022BE 5453 5400 0000 DC.B 'TST',0,0,0 0022C4 0000 161A DC.L U21 ; MOVEM (8) 0022C8 4880 FB80 DC.W $4880,$FB80 0022CC 4D4F 5645 4D00 DC.B 'MOVEM',0 0022D2 0000 19FA DC.L U42 ; LEA (7) 0022D6 41C0 F1C0 DC.W $41C0,$F1C0 0022DA 4C45 4100 0000 DC.B 'LEA',0,0,0 0022E0 0000 17FA DC.L U31 ; CHK (5) 0022E4 4000 F040 DC.W $4000,$F040 0022E8 4348 4B00 0000 DC.B 'CHK',0,0,0 0022EE 0000 173C DC.L U28 ; Instructions with 1st nibble = 0101 ; DBcc (9) 0022F2 50C8 F0F8 DC.W $50C8,$F0F8 0022F6 4442 0000 0000 DC.B 'DB',0,0,0,0 0022FC 0000 15BC DC.L U19 ; Scc (6) 002300 50C0 F0C0 DC.W $50C0,$F0C0 002304 5300 0000 0000 DC.B 'S',0,0,0,0,0 00230A 0000 15FC DC.L U20 ; ADDQ (5) 00230E 5000 F100 DC.W $5000,$F100 002312 4144 4451 0000 DC.B 'ADDQ',0,0 002318 0000 170A DC.L U27 ; SUBQ (5) 00231C 5100 F100 DC.W $5100,$F100 002320 5355 4251 0000 DC.B 'SUBQ',0,0 002326 0000 170A DC.L U27 ; Instructions with 1st nibble = 0110 ; BRA (8) 00232A 6000 FF00 DC.W $6000,$FF00 00232E 4252 4100 0000 DC.B 'BRA',0,0,0 002334 0000 14AE DC.L U12 ; BSR (8) 002338 6100 FF00 DC.W $6100,$FF00 00233C 4253 5200 0000 DC.B 'BSR',0,0,0 002342 0000 14AE DC.L U12 ; Bcc (4) 002346 6000 F000 DC.W $6000,$F000 00234A 4200 0000 0000 DC.B 'B',0,0,0,0,0 002350 0000 15AC DC.L U18 ; Instructions with 1st nibble = 0111 ; MOVEQ (5) 002354 7000 F100 DC.W $7000,$F100 002358 4D4F 5645 5100 DC.B 'MOVEQ',0 00235E 0000 1950 DC.L U40 ; Instructions with 1st nibble = 1000 ; SBCD (9) 002362 8100 F1F0 DC.W $8100,$F1F0 002366 5342 4344 0000 DC.B 'SBCD',0,0 00236C 0000 16A2 DC.L U26 ; DIVU (7) 002370 80C0 F1C0 DC.W $80C0,$F1C0 002374 4449 5655 0000 DC.B 'DIVU',0,0 00237A 0000 130E DC.L U06 ; DIVS (7) 00237E 81C0 F1C0 DC.W $81C0,$F1C0 002382 4449 5653 0000 DC.B 'DIVS',0,0 002388 0000 130E DC.L U06 ; OR (4) 00238C 8000 F000 DC.W $8000,$F000 002390 4F52 0000 0000 DC.B 'OR',0,0,0,0 002396 0000 11D0 DC.L U02 ; Instructions with 1st nibble = 1001 ; SUBX (7) 00239A 9100 F130 DC.W $9100,$F130 00239E 5355 4258 0000 DC.B 'SUBX',0,0 0023A4 0000 125C DC.L U04 ; SUBA (6) 0023A8 90C0 F0C0 DC.W $90C0,$F0C0 0023AC 5355 4241 0000 DC.B 'SUBA',0,0 0023B2 0000 1214 DC.L U03 ; SUB (4) 0023B6 9000 F000 DC.W $9000,$F000 0023BA 5355 4200 0000 DC.B 'SUB',0,0,0 0023C0 0000 11D0 DC.L U02 ; Instructions with 1st nibble = 1011 ; CMPM (8) 0023C4 B108 F138 DC.W $B108,$F138 0023C8 434D 504D 0000 DC.B 'CMPM',0,0 0023CE 0000 12C8 DC.L U05 ; CMPA (6) 0023D2 B0C0 F0C0 DC.W $B0C0,$F0C0 0023D6 434D 5041 0000 DC.B 'CMPA',0,0 0023DC 0000 1214 DC.L U03 ; EOR (5) 0023E0 B100 F100 DC.W $B100,$F100 0023E4 454F 5200 0000 DC.B 'EOR',0,0,0 0023EA 0000 11D0 DC.L U02 ; CMP (4) 0023EE B000 F000 DC.W $B000,$F000 0023F2 434D 5000 0000 DC.B 'CMP',0,0,0 0023F8 0000 11D0 DC.L U02 ; Instructions with 1st nibble = 1100 ; EXG Dn,Dm. (10) 0023FC C140 F1F8 DC.W $C140,$F1F8 002400 4558 4700 0000 DC.B 'EXG',0,0,0 002406 0000 175E DC.L U29DD ; EXG An,Am. (10) 00240A C148 F1F8 DC.W $C148,$F1F8 00240E 4558 4700 0000 DC.B 'EXG',0,0,0 002414 0000 1784 DC.L U29AA ; EXG Dn,An. (10) 002418 C188 F1F8 DC.W $C188,$F1F8 00241C 4558 4700 0000 DC.B 'EXG',0,0,0 002422 0000 17AA DC.L U29DA ; ABCD (9) 002426 C100 F1F0 DC.W $C100,$F1F0 00242A 4142 4344 0000 DC.B 'ABCD',0,0 002430 0000 16A2 DC.L U26 ; MULS (7) 002434 C1C0 F1C0 DC.W $C1C0,$F1C0 002438 4D55 4C53 0000 DC.B 'MULS',0,0 00243E 0000 130E DC.L U06 ; MULU (7) 002442 C0C0 F1C0 DC.W $C0C0,$F1C0 002446 4D55 4C55 0000 DC.B 'MULU',0,0 00244C 0000 130E DC.L U06 ; AND (4) 002450 C000 F000 DC.W $C000,$F000 002454 414E 4400 0000 DC.B 'AND',0,0,0 00245A 0000 11D0 DC.L U02 ; Instructions with 1st nibble = 1101 ; ADDX (7) 00245E D100 F130 DC.W $D100,$F130 002462 4144 4458 0000 DC.B 'ADDX',0,0 002468 0000 125C DC.L U04 ; ADDA (6) 00246C D0C0 F0C0 DC.W $D0C0,$F0C0 002470 4144 4441 0000 DC.B 'ADDA',0,0 002476 0000 1214 DC.L U03 ; ADD (4) 00247A D000 F000 DC.W $D000,$F000 00247E 4144 4400 0000 DC.B 'ADD',0,0,0 002484 0000 11D0 DC.L U02 ; Instructions with 1st nibble = 1110 ; ASL and ASR mem shifts (9) 002488 E0C0 FEC0 DC.W $E0C0,$FEC0 00248C 4153 0000 0000 DC.B 'AS',0,0,0,0 002492 0000 1330 DC.L U07 ; LSL and LSR mem shifts (9) 002496 E2C0 FEC0 DC.W $E2C0,$FEC0 00249A 4C53 0000 0000 DC.B 'LS',0,0,0,0 0024A0 0000 1330 DC.L U07 ; ROXL and ROXR mem shifts (9) 0024A4 E4C0 FEC0 DC.W $E4C0,$FEC0 0024A8 524F 5800 0000 DC.B 'ROX',0,0,0 0024AE 0000 1330 DC.L U07 ; ROL and ROR mem shifts (9) 0024B2 E6C0 FEC0 DC.W $E6C0,$FEC0 0024B6 524F 0000 0000 DC.B 'RO',0,0,0,0 0024BC 0000 1330 DC.L U07 ; ASL and ASR reg shifts (6) 0024C0 E000 F018 DC.W $E000,$F018 0024C4 4153 0000 0000 DC.B 'AS',0,0,0,0 0024CA 0000 135C DC.L U08 ; LSL and LSR reg shifts (6) 0024CE E008 F018 DC.W $E008,$F018 0024D2 4C53 0000 0000 DC.B 'LS',0,0,0,0 0024D8 0000 135C DC.L U08 ; ROXL and ROXR reg shifts (6) 0024DC E010 F018 DC.W $E010,$F018 0024E0 524F 5800 0000 DC.B 'ROX',0,0,0 0024E6 0000 135C DC.L U08 ; ROL and ROR reg shifts (6) 0024EA E018 F018 DC.W $E018,$F018 0024EE 524F 0000 0000 DC.B 'RO',0,0,0,0 0024F4 0000 135C DC.L U08 ; This is the 'I have no idea' entry. 0024F8 0000 0000 DC.W 0,0 0024FC 3F3F 3F3F 3F00 DC.B '?????',0 002502 0000 11C4 DC.L U00 ; 002506 5420 UCCLST DC.B 'T ' 002508 4620 DC.B 'F ' 00250A 4849 DC.B 'HI' 00250C 4C53 DC.B 'LS' 00250E 4343 DC.B 'CC' 002510 4353 DC.B 'CS' 002512 4E45 DC.B 'NE' 002514 4551 DC.B 'EQ' 002516 5643 DC.B 'VC' 002518 5653 DC.B 'VS' 00251A 504C DC.B 'PL' 00251C 4D49 DC.B 'MI' 00251E 4745 DC.B 'GE' 002520 4C54 DC.B 'LT' 002522 4754 DC.B 'GT' 002524 4C45 DC.B 'LE' ; ;*************************************************** ;End Unassemble Instructions ;*************************************************** ; ; Vectors to the command line routines 002526 0000 048C CMD_ADR DC.L DUMP ;DUMP execution address 00252A 0000 054C DC.L GO 00252E 0000 06F0 DC.L EDIT 002532 0000 06D2 DC.L MOOV 002536 0000 1E8C DC.L HELP 00253A 0000 0D7C DC.L LD_FILE 00253E 0000 0470 DC.L FILL 002542 0000 10AC DC.L HEXCALC 002546 0000 0720 DC.L REGMOD 00254A 0000 0F46 DC.L BEG_TRC ;tracing 00254E 0000 102C DC.L BREAK 002552 0000 10E0 DC.L UNASM 002556 0000 06A0 DC.L VERIFY ; The next command is for future command ; development in the RAM of the SBC ; DC.L FUTURE ; 00255A 44 COMANDS DC.B 'D' 00255B 47 DC.B 'G' 00255C 45 DC.B 'E' 00255D 4D DC.B 'M' 00255E 3F DC.B '?' 00255F 4C DC.B 'L' 002560 46 DC.B 'F' 002561 48 DC.B 'H' 002562 52 DC.B 'R' 002563 54 DC.B 'T' 002564 42 DC.B 'B' 002565 55 DC.B 'U' 002566 43 DC.B 'C' ; The next command is for future command ; development in the RAM of the SBC ; DC.B 'X' ; ; Messages go at end so that code word ; alignment won't get derailed 002567 2046 6C61 6773 mesgflg dc.b ' Flags: X = ',0 00256D 3A20 5820 3D20 002573 00 002574 2C20 4E20 3D20 mesgn dc.b ', N = ',0 00257A 00 00257B 2C20 5A20 3D20 mesgz dc.b ', Z = ',0 002581 00 002582 2C20 5620 3D20 mesgv dc.b ', V = ',0 002588 00 002589 2C20 4320 3D20 mesgc dc.b ', C = ',0 00258F 00 ; 002590 4275 7320 4572 MSG_1 DC.B 'Bus Error',0 002596 726F 7200 00259A 4164 6472 6573 MSG_2 DC.B 'Address Error before ',0 0025A0 7320 4572 726F 0025A6 7220 6265 666F 0025AC 7265 2000 0025B0 496C 6C65 6761 MSG_3 DC.B 'Illegal Instruction Error at ' 0025B6 6C20 496E 7374 0025BC 7275 6374 696F 0025C2 6E20 4572 726F 0025C8 7220 6174 20 0025CD 00 DC.B 0 0025CE 4469 7669 6465 MSG_4 DC.B 'Divide by Zero Error before ',0 0025D4 2062 7920 5A65 0025DA 726F 2045 7272 0025E0 6F72 2062 6566 0025E6 6F72 6520 00 0025EB 5452 4150 5620 MSG_5 DC.B 'TRAPV Overflow',0 0025F1 4F76 6572 666C 0025F7 6F77 00 0025FA 5072 6976 696C MSG_6 DC.B 'Privilege Violation',0 002600 6567 6520 5669 002606 6F6C 6174 696F 00260C 6E00 00260E 4C65 7665 6C2D MSG_7 DC.B 'Level-7 Interrupt',0 002614 3720 496E 7465 00261A 7272 7570 7400 002620 0D0A 4272 6561 MSG_8 DC.B CR,LF,'Breakpoint 1: ',0 002626 6B70 6F69 6E74 00262C 2031 3A20 00 002631 0D0A 4272 6561 MSG_9 DC.B CR,LF,'Breakpoint 2: ',0 002637 6B70 6F69 6E74 00263D 2032 3A20 00 002642 496E 6163 7469 MSG_10 DC.B 'Inactive',0 002648 7665 00 00264B 4C69 6E65 2031 MSG_A DC.B 'Line 1010 emulator instruction encountered at ',0 002651 3031 3020 656D 002657 756C 6174 6F72 00265D 2069 6E73 7472 002663 7563 7469 6F6E 002669 2065 6E63 6F75 00266F 6E74 6572 6564 002675 2061 7420 00 00267A 4C69 6E65 2031 MSG_F DC.B 'Line 1111 emulator instruction encountered at ',0 002680 3131 3120 656D 002686 756C 6174 6F72 00268C 2069 6E73 7472 002692 7563 7469 6F6E 002698 2065 6E63 6F75 00269E 6E74 6572 6564 0026A4 2061 7420 00 ; ; Help menu in response to typing a ? 0026A9 0D0A H_MSG1 DC.B CR,LF 0026AB 2A2A 2A20 3638 DC.B '*** 68EC000 CPU-based ' 0026B1 4543 3030 3020 0026B7 4350 552D 6261 0026BD 7365 6420 0026C1 5369 6E67 6C65 DC.B 'Single Board Computer ' 0026C7 2042 6F61 7264 0026CD 2043 6F6D 7075 0026D3 7465 7220 0026D7 2A2A 2A20 4D6F DC.B '*** Monitor Version 3.00',CR,LF 0026DD 6E69 746F 7220 0026E3 5665 7273 696F 0026E9 6E20 332E 3030 0026EF 0D0A 0026F1 3D3D 3D3D 3D3D DC.B '====================================' 0026F7 3D3D 3D3D 3D3D 0026FD 3D3D 3D3D 3D3D 002703 3D3D 3D3D 3D3D 002709 3D3D 3D3D 3D3D 00270F 3D3D 3D3D 3D3D 002715 3D3D 3D3D 3D3D DC.B '================================' 00271B 3D3D 3D3D 3D3D 002721 3D3D 3D3D 3D3D 002727 3D3D 3D3D 3D3D 00272D 3D3D 3D3D 3D3D 002733 3D3D 002735 0D0A DC.B CR,LF 002737 4220 3C31 206F DC.B 'B <1 or 2> ' 00273D 7220 323E 203C 002743 626B 7074 3E20 002749 2020 2020 2020 00274F 2020 2020 20 002754 5365 7420 7065 DC.B 'Set permanent breakpoint ' 00275A 726D 616E 656E 002760 7420 6272 6561 002766 6B70 6F69 6E74 00276C 20 00276D 3120 6F72 2032 DC.B '1 or 2.',CR,LF 002773 2E0D 0A 002776 4220 3C31 206F DC.B 'B <1 or 2> ' 00277C 7220 323E 3C45 002782 4E54 3E20 2020 002788 2020 2020 2020 00278E 2020 2020 20 002793 436C 6561 7220 DC.B 'Clear breakpoint 1 or 2.',CR,LF 002799 6272 6561 6B70 00279F 6F69 6E74 2031 0027A5 206F 7220 322E 0027AB 0D0A 0027AD 423C 454E 543E DC.B 'B ' 0027B3 2020 2020 2020 0027B9 2020 2020 2020 0027BF 2020 2020 2020 0027C5 2020 2020 20 0027CA 4469 7370 6C61 DC.B 'Display permanent breakpoints.',CR,LF 0027D0 7920 7065 726D 0027D6 616E 656E 7420 0027DC 6272 6561 6B70 0027E2 6F69 6E74 732E 0027E8 0D0A 0027EA 4320 3C73 7461 DC.B 'C ' 0027F0 7274 3E20 3C65 0027F6 6E64 3E20 3C64 0027FC 6573 7469 6E3E 002802 2020 2020 20 002807 436F 6D70 6172 DC.B 'Compare Memory',CR,LF 00280D 6520 4D65 6D6F 002813 7279 0D0A 002817 4420 3C73 7461 DC.B 'D <#$ of lines> ' 00281D 7274 3E20 3C23 002823 2420 6F66 206C 002829 696E 6573 3E20 00282F 2020 2020 20 002834 4475 6D70 204D DC.B 'Dump Memory with optional ' 00283A 656D 6F72 7920 002840 7769 7468 206F 002846 7074 696F 6E61 00284C 6C20 00284E 7061 7261 6D65 DC.B 'parameters. ^C to quit.',CR,LF 002854 7465 7273 2E20 00285A 5E43 2074 6F20 002860 7175 6974 2E0D 002866 0A 002867 4420 2C20 3C23 DC.B 'D , <#$ of lines> As ' 00286D 2420 6F66 206C 002873 696E 6573 3E20 002879 2020 2020 2020 00287F 2020 2020 2041 002885 7320 002887 6162 6F76 652C DC.B 'above, but start at current address.' 00288D 2062 7574 2073 002893 7461 7274 2061 002899 7420 6375 7272 00289F 656E 7420 6164 0028A5 6472 6573 732E 0028AB 0D0A DC.B CR,LF 0028AD 4520 3C61 6464 DC.B 'E
' 0028B3 7265 7373 3E20 0028B9 2020 2020 2020 0028BF 2020 2020 2020 0028C5 2020 2020 20 0028CA 4564 6974 204D DC.B 'Edit Memory',CR,LF 0028D0 656D 6F72 790D 0028D6 0A 0028D7 4620 3C73 7461 DC.B 'F ' 0028DD 7274 3E20 3C65 0028E3 6E64 3E20 3C64 0028E9 6174 613E 2020 0028EF 2020 2020 20 0028F4 4669 6C6C 204D DC.B 'Fill Memory',CR,LF 0028FA 656D 6F72 790D 002900 0A 002901 4720 3C73 7461 DC.B 'G ' 002907 7274 3E20 3C62 00290D 6B70 7431 3E20 002913 3C62 6B70 7432 002919 3E20 2020 20 00291E 476F 2074 6F20 DC.B 'Go to USER program with op' 002924 5553 4552 2070 00292A 726F 6772 616D 002930 2077 6974 6820 002936 6F70 002938 7469 6F6E 616C DC.B 'tional breakpoints.',CR,LF 00293E 2062 7265 616B 002944 706F 696E 7473 00294A 2E0D 0A 00294D 4720 2C20 3C62 DC.B 'G , ' 002953 6B70 7431 3E20 002959 3C62 6B70 7432 00295F 3E20 2020 2020 002965 2020 2020 20 00296A 4173 2061 626F DC.B 'As above but start at ' 002970 7665 2062 7574 002976 2073 7461 7274 00297C 2061 7420 002980 6375 7272 656E DC.B 'current program counter.' 002986 7420 7072 6F67 00298C 7261 6D20 636F 002992 756E 7465 722E 002998 0D0A DC.B CR,LF 00299A 473C 454E 543E DC.B 'G ' 0029A0 2020 2020 2020 0029A6 2020 2020 2020 0029AC 2020 2020 2020 0029B2 2020 2020 20 0029B7 5374 6172 7420 DC.B 'Start at current program ' 0029BD 6174 2063 7572 0029C3 7265 6E74 2070 0029C9 726F 6772 616D 0029CF 20 0029D0 636F 756E 7465 DC.B 'counter, no breakpoints.' 0029D6 722C 206E 6F20 0029DC 6272 6561 6B70 0029E2 6F69 6E74 732E 0029E8 0D0A DC.B CR,LF 0029EA 4820 3C64 6174 DC.B 'H ' 0029F0 6131 3E20 3C64 0029F6 6174 6132 3E20 0029FC 2020 2020 2020 002A02 2020 2020 20 002A07 4865 7820 7375 DC.B 'Hex sum & difference',CR,LF 002A0D 6D20 2620 6469 002A13 6666 6572 656E 002A19 6365 0D0A 002A1D 4C20 3C6F 7074 DC.B 'L ' 002A23 696F 6E61 6C20 002A29 6F66 6673 6574 002A2F 2061 6464 7265 002A35 7373 3E20 20 002A3A 4C6F 6164 2053 DC.B 'Load S-FILE Program. ^C to abandon.' 002A40 2D46 494C 4520 002A46 5072 6F67 7261 002A4C 6D2E 205E 4320 002A52 746F 2061 6261 002A58 6E64 6F6E 2E 002A5D 0D0A DC.B CR,LF 002A5F 4D20 3C73 7461 DC.B 'M ' 002A65 7274 3E20 3C65 002A6B 6E64 3E20 3C64 002A71 6573 7469 6E3E 002A77 2020 2020 20 002A7C 4D6F 7665 204D DC.B 'Move Memory',CR,LF 002A82 656D 6F72 790D 002A88 0A 002A89 5220 2020 2020 DC.B 'R ' 002A8F 2020 2020 2020 002A95 2020 2020 2020 002A9B 2020 2020 2020 002AA1 2020 2020 20 002AA6 5265 6769 7374 DC.B 'Register Dump',CR,LF 002AAC 6572 2044 756D 002AB2 700D 0A 002AB5 5220 4437 2020 DC.B 'R D7 ' 002ABB 2020 2020 2020 002AC1 2020 2020 2020 002AC7 2020 2020 2020 002ACD 2020 2020 20 002AD2 5265 6769 7374 DC.B 'Register Modify D7',CR,LF 002AD8 6572 204D 6F64 002ADE 6966 7920 4437 002AE4 0D0A 002AE6 5420 3C6F 7074 DC.B 'T ' 002AEC 696F 6E61 6C20 002AF2 7374 6172 7420 002AF8 6164 6472 6573 002AFE 733E 2020 20 002B03 5472 6163 652E DC.B 'Trace. >R Dn to modify any ' 002B09 203E 5220 446E 002B0F 203C 454E 543E 002B15 2074 6F20 6D6F 002B1B 6469 6679 2061 002B21 6E79 20 002B24 7265 6769 7374 DC.B 'register while ',CR,LF 002B2A 6572 2077 6869 002B30 6C65 200D 0A 002B35 2020 2020 2020 DC.B ' ' 002B3B 2020 2020 2020 002B41 2020 2020 2020 002B47 2020 2020 2020 002B4D 2020 2020 20 002B52 7472 6163 696E DC.B 'tracing. Type to continue ' 002B58 672E 2054 7970 002B5E 6520 3C45 4E54 002B64 3E20 746F 2063 002B6A 6F6E 7469 6E75 002B70 6520 002B72 7472 6163 696E DC.B 'tracing.',CR,LF 002B78 672E 0D0A 002B7C 5520 3C73 7461 DC.B 'U <#$ of lines> ' 002B82 7274 3E20 3C23 002B88 2420 6F66 206C 002B8E 696E 6573 3E20 002B94 2020 2020 20 002B99 556E 6173 7365 DC.B 'Unassemble memory with optional ' 002B9F 6D62 6C65 206D 002BA5 656D 6F72 7920 002BAB 7769 7468 206F 002BB1 7074 696F 6E61 002BB7 6C20 002BB9 7061 7261 6D65 DC.B 'parameters.',CR,LF 002BBF 7465 7273 2E0D 002BC5 0A 002BC6 5520 2C20 3C23 DC.B 'U , <#$ of lines> As ' 002BCC 2420 6F66 206C 002BD2 696E 6573 3E20 002BD8 2020 2020 2020 002BDE 2020 2020 2041 002BE4 7320 002BE6 6162 6F76 652C DC.B 'above, but start at current address.' 002BEC 2062 7574 2073 002BF2 7461 7274 2061 002BF8 7420 6375 7272 002BFE 656E 7420 6164 002C04 6472 6573 732E 002C0A 0D0A DC.B CR,LF 002C0C 3F20 2020 2020 DC.B '? ' 002C12 2020 2020 2020 002C18 2020 2020 2020 002C1E 2020 2020 2020 002C24 2020 2020 20 002C29 5468 6973 2053 DC.B 'This Screen',0 002C2F 6372 6565 6E00 ; 002C35 4261 6420 436F BADCMD DC.B 'Bad Command.',0 002C3B 6D6D 616E 642E 002C41 00 002C42 496E 7661 6C69 INVDATA DC.B 'Invalid address or hex ' 002C48 6420 6164 6472 002C4E 6573 7320 6F72 002C54 2068 6578 20 002C59 6461 7461 2E00 DC.B 'data.',0 002C5F 0D0A 3638 4543 HELLO DC.B CR,LF,'68EC000 Monitor, ' 002C65 3030 3020 4D6F 002C6B 6E69 746F 722C 002C71 20 002C72 7665 7273 696F DC.B 'version 3.00',CR,LF,LF 002C78 6E20 332E 3030 002C7E 0D0A 0A 002C81 5479 7065 203F DC.B 'Type ? for help menu.' 002C87 2066 6F72 2068 002C8D 656C 7020 6D65 002C93 6E75 2E 002C96 0D0A 00 DC.B CR,LF,0 ; Load file error message 002C99 5468 6572 6520 LE_MSG DC.B 'There was an error ' 002C9F 7761 7320 616E 002CA5 2065 7272 6F72 002CAB 20 002CAC 6C6F 6164 696E DC.B 'loading the file.',0 002CB2 6720 7468 6520 002CB8 6669 6C65 2E00 002CBE 2048 4558 2066 LG_MSG DC.B ' HEX file loaded successfully.' 002CC4 696C 6520 6C6F 002CCA 6164 6564 2073 002CD0 7563 6365 7373 002CD6 6675 6C6C 792E 002CDC 0D0A 00 DC.B CR,LF,0 002CDF 0D0A LS_MSG DC.B CR,LF 002CE1 5374 6172 7420 DC.B 'Start sending the file, ' 002CE7 7365 6E64 696E 002CED 6720 7468 6520 002CF3 6669 6C65 2C20 002CF9 5E43 2074 6F20 DC.B '^C to abandon.' 002CFF 6162 616E 646F 002D05 6E2E 002D07 0D0A 00 DC.B CR,LF,0 002D0A 4C6F 6164 696E LF_MSG DC.B 'Loading file named ',0 002D10 6720 6669 6C65 002D16 206E 616D 6564 002D1C 2000 002D1E 0D0A 5375 6D20 HS_MSG DC.B CR,LF,'Sum = ',0 002D24 203D 2000 002D28 0D0A 4469 6666 HD_MSG DC.B CR,LF,'Diff = ',0 002D2E 203D 2000 002D32 0820 0800 BSSPBS dc.b 8,' ',8,0 002D36 0D0A 2500 REDOMSG DC.B CR,LF,'%',0 002D3A 0D0A MSG_NIN DC.B CR,LF 002D3C 5072 6F67 7261 DC.B 'Program terminated at ' 002D42 6D20 7465 726D 002D48 696E 6174 6564 002D4E 2061 7420 002D52 6164 6472 6573 DC.B 'address ',0 002D58 7320 00 002D5B 0D0A MSG_TEN DC.B CR,LF 002D5D 4272 6561 6B70 DC.B 'Breakpoint encountered at ' 002D63 6F69 6E74 2065 002D69 6E63 6F75 6E74 002D6F 6572 6564 2061 002D75 7420 002D77 6164 6472 6573 DC.B 'address ',0 002D7D 7320 00 002D80 5452 4150 2069 TRC_MSG DC.B 'TRAP instruction is next. ' 002D86 6E73 7472 7563 002D8C 7469 6F6E 2069 002D92 7320 6E65 7874 002D98 2E20 002D9A 5472 6163 6520 DC.B 'Trace terminated.',0 002DA0 7465 726D 696E 002DA6 6174 6564 2E00 002DAC 0D0A 436F 6D70 PASSMSG DC.B CR,LF,'Comparison successful.',CR,LF,0 002DB2 6172 6973 6F6E 002DB8 2073 7563 6365 002DBE 7373 6675 6C2E 002DC4 0D0A 00 002DC7 0D0A 436F 6D70 FAILMSG DC.B CR,LF,'Comparison failed.',CR,LF,0 002DCD 6172 6973 6F6E 002DD3 2066 6169 6C65 002DD9 642E 0D0A 00 002DDE 2020 2020 2020 SP24MSG DC.B ' ',0 002DE4 2020 2020 2020 002DEA 2020 2020 2020 002DF0 2020 2020 00 002DF5 5043 3A20 2020 PC_MSG DC.B 'PC: ',0 002DFB 00 002DFC 5352 3A20 2020 SR_MSG DC.B 'SR: ',0 002E02 2020 00 002E05 0D0A 5468 6973 UIMPMSG DC.B CR,LF,'This TRAP #15 task is not ' 002E0B 2054 5241 5020 002E11 2331 3520 7461 002E17 736B 2069 7320 002E1D 6E6F 7420 002E21 696D 706C 656D DC.B 'implemented!',0 002E27 656E 7465 6421 002E2D 00 ; 002E2E 00 ZEND DC.B 0 ; 002E2F END START Symbol Table, 22 reserved symbols, 434 user symbols ----- Reserved Symbols ----- CCR R 00000F SR R 008000 USP R 000000 SSP R 000000 SP R 00FFFE PC R 002E2F D0 D 000000 D1 D 000001 D2 D 000002 D3 D 000003 D4 D 000004 D5 D 000005 D6 D 000006 D7 D 000007 A0 A 000000 A1 A 000001 A2 A 000002 A3 A 000003 A4 A 000004 A5 A 000005 A6 A 000006 A7 A 000007 ----- User Symbols ----- ADDERR L 001EA8 ADR_OUT L 0004E0 ASC_BCD L 000A52 ASC_BX L 000A5E ASC_OUT L 00050C BADCMD L 002C35 BEG1 L 000F58 BEG_TRC L 000F46 BFEBIT E 000001 BP_AD3 E 00FFDA BP_AD4 E 00FFDE BP_ADS1 E 00FFE2 BP_ADS2 E 00FFE6 BP_ADS3 E 00FFEA BP_ADS4 E 00FFEE BREAK L 00102C BREAK1 L 001046 BREAK2 L 001052 BREAK3 L 001058 BS E 000008 BSSPBS L 002D32 BUSERR L 001E9A BYTEOUT L 0004EE CHARIN L 000868 CHARIO L 00089E CHAROUT L 000878 CLR_BK L 00067A CLR_BK1 L 000688 CLR_BK2 L 000692 CMDERR L 000A3E CMD_ADR L 002526 COL_SP L 000D6A COMANDS L 00255A CR E 00000D CRLF L 0008A4 CSREG E 010001 DATAERR L 000A48 DAVBIT E 000002 DIVZERO L 001F1C DOIT L 0019CE DO_JUMP L 00046C DREG E 010000 DSPBRK L 00105C DSPBRK1 L 00107C DSPBRK2 L 001082 DSPBRK3 L 0010A2 DSPBRK4 L 0010A8 DUMP L 00048C DUMP0 L 0004A6 DUMP0A L 0004B8 DUMP1 L 0004D4 DUMPADR E 00FFD6 DUMPBYT E 00008F ECHOFLG E 00FFFD EDIT L 0006F0 ENDRAM E 010000 ENTR_IT L 00071C EX_ADR L 000AEA FAIL L 0006C4 FAILMSG L 002DC7 FILL L 000470 FILLEM L 000482 FP_FLG E 00FFFA FUTURE E 008010 GETADR L 000AC0 GETADRT L 000AAC GETB1 L 000A7C GETB2 L 000AA0 GETB3 L 000AA8 GETBX L 000AAA GETCH1 L 000B2E GETCH2 L 000B40 GETCHAR L 000B0A GETCHX L 000B4A GETLIN L 000AFE GETLIN2 L 000B06 GET_BYT L 000A72 GET_CMD L 00040C GO L 00054C GO1 L 00055E GO2 L 000570 GO3 L 00058C GO4 L 0005B6 GO5 L 0005D4 GO6 L 0005DC GOSKIP L 0005EE HD_MSG L 002D28 HELLO L 002C5F HELP L 001E8C HEXCALC L 0010AC HS_MSG L 002D1E H_MSG1 L 0026A9 ILEGAL L 001EEA INCOM L 000438 INPBUF E 00FF70 INSTAT L 000854 INVDATA L 002C42 IS_S L 000DB8 LD_AD1 L 000ED0 LD_AD2 L 000EF8 LD_ADR L 000EC0 LD_CHK L 000F1E LD_DATA L 000EFA LD_ERR L 000F3C LD_FIL0 L 000D90 LD_FIL1 L 000D9A LD_FILE L 000D7C LD_NUM L 000EA6 LEVEL_7 L 001FBC LE_MSG L 002C99 LF E 00000A LF_MSG L 002D0A LG_MSG L 002CBE LINE_A L 001F40 LINE_F L 001F72 LS_MSG L 002CDF MESGC L 002589 MESGFLG L 002567 MESGN L 002574 MESGV L 002582 MESGZ L 00257B MOOV L 0006D2 MOOV1 L 0006E6 MSG_1 L 002590 MSG_10 L 002642 MSG_2 L 00259A MSG_3 L 0025B0 MSG_4 L 0025CE MSG_5 L 0025EB MSG_6 L 0025FA MSG_7 L 00260E MSG_8 L 002620 MSG_9 L 002631 MSG_A L 00264B MSG_F L 00267A MSG_NIN L 002D3A MSG_TEN L 002D5B NEW_DAT L 0006FA NEXTCHR L 000AC8 NO_CHG L 000AFC NULLR1 L 000B6C NULLREG L 000B60 NUMCMD E 00000D NUM_ASC L 000A60 NUM_EX L 000A70 OLD_PC E 00FF36 OPCOD1 E 00FFF2 OPCOD2 E 00FFF4 OPCOD3 E 00FFF6 OPCOD4 E 00FFF8 PASSMSG L 002DAC PC_MSG L 002DF5 PRIVIOL L 001FB0 PRTBUF E 00FF60 PRTMEX L 00089C PRTMSG L 000894 PRTNEW L 000C4A PRTOLD L 000BFA PRTOLD1 L 000C10 PRTOLD2 L 000C20 PRTOLD3 L 000C36 PRTSR L 000CBE PRTSTR L 000926 PRTSTR1 L 000928 PRT_BYT L 0009F0 PRT_LON L 000A10 PRT_SIX L 000A1A PRT_WRD L 000A06 QUIT L 0006CA RAM E 008000 RAMLEN E 008000 REDOMSG L 002D36 REGD1 L 000C86 REGDFIN L 000CB8 REGDISP L 000C82 REGETC1 L 000CF0 REGETC2 L 000D0C REGETC3 L 000D28 REGETC4 L 000D44 REGETC5 L 000D60 REGME L 00082E REGMOD L 000720 REGMOD0 L 000738 REGMOD1 L 0007C6 REGMQ L 000820 REGPRT1 L 000BDC REGREST L 000BB6 REGTYP E 00FF48 REG_PRT L 000BD8 REG_SAV L 000B8A REPORT L 001FC6 RID1 L 00060E RID2 L 000614 RID3 L 00061C RID_EQ L 000604 S0 L 000E00 S0A L 000E16 S0B L 000E2E S12 L 000E38 S2_FLG E 00FFFC S5 L 000E4A S5A L 000E52 S89 L 000E5E S89A L 000E7E SAVREGS E 00FF90 SAV_A7 E 00FFCC SAV_PC E 00FFD0 SAV_SR E 00FFD4 SEARCH L 00044E SEND1 L 000544 SEND_IT L 00051E SERINI L 00083C SIGN_ON L 0009E4 SKIPFLG E 00FFFB SKIPSP L 000B54 SKIPSPE L 000B5E SP24MSG L 002DDE SPACE L 0008B2 SPARE E 00FF47 SR_MSG L 002DFC STACK E 00FF36 START L 000400 TASK0 L 00091C TASK1 L 000922 TASK12 L 0009BE TASK13 L 0009D0 TASK14 L 0009DC TASK2 L 000934 TASK2A L 000936 TASK2BS L 000950 TASK2EX L 000960 TASK4 L 000968 TASK4A L 00096A TASK4EX L 000994 TASK5 L 000998 TASK5EX L 0009A8 TASK6 L 0009AA TASK7 L 0009B0 TASK7EX L 0009BC TO_CHARIN L 001FD6 TO_CHAROUT L 001FDC TO_CRLF L 001FE2 TO_GETADR L 002006 TO_GET_BYT L 002000 TO_PRTMSG L 001FE8 TO_PRT_BYT L 001FEE TO_PRT_LON L 001FFA TO_PRT_WRD L 001FF4 TRACE L 000F62 TRACE0 L 000F76 TRACE1 L 000FA0 TRACE2 L 000FC0 TRACE3 L 000FDA TRACE4 L 000FDE TRACE5 L 000FF4 TRACE6 L 001012 TRAP_V L 001FA4 TRC_MSG L 002D80 TRPELF E 004E4B TRPTEN E 004E4A TRP_10 L 000650 TRP_11 E 008000 TRP_12 E 008004 TRP_13 E 008008 TRP_14 E 00800C TRP_15 L 0008C0 TRP_9 L 00062A TSK12EX L 0009CE TSTNEXT L 00045E TWO_SP L 0008BA U00 L 0011C4 U01 L 0011C6 U02 L 0011D0 U02_01 L 0011FE U02_02 L 001212 U03 L 001214 U03_01 L 001230 U03_02 L 001240 U04 L 00125C U04_01 L 0012AA U04_02 L 0012C6 U05 L 0012C8 U06 L 00130E U07 L 001330 U07_01 L 001340 U07_02 L 001344 U08 L 00135C U08_01 L 00136C U08_02 L 001370 U08_03 L 001394 U08_06 L 0013AC U08_08 L 0013B2 U09 L 0013C6 U10 L 0013FA U11 L 001438 U11_01 L 001462 U11_02 L 00147E U11_03 L 0014A4 U12 L 0014AE U12_00 L 0014BE U12_01 L 0014DE U12_02 L 0014E8 U12_03 L 0014F0 U12_04 L 0014F4 U13 L 001500 U14 L 00150C U15 L 001532 U16 L 001554 U17 L 001586 U18 L 0015AC U19 L 0015BC U19_01 L 0015F0 U20 L 0015FC U21 L 00161A U22 L 001630 U23 L 001642 U24 L 001658 U25 L 00166E U25_01 L 001696 U26 L 0016A2 U26_01 L 0016D4 U26_02 L 001708 U27 L 00170A U28 L 00173C U29AA L 001784 U29DA L 0017AA U29DD L 00175E U30 L 0017D0 U30_01 L 0017E2 U30_02 L 0017E6 U31 L 0017FA U31A L 001810 U31B L 001818 U32 L 001834 U33 L 001844 U34 L 001854 U35 L 001878 U36 L 001890 U37 L 0018B8 U38 L 0018DC U39 L 001900 U39_01 L 001932 U39_02 L 00194E U40 L 001950 U41 L 00197E U41_01 L 00198E U41_02 L 001996 U41_03 L 0019B8 U41_04 L 0019CC U42 L 0019FA U42_01 L 001A0A U42_02 L 001A12 U42_03 L 001A1C U42_04 L 001A48 U42_05 L 001A3C U42_06 L 001A36 U42_07 L 001A84 U42_08 L 001AB6 U42_09 L 001AA6 U42_10 L 001A7A UASMCMD E 00FF3E UASMOPR E 00FF46 UCC L 001DC8 UCCLST L 002506 UEA L 001AB8 UEA0 L 001CD4 UEA1 L 001C8A UEA10 L 001C0C UEA11 L 001AF6 UEA12 L 001B14 UEA13 L 001C5A UEA14 L 001C5E UEA15 L 001C7E UEA16 L 001C82 UEA17 L 001B7C UEA18 L 001B80 UEA19 L 001BA0 UEA1A L 001C90 UEA2 L 001C28 UEA20 L 001BA4 UEA3 L 001CBC UEA4 L 001D0C UEA5 L 001CF8 UEA6 L 001D1E UEA7 L 001B3E UEA8 L 001BD8 UEA9 L 001BAC UEAD L 001D2C UGBYT L 001D4A UIMPMSG L 002E05 UM L 001DE6 UM00 L 001DEC UM01 L 001E02 UM02 L 001E2A UM03 L 001E52 UM04 L 001E68 UME L 001E70 UME0 L 001E7C UMP L 001E7E UNADR E 00FF3A UNASM L 0010E0 UNASM1 L 00119C UNASM2 L 0011A4 UNASMB L 001174 UNASML L 001186 UNASMS1 L 0010F6 UNASMS2 L 001118 UNASMS3 L 00111E UNASMS4 L 00112E UNASMS5 L 00113E UNASMS6 L 001154 UNINSTR L 00200C UNSEAR L 0011AA UNSEAR0 L 0011B0 UNSEARE L 0011C2 UN_PRT L 00051A UP_CASE L 000AEC UREG L 001D2E UREG1 L 001D3E USM1 L 001108 USTCK E 00FEB0 USZ L 001D60 USZ1 L 001D72 USZ2 L 001D86 USZE L 001D92 USZM L 001D94 USZM1 L 001DA6 USZM2 L 001DBA USZME L 001DC6 VALDIG L 000A24 VALDIGE L 000A3C VERIF1 L 0006B4 VERIFY L 0006A0 ZEND L 002E2E 3354 lines processed. 0 warnings. 0 fatals.