; da65 V2.15 ; Created: 2021-03-17 01:12:56 ; Input file: WDC65c816SK_WDCMON.bin ; Page: 1 ;;;; .setcpu "65C02" .setcpu "65816" VAR_00 := $0000 VAR_7E := $007E VAR_8F := $008F VAR_AF := $00AF stack := $0100 ; NOT_CODE_0DAD := $0DAD ; NOT_CODE_10C2 := $10C2 ; NOT_CODE_138F := $138F L7320 := $7320 L7E11 := $7E11 RAM_temp_PCR := $7E1C RAM_temp_DDRB := $7E1D RAM_temp_DDRA := $7E1E IRQ_entry_vector:= $7E70 NMI_entry_vector:= $7E72 mystery_vector := $7E74 L7E76 := $7E76 RAM_WORD_TABLE_even:= $7EE2 RAM_WORD_TABLE_odd:= $7EE3 VECTOR_7EE4 := $7EE4 VECTOR_7EE8 := $7EE8 VECTOR_7EEE := $7EEE VECTOR_7EF4 := $7EF4 VECTOR_7EF8 := $7EF8 VECTOR_7EFE := $7EFE XBUS_CS0 := $7F00 XBUS_CS1 := $7F20 XBUS_CS2 := $7F40 XBUS_CS3 := $7F60 USER_ACIA_DATA := $7F80 USER_ACIA_SR := $7F81 USER_ACIA_CMD := $7F82 USER_ACIA_CTL := $7F83 USER_PIA_DDRA := $7FA0 USER_PIA_CRA := $7FA1 USER_PIA_PIB_DDRB:= $7FA2 USER_PIA_CRB := $7FA3 USER_VIA_IOBB := $7FC0 USER_VIA_IOA := $7FC1 USER_VIA_DDRB := $7FC2 USER_VIA_DDRA := $7FC3 USER_VIA_T1CL := $7FC4 USER_VIA_T1CH := $7FC5 USER_VIA_T1LL := $7FC6 USER_VIA_T1LH := $7FC7 USER_VIA_T2CL := $7FC8 USER_VIA_T2CH := $7FC9 USER_VIA_SR := $7FCA USER_VIA_ACR := $7FCB USER_VIA_PCR := $7FCC USER_VIA_IFR := $7FCD USER_VIA_IER := $7FCE USER_VIA_ORA_IRA:= $7FCF SYSTEM_VIA_IOB := $7FE0 SYSTEM_VIA_IOA := $7FE1 SYSTEM_VIA_DDRB := $7FE2 SYSTEM_VIA_DDRA := $7FE3 SYSTEM_VIA_T1C_L:= $7FE4 SYSTEM_VIA_T1C_H:= $7FE5 SYSTEM_VIA_T1L_L:= $7FE6 SYSTEM_VIA_T1L_H:= $7FE7 SYSTEM_VIA_T2C_L:= $7FE8 SYSTEM_VIA_T2C_H:= $7FE9 SYSTEM_VIA_SR := $7FEA SYSTEM_VIA_ACR := $7FEB SYSTEM_VIA_PCR := $7FEC SYSTEM_VIA_IFR := $7FED SYSTEM_VIA_IER := $7FEE SYSTEM_VIA_ORA_IRA:= $7FEF .segment "wibble": absolute beginning: .byte "WDC" .byte $FF string_8004: .byte $82 .byte "$" .byte $01,$FF string_8008: .byte "WDC65c816SK WDCMON Version = 2" .byte ".0.4.3Version Date = Wed Mar 26" .byte " 2014 2:46" .byte $00 .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF .byte $FF,$FF,$FF,$FF,$FF,$FF .addr string_8004 .addr L8139 .addr L85F4 .addr SYSTEM_VIA_USB_CHAR_RX .addr SYSTEM_VIA_USB_CHAR_TX .addr L7E11 .addr string_8008 .addr IRQ_entry_vector .addr IRQ_entry_vector_default .addr NMI_entry_vector_default .addr mystery_vector_default_SEP_Set_Status_Bits .addr L853F_SEP_Set_Status_Bits .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF IRQ_entry: jmp (IRQ_entry_vector) nop NMI_entry: jmp (NMI_entry_vector) nop BRK_816_entry: jmp (mystery_vector) nop NMI_816_entry: jmp (L7E76) nop BRK_entry: jmp (VECTOR_7EF4) ABORT_entry: jmp (VECTOR_7EF8) IRQ_816_entry: jmp (VECTOR_7EEE) ABORT_816_entry: jmp (VECTOR_7EE8) COP_816_entry: jmp (VECTOR_7EE4) RFU_loop_idly: jsr do_nothing_8673 bra RFU_loop_idly RFU_8124_entry: SEP #$20 jsr $8673 bra RFU_8124_entry RESET_entry: jsr L8131_lots_of_65816_setup_code jmp move_four_bytes_to_workspace_20 L8131_lots_of_65816_setup_code: php L8132_SEP_Set_Status_Bits: SEP #$20 ;; SEP #$20 pha lda #$01 bra L813D L8139: php L813A_SEP_Set_Status_Bits: SEP #$20 pha L813D: sei cld stz $7E1A stz $7E19 clc L8146_XCE_Exchange_Carry_and_Emulation_Bits: XCE L8147_REP_Reset_Status_Bits: REP #$10 stx $7E02 sty $7E04 L814F_SEP_Set_Status_Bits: SEP #$30 plx ply sty $7E0C pha txa L8158_REP_Reset_Status_Bits: ;; c2 20 8f 00 7e 00 7b 8f REP #$20 STA f:$7e00 TDC ;; $7B STA f:$7e08 TSC ;; $3B clc adc #$03 brk STA f:$7e0a SEP #$30 ;00016Er 1 PHK pla STA f:$7e0e ; BBS0 $0E, PHB PLA STA f:$7e0f ; lda #$01 STA f:$7e0d ; BBS0 $0D,L81FD sec XCE clc XCE ldx #$00 bcc L8189 inx L8189: XCE stx $7E10 pla beq L81A6 lda #$1F ldx #$1C loop_8194: sta RAM_WORD_TABLE_even,x dex dex bne loop_8194 lda #$81 ldx #$1C loop_819F: sta RAM_WORD_TABLE_odd,x dex dex bne loop_819F L81A6: lda #$01 sta L7E11 dec a sta L7E11+1 lda #$32 sta mystery_vector lda #$85 sta mystery_vector+1 LDA #$3F STA $7e76 ; 8d 76 7e LDA #$85 ; a9 85 ; 81c0 sta $7E77 lda #$AF sta IRQ_entry_vector lda #$84 sta IRQ_entry_vector+1 lda #$CF sta NMI_entry_vector lda #$84 sta NMI_entry_vector+1 jsr SYSTEM_VIA_ZERO_ACR_AND_PCR rts move_four_bytes_to_workspace_20: ldx #$04 loop_81DD: lda a:VAR_00,x L81E0: sta $7E14,x dex bpl loop_81DD loop_until_char_0x55: jsr SYSTEM_VIA_USB_CHAR_RX loop_81E9: cmp #$55 bne loop_until_char_0x55 jsr SYSTEM_VIA_USB_CHAR_RX CMP #$AA bne loop_81E9 lda #$CC JSR $862B JSR $8606 sec L81FD: sbc #$00 cmp #$0A bcs loop_until_char_0x55 asl a tax lda #$81 pha lda #$E5 pha lda L8214+1,x pha lda L8214,x pha rts L8214: .addr $8227 .addr $822C .addr $8269 .addr $8301 .addr $836b .addr $83fd L8220: .addr $846f .addr $846f .addr $8485 .addr $8498 .byte $A9 .byte 0 jmp SYSTEM_VIA_USB_CHAR_TX lda #$00 sta a:$02 JSR SYSTEM_VIA_USB_CHAR_RX ; $8606 sta a:VAR_00 jsr SYSTEM_VIA_USB_CHAR_RX sta a:VAR_00+1 ora a:VAR_00 beq L8269_return lda a:VAR_00 beq loop_824B inc a:VAR_00+1 loop_824B: jsr SYSTEM_VIA_USB_CHAR_RX cmp a:$0002 beq L8258 loop_8253_forever: jsr do_nothing_8672 bra loop_8253_forever L8258: inc a jsr SYSTEM_VIA_USB_CHAR_TX inc a:$02 dec a:VAR_00 bne loop_824B dec a:$01 bne loop_824B L8269_return: rts jsr SYSTEM_VIA_USB_CHAR_RX sta a:VAR_00 jsr SYSTEM_VIA_USB_CHAR_RX sta a:VAR_00+1 jsr SYSTEM_VIA_USB_CHAR_RX sta a:VAR_00+2 lda #$00 cmp a:$02 bcc L829F lda #$80 cmp a:$01 bcc L829F lda #$00 cmp a:VAR_00 bcc L829F lda #$01 cmp a:$02 bcs L829F lda #$01 sta $7E19 bra L82E2 L829F: jsr SYSTEM_VIA_USB_CHAR_RX sta a:$03 jsr SYSTEM_VIA_USB_CHAR_RX sta a:$04 ora a:$03 beq L82F9 ldy #$00 lda a:$03 beq loop_82BA inc a:$04 loop_82BA: lda a:$01 ora a:$02 bne L82D4 lda a:VAR_00 cmp #$05 bcs L82D4 tay jsr SYSTEM_VIA_USB_CHAR_RX sta $7E14,y ldy #$00 beq L82E2 L82D4: jsr SYSTEM_VIA_USB_CHAR_RX ldx $7E10 bne L82E0 sta (VAR_00),y beq L82E2 L82E0: STA [0] ; $87,$00 ; smb0 VAR_00 L82E2: inc a:VAR_00 bne L82EF inc a:$01 bne L82EF inc a:$02 L82EF: dec a:$03 bne loop_82BA dec a:$04 bne loop_82BA L82F9: lda $7E19 beq L8301 stz $7E19 L8301: rts USB_RX_RAM_BYTES_0_TO_4: jsr SYSTEM_VIA_USB_CHAR_RX sta a:VAR_00 jsr SYSTEM_VIA_USB_CHAR_RX sta a:$01 jsr SYSTEM_VIA_USB_CHAR_RX sta a:$02 jsr SYSTEM_VIA_USB_CHAR_RX sta a:$03 jsr SYSTEM_VIA_USB_CHAR_RX sta a:$04 ora a:$03 beq L836B ldy #$00 lda a:$03 beq loop_832F inc a:$04 loop_832F: lda a:$01 ora a:$02 bne L8346 lda a:VAR_00 cmp #$05 bcs L8346 tay lda $7E14,y ldy #$00 beq L8351 L8346: lda $7E10 bne L834F lda (VAR_00),y bra L8351 L834F: LDA [0] ; $A7,$00 ; smb2 VAR_00 L8351: jsr SYSTEM_VIA_USB_CHAR_TX inc a:VAR_00 bne L8361 inc a:$01 bne L8361 inc a:$02 L8361: dec a:$03 bne loop_832F dec a:$04 bne loop_832F L836B: rts send_mystery_sequence: lda #$00 jsr SYSTEM_VIA_USB_CHAR_TX lda #$7E jsr SYSTEM_VIA_USB_CHAR_TX lda #$00 jsr SYSTEM_VIA_USB_CHAR_TX lda $7E10 jsr SYSTEM_VIA_USB_CHAR_TX lda #$58 jsr SYSTEM_VIA_USB_CHAR_TX lda #$00 jsr SYSTEM_VIA_USB_CHAR_TX lda #$7E jsr SYSTEM_VIA_USB_CHAR_TX lda #$00 jsr SYSTEM_VIA_USB_CHAR_TX lda #$00 jsr SYSTEM_VIA_USB_CHAR_TX lda #$80 jsr SYSTEM_VIA_USB_CHAR_TX lda #$00 jsr SYSTEM_VIA_USB_CHAR_TX lda #$E4 jsr SYSTEM_VIA_USB_CHAR_TX lda #$7E jsr SYSTEM_VIA_USB_CHAR_TX lda #$00 jsr SYSTEM_VIA_USB_CHAR_TX lda #$00 jsr SYSTEM_VIA_USB_CHAR_TX lda #$7F jsr SYSTEM_VIA_USB_CHAR_TX lda #$00 jsr SYSTEM_VIA_USB_CHAR_TX lda #$E4 jsr SYSTEM_VIA_USB_CHAR_TX lda #$FF jsr SYSTEM_VIA_USB_CHAR_TX lda #$00 jsr SYSTEM_VIA_USB_CHAR_TX lda #$00 jsr SYSTEM_VIA_USB_CHAR_TX lda #$7F jsr SYSTEM_VIA_USB_CHAR_TX lda #$00 jsr SYSTEM_VIA_USB_CHAR_TX lda #$FF jsr SYSTEM_VIA_USB_CHAR_TX lda #$7F jsr SYSTEM_VIA_USB_CHAR_TX lda #$00 jsr SYSTEM_VIA_USB_CHAR_TX lda #$FF jsr SYSTEM_VIA_USB_CHAR_TX lda #$FF jsr SYSTEM_VIA_USB_CHAR_TX lda #$FF jmp SYSTEM_VIA_USB_CHAR_TX jsr SYSTEM_VIA_PCR_WRITE ldx #$04 loop_8403_four_times: lda $7E14,x sta a:VAR_00,x dex bpl loop_8403_four_times lda $7E0D beq L843E ldx $7E0A txs ldx $7E02 ldy $7E04 lda $7E10 bne L8429 lda $7E09 pha lda $7E08 pha PLD L8429: lda $7E07 pha lda $7E06 pha lda $7E0C pha lda #$00 sta L7E11 lda $7E00 rti L843E: CLC ; 18 XCE ; fb SEP #$20 ; e2 20 REP #$10 ; c2 10 ldx $7E0A txs ldx $7E08 phx PLD lda $7E0E pha ldx $7E06 phx lda $7E0C pha ldx $7E02 ldy $7E04 lda #$00 sta L7E11 lda $7E0F pha PLB REP #$20 LDA f:$007E00 RTI rts jmp SYSTEM_VIA_USB_CHAR_TX lda #$25 bra L8498 PLD stx $A9 bra L847D L847D: jsr SYSTEM_VIA_USB_CHAR_TX lda #$00 brk jmp SYSTEM_VIA_USB_CHAR_TX jsr L8497 bcc L8491 lda #$01 brk jmp SYSTEM_VIA_USB_CHAR_TX L8491: lda #$00 brk jmp SYSTEM_VIA_USB_CHAR_TX L8497: clc L8498: rts jsr SYSTEM_VIA_USB_CHAR_RX jsr L84AD bcc L84A7 lda #$01 brk jmp SYSTEM_VIA_USB_CHAR_TX L84A7: lda #$00 brk jmp SYSTEM_VIA_USB_CHAR_TX L84AD: clc rts IRQ_entry_vector_default: pha lda #$01 STA f:$007E11 L84B5: ;;; brk phx tsx lda stack+3,x plx and #$10 bne L84CA lda #$00 STA f:$007E11 ; BBS0 $11,L8543_Wake_The_Processor pla jmp (VECTOR_7EFE) L84CA: lda #$02 jmp L84E2 NMI_entry_vector_default: pha LDA f:$007E11 bne L84E0 lda #$01 STA f:$007E11 ; BBS0 lda #$07 bra L84E2 L84E0: pla rti L84E2: bra L8521 sta $7E13 pla sta $7E00 stx $7E02 sty $7E04 pla sta $7E0C pla sta $7E06 pla sta $7E07 stz $7E0E stz $7E0F stz $7E08 stz $7E09 stz $7E01 stz $7E03 stz $7E05 tsx stx $7E0A lda #$01 sta $7E0B sta $7E0D jmp L85A5 L8521: clc XCE ; FB SEP #$30 ; e2 30 STA f:$007e13 ; 8f 13 7e 00 LDA #$1 ; a9 01 STA f:$007e0D ; 8f 0d 7e 00 JMP $8560 ; 4c 60 85 mystery_vector_default_SEP_Set_Status_Bits: SEP #$20 ; $E2, xx pha lda #$01 STA f:$007e11 ; 8f 11 7e 00 lda #$02 bra L8554 L853F_SEP_Set_Status_Bits: SEP #$20 pha L8542_STP_Stop_The_Processor: LDA f:$007E11 L8543_Wake_The_Processor: bne L8552 lda #$01 STA f:$007E11 ; BBS0 $11, lda #$07 BRA L8554 L8552: pla rti L8554: SEP #$20 ; $E2, xx STA f:$007E13 lda #$00 STA f:$000000 ; BBS0 $0D, L8560: pla STA f:$007e00 ; BBS0 VAR_00, XBA STA f:$007e01 ; BBS0 $01, PHB pla STA f:$007e0f ; BBS0 $0F, lda #$00 pha tyx STA f:$007e0e ; BBS0 pla STA f:$007e0c ; BBS0 REP #$30 TDC STA f:$007e08 ; BBS0 lda #$00 brk TCD stx $7E02 sty $7E04 pla sta $7E06 SEP #$20 ; $E2, xx LDA $7E0D bne jumpy ; not ror $04D0,x pla sta $7E0E jumpy: tsx stx $7E0A SEP #$10 SEC ;;; bpl L85DC XCE ; $FB L85A5: jsr SYSTEM_VIA_PCR_READ LDA $7E13 ; ad 13 7e JSR $862b; 20 2b 86 JMP $81DB SYSTEM_VIA_ZERO_ACR_AND_PCR: lda #$00 sta SYSTEM_VIA_ACR lda #$00 L85B8: sta SYSTEM_VIA_PCR sta RAM_temp_PCR lda #$18 sta SYSTEM_VIA_IOB lda #$1C sta SYSTEM_VIA_DDRB sta RAM_temp_DDRB lda #$00 sta SYSTEM_VIA_DDRA sta RAM_temp_DDRA lda SYSTEM_VIA_IOB pha and #$EF sta SYSTEM_VIA_IOB L85DC: LDX #$5D PLA L85DF: JSR $8659 ; 20 59 86 sta SYSTEM_VIA_IOB lda #$20 L85E7: bit SYSTEM_VIA_IOB bne L85E7 LDA $7FE0 and #$40 beq do_nothing_8658 rts L85F4: LDA #0 sta SYSTEM_VIA_DDRA LDA #2 L85FB: bit SYSTEM_VIA_IOB bne L8603 LDA #1 RTS ; 60 L8603: lda #$00 rts SYSTEM_VIA_USB_CHAR_RX: lda #$00 sta SYSTEM_VIA_DDRA lda #$02 SYSTEM_VIA_USB_CHAR_RX_WAIT: bit SYSTEM_VIA_IOB bne SYSTEM_VIA_USB_CHAR_RX_WAIT lda SYSTEM_VIA_IOB ora #$08 tax and #$F7 sta SYSTEM_VIA_IOB nop nop nop nop lda SYSTEM_VIA_IOA stx SYSTEM_VIA_IOB rts lda #$EE rts SYSTEM_VIA_USB_CHAR_TX: ldx #$00 stx SYSTEM_VIA_DDRA sta SYSTEM_VIA_IOA lda #$01 SYSTEM_VIA_USB_CHAR_TX_WAIT: bit SYSTEM_VIA_IOB bne SYSTEM_VIA_USB_CHAR_TX_WAIT lda SYSTEM_VIA_IOB and #$FB tax ora #$04 sta SYSTEM_VIA_IOB lda #$FF sta SYSTEM_VIA_DDRA nop nop stx SYSTEM_VIA_IOB lda SYSTEM_VIA_IOA ldx #$00 stx SYSTEM_VIA_DDRA rts do_nothing_8658: rts loop_8659: phx ldx #$00 loop_865C: dex bne loop_865C plx dex bne loop_8659 rts SYSTEM_VIA_PCR_READ: lda SYSTEM_VIA_PCR sta RAM_temp_PCR rts SYSTEM_VIA_PCR_WRITE: lda RAM_temp_PCR sta SYSTEM_VIA_PCR rts do_nothing_8672: rts do_nothing_8673: rts rts rts rts RFU_FFE0: .word $FFFF RFU_FFE2: .word $FFFF COP_816:.addr COP_816_entry BRK_816:.addr BRK_816_entry ABORT_816: .addr ABORT_816_entry NMI_816:.addr NMI_816_entry RFU_FFEC: .addr RFU_8124_entry IRQ_816:.addr IRQ_816_entry RFU_FFF0: .addr RFU_loop_idly RFU_FFF2: .addr RFU_loop_idly BReaK: .addr BRK_entry RFU_FFF6: .addr RFU_loop_idly ABORT: .addr ABORT_entry NMI: .addr NMI_entry RESET: .addr RESET_entry IRQ: .addr IRQ_entry ; End of "wibble" segment .code