LOGIN   :::   RECOVER PASS   :::   GET ACCOUNT    
Browse
  • Projects
  • Code (CVS)
  • Forums
  • News
  • Articles
  • Polls
  •  
    OpenCores
  • FAQ
  • CVS HowTo
  • Mission
  • Media
  • Tools
  • Advertise
  • Mirrors
  • Logos
  • Contact us
  • Job Opportunity
  •  
    Tools
  • Search
      
  • Download Cores (CVSGet)
  •  
    More
  • Wishbone
  • Perlilog
  • EDA tools
  • OpenTech CD
  •  
    Navigation: All forums > Cvs-checkins > Message List > Message Post

    Message

    Reply | Reply all
    Date Prev | Date Next | Thread Prev | Thread Next Date Index | Thread Index

    From: cvs at opencores.org<cvs@o...>
    Date: Fri Mar 14 16:52:47 CET 2008
    Subject: [cvs-checkins] MODIFIED: System09 ...
    Top
    Date: 00/08/03 14:16:52

    Added: System09/src/Noice MON6809.ASM MON6809.LST MON6809.S19
    MON6809ASM.sh MON6809VHD.aux MON6809VHD.sh
    MON6809_b16.vhd MON6809_b4_0.vhd MON6809_b4_1.vhd
    MON6809_b4_2.vhd MON6809_b4_3.vhd
    Log:
    Updated software - XSA-3S1000 now runs FLEX on an IDE drive or CF card.


    Revision Changes Path
    1.3 System09/src/Noice/MON6809.ASM

    http://www.opencores.org/cvsweb.shtml/System09/src/Noice/MON6809.ASM.diff?r1=1.2&r2=1.3

    (In the diff below, changes in quantity of whitespace are not shown.)

    Index: MON6809.ASM
    ===================================================================
    RCS file: MON6809.ASM
    diff -N MON6809.ASM
    --- /dev/null 1 Jan 1970 00:00:00 -0000
    +++ MON6809.ASM 14 Mar 2008 15:52:47 -0000 1.3
    @@ -0,0 +1,865 @@
    +* 6809 Debug monitor for use with NOICE09
    +*
    +* Copyright (c) 1992-2006 by John Hartman
    +*
    +* Modification History:
    +* 14-Jun-93 JLH release version
    +* 24-Aug-93 JLH bad constant for COMBUF length compare
    +* 25-Feb-98 JLH assemble with either Motorola or Dunfield
    +* 1-May-06 JLH slight cleanup
    +* 4-Jul-06 JEK Modified for System09 ACIA at $E000/$E001
    +* 2K monitor RAM at $F000 - $F7FF
    +* Allocated 1536 bytes ($600) for user stack.
    +* disables watchdog timer
    +*
    +*============================================================================
    +*
    +* To customize for a given target, you must change code in the
    +* hardware equates, the string TSTG, and the routines RESET and REWDT.
    +* You may or may not need to change GETCHAR, PUTCHAR, depending on
    +* how peculiar your UART is.
    +*
    +* This file has been assembled with the Motorola Freeware assembler
    +* available from the Motorola Freeware BBS and elsewhere.
    +* BUT: you must first "comment out" the conditionals as required,
    +* because the Motorola assemblers do not have any IFEQ/ELSE/ENDIF
    +*
    +* This file may also be assembled with the Dunfield assembler
    +*
    +* To add mapped memory support:
    +* 1) Define map port MAPREG here
    +* 2) Define or import map port RAM image MAPIMG here if MAPREG is
    +* write only. (The application code must update MAPIMG before
    +* outputing to MAPREG)
    +* 3) Search for and modify MAPREG, MAPIMG, and REG_PAGE usage below
    +* 4) In TSTG below edit "LOW AND HIGH LIMIT OF MAPPED MEM"
    +* to appropriate range (typically 4000H to 07FFFH for two-bit MMU)
    +*
    +*============================================================================
    +*
    +* I/O equates for Heng's ROM emulator (set true if used)
    +***ROMEM SET 1
    +*
    +*============================================================================
    +* HARDWARE PLATFORM CUSTOMIZATIONS
    +*
    +*RAM_START EQU $D800 START OF MONITOR RAM
    +RAM_START EQU $F000 START OF MONITOR RAM
    +ROM_START EQU $FC00 START OF MONITOR CODE
    +HARD_VECT EQU $FFF0 START OF HARDWARE VECTORS
    +
    +*============================================================================
    +* Equates for memory mapped 16450 serial port on Heng's ROM emulator board
    +*;* IFEQ ROMEM,1
    +*
    +*S16450 equ $A000 base of 16450 UART
    +*RXR equ 0 Receiver buffer register
    +*TXR equ 0 Transmitter buffer register
    +*IER equ 1 Interrupt enable register
    +*LCR equ 3 Line control register
    +*MCR equ 4 Modem control register
    +*DTR equ 1 Bit equate used to control status LED
    +*LSR equ 5 Line status register
    +*
    +* Define monitor serial port
    +*SER_STATUS EQU S16450+LSR
    +*SER_RXDATA EQU S16450+RXR
    +*SER_TXDATA EQU S16450+TXR
    +*RXRDY EQU $01 BIT MASK FOR RX BUFFER FULL
    +*TXRDY EQU $20 BIT MASK FOR TX BUFFER EMPTY
    +*;* ELSE
    +*
    +* Put you UART equates here
    +SER_STATUS EQU $E000
    +SER_RXDATA EQU $E001
    +SER_TXDATA EQU $E001
    +RXRDY EQU $01
    +TXRDY EQU $02
    +*
    +*;* ENDIF +* +* Watchdog timer (if any) See REWDT for use +*WDT EQU $207 +* +* Condition code bits +C EQU 1 +I EQU 10H +F EQU 40H +E EQU 80H +* +*============================================================================ +* RAM definitions: + ORG RAM_START +* +* RAM interrupt vectors (first in SEG for easy addressing, else move to +* their own SEG) +NVEC EQU 8 number of vectors +RAMVEC RMB 2*NVEC +* +* Initial user stack +* (Size and location is user option) +* RMB 64 + RMB $600 +INITSTACK +* +* Monitor stack +* (Calculated use is at most 7 bytes. Leave plenty of spare) + RMB 16 +MONSTACK +* +* Target registers: order must match that in TRGHC11.C +TASK_REGS +REG_STATE RMB 1 +REG_PAGE RMB 1 +REG_SP RMB 2 +REG_U RMB 2 +REG_Y RMB 2 +REG_X RMB 2 +REG_B RMB 1 B BEFORE A, SO D IS LEAST SIG. FIRST +REG_A RMB 1 +REG_DP RMB 1 +REG_CC RMB 1 +REG_PC RMB 2 +TASK_REG_SZ EQU *-TASK_REGS +* +* Communications buffer +* (Must be at least as long as TASK_REG_SZ. At least 19 bytes recommended. +* Larger values may improve speed of NoICE memory move commands.) +COMBUF_SIZE EQU 128 DATA SIZE FOR COMM BUFFER +COMBUF RMB 2+COMBUF_SIZE+1 BUFFER ALSO HAS FN, LEN, AND CHECK +* +RAM_END EQU * ADDRESS OF TOP+1 OF RAM +* +*=========================================================================== + ORG ROM_START +* +* Power on reset +RESET +* +* Set CPU mode to safe state + ORCC #I+F INTERRUPTS OFF + LDS #MONSTACK CLEAN STACK IS HAPPY STACK +* +*---------------------------------------------------------------------------- +*;* IFEQ ROMEM,1 +* +* Initialize S16450 UART on ROM emulator +* +* Delay here in case the UART has not come out of reset yet. + LDX #0 +LOP LEAX -1,X DELAY FOR SLOW RESETTING UART + NOP + NOP + BNE LOP +* +* access baud generator, no parity, 1 stop bit, 8 data bits +* LDA #$83 +* STA S16450+LCR +* +* fixed baud rate of 19200: crystal is 3.686400 Mhz. +* Divisor is 3,686400/(16*baud) +* LDA #12 fix at 19.2 kbaud +* STA S16450+RXR lsb +* LDA #0 +* STA S16450+RXR+1 msb=0 +* +* access data registers, no parity, 1 stop bits, 8 data bits +* LDA #$03 +* STA S16450+LCR +* +* no loopback, OUT2 on, OUT1 on, RTS on, DTR (LED) on +* LDA #$0F +* STA S16450+MCR +* +* disable all interrupts: modem, receive error, transmit, and receive +* LDA #$00 +* STA S16450+IER +* +*;* ELSE +* +* Initialize your UART here + LDA #$03 Reset ACIA + STA SER_STATUS + LDA #$11 8 data 2 stop no parity + STA SER_STATUS + TST SER_RXDATA +*;* ENDIF +* +*---------------------------------------------------------------------------- +* +* Initialize RAM interrupt vectors + LDY #INT_ENTRY ADDRESS OF DEFAULT HANDLER + LDX #RAMVEC POINTER TO RAM VECTORS + LDB #NVEC NUMBER OF VECTORS +RES10 STY ,X++ SET VECTOR + DECB + BNE RES10 +* +* Initialize user registers + LDD #INITSTACK + STA REG_SP+1 INIT USER'S STACK POINTER MSB + STB REG_SP LSB +* + LDD #0 + STD REG_PC + STA REG_A + STA REG_B + STA REG_DP + STD REG_X + STD REG_Y + STD REG_U + STA REG_STATE initial state is "RESET" +* +* Initialize memory paging variables and hardware (if any) + STA REG_PAGE initial page is zero +*;;; STA MAPIMG +*;;; STA MAPREG set hardware map +* + LDA #E+I+F state "all regs pushed", no ints + STA REG_CC +* +* Set function code for "GO". Then if we reset after being told to +* GO, we will come back with registers so user can see the crash + LDA #FN_RUN_TARG + STA COMBUF + JMP RETURN_REGS DUMP REGS, ENTER MONITOR +* +*=========================================================================== +* Get a character to A +* +* Return A=char, CY=0 if data received +* CY=1 if timeout (0.5 seconds) +* +* Uses 6 bytes of stack including return address +* +GETCHAR + PSHS X + LDX #0 LONG TIMEOUT +GC10 JSR REWDT PREVENT WATCHDOG TIMEOUT + LEAX -1,X + BEQ GC90 EXIT IF TIMEOUT + LDA SER_STATUS READ DEVICE STATUS + ANDA #RXRDY + BEQ GC10 NOT READY YET. +* +* Data received: return CY=0. data in A + CLRA CY=0 + LDA SER_RXDATA READ DATA + PULS X,PC +* +* Timeout: return CY=1 +GC90 ORCC #C CY=1 + PULS X,PC +* +*=========================================================================== +* Output character in A +* +* Uses 5 bytes of stack including return address +* +PUTCHAR + PSHS A +PC10 JSR REWDT PREVENT WATCHDOG TIMEOUT + LDA SER_STATUS CHECK TX STATUS + ANDA #TXRDY RX READY ? + BEQ PC10 + PULS A + STA SER_TXDATA TRANSMIT CHAR. + RTS +* +*====================================================================== +* +* RESET WATCHDOG TIMER. MUST BE CALLED AT LEAST ONCE EVERY LITTLE WHILE +* OR COP INTERRUPT WILL OCCUR +* +* Uses 2 bytes of stack including return address +* +REWDT CLRA +* STA WDT + INCA +* STA WDT CU-style WDT: must leave bit high + RTS +* +*====================================================================== +* Response string for GET TARGET STATUS request +* Reply describes target: +TSTG FCB 5 2: PROCESSOR TYPE = 6809 + FCB COMBUF_SIZE 3: SIZE OF COMMUNICATIONS BUFFER + FCB 0 4: NO TASKING SUPPORT + FDB 0,0 5-8: LOW AND HIGH LIMIT OF MAPPED MEM (NONE) + FCB B1-B0 9: BREAKPOINT INSTR LENGTH +B0 SWI 10: BREAKPOINT INSTRUCTION +B1 FCC '6809 monitor V1.0' DESCRIPTION, ZERO + FCB 0 +TSTG_SIZE EQU *-TSTG SIZE OF STRING +* +*====================================================================== +* HARDWARE PLATFORM INDEPENDENT EQUATES AND CODE +* +* Communications function codes. +FN_GET_STAT EQU $FF reply with device info +FN_READ_MEM EQU $FE reply with data +FN_WRITE_M EQU $FD reply with status (+/-) +FN_READ_RG EQU $FC reply with registers +FN_WRITE_RG EQU $FB reply with status +FN_RUN_TARG EQU $FA reply (delayed) with registers +FN_SET_BYTE EQU $F9 reply with data (truncate if error) +FN_IN EQU $F8 input from port +FN_OUT EQU $F7 output to port +* +FN_MIN EQU $F7 MINIMUM RECOGNIZED FUNCTION CODE +FN_ERROR EQU $F0 error reply to unknown op-code +* +*=========================================================================== +* Common handler for default interrupt handlers +* Enter with A=interrupt code = processor state +* All registers stacked, PC=next instruction +INT_ENTRY + STA REG_STATE SAVE STATE +* +* Save registers from stack to reg block for return to master +* Host wants least significant bytes first, so flip as necessary + PULS A + STA REG_CC CONDITION CODES + PULS A + STA REG_A A + PULS A + STA REG_B B + PULS A + STA REG_DP DP + PULS D + STA REG_X+1 MSB X + STB REG_X LSB X + PULS D + STA REG_Y+1 MSB Y + STB REG_Y LSB Y + PULS D + STA REG_U+1 MSB U + STB REG_U LSB U +* +* If this is a breakpoint (state = 1), then back up PC to point at SWI + PULS X PC AFTER INTERRUPT + LDA REG_STATE + CMPA #1 + BNE NOTBP BR IF NOT A BREAKPOINT + LEAX -1,X ELSE BACK UP TO POINT AT SWI LOCATION +NOTBP TFR X,D TRANSFER PC TO D + STA REG_PC+1 MSB + STB REG_PC LSB + JMP ENTER_MON REG_PC POINTS AT POST-INTERRUPT OPCODE +* +*=========================================================================== +* Main loop wait for command frame from master +* +* Uses 6 bytes of stack including return address +* +MAIN LDS #MONSTACK CLEAN STACK IS HAPPY STACK + LDX #COMBUF BUILD MESSAGE HERE +* +* First byte is a function code + JSR GETCHAR GET A FUNCTION (6 bytes of stack) + BCS MAIN JIF TIMEOUT: RESYNC + CMPA #FN_MIN + BLO MAIN JIF BELOW MIN: ILLEGAL FUNCTION + STA ,X+ SAVE FUNCTION CODE +* +* Second byte is data byte count (may be zero) + JSR GETCHAR GET A LENGTH BYTE + BCS MAIN JIF TIMEOUT: RESYNC + CMPA #COMBUF_SIZE + BHI MAIN JIF TOO LONG: ILLEGAL LENGTH + STA ,X+ SAVE LENGTH + CMPA #0 + BEQ MA80 SKIP DATA LOOP IF LENGTH = 0 +* +* Loop for data + TFR A,B SAVE LENGTH FOR LOOP +MA10 JSR GETCHAR GET A DATA BYTE + BCS MAIN JIF TIMEOUT: RESYNC + STA ,X+ SAVE DATA BYTE + DECB + BNE MA10 +* +* Get the checksum +MA80 JSR GETCHAR GET THE CHECKSUM + BCS MAIN JIF TIMEOUT: RESYNC + PSHS A SAVE CHECKSUM +* +* Compare received checksum to that calculated on received buffer +* (Sum should be 0) + JSR CHECKSUM + ADDA ,S+ ADD SAVED CHECKSUM TO COMPUTED + BNE MAIN JIF BAD CHECKSUM +* +* Process the message. + LDX #COMBUF + LDA ,X+ GET THE FUNCTION CODE + LDB ,X+ GET THE LENGTH + CMPA #FN_GET_STAT + BEQ TARGET_STAT + CMPA #FN_READ_MEM + BEQ JREAD_MEM + CMPA #FN_WRITE_M + BEQ JWRITE_MEM + CMPA #FN_READ_RG + BEQ JREAD_REGS + CMPA #FN_WRITE_RG + BEQ JWRITE_REGS + CMPA #FN_RUN_TARG + BEQ JRUN_TARGET + CMPA #FN_SET_BYTE + BEQ JSET_BYTES + CMPA #FN_IN + BEQ JIN_PORT + CMPA #FN_OUT + BEQ JOUT_PORT +* +* Error: unknown function. Complain + LDA #FN_ERROR + STA COMBUF SET FUNCTION AS "ERROR" + LDA #1 + JMP SEND_STATUS VALUE IS "ERROR" +* +* long jumps to handlers +JREAD_MEM JMP READ_MEM +JWRITE_MEM JMP WRITE_MEM +JREAD_REGS JMP READ_REGS +JWRITE_REGS JMP WRITE_REGS +JRUN_TARGET JMP RUN_TARGET +JSET_BYTES JMP SET_BYTES +JIN_PORT JMP IN_PORT +JOUT_PORT JMP OUT_PORT + +*=========================================================================== +* +* Target Status: FN, len +* +* Entry with A=function code, B=data size, X=COMBUF+2 +* +TARGET_STAT + LDX #TSTG DATA FOR REPLY + LDY #COMBUF+1 POINTER TO RETURN BUFFER + LDB #TSTG_SIZE LENGTH OF REPLY + STB ,Y+ SET SIZE IN REPLY BUFFER +TS10 LDA ,X+ MOVE REPLY DATA TO BUFFER + STA ,Y+ + DECB + BNE TS10 +* +* Compute checksum on buffer, and send to master, then return + JMP SEND + +*=========================================================================== +* +* Read Memory: FN, len, page, Alo, Ahi, Nbytes +* +* Entry with A=function code, B=data size, X=COMBUF+2 +* +READ_MEM +* +* Set map +*;;; LDA 0,X +*;;; STA MAPIMG +*;;; STA MAPREG +* +* Get address + LDA 2,X MSB OF ADDRESS IN A + LDB 1,X LSB OF ADDRESS IN B + TFR D,Y ADDRESS IN Y +* +* Prepare return buffer: FN (unchanged), LEN, DATA + LDB 3,X NUMBER OF BYTES TO RETURN + STB COMBUF+1 RETURN LENGTH = REQUESTED DATA + BEQ GLP90 JIF NO BYTES TO GET +* +* Read the requested bytes from local memory +GLP LDA ,Y+ GET BYTE + STA ,X+ STORE TO RETURN BUFFER + DECB + BNE GLP +* +* Compute checksum on buffer, and send to master, then return +GLP90 JMP SEND + +*=========================================================================== +* +* Write Memory: FN, len, page, Alo, Ahi, (len-3 bytes of Data) +* +* Entry with A=function code, B=data size, X=COMBUF+2 +* +* Uses 6 bytes of stack +* +WRITE_MEM +* +* Set map + LDA ,X+ +*;;; STA MAPIMG +*;;; STA MAPREG +* +* Get address + LDB ,X+ LSB OF ADDRESS IN B + LDA ,X+ MSB OF ADDRESS IN A + TFR D,Y ADDRESS IN Y +* +* Compute number of bytes to write + LDB COMBUF+1 NUMBER OF BYTES TO RETURN + SUBB #3 MINUS PAGE AND ADDRESS + BEQ WLP50 JIF NO BYTES TO PUT +* +* Write the specified bytes to local memory + PSHS B,X,Y +WLP LDA ,X+ GET BYTE TO WRITE + STA ,Y+ STORE THE BYTE AT ,Y + DECB + BNE WLP +* +* Compare to see if the write worked + PULS B,X,Y +WLP20 LDA ,X+ GET BYTE JUST WRITTEN + CMPA ,Y+ + BNE WLP80 BR IF WRITE FAILED + DECB + BNE WLP20 +* +* Write succeeded: return status = 0 +WLP50 LDA #0 RETURN STATUS = 0 + BRA WLP90 +* +* Write failed: return status = 1 +WLP80 LDA #1 + +* Return OK status +WLP90 JMP SEND_STATUS + +*=========================================================================== +* +* Read registers: FN, len=0 +* +* Entry with A=function code, B=data size, X=COMBUF+2 +* +READ_REGS +* +* Enter here from SWI after "RUN" and "STEP" to return task registers +RETURN_REGS + LDY #TASK_REGS POINTER TO REGISTERS + LDB #TASK_REG_SZ NUMBER OF BYTES + LDX #COMBUF+1 POINTER TO RETURN BUFFER + STB ,X+ SAVE RETURN DATA LENGTH +* +* Copy the registers +GRLP LDA ,Y+ GET BYTE TO A + STA ,X+ STORE TO RETURN BUFFER + DECB + BNE GRLP +* +* Compute checksum on buffer, and send to master, then return + JMP SEND + +*=========================================================================== +* +* Write registers: FN, len, (register image) +* +* Entry with A=function code, B=data size, X=COMBUF+2 +* +WRITE_REGS +* + TSTB NUMBER OF BYTES + BEQ WRR80 JIF NO REGISTERS +* +* Copy the registers + LDY #TASK_REGS POINTER TO REGISTERS +WRRLP LDA ,X+ GET BYTE TO A + STA ,Y+ STORE TO REGISTER RAM + DECB + BNE WRRLP +* +* Return OK status +WRR80 CLRA + JMP SEND_STATUS + +*=========================================================================== +* +* Run Target: FN, len +* +* Entry with A=function code, B=data size, X=COMBUF+2 +* +RUN_TARGET +* +* Restore user's map +** LDA REG_PAGE USER'S PAGE +** STA MAPIMG SET IMAGE +** STA MAPREG SET MAPPING REGISTER +* +* Switch to user stack + LDA REG_SP+1 BACK TO USER STACK + LDB REG_SP + TFR D,S TO S +* +* Restore registers + LDA REG_PC+1 MS USER PC FOR RTI + LDB REG_PC LS USER PC FOR RTI + PSHS D +* + LDA REG_U+1 + LDB REG_U + PSHS D +* + LDA REG_Y+1 + LDB REG_Y + PSHS D +* + LDA REG_X+1 + LDB REG_X + PSHS D +* + LDA REG_DP + PSHS A +* + LDA REG_B + PSHS A +* + LDA REG_A + PSHS A +* + LDA REG_CC SAVE USER CONDITION CODES FOR RTI + ORA #E _MUST_ BE "ALL REGS PUSHED" + PSHS A +* +* Return to user + RTI +* +*=========================================================================== +* +* Common continue point for all monitor entrances +* SP = user stack +ENTER_MON + TFR S,D USER STACK POINTER + STA REG_SP+1 SAVE USER'S STACK POINTER (MSB) + STB REG_SP LSB +* +* Change to our own stack + LDS #MONSTACK AND USE OURS INSTEAD +* +* Operating system variables +** LDA MAPIMG GET CURRENT USER MAP + LDA #0 ... OR ZERO IF UNMAPPED TARGET + STA REG_PAGE SAVE USER'S PAGE +* +* Return registers to master + JMP RETURN_REGS + +*=========================================================================== +* +* Set target byte(s): FN, len { (page, alow, ahigh, data), (...)... } +* +* Entry with A=function code, B=data size, X=COMBUF+2 +* +* Return has FN, len, (data from memory locations) +* +* If error in insert (memory not writable), abort to return short data +* +* This function is used primarily to set and clear breakpoints +* +* Uses 1 byte of stack +* +SET_BYTES + LDU #COMBUF+1 POINTER TO RETURN BUFFER + LDA #0 + STA ,U+ SET RETURN COUNT AS ZERO + LSRB + LSRB LEN/4 = NUMBER OF BYTES TO SET + BEQ SB99 JIF NO BYTES (COMBUF+1 = 0) +* +* Loop on inserting bytes +SB10 PSHS B SAVE LOOP COUNTER +* +* Set map +*;;; LDA 0,X +*;;; STA MAPIMG +*;;; STA MAPREG +* +* Get address + LDA 2,X MSB OF ADDRESS IN A + LDB 1,X LSB OF ADDRESS IN B + TFR D,Y MEMORY ADDRESS IN Y +* +* Read current data at byte location + LDA 0,Y +* +* Insert new data at byte location + LDB 3,X GET BYTE TO STORE + STB 0,Y WRITE TARGET MEMORY +* +* Verify write + CMPB 0,Y READ TARGET MEMORY + PULS B RESTORE LOOP COUNT, CC'S INTACT + BNE SB90 BR IF INSERT FAILED: ABORT +* +* Save target byte in return buffer + STA ,U+ + INC COMBUF+1 COUNT ONE RETURN BYTE +* +* Loop for next byte + LEAX 4,X STEP TO NEXT BYTE SPECIFIER + CMPB COMBUF+1 + BNE SB10 *LOOP FOR ALL BYTES +* +* Return buffer with data from byte locations +SB90 +* +* Compute checksum on buffer, and send to master, then return +SB99 JMP SEND + +*=========================================================================== +* +* Input from port: FN, len, PortAddressLo, PAhi (=0) +* +* While the 6809 has no input or output instructions, we retain these +* to allow write-without-verify +* +* Entry with A=function code, B=data size, X=COMBUF+2 +* +IN_PORT +* +* Get port address + LDA 1,X MSB OF ADDRESS IN A + LDB 0,X LSB OF ADDRESS IN B + TFR D,Y MEMORY ADDRESS IN Y +* +* Read the requested byte from local memory + LDA 0,Y +* +* Return byte read as "status" + JMP SEND_STATUS + +*=========================================================================== +* +* Output to port FN, len, PortAddressLo, PAhi (=0), data +* +* Entry with A=function code, B=data size, X=COMBUF+2 +* +OUT_PORT +* +* Get port address + LDA 1,X MSB OF ADDRESS IN A + LDB 0,X LSB OF ADDRESS IN B + TFR D,Y MEMORY ADDRESS IN Y +* +* Get data + LDA 2,X +* +* Write value to port + STA 0,Y +* +* Do not read port to verify (some I/O devices don't like it) +* +* Return status of OK + CLRA + JMP SEND_STATUS + +*=========================================================================== +* Build status return with value from "A" +* +SEND_STATUS + STA COMBUF+2 SET STATUS + LDA #1 + STA COMBUF+1 SET LENGTH + BRA SEND + +*=========================================================================== +* Append checksum to COMBUF and send to master +* +SEND JSR CHECKSUM GET A=CHECKSUM, X->checksum location + NEGA + STA 0,X STORE NEGATIVE OF CHECKSUM +* +* Send buffer to master + LDX #COMBUF POINTER TO DATA + LDB 1,X LENGTH OF DATA + ADDB #3 PLUS FUNCTION, LENGTH, CHECKSUM +SND10 LDA ,X+ + JSR PUTCHAR SEND A BYTE + DECB + BNE SND10 + JMP MAIN BACK TO MAIN LOOP + +*=========================================================================== +* Compute checksum on COMBUF. COMBUF+1 has length of data, +* Also include function byte and length byte +* +* Returns: +* A = checksum +* X = pointer to next byte in buffer (checksum location) +* B is scratched +* +CHECKSUM + LDX #COMBUF pointer to buffer + LDB 1,X length of message + ADDB #2 plus function, length + LDA #0 init checksum to 0 +CHK10 ADDA ,X+ + DECB + BNE CHK10 loop for all + RTS return with checksum in A + +*********************************************************************** +* +* Interrupt handlers to catch unused interrupts and traps +* Registers are stacked. Jump through RAM vector using X, type in A +* +* This will affect only interrupt routines looking for register values! +* +* Our default handler uses the code in "A" as the processor state to be +* passed back to the host. +* +RES_ENT LDA #7 + LDX RAMVEC+0 + JMP 0,X +* +SWI3_ENT LDA #6 + LDX RAMVEC+2 + JMP 0,X +* +SWI2_ENT LDA #5 + LDX RAMVEC+4 + JMP 0,X +* +* May have only PC and CC's pushed (unless we were waiting for an interrupt) +* Push all registers here for common entry (else we can't use our RAM vector) +FIRQ_ENT STA REG_A SAVE A REG + PULS A GET CC'S FROM STACK + BITA #E + BNE FIRQ9 BR IF ALL REGISTERS PUSHED ALREADY + PSHS U,Y,X,DP,B ELSE PUSH THEM NOW + LDB REG_A + PSHS B + ORA #E SET AS "ALL REGS PUSHED" +FIRQ9 PSHS A REPLACE CC'S + LDA #4 + LDX RAMVEC+6 + JMP 0,X +* +IRQ_ENT LDA #3 + LDX RAMVEC+8 + JMP 0,X +* +NMI_ENT LDA #2 + LDX RAMVEC+12 + JMP 0,X +* +SWI_ENT LDA #1 + JMP INT_ENTRY +* +*============================================================================ +* VECTORS THROUGH RAM + ORG HARD_VECT + + FDB RES_ENT fff0 (reserved) + FDB SWI3_ENT fff2 (SWI3) + FDB SWI2_ENT fff4 (SWI2) + FDB FIRQ_ENT fff6 (FIRQ) + FDB IRQ_ENT fff8 (IRQ) + FDB SWI_ENT fffa (SWI/breakpoint) + FDB NMI_ENT fffc (NMI) + FDB RESET fffe reset +* + END RESET 1.3 System09/src/Noice/MON6809.LST http://www.opencores.org/cvsweb.shtml/System09/src/Noice/MON6809.LST.diff?r1=1.2&r2=1.3 (In the diff below, changes in quantity of whitespace are not shown.) Index: MON6809.LST =================================================================== RCS file: MON6809.LST diff -N MON6809.LST --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ MON6809.LST 14 Mar 2008 15:52:47 -0000 1.3 @@ -0,0 +1,871 @@ +Assembler release DWC_2.0 version 2.11 +May 6, 2004 (c) Motorola (free ware) +0001 * 6809 Debug monitor for use with NOICE09 +0002 * +0003 * Copyright (c) 1992-2006 by John Hartman +0004 * +0005 * Modification History: +0006 * 14-Jun-93 JLH release version +0007 * 24-Aug-93 JLH bad constant for COMBUF length compare +0008 * 25-Feb-98 JLH assemble with either Motorola or Dunfield +0009 * 1-May-06 JLH slight cleanup +0010 * 4-Jul-06 JEK Modified for System09 ACIA at $E000/$E001 +0011 * 2K monitor RAM at $F000 - $F7FF +0012 * Allocated 1536 bytes ($600) for user stack. +0013 * disables watchdog timer +0014 * +0015 *============================================================================ +0016 * +0017 * To customize for a given target, you must change code in the +0018 * hardware equates, the string TSTG, and the routines RESET and REWDT. +0019 * You may or may not need to change GETCHAR, PUTCHAR, depending on +0020 * how peculiar your UART is. +0021 * +0022 * This file has been assembled with the Motorola Freeware assembler +0023 * available from the Motorola Freeware BBS and elsewhere. +0024 * BUT: you must first "comment out" the conditionals as required, +0025 * because the Motorola assemblers do not have any IFEQ/ELSE/ENDIF +0026 * +0027 * This file may also be assembled with the Dunfield assembler +0028 * +0029 * To add mapped memory support: +0030 * 1) Define map port MAPREG here +0031 * 2) Define or import map port RAM image MAPIMG here if MAPREG is +0032 * write only. (The application code must update MAPIMG before +0033 * outputing to MAPREG) +0034 * 3) Search for and modify MAPREG, MAPIMG, and REG_PAGE usage below +0035 * 4) In TSTG below edit "LOW AND HIGH LIMIT OF MAPPED MEM" +0036 * to appropriate range (typically 4000H to 07FFFH for two-bit MMU) +0037 * +0038 *============================================================================ +0039 * +0040 * I/O equates for Heng's ROM emulator (set true if used) +0041 ***ROMEM SET 1 +0042 * +0043 *============================================================================ +0044 * HARDWARE PLATFORM CUSTOMIZATIONS +0045 * +0046 *RAM_START EQU $D800 START OF MONITOR RAM +0047 F000 RAM_START EQU $F000 START OF MONITOR RAM +0048 FC00 ROM_START EQU $FC00 START OF MONITOR CODE +0049 FFF0 HARD_VECT EQU $FFF0 START OF HARDWARE VECTORS +0050 +0051 *============================================================================ +0052 * Equates for memory mapped 16450 serial port on Heng's ROM emulator board +0053 *;* IFEQ ROMEM,1 +0054 * +0055 *S16450 equ $A000 base of 16450 UART +0056 *RXR equ 0 Receiver buffer register +0057 *TXR equ 0 Transmitter buffer register +0058 *IER equ 1 Interrupt enable register +0059 *LCR equ 3 Line control register +0060 *MCR equ 4 Modem control register +0061 *DTR equ 1 Bit equate used to control status LED +0062 *LSR equ 5 Line status register +0063 * +0064 * Define monitor serial port +0065 *SER_STATUS EQU S16450+LSR +0066 *SER_RXDATA EQU S16450+RXR +0067 *SER_TXDATA EQU S16450+TXR +0068 *RXRDY EQU $01 BIT MASK FOR RX BUFFER FULL +0069 *TXRDY EQU $20 BIT MASK FOR TX BUFFER EMPTY +0070 *;* ELSE +0071 * +0072 * Put you UART equates here +0073 E000 SER_STATUS EQU $E000 +0074 E001 SER_RXDATA EQU $E001 +0075 E001 SER_TXDATA EQU $E001 +0076 0001 RXRDY EQU $01 +0077 0002 TXRDY EQU $02 +0078 * +0079 *;* ENDIF +0080 * +0081 * Watchdog timer (if any) See REWDT for use +0082 *WDT EQU $207 +0083 * +0084 * Condition code bits +0085 0001 C EQU 1 +0086 000A I EQU 10H +0087 0028 F EQU 40H +0088 0050 E EQU 80H +0089 * +0090 *============================================================================ +0091 * RAM definitions: +0092 F000 ORG RAM_START +0093 * +0094 * RAM interrupt vectors (first in SEG for easy addressing, else move to +0095 * their own SEG) +0096 0008 NVEC EQU 8 number of vectors +0097 F000 RAMVEC RMB 2*NVEC +0098 * +0099 * Initial user stack +0100 * (Size and location is user option) +0101 * RMB 64 +0102 F010 RMB $600 +0103 INITSTACK +0104 * +0105 * Monitor stack +0106 * (Calculated use is at most 7 bytes. Leave plenty of spare) +0107 F610 RMB 16 +0108 MONSTACK +0109 * +0110 * Target registers: order must match that in TRGHC11.C +0111 TASK_REGS +0112 F620 REG_STATE RMB 1 +0113 F621 REG_PAGE RMB 1 +0114 F622 REG_SP RMB 2 +0115 F624 REG_U RMB 2 +0116 F626 REG_Y RMB 2 +0117 F628 REG_X RMB 2 +0118 F62A REG_B RMB 1 B BEFORE A, SO D IS LEAST SIG. FIRST +0119 F62B REG_A RMB 1 +0120 F62C REG_DP RMB 1 +0121 F62D REG_CC RMB 1 +0122 F62E REG_PC RMB 2 +0123 0010 TASK_REG_SZ EQU *-TASK_REGS +0124 * +0125 * Communications buffer +0126 * (Must be at least as long as TASK_REG_SZ. At least 19 bytes recommended. +0127 * Larger values may improve speed of NoICE memory move commands.) +0128 0080 COMBUF_SIZE EQU 128 DATA SIZE FOR COMM BUFFER +0129 F630 COMBUF RMB 2+COMBUF_SIZE+1 BUFFER ALSO HAS FN, LEN, AND CHECK +0130 * +0131 F6B3 RAM_END EQU * ADDRESS OF TOP+1 OF RAM +0132 * +0133 *=========================================================================== +0134 FC00 ORG ROM_START +0135 * +0136 * Power on reset +0137 RESET +0138 * +0139 * Set CPU mode to safe state +0140 FC00 1A 32 ORCC #I+F INTERRUPTS OFF +0141 FC02 10 CE F6 20 LDS #MONSTACK CLEAN STACK IS HAPPY STACK +0142 * +0143 *---------------------------------------------------------------------------- +0144 *;* IFEQ ROMEM,1 +0145 * +0146 * Initialize S16450 UART on ROM emulator +0147 * +0148 * Delay here in case the UART has not come out of reset yet. +0149 FC06 8E 00 00 LDX #0 +0150 FC09 30 1F LOP LEAX -1,X DELAY FOR SLOW RESETTING UART +0151 FC0B 12 NOP +0152 FC0C 12 NOP +0153 FC0D 26 FA BNE LOP +0154 * +0155 * access baud generator, no parity, 1 stop bit, 8 data bits +0156 * LDA #$83 +0157 * STA S16450+LCR +0158 * +0159 * fixed baud rate of 19200: crystal is 3.686400 Mhz. +0160 * Divisor is 3,686400/(16*baud) +0161 * LDA #12 fix at 19.2 kbaud +0162 * STA S16450+RXR lsb +0163 * LDA #0 +0164 * STA S16450+RXR+1 msb=0 +0165 * +0166 * access data registers, no parity, 1 stop bits, 8 data bits +0167 * LDA #$03 +0168 * STA S16450+LCR +0169 * +0170 * no loopback, OUT2 on, OUT1 on, RTS on, DTR (LED) on +0171 * LDA #$0F +0172 * STA S16450+MCR +0173 * +0174 * disable all interrupts: modem, receive error, transmit, and receive +0175 * LDA #$00 +0176 * STA S16450+IER +0177 * +0178 *;* ELSE +0179 * +0180 * Initialize your UART here +0181 FC0F 86 03 LDA #$03 Reset ACIA +0182 FC11 B7 E0 00 STA SER_STATUS +0183 FC14 86 11 LDA #$11 8 data 2 stop no parity +0184 FC16 B7 E0 00 STA SER_STATUS +0185 FC19 7D E0 01 TST SER_RXDATA +0186 *;* ENDIF +0187 * +0188 *---------------------------------------------------------------------------- +0189 * +0190 * Initialize RAM interrupt vectors +0191 FC1C 10 8E FC AC LDY #INT_ENTRY ADDRESS OF DEFAULT HANDLER +0192 FC20 8E F0 00 LDX #RAMVEC POINTER TO RAM VECTORS +0193 FC23 C6 08 LDB #NVEC NUMBER OF VECTORS +0194 FC25 10 AF 81 RES10 STY ,X++ SET VECTOR +0195 FC28 5A DECB +0196 FC29 26 FA BNE RES10 +0197 * +0198 * Initialize user registers +0199 FC2B CC F6 10 LDD #INITSTACK +0200 FC2E B7 F6 23 STA REG_SP+1 INIT USER'S STACK POINTER MSB +0201 FC31 F7 F6 22 STB REG_SP LSB +0202 * +0203 FC34 CC 00 00 LDD #0 +0204 FC37 FD F6 2E STD REG_PC +0205 FC3A B7 F6 2B STA REG_A +0206 FC3D B7 F6 2A STA REG_B +0207 FC40 B7 F6 2C STA REG_DP +0208 FC43 FD F6 28 STD REG_X +0209 FC46 FD F6 26 STD REG_Y +0210 FC49 FD F6 24 STD REG_U +0211 FC4C B7 F6 20 STA REG_STATE initial state is "RESET" +0212 * +0213 * Initialize memory paging variables and hardware (if any) +0214 FC4F B7 F6 21 STA REG_PAGE initial page is zero +0215 *;;; STA MAPIMG +0216 *;;; STA MAPREG set hardware map +0217 * +0218 FC52 86 82 LDA #E+I+F state "all regs pushed", no ints +0219 FC54 B7 F6 2D STA REG_CC +0220 * +0221 * Set function code for "GO". Then if we reset after being told to +0222 * GO, we will come back with registers so user can see the crash +0223 FC57 86 FA LDA #FN_RUN_TARG +0224 FC59 B7 F6 30 STA COMBUF +0225 FC5C 7E FD D1 JMP RETURN_REGS DUMP REGS, ENTER MONITOR +0226 * +0227 *=========================================================================== +0228 * Get a character to A +0229 * +0230 * Return A=char, CY=0 if data received +0231 * CY=1 if timeout (0.5 seconds) +0232 * +0233 * Uses 6 bytes of stack including return address +0234 * +0235 GETCHAR +0236 FC5F 34 10 PSHS X +0237 FC61 8E 00 00 LDX #0 LONG TIMEOUT +0238 FC64 BD FC 8E GC10 JSR REWDT PREVENT WATCHDOG TIMEOUT +0239 FC67 30 1F LEAX -1,X +0240 FC69 27 0D BEQ GC90 EXIT IF TIMEOUT +0241 FC6B B6 E0 00 LDA SER_STATUS READ DEVICE STATUS +0242 FC6E 84 01 ANDA #RXRDY +0243 FC70 27 F2 BEQ GC10 NOT READY YET. +0244 * +0245 * Data received: return CY=0. data in A +0246 FC72 4F CLRA CY=0 +0247 FC73 B6 E0 01 LDA SER_RXDATA READ DATA +0248 FC76 35 90 PULS X,PC +0249 * +0250 * Timeout: return CY=1 +0251 FC78 1A 01 GC90 ORCC #C CY=1 +0252 FC7A 35 90 PULS X,PC +0253 * +0254 *=========================================================================== +0255 * Output character in A +0256 * +0257 * Uses 5 bytes of stack including return address +0258 * +0259 PUTCHAR +0260 FC7C 34 02 PSHS A +0261 FC7E BD FC 8E PC10 JSR REWDT PREVENT WATCHDOG TIMEOUT +0262 FC81 B6 E0 00 LDA SER_STATUS CHECK TX STATUS +0263 FC84 84 02 ANDA #TXRDY RX READY ? +0264 FC86 27 F6 BEQ PC10 +0265 FC88 35 02 PULS A +0266 FC8A B7 E0 01 STA SER_TXDATA TRANSMIT CHAR. +0267 FC8D 39 RTS +0268 * +0269 *====================================================================== +0270 * +0271 * RESET WATCHDOG TIMER. MUST BE CALLED AT LEAST ONCE EVERY LITTLE WHILE +0272 * OR COP INTERRUPT WILL OCCUR +0273 * +0274 * Uses 2 bytes of stack including return address +0275 * +0276 FC8E 4F REWDT CLRA +0277 * STA WDT +0278 FC8F 4C INCA +0279 * STA WDT CU-style WDT: must leave bit high +0280 FC90 39 RTS +0281 * +0282 *====================================================================== +0283 * Response string for GET TARGET STATUS request +0284 * Reply describes target: +0285 FC91 05 TSTG FCB 5 2: PROCESSOR TYPE = 6809 +0286 FC92 80 FCB COMBUF_SIZE 3: SIZE OF COMMUNICATIONS BUFFER +0287 FC93 00 FCB 0 4: NO TASKING SUPPORT +0288 FC94 00 00 00 00 FDB 0,0 5-8: LOW AND HIGH LIMIT OF MAPPED MEM (NONE) +0289 FC98 01 FCB B1-B0 9: BREAKPOINT INSTR LENGTH +0290 FC99 3F B0 SWI 10: BREAKPOINT INSTRUCTION +0291 FC9A 36 38 30 39 20 6D B1 FCC '6809 monitor V1.0' DESCRIPTION, ZERO + 6F 6E 69 74 6F 72 + 20 56 31 2E 30 +0292 FCAB 00 FCB 0 +0293 001B TSTG_SIZE EQU *-TSTG SIZE OF STRING +0294 * +0295 *====================================================================== +0296 * HARDWARE PLATFORM INDEPENDENT EQUATES AND CODE +0297 * +0298 * Communications function codes. +0299 00FF FN_GET_STAT EQU $FF reply with device info +0300 00FE FN_READ_MEM EQU $FE reply with data +0301 00FD FN_WRITE_M EQU $FD reply with status (+/-) +0302 00FC FN_READ_RG EQU $FC reply with registers +0303 00FB FN_WRITE_RG EQU $FB reply with status +0304 00FA FN_RUN_TARG EQU $FA reply (delayed) with registers +0305 00F9 FN_SET_BYTE EQU $F9 reply with data (truncate if error) +0306 00F8 FN_IN EQU $F8 input from port +0307 00F7 FN_OUT EQU $F7 output to port +0308 * +0309 00F7 FN_MIN EQU $F7 MINIMUM RECOGNIZED FUNCTION CODE +0310 00F0 FN_ERROR EQU $F0 error reply to unknown op-code +0311 * +0312 *=========================================================================== +0313 * Common handler for default interrupt handlers +0314 * Enter with A=interrupt code = processor state +0315 * All registers stacked, PC=next instruction +0316 INT_ENTRY +0317 FCAC B7 F6 20 STA REG_STATE SAVE STATE +0318 * +0319 * Save registers from stack to reg block for return to master +0320 * Host wants least significant bytes first, so flip as necessary +0321 FCAF 35 02 PULS A +0322 FCB1 B7 F6 2D STA REG_CC CONDITION CODES +0323 FCB4 35 02 PULS A +0324 FCB6 B7 F6 2B STA REG_A A +0325 FCB9 35 02 PULS A +0326 FCBB B7 F6 2A STA REG_B B +0327 FCBE 35 02 PULS A +0328 FCC0 B7 F6 2C STA REG_DP DP +0329 FCC3 35 06 PULS D +0330 FCC5 B7 F6 29 STA REG_X+1 MSB X +0331 FCC8 F7 F6 28 STB REG_X LSB X +0332 FCCB 35 06 PULS D +0333 FCCD B7 F6 27 STA REG_Y+1 MSB Y +0334 FCD0 F7 F6 26 STB REG_Y LSB Y +0335 FCD3 35 06 PULS D +0336 FCD5 B7 F6 25 STA REG_U+1 MSB U +0337 FCD8 F7 F6 24 STB REG_U LSB U +0338 * +0339 * If this is a breakpoint (state = 1), then back up PC to point at SWI +0340 FCDB 35 10 PULS X PC AFTER INTERRUPT +0341 FCDD B6 F6 20 LDA REG_STATE +0342 FCE0 81 01 CMPA #1 +0343 FCE2 26 02 BNE NOTBP BR IF NOT A BREAKPOINT +0344 FCE4 30 1F LEAX -1,X ELSE BACK UP TO POINT AT SWI LOCATION +0345 FCE6 1F 10 NOTBP TFR X,D TRANSFER PC TO D +0346 FCE8 B7 F6 2F STA REG_PC+1 MSB +0347 FCEB F7 F6 2E STB REG_PC LSB +0348 FCEE 7E FE 37 JMP ENTER_MON REG_PC POINTS AT POST-INTERRUPT OPCODE +0349 * +0350 *=========================================================================== +0351 * Main loop wait for command frame from master +0352 * +0353 * Uses 6 bytes of stack including return address +0354 * +0355 FCF1 10 CE F6 20 MAIN LDS #MONSTACK CLEAN STACK IS HAPPY STACK +0356 FCF5 8E F6 30 LDX #COMBUF BUILD MESSAGE HERE +0357 * +0358 * First byte is a function code +0359 FCF8 BD FC 5F JSR GETCHAR GET A FUNCTION (6 bytes of stack) +0360 FCFB 25 F4 BCS MAIN JIF TIMEOUT: RESYNC +0361 FCFD 81 F7 CMPA #FN_MIN +0362 FCFF 25 F0 BLO MAIN JIF BELOW MIN: ILLEGAL FUNCTION +0363 FD01 A7 80 STA ,X+ SAVE FUNCTION CODE +0364 * +0365 * Second byte is data byte count (may be zero) +0366 FD03 BD FC 5F JSR GETCHAR GET A LENGTH BYTE +0367 FD06 25 E9 BCS MAIN JIF TIMEOUT: RESYNC +0368 FD08 81 80 CMPA #COMBUF_SIZE +0369 FD0A 22 E5 BHI MAIN JIF TOO LONG: ILLEGAL LENGTH +0370 FD0C A7 80 STA ,X+ SAVE LENGTH +0371 FD0E 81 00 CMPA #0 +0372 FD10 27 0C BEQ MA80 SKIP DATA LOOP IF LENGTH = 0 +0373 * +0374 * Loop for data +0375 FD12 1F 89 TFR A,B SAVE LENGTH FOR LOOP +0376 FD14 BD FC 5F MA10 JSR GETCHAR GET A DATA BYTE +0377 FD17 25 D8 BCS MAIN JIF TIMEOUT: RESYNC +0378 FD19 A7 80 STA ,X+ SAVE DATA BYTE +0379 FD1B 5A DECB +0380 FD1C 26 F6 BNE MA10 +0381 * +0382 * Get the checksum +0383 FD1E BD FC 5F MA80 JSR GETCHAR GET THE CHECKSUM +0384 FD21 25 CE BCS MAIN JIF TIMEOUT: RESYNC +0385 FD23 34 02 PSHS A SAVE CHECKSUM +0386 * +0387 * Compare received checksum to that calculated on received buffer +0388 * (Sum should be 0) +0389 FD25 BD FE B4 JSR CHECKSUM +0390 FD28 AB E0 ADDA ,S+ ADD SAVED CHECKSUM TO COMPUTED +0391 FD2A 26 C5 BNE MAIN JIF BAD CHECKSUM +0392 * +0393 * Process the message. +0394 FD2C 8E F6 30 LDX #COMBUF +0395 FD2F A6 80 LDA ,X+ GET THE FUNCTION CODE +0396 FD31 E6 80 LDB ,X+ GET THE LENGTH +0397 FD33 81 FF CMPA #FN_GET_STAT +0398 FD35 27 42 BEQ TARGET_STAT +0399 FD37 81 FE CMPA #FN_READ_MEM +0400 FD39 27 26 BEQ JREAD_MEM +0401 FD3B 81 FD CMPA #FN_WRITE_M +0402 FD3D 27 25 BEQ JWRITE_MEM +0403 FD3F 81 FC CMPA #FN_READ_RG +0404 FD41 27 24 BEQ JREAD_REGS +0405 FD43 81 FB CMPA #FN_WRITE_RG +0406 FD45 27 23 BEQ JWRITE_REGS +0407 FD47 81 FA CMPA #FN_RUN_TARG +0408 FD49 27 22 BEQ JRUN_TARGET +0409 FD4B 81 F9 CMPA #FN_SET_BYTE +0410 FD4D 27 21 BEQ JSET_BYTES +0411 FD4F 81 F8 CMPA #FN_IN +0412 FD51 27 20 BEQ JIN_PORT +0413 FD53 81 F7 CMPA #FN_OUT +0414 FD55 27 1F BEQ JOUT_PORT +0415 * +0416 * Error: unknown function. Complain +0417 FD57 86 F0 LDA #FN_ERROR +0418 FD59 B7 F6 30 STA COMBUF SET FUNCTION AS "ERROR" +0419 FD5C 86 01 LDA #1 +0420 FD5E 7E FE 92 JMP SEND_STATUS VALUE IS "ERROR" +0421 * +0422 * long jumps to handlers +0423 FD61 7E FD 8E JREAD_MEM JMP READ_MEM +0424 FD64 7E FD A5 JWRITE_MEM JMP WRITE_MEM +0425 FD67 7E FD D1 JREAD_REGS JMP READ_REGS +0426 FD6A 7E FD E6 JWRITE_REGS JMP WRITE_REGS +0427 FD6D 7E FD F8 JRUN_TARGET JMP RUN_TARGET +0428 FD70 7E FE 4B JSET_BYTES JMP SET_BYTES +0429 FD73 7E FE 79 JIN_PORT JMP IN_PORT +0430 FD76 7E FE 84 JOUT_PORT JMP OUT_PORT +0431 +0432 *=========================================================================== +0433 * +0434 * Target Status: FN, len +0435 * +0436 * Entry with A=function code, B=data size, X=COMBUF+2 +0437 * +0438 TARGET_STAT +0439 FD79 8E FC 91 LDX #TSTG DATA FOR REPLY +0440 FD7C 10 8E F6 31 LDY #COMBUF+1 POINTER TO RETURN BUFFER +0441 FD80 C6 1B LDB #TSTG_SIZE LENGTH OF REPLY +0442 FD82 E7 A0 STB ,Y+ SET SIZE IN REPLY BUFFER +0443 FD84 A6 80 TS10 LDA ,X+ MOVE REPLY DATA TO BUFFER +0444 FD86 A7 A0 STA ,Y+ +0445 FD88 5A DECB +0446 FD89 26 F9 BNE TS10 +0447 * +0448 * Compute checksum on buffer, and send to master, then return +0449 FD8B 7E FE 9C JMP SEND +0450 +0451 *=========================================================================== +0452 * +0453 * Read Memory: FN, len, page, Alo, Ahi, Nbytes +0454 * +0455 * Entry with A=function code, B=data size, X=COMBUF+2 +0456 * +0457 READ_MEM +0458 * +0459 * Set map +0460 *;;; LDA 0,X +0461 *;;; STA MAPIMG +0462 *;;; STA MAPREG +0463 * +0464 * Get address +0465 FD8E A6 02 LDA 2,X MSB OF ADDRESS IN A +0466 FD90 E6 01 LDB 1,X LSB OF ADDRESS IN B +0467 FD92 1F 02 TFR D,Y ADDRESS IN Y +0468 * +0469 * Prepare return buffer: FN (unchanged), LEN, DATA +0470 FD94 E6 03 LDB 3,X NUMBER OF BYTES TO RETURN +0471 FD96 F7 F6 31 STB COMBUF+1 RETURN LENGTH = REQUESTED DATA +0472 FD99 27 07 BEQ GLP90 JIF NO BYTES TO GET +0473 * +0474 * Read the requested bytes from local memory +0475 FD9B A6 A0 GLP LDA ,Y+ GET BYTE +0476 FD9D A7 80 STA ,X+ STORE TO RETURN BUFFER +0477 FD9F 5A DECB +0478 FDA0 26 F9 BNE GLP +0479 * +0480 * Compute checksum on buffer, and send to master, then return +0481 FDA2 7E FE 9C GLP90 JMP SEND +0482 +0483 *=========================================================================== +0484 * +0485 * Write Memory: FN, len, page, Alo, Ahi, (len-3 bytes of Data) +0486 * +0487 * Entry with A=function code, B=data size, X=COMBUF+2 +0488 * +0489 * Uses 6 bytes of stack +0490 * +0491 WRITE_MEM +0492 * +0493 * Set map +0494 FDA5 A6 80 LDA ,X+ +0495 *;;; STA MAPIMG +0496 *;;; STA MAPREG +0497 * +0498 * Get address +0499 FDA7 E6 80 LDB ,X+ LSB OF ADDRESS IN B +0500 FDA9 A6 80 LDA ,X+ MSB OF ADDRESS IN A +0501 FDAB 1F 02 TFR D,Y ADDRESS IN Y +0502 * +0503 * Compute number of bytes to write +0504 FDAD F6 F6 31 LDB COMBUF+1 NUMBER OF BYTES TO RETURN +0505 FDB0 C0 03 SUBB #3 MINUS PAGE AND ADDRESS +0506 FDB2 27 14 BEQ WLP50 JIF NO BYTES TO PUT +0507 * +0508 * Write the specified bytes to local memory +0509 FDB4 34 34 PSHS B,X,Y +0510 FDB6 A6 80 WLP LDA ,X+ GET BYTE TO WRITE +0511 FDB8 A7 A0 STA ,Y+ STORE THE BYTE AT ,Y +0512 FDBA 5A DECB +0513 FDBB 26 F9 BNE WLP +0514 * +0515 * Compare to see if the write worked +0516 FDBD 35 34 PULS B,X,Y +0517 FDBF A6 80 WLP20 LDA ,X+ GET BYTE JUST WRITTEN +0518 FDC1 A1 A0 CMPA ,Y+ +0519 FDC3 26 07 BNE WLP80 BR IF WRITE FAILED +0520 FDC5 5A DECB +0521 FDC6 26 F7 BNE WLP20 +0522 * +0523 * Write succeeded: return status = 0 +0524 FDC8 86 00 WLP50 LDA #0 RETURN STATUS = 0 +0525 FDCA 20 02 BRA WLP90 +0526 * +0527 * Write failed: return status = 1 +0528 FDCC 86 01 WLP80 LDA #1 +0529 +0530 * Return OK status +0531 FDCE 7E FE 92 WLP90 JMP SEND_STATUS +0532 +0533 *=========================================================================== +0534 * +0535 * Read registers: FN, len=0 +0536 * +0537 * Entry with A=function code, B=data size, X=COMBUF+2 +0538 * +0539 READ_REGS +0540 * +0541 * Enter here from SWI after "RUN" and "STEP" to return task registers +0542 RETURN_REGS +0543 FDD1 10 8E F6 20 LDY #TASK_REGS POINTER TO REGISTERS +0544 FDD5 C6 10 LDB #TASK_REG_SZ NUMBER OF BYTES +0545 FDD7 8E F6 31 LDX #COMBUF+1 POINTER TO RETURN BUFFER +0546 FDDA E7 80 STB ,X+ SAVE RETURN DATA LENGTH +0547 * +0548 * Copy the registers +0549 FDDC A6 A0 GRLP LDA ,Y+ GET BYTE TO A +0550 FDDE A7 80 STA ,X+ STORE TO RETURN BUFFER +0551 FDE0 5A DECB +0552 FDE1 26 F9 BNE GRLP +0553 * +0554 * Compute checksum on buffer, and send to master, then return +0555 FDE3 7E FE 9C JMP SEND +0556 +0557 *=========================================================================== +0558 * +0559 * Write registers: FN, len, (register image) +0560 * +0561 * Entry with A=function code, B=data size, X=COMBUF+2 +0562 * +0563 WRITE_REGS +0564 * +0565 FDE6 5D TSTB NUMBER OF BYTES +0566 FDE7 27 0B BEQ WRR80 JIF NO REGISTERS +0567 * +0568 * Copy the registers +0569 FDE9 10 8E F6 20 LDY #TASK_REGS POINTER TO REGISTERS +0570 FDED A6 80 WRRLP LDA ,X+ GET BYTE TO A +0571 FDEF A7 A0 STA ,Y+ STORE TO REGISTER RAM +0572 FDF1 5A DECB +0573 FDF2 26 F9 BNE WRRLP +0574 * +0575 * Return OK status +0576 FDF4 4F WRR80 CLRA +0577 FDF5 7E FE 92 JMP SEND_STATUS +0578 +0579 *=========================================================================== +0580 * +0581 * Run Target: FN, len +0582 * +0583 * Entry with A=function code, B=data size, X=COMBUF+2 +0584 * +0585 RUN_TARGET +0586 * +0587 * Restore user's map +0588 ** LDA REG_PAGE USER'S PAGE +0589 ** STA MAPIMG SET IMAGE +0590 ** STA MAPREG SET MAPPING REGISTER +0591 * +0592 * Switch to user stack +0593 FDF8 B6 F6 23 LDA REG_SP+1 BACK TO USER STACK +0594 FDFB F6 F6 22 LDB REG_SP +0595 FDFE 1F 04 TFR D,S TO S +0596 * +0597 * Restore registers +0598 FE00 B6 F6 2F LDA REG_PC+1 MS USER PC FOR RTI +0599 FE03 F6 F6 2E LDB REG_PC LS USER PC FOR RTI +0600 FE06 34 06 PSHS D +0601 * +0602 FE08 B6 F6 25 LDA REG_U+1 +0603 FE0B F6 F6 24 LDB REG_U +0604 FE0E 34 06 PSHS D +0605 * +0606 FE10 B6 F6 27 LDA REG_Y+1 +0607 FE13 F6 F6 26 LDB REG_Y +0608 FE16 34 06 PSHS D +0609 * +0610 FE18 B6 F6 29 LDA REG_X+1 +0611 FE1B F6 F6 28 LDB REG_X +0612 FE1E 34 06 PSHS D +0613 * +0614 FE20 B6 F6 2C LDA REG_DP +0615 FE23 34 02 PSHS A +0616 * +0617 FE25 B6 F6 2A LDA REG_B +0618 FE28 34 02 PSHS A +0619 * +0620 FE2A B6 F6 2B LDA REG_A +0621 FE2D 34 02 PSHS A +0622 * +0623 FE2F B6 F6 2D LDA REG_CC SAVE USER CONDITION CODES FOR RTI +0624 FE32 8A 50 ORA #E _MUST_ BE "ALL REGS PUSHED" +0625 FE34 34 02 PSHS A +0626 * +0627 * Return to user +0628 FE36 3B RTI +0629 * +0630 *=========================================================================== +0631 * +0632 * Common continue point for all monitor entrances +0633 * SP = user stack +0634 ENTER_MON +0635 FE37 1F 40 TFR S,D USER STACK POINTER +0636 FE39 B7 F6 23 STA REG_SP+1 SAVE USER'S STACK POINTER (MSB) +0637 FE3C F7 F6 22 STB REG_SP LSB +0638 * +0639 * Change to our own stack +0640 FE3F 10 CE F6 20 LDS #MONSTACK AND USE OURS INSTEAD +0641 * +0642 * Operating system variables +0643 ** LDA MAPIMG GET CURRENT USER MAP +0644 FE43 86 00 LDA #0 ... OR ZERO IF UNMAPPED TARGET +0645 FE45 B7 F6 21 STA REG_PAGE SAVE USER'S PAGE +0646 * +0647 * Return registers to master +0648 FE48 7E FD D1 JMP RETURN_REGS +0649 +0650 *=========================================================================== +0651 * +0652 * Set target byte(s): FN, len { (page, alow, ahigh, data), (...)... } +0653 * +0654 * Entry with A=function code, B=data size, X=COMBUF+2 +0655 * +0656 * Return has FN, len, (data from memory locations) +0657 * +0658 * If error in insert (memory not writable), abort to return short data +0659 * +0660 * This function is used primarily to set and clear breakpoints +0661 * +0662 * Uses 1 byte of stack +0663 * +0664 SET_BYTES +0665 FE4B CE F6 31 LDU #COMBUF+1 POINTER TO RETURN BUFFER +0666 FE4E 86 00 LDA #0 +0667 FE50 A7 C0 STA ,U+ SET RETURN COUNT AS ZERO +0668 FE52 54 LSRB +0669 FE53 54 LSRB LEN/4 = NUMBER OF BYTES TO SET +0670 FE54 27 20 BEQ SB99 JIF NO BYTES (COMBUF+1 = 0) +0671 * +0672 * Loop on inserting bytes +0673 FE56 34 04 SB10 PSHS B SAVE LOOP COUNTER +0674 * +0675 * Set map +0676 *;;; LDA 0,X +0677 *;;; STA MAPIMG +0678 *;;; STA MAPREG +0679 * +0680 * Get address +0681 FE58 A6 02 LDA 2,X MSB OF ADDRESS IN A +0682 FE5A E6 01 LDB 1,X LSB OF ADDRESS IN B +0683 FE5C 1F 02 TFR D,Y MEMORY ADDRESS IN Y +0684 * +0685 * Read current data at byte location +0686 FE5E A6 A4 LDA 0,Y +0687 * +0688 * Insert new data at byte location +0689 FE60 E6 03 LDB 3,X GET BYTE TO STORE +0690 FE62 E7 A4 STB 0,Y WRITE TARGET MEMORY +0691 * +0692 * Verify write +0693 FE64 E1 A4 CMPB 0,Y READ TARGET MEMORY +0694 FE66 35 04 PULS B RESTORE LOOP COUNT, CC'S INTACT +0695 FE68 26 0C BNE SB90 BR IF INSERT FAILED: ABORT +0696 * +0697 * Save target byte in return buffer +0698 FE6A A7 C0 STA ,U+ +0699 FE6C 7C F6 31 INC COMBUF+1 COUNT ONE RETURN BYTE +0700 * +0701 * Loop for next byte +0702 FE6F 30 04 LEAX 4,X STEP TO NEXT BYTE SPECIFIER +0703 FE71 F1 F6 31 CMPB COMBUF+1 +0704 FE74 26 E0 BNE SB10 *LOOP FOR ALL BYTES +0705 * +0706 * Return buffer with data from byte locations +0707 SB90 +0708 * +0709 * Compute checksum on buffer, and send to master, then return +0710 FE76 7E FE 9C SB99 JMP SEND +0711 +0712 *=========================================================================== +0713 * +0714 * Input from port: FN, len, PortAddressLo, PAhi (=0) +0715 * +0716 * While the 6809 has no input or output instructions, we retain these +0717 * to allow write-without-verify +0718 * +0719 * Entry with A=function code, B=data size, X=COMBUF+2 +0720 * +0721 IN_PORT +0722 * +0723 * Get port address +0724 FE79 A6 01 LDA 1,X MSB OF ADDRESS IN A +0725 FE7B E6 84 LDB 0,X LSB OF ADDRESS IN B +0726 FE7D 1F 02 TFR D,Y MEMORY ADDRESS IN Y +0727 * +0728 * Read the requested byte from local memory +0729 FE7F A6 A4 LDA 0,Y +0730 * +0731 * Return byte read as "status" +0732 FE81 7E FE 92 JMP SEND_STATUS +0733 +0734 *=========================================================================== +0735 * +0736 * Output to port FN, len, PortAddressLo, PAhi (=0), data +0737 * +0738 * Entry with A=function code, B=data size, X=COMBUF+2 +0739 * +0740 OUT_PORT +0741 * +0742 * Get port address +0743 FE84 A6 01 LDA 1,X MSB OF ADDRESS IN A +0744 FE86 E6 84 LDB 0,X LSB OF ADDRESS IN B +0745 FE88 1F 02 TFR D,Y MEMORY ADDRESS IN Y +0746 * +0747 * Get data +0748 FE8A A6 02 LDA 2,X +0749 * +0750 * Write value to port +0751 FE8C A7 A4 STA 0,Y +0752 * +0753 * Do not read port to verify (some I/O devices don't like it) +0754 * +0755 * Return status of OK +0756 FE8E 4F CLRA +0757 FE8F 7E FE 92 JMP SEND_STATUS +0758 +0759 *=========================================================================== +0760 * Build status return with value from "A" +0761 * +0762 SEND_STATUS +0763 FE92 B7 F6 32 STA COMBUF+2 SET STATUS +0764 FE95 86 01 LDA #1 +0765 FE97 B7 F6 31 STA COMBUF+1 SET LENGTH +0766 FE9A 20 00 BRA SEND +0767 +0768 *=========================================================================== +0769 * Append checksum to COMBUF and send to master +0770 * +0771 FE9C BD FE B4 SEND JSR CHECKSUM GET A=CHECKSUM, X->checksum location +0772 FE9F 40 NEGA +0773 FEA0 A7 84 STA 0,X STORE NEGATIVE OF CHECKSUM +0774 * +0775 * Send buffer to master +0776 FEA2 8E F6 30 LDX #COMBUF POINTER TO DATA +0777 FEA5 E6 01 LDB 1,X LENGTH OF DATA +0778 FEA7 CB 03 ADDB #3 PLUS FUNCTION, LENGTH, CHECKSUM +0779 FEA9 A6 80 SND10 LDA ,X+ +0780 FEAB BD FC 7C JSR PUTCHAR SEND A BYTE +0781 FEAE 5A DECB +0782 FEAF 26 F8 BNE SND10 +0783 FEB1 7E FC F1 JMP MAIN BACK TO MAIN LOOP +0784 +0785 *=========================================================================== +0786 * Compute checksum on COMBUF. COMBUF+1 has length of data, +0787 * Also include function byte and length byte +0788 * +0789 * Returns: +0790 * A = checksum +0791 * X = pointer to next byte in buffer (checksum location) +0792 * B is scratched +0793 * +0794 CHECKSUM +0795 FEB4 8E F6 30 LDX #COMBUF pointer to buffer +0796 FEB7 E6 01 LDB 1,X length of message +0797 FEB9 CB 02 ADDB #2 plus function, length +0798 FEBB 86 00 LDA #0 init checksum to 0 +0799 FEBD AB 80 CHK10 ADDA ,X+ +0800 FEBF 5A DECB +0801 FEC0 26 FB BNE CHK10 loop for all +0802 FEC2 39 RTS return with checksum in A +0803 +0804 *********************************************************************** +0805 * +0806 * Interrupt handlers to catch unused interrupts and traps +0807 * Registers are stacked. Jump through RAM vector using X, type in A +0808 * +0809 * This will affect only interrupt routines looking for register values! +0810 * +0811 * Our default handler uses the code in "A" as the processor state to be +0812 * passed back to the host. +0813 * +0814 FEC3 86 07 RES_ENT LDA #7 +0815 FEC5 BE F0 00 LDX RAMVEC+0 +0816 FEC8 6E 84 JMP 0,X +0817 * +0818 FECA 86 06 SWI3_ENT LDA #6 +0819 FECC BE F0 02 LDX RAMVEC+2 +0820 FECF 6E 84 JMP 0,X +0821 * +0822 FED1 86 05 SWI2_ENT LDA #5 +0823 FED3 BE F0 04 LDX RAMVEC+4 +0824 FED6 6E 84 JMP 0,X +0825 * +0826 * May have only PC and CC's pushed (unless we were waiting for an interrupt) +0827 * Push all registers here for common entry (else we can't use our RAM vector) +0828 FED8 B7 F6 2B FIRQ_ENT STA REG_A SAVE A REG +0829 FEDB 35 02 PULS A GET CC'S FROM STACK +0830 FEDD 85 50 BITA #E +0831 FEDF 26 09 BNE FIRQ9 BR IF ALL REGISTERS PUSHED ALREADY +0832 FEE1 34 7C PSHS U,Y,X,DP,B ELSE PUSH THEM NOW +0833 FEE3 F6 F6 2B LDB REG_A +0834 FEE6 34 04 PSHS B +0835 FEE8 8A 50 ORA #E SET AS "ALL REGS PUSHED" +0836 FEEA 34 02 FIRQ9 PSHS A REPLACE CC'S +0837 FEEC 86 04 LDA #4 +0838 FEEE BE F0 06 LDX RAMVEC+6 +0839 FEF1 6E 84 JMP 0,X +0840 * +0841 FEF3 86 03 IRQ_ENT LDA #3 +0842 FEF5 BE F0 08 LDX RAMVEC+8 +0843 FEF8 6E 84 JMP 0,X +0844 * +0845 FEFA 86 02 NMI_ENT LDA #2 +0846 FEFC BE F0 0C LDX RAMVEC+12 +0847 FEFF 6E 84 JMP 0,X +0848 * +0849 FF01 86 01 SWI_ENT LDA #1 +0850 FF03 7E FC AC JMP INT_ENTRY +0851 * +0852 *============================================================================ +0853 * VECTORS THROUGH RAM +0854 FFF0 ORG HARD_VECT +0855 +0856 FFF0 FE C3 FDB RES_ENT fff0 (reserved) +0857 FFF2 FE CA FDB SWI3_ENT fff2 (SWI3) +0858 FFF4 FE D1 FDB SWI2_ENT fff4 (SWI2) +0859 FFF6 FE D8 FDB FIRQ_ENT fff6 (FIRQ) +0860 FFF8 FE F3 FDB IRQ_ENT fff8 (IRQ) +0861 FFFA FF 01 FDB SWI_ENT fffa (SWI/breakpoint) +0862 FFFC FE FA FDB NMI_ENT fffc (NMI) +0863 FFFE FC 00 FDB RESET fffe reset +0864 * +0865 END RESET +Program + Init Data = 790 bytes +Error count = 0 1.3 System09/src/Noice/MON6809.S19 http://www.opencores.org/cvsweb.shtml/System09/src/Noice/MON6809.S19.diff?r1=1.2&r2=1.3 (In the diff below, changes in quantity of whitespace are not shown.) Index: MON6809.S19 =================================================================== RCS file: MON6809.S19 diff -N MON6809.S19 --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ MON6809.S19 14 Mar 2008 15:52:47 -0000 1.3 @@ -0,0 +1,27 @@ +S123FC001A3210CEF6208E0000301F121226FA8603B7E0008611B7E0007DE001108EFCAC8D +S123FC208EF000C60810AF815A26FACCF610B7F623F7F622CC0000FDF62EB7F62BB7F62A6D +S123FC40B7F62CFDF628FDF626FDF624B7F620B7F6218682B7F62D86FAB7F6307EFDD13422 +S123FC60108E0000BDFC8E301F270DB6E000840127F24FB6E00135901A0135903402BDFC6A +S123FC808EB6E000840227F63502B7E001394F4C3905800000000000013F36383039206D94 +S123FCA06F6E69746F722056312E3000B7F6203502B7F62D3502B7F62B3502B7F62A35026E +S123FCC0B7F62C3506B7F629F7F6283506B7F627F7F6263506B7F625F7F6243510B6F620D0 +S123FCE081012602301F1F10B7F62FF7F62E7EFE3710CEF6208EF630BDFC5F25F481F725B8 +S123FD00F0A780BDFC5F25E9818022E5A7808100270C1F89BDFC5F25D8A7805A26F6BDFCAC +S123FD205F25CE3402BDFEB4ABE026C58EF630A680E68081FF274281FE272681FD27258112 +S123FD40FC272481FB272381FA272281F9272181F8272081F7271F86F0B7F63086017EFE38 +S123FD60927EFD8E7EFDA57EFDD17EFDE67EFDF87EFE4B7EFE797EFE848EFC91108EF63108 +S123FD80C61BE7A0A680A7A05A26F97EFE9CA602E6011F02E603F7F6312707A6A0A7805A4D +S123FDA026F97EFE9CA680E680A6801F02F6F631C00327143434A680A7A05A26F93534A6BD +S123FDC080A1A026075A26F78600200286017EFE92108EF620C6108EF631E780A6A0A7806A +S123FDE05A26F97EFE9C5D270B108EF620A680A7A05A26F94F7EFE92B6F623F6F6221F04E8 +S123FE00B6F62FF6F62E3406B6F625F6F6243406B6F627F6F6263406B6F629F6F628340652 +S123FE20B6F62C3402B6F62A3402B6F62B3402B6F62D8A5034023B1F40B7F623F7F6221025 +S123FE40CEF6208600B7F6217EFDD1CEF6318600A7C0545427203404A602E6011F02A6A417 +S123FE60E603E7A4E1A43504260CA7C07CF6313004F1F63126E07EFE9CA601E6841F02A6CE +S123FE80A47EFE92A601E6841F02A602A7A44F7EFE92B7F6328601B7F6312000BDFEB44017 +S123FEA0A7848EF630E601CB03A680BDFC7C5A26F87EFCF18EF630E601CB028600AB805AF9 +S123FEC026FB398607BEF0006E848606BEF0026E848605BEF0046E84B7F62B350285502630 +S123FEE009347CF6F62B34048A5034028604BEF0066E848603BEF0086E848602BEF00C6ED5 +S109FF008486017EFCACC6 +S113FFF0FEC3FECAFED1FED8FEF3FF01FEFAFC00EA +S9030000FC 1.3 System09/src/Noice/MON6809ASM.sh http://www.opencores.org/cvsweb.shtml/System09/src/Noice/MON6809ASM.sh.diff?r1=1.2&r2=1.3 (In the diff below, changes in quantity of whitespace are not shown.) Index: MON6809ASM.sh =================================================================== RCS file: MON6809ASM.sh diff -N MON6809ASM.sh --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ MON6809ASM.sh 14 Mar 2008 15:52:47 -0000 1.3 @@ -0,0 +1,2 @@ +../../Tools/as09/as09.exe MON6809.ASM -l > MON6809.LST + 1.3 System09/src/Noice/MON6809VHD.aux http://www.opencores.org/cvsweb.shtml/System09/src/Noice/MON6809VHD.aux.diff?r1=1.2&r2=1.3 (In the diff below, changes in quantity of whitespace are not shown.) Index: MON6809VHD.aux =================================================================== RCS file: MON6809VHD.aux diff -N MON6809VHD.aux --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ MON6809VHD.aux 14 Mar 2008 15:52:47 -0000 1.3 @@ -0,0 +1,10 @@ +t m +l MON6809.S19 +t h +s MON6809_b16.vhd f800 ffff +s MON6809_b4_0.vhd f800 f9ff +s MON6809_b4_1.vhd fa00 fbff +s MON6809_b4_2.vhd fc00 fdff +s MON6809_b4_3.vhd fe00 ffff +q + 1.3 System09/src/Noice/MON6809VHD.sh http://www.opencores.org/cvsweb.shtml/System09/src/Noice/MON6809VHD.sh.diff?r1=1.2&r2=1.3 (In the diff below, changes in quantity of whitespace are not shown.) Index: MON6809VHD.sh =================================================================== RCS file: MON6809VHD.sh diff -N MON6809VHD.sh --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ MON6809VHD.sh 14 Mar 2008 15:52:47 -0000 1.3 @@ -0,0 +1 @@ +../../Tools/epedit/epedit.exe MON6809VHD.aux 1.1 System09/src/Noice/MON6809_b16.vhd http://www.opencores.org/cvsweb.shtml/System09/src/Noice/MON6809_b16.vhd?rev=1.1&content-type=text/x-cvsweb-markup Index: MON6809_b16.vhd =================================================================== INIT_00 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_01 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_02 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_03 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_04 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_05 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_06 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_07 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_08 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_09 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_0a => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_0b => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_0c => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_0d => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_0e => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_0f => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_10 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_11 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_12 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_13 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_14 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_15 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_16 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_17 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_18 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_19 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_1a => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_1b => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_1c => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_1d => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_1e => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_1f => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_20 => x"ACFC8E1001E07D00E0B7118600E0B70386FA2612121F3000008E20F6CE10321A", INIT_21 => x"2AF6B72BF6B72EF6FD0000CC22F6F723F6B710F6CCFA265A81AF1008C600F08E", INIT_22 => x"34D1FD7E30F6B7FA862DF6B7828621F6B720F6B724F6FD26F6FD28F6FD2CF6B7", INIT_23 => x"FCBD02349035011A903501E0B64FF227018400E0B60D271F308EFCBD00008E10", INIT_24 => x"6D20393038363F0100000000008005394C4F3901E0B70235F627028400E0B68E", INIT_25 => x"02352AF6B702352BF6B702352DF6B7023520F6B700302E315620726F74696E6F", INIT_26 => x"20F6B6103524F6F725F6B7063526F6F727F6B7063528F6F729F6B706352CF6B7", INIT_27 => x"25F781F4255FFCBD30F68E20F6CE1037FE7E2EF6F72FF6B7101F1F3002260181", INIT_28 => x"FCBDF6265A80A7D8255FFCBD891F0C27008180A7E5228081E9255FFCBD80A7F0", INIT_29 => x"812527FD812627FE814227FF8180E680A630F68EC526E0ABB4FEBD0234CE255F", INIT_2a => x"FE7E018630F6B7F0861F27F7812027F8812127F9812227FA812327FB812427FC", INIT_2b => x"31F68E1091FC8E84FE7E79FE7E4BFE7EF8FD7EE6FD7ED1FD7EA5FD7E8EFD7E92", INIT_2c => x"5A80A7A0A6072731F6F703E6021F01E602A69CFE7EF9265AA0A780A6A0E71BC6", INIT_2d => x"A63435F9265AA0A780A63434142703C031F6F6021F80A680E680A69CFE7EF926", INIT_2e => x"80A7A0A680E731F68E10C620F68E1092FE7E018602200086F7265A0726A0A180", INIT_2f => x"041F22F6F623F6B692FE7E4FF9265AA0A780A620F68E100B275D9CFE7EF9265A", INIT_30 => x"063428F6F629F6B6063426F6F627F6B6063424F6F625F6B606342EF6F62FF6B6", INIT_31 => x"1022F6F723F6B7401F3B0234508A2DF6B602342BF6B602342AF6B602342CF6B6", INIT_32 => x"A4A6021F01E602A6043420275454C0A7008631F6CED1FD7E21F6B7008620F6CE", INIT_33 => x"A6021F84E601A69CFE7EE02631F6F1043031F67CC0A70C260435A4E1A4E703E6", INIT_34 => x"40B4FEBD002031F6B7018632F6B792FE7E4FA4A702A6021F84E601A692FE7EA4", INIT_35 => x"5A80AB008602CB01E630F68EF1FC7EF8265A7CFCBD80A603CB01E630F68E84A7", INIT_36 => x"26508502352BF6B7846E04F0BE0586846E02F0BE0686846E00F0BE078639FB26", INIT_37 => x"6E0CF0BE0286846E08F0BE0386846E06F0BE04860234508A04342BF6F67C3409", INIT_38 => x"0000000000000000000000000000000000000000000000000000ACFC7E018684", INIT_39 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_3a => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_3b => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_3c => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_3d => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_3e => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_3f => x"00FCFAFE01FFF3FED8FED1FECAFEC3FE00000000000000000000000000000000", 1.1 System09/src/Noice/MON6809_b4_0.vhd http://www.opencores.org/cvsweb.shtml/System09/src/Noice/MON6809_b4_0.vhd?rev=1.1&content-type=text/x-cvsweb-markup Index: MON6809_b4_0.vhd =================================================================== INIT_00 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_01 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_02 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_03 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_04 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_05 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_06 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_07 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_08 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_09 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_0a => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_0b => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_0c => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_0d => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_0e => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_0f => x"0000000000000000000000000000000000000000000000000000000000000000", 1.1 System09/src/Noice/MON6809_b4_1.vhd http://www.opencores.org/cvsweb.shtml/System09/src/Noice/MON6809_b4_1.vhd?rev=1.1&content-type=text/x-cvsweb-markup Index: MON6809_b4_1.vhd =================================================================== INIT_00 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_01 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_02 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_03 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_04 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_05 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_06 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_07 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_08 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_09 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_0a => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_0b => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_0c => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_0d => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_0e => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_0f => x"0000000000000000000000000000000000000000000000000000000000000000", 1.1 System09/src/Noice/MON6809_b4_2.vhd http://www.opencores.org/cvsweb.shtml/System09/src/Noice/MON6809_b4_2.vhd?rev=1.1&content-type=text/x-cvsweb-markup Index: MON6809_b4_2.vhd =================================================================== INIT_00 => x"ACFC8E1001E07D00E0B7118600E0B70386FA2612121F3000008E20F6CE10321A", INIT_01 => x"2AF6B72BF6B72EF6FD0000CC22F6F723F6B710F6CCFA265A81AF1008C600F08E", INIT_02 => x"34D1FD7E30F6B7FA862DF6B7828621F6B720F6B724F6FD26F6FD28F6FD2CF6B7", INIT_03 => x"FCBD02349035011A903501E0B64FF227018400E0B60D271F308EFCBD00008E10", INIT_04 => x"6D20393038363F0100000000008005394C4F3901E0B70235F627028400E0B68E", INIT_05 => x"02352AF6B702352BF6B702352DF6B7023520F6B700302E315620726F74696E6F", INIT_06 => x"20F6B6103524F6F725F6B7063526F6F727F6B7063528F6F729F6B706352CF6B7", INIT_07 => x"25F781F4255FFCBD30F68E20F6CE1037FE7E2EF6F72FF6B7101F1F3002260181", INIT_08 => x"FCBDF6265A80A7D8255FFCBD891F0C27008180A7E5228081E9255FFCBD80A7F0", INIT_09 => x"812527FD812627FE814227FF8180E680A630F68EC526E0ABB4FEBD0234CE255F", INIT_0a => x"FE7E018630F6B7F0861F27F7812027F8812127F9812227FA812327FB812427FC", INIT_0b => x"31F68E1091FC8E84FE7E79FE7E4BFE7EF8FD7EE6FD7ED1FD7EA5FD7E8EFD7E92", INIT_0c => x"5A80A7A0A6072731F6F703E6021F01E602A69CFE7EF9265AA0A780A6A0E71BC6", INIT_0d => x"A63435F9265AA0A780A63434142703C031F6F6021F80A680E680A69CFE7EF926", INIT_0e => x"80A7A0A680E731F68E10C620F68E1092FE7E018602200086F7265A0726A0A180", INIT_0f => x"041F22F6F623F6B692FE7E4FF9265AA0A780A620F68E100B275D9CFE7EF9265A", 1.1 System09/src/Noice/MON6809_b4_3.vhd http://www.opencores.org/cvsweb.shtml/System09/src/Noice/MON6809_b4_3.vhd?rev=1.1&content-type=text/x-cvsweb-markup Index: MON6809_b4_3.vhd =================================================================== INIT_00 => x"063428F6F629F6B6063426F6F627F6B6063424F6F625F6B606342EF6F62FF6B6", INIT_01 => x"1022F6F723F6B7401F3B0234508A2DF6B602342BF6B602342AF6B602342CF6B6", INIT_02 => x"A4A6021F01E602A6043420275454C0A7008631F6CED1FD7E21F6B7008620F6CE", INIT_03 => x"A6021F84E601A69CFE7EE02631F6F1043031F67CC0A70C260435A4E1A4E703E6", INIT_04 => x"40B4FEBD002031F6B7018632F6B792FE7E4FA4A702A6021F84E601A692FE7EA4", INIT_05 => x"5A80AB008602CB01E630F68EF1FC7EF8265A7CFCBD80A603CB01E630F68E84A7", INIT_06 => x"26508502352BF6B7846E04F0BE0586846E02F0BE0686846E00F0BE078639FB26", INIT_07 => x"6E0CF0BE0286846E08F0BE0386846E06F0BE04860234508A04342BF6F67C3409", INIT_08 => x"0000000000000000000000000000000000000000000000000000ACFC7E018684", INIT_09 => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_0a => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_0b => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_0c => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_0d => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_0e => x"0000000000000000000000000000000000000000000000000000000000000000", INIT_0f => x"00FCFAFE01FFF3FED8FED1FECAFEC3FE00000000000000000000000000000000",