; ; DHC11 - 68HC11 Disassembler v1.1 (c) Copyright 2000 Tech Edge Pty. Ltd. ; ; http://www.techedge.com.au/utils/dhc11.htm ; ; ; Disassembly of MB-D.BIN - from $F800 to $FFFF ; PORT1_DDR = $0000 PORT2_DDR = $0001 PORT1 = $0002 ; Use for AY-3-8913 access EXTMEM_5 = $0005 TIMER_CTRL_STAT = $0008 OUTPUT_COMPARE_H = $000B RATE_AND_MODE_CTRL = $0010 TX_RX_CTRL_STAT = $0011 RX_DATA = $0012 TX_DATA = $0013 ; L0080 = $0080 L0081 = $0081 L0082 = $0082 ; nRxCount L0083 = $0083 ; pRxBufferIn L0085 = $0085 ; pRxBufferOut L0088 = $0088 L0089 = $0089 L008A = $008A L008B = $008B L008C = $008C ; bNoACK L008D = $008D L008F = $008F L0091 = $0091 L0093 = $0093 L0095 = $0095 L0097 = $0097 L0099 = $0099 L009B = $009B L009D = $009D L009E = $009E L009F = $009F L00A0 = $00A0 L00A1 = $00A1 L00A3 = $00A3 L00A5 = $00A5 L00A6 = $00A6 L00A7 = $00A7 L00A8 = $00A8 L00A9 = $00A9 L00AA = $00AA L00AB = $00AB L00AC = $00AC L00AD = $00AD L00AE = $00AE L00AF = $00AF L00B1 = $00B1 L00B2 = $00B2 L00B3 = $00B3 L00B4 = $00B4 L00B5 = $00B5 L00D8 = $00D8 L00DA = $00DA L00DC = $00DC L00DE = $00DE L00E0 = $00E0 L00E1 = $00E1 L00E2 = $00E2 L00E3 = $00E3 L00E4 = $00E4 L00E5 = $00E5 L00E6 = $00E6 L00E7 = $00E7 L00E9 = $00E9 L00EA = $00EA L00EC = $00EC L00EE = $00EE L00EF = $00EF L00F1 = $00F1 L00F2 = $00F2 L00F3 = $00F3 L00F5 = $00F5 ; wTimerInterval L00F7 = $00F7 L00F8 = $00F8 L00F9 = $00F9 L00FA = $00FA L00FB = $00FB L00FC = $00FC LA000 = $A000 ; SSI263 LA003 = $A003 ; SSI263 LA004 = $A004 ; SSI263 LC000 = $C000 ; AY-3-8913's ; org $F800 ; ; F800 Copyright: ; "(C)1984 SMSP" F800 db $28, $43, $29, $31, $39, $38, $34, $20, $53, $4D F80A db $53, $50 ; F80C Start: F80C 8E 83 FF ldS #$83FF ; SP at top of 1K RAM F80F 86 FF ldaA #$FF F811 97 05 staA EXTMEM_5 F813 86 2F ldaA #$2F F815 97 00 staA PORT1_DDR F817 86 10 ldaA #$10 F819 97 01 staA PORT2_DDR F81B 4F clrA F81C 97 80 staA L0080 F81E 97 02 staA PORT1 F820 C6 05 ldaB #$05 F822 D7 10 staB RATE_AND_MODE_CTRL F824 C6 FA ldaB #$FA F826 D7 11 staB TX_RX_CTRL_STAT F828 D6 11 ldaB TX_RX_CTRL_STAT F82A D6 12 ldaB RX_DATA F82C 97 8C staA L008C ; bNoACK=0 F82E 97 82 staA L0082 ; nRxCount=0 F830 97 AA staA L00AA F832 CE 80 00 ldX #$8000 ; Base of 1K RAM F835 DF 83 stX L0083 ; pRxBufferIn F837 DF 85 stX L0085 ; pRxBufferOut F839 CC 4F 6A ldD #$4F6A F83C DD F5 stD L00F5 ; wTimerInterval = 50Hz timer interval F83E 86 08 ldaA #$08 F840 97 08 staA TIMER_CTRL_STAT F842 C6 0F ldaB #$0F F844 D7 81 staB L0081 F846 BD FA 1E call CMD_04 ; Reset all F849 20 59 jr main ; F84B 07 SendByte_B: tPA F84C 36 pushA F84D 0F di F84E 96 11 LF84E ldaA TX_RX_CTRL_STAT F850 85 20 bitA #%00100000 ; TDRE : Tx Data Reg Empty F852 27 FA beq LF84E F854 D7 13 staB TX_DATA F856 32 popA F857 06 tAP F858 39 ret ; F859 96 82 WaitRxData: ldaA L0082 ; Post: A=RxData F85B 27 FC beq WaitRxData F85D DE 85 ldX L0085 F85F A6 00 ldaA 0, X F861 36 pushA ; PUSH(*pRxBufferOut++) F862 08 incX F863 8C 80 10 cmpX #$8010 F866 26 03 bne LF86B F868 CE 80 00 ldX #$8000 F86B DF 85 LF86B stX L0085 F86D 7A 00 82 dec >L0082 ; nRxCount-- F870 96 8C ldaA L008C ; bNoACK F872 26 04 bne LF878 F874 C6 30 ldaB #$30 F876 8D D3 callr SendByte_B F878 32 LF878 popA F879 39 ret ; F87A ISR_IRQ2_Serial_IO: F87A 96 11 ldaA TX_RX_CTRL_STAT F87C 2A 1E bpl ISR_DUMMY F87E 85 40 bitA #%01000000 F880 26 1B bne CMD_08 F882 96 82 ldaA L0082 F884 81 10 cmpA #$10 F886 27 15 beq CMD_08 ; Error if recv'd 16 bytes already (Rx buffer is full) F888 D6 12 ldaB RX_DATA F88A DE 83 ldX L0083 F88C E7 00 staB 0, X ; Store Rx data to 16-byte circ buffer at $8000 F88E 08 incX F88F 8C 80 10 cmpX #$8010 F892 26 03 bne LF897 F894 CE 80 00 ldX #$8000 F897 DF 83 LF897 stX L0083 F899 7C 00 82 inc >L0082 ; nRxCount++ F89C ISR_DUMMY: F89C 3B reti ; F89D CMD_08: ; Error! F89D 0F di F89E C6 86 ldaB #$86 F8A0 8D A9 callr SendByte_B F8A2 20 FE Hang: jr Hang ; F8A4 8D 05 main callr WaitAndDoNextCmd F8A6 BD FB 0F call LFB0F F8A9 20 F9 jr main ; F8AB 8D AC WaitAndDoNextCmd: callr WaitRxData F8AD 16 tAB F8AE 54 lsrB F8AF 54 lsrB F8B0 54 lsrB F8B1 54 lsrB F8B2 58 lslB F8B3 CE F8 BC ldX #$F8BC F8B6 3A aBX F8B7 EE 00 ldX 0, X F8B9 16 tAB F8BA 6E 00 jmp 0, X ; ; F8BC CmdJumpTable: F8BC dw CMD_00, CMD_01, CMD_02, CMD_03, CMD_04 F8C6 dw CMD_05, CMD_05, CMD_01, CMD_08, CMD_09 F8D0 dw CMD_10, CMD_11, CMD_08, CMD_08, CMD_08 F8DA dw CMD_08 ; F8DC CMD_05: F8DC 86 01 ldaA #$01 F8DE 97 AA staA L00AA F8E0 4C incA F8E1 97 A7 staA L00A7 F8E3 37 pushB F8E4 C4 30 andB #%00110000 F8E6 54 lsrB F8E7 54 lsrB F8E8 54 lsrB F8E9 54 lsrB F8EA CMD_00: F8EA BD F9 A3 call LF9A3 F8ED BD FB 32 call LFB32 F8F0 4F clrA F8F1 97 A5 staA L00A5 F8F3 97 A8 staA L00A8 F8F5 96 AA ldaA L00AA F8F7 27 0F beq LF908 F8F9 32 popA F8FA 84 CF andA #%11001111 F8FC 16 tAB F8FD C4 0F andB #%00001111 F8FF C1 0E cmpB #$0E F901 26 0F bne LF912 F903 5C incB F904 D7 A7 staB L00A7 F906 20 0A jr LF912 ; F908 BD F8 59 LF908 call WaitRxData F90B 97 A7 staA L00A7 F90D 27 45 beq LF954 F90F BD F8 59 LF90F call WaitRxData F912 D6 A8 LF912 ldaB L00A8 F914 26 39 bne LF94F F916 97 8A staA L008A F918 D6 A6 ldaB L00A6 F91A CE FB 48 ldX #$FB48 F91D 3A aBX F91E A6 00 ldaA 0, X F920 CE 00 9D ldX #$009D F923 3A aBX F924 A1 00 cmpA 0, X F926 22 05 bhi LF92D F928 7C 00 A8 inc >L00A8 F92B 20 22 jr LF94F ; F92D 0F LF92D di F92E 6C 00 inc 0, X F930 7C 00 A5 inc >L00A5 F933 CE 00 8D ldX #$008D F936 58 lslB F937 3A aBX F938 EE 00 ldX 0, X F93A 96 8A ldaA L008A F93C A7 00 staA 0, X F93E 9C A3 cmpX L00A3 F940 26 02 bne LF944 F942 DE A1 ldX L00A1 F944 08 LF944 incX F945 3C pushX F946 CE 00 8D ldX #$008D F949 3A aBX F94A 32 popA F94B 33 popB F94C ED 00 stD 0, X F94E 0E ei F94F 7A 00 A7 LF94F dec >L00A7 F952 26 BB bne LF90F F954 96 AA LF954 ldaA L00AA F956 26 10 bne LF968 F958 86 01 ldaA #$01 F95A 97 8B staA L008B F95C D6 89 ldaB L0089 F95E CA 20 oraB #%00100000 F960 BD F8 4B call SendByte_B F963 D6 A5 ldaB L00A5 F965 BD F8 4B call SendByte_B F968 7F 00 AA LF968 clr >L00AA F96B 39 ret ; F96C CMD_01: F96C 17 tBA F96D 84 4F andA #%01001111 F96F 97 81 staA L0081 F971 C6 0F ldaB #$0F F973 BD FA 1E call CMD_04 ; Reset all F976 5F clrB F977 BD F8 4B call SendByte_B F97A 39 ret ; F97B CMD_02: F97B 8D 26 callr LF9A3 F97D 7F 00 A7 clr >L00A7 F980 95 81 bitA L0081 F982 27 0E beq LF992 F984 CE FB 48 ldX #$FB48 F987 3A aBX F988 A6 00 ldaA 0, X F98A CE 00 9D ldX #$009D F98D 3A aBX F98E A0 00 subA 0, X F990 97 A7 staA L00A7 F992 86 01 LF992 ldaA #$01 F994 97 8B staA L008B F996 D6 89 ldaB L0089 F998 CA 10 oraB #%00010000 F99A BD F8 4B call SendByte_B F99D D6 A7 ldaB L00A7 F99F BD F8 4B call SendByte_B F9A2 39 ret ; F9A3 17 LF9A3: tBA F9A4 84 0F andA #%00001111 F9A6 97 89 staA L0089 F9A8 5F clrB F9A9 81 01 cmpA #$01 F9AB 27 12 beq LF9BF F9AD 5C incB F9AE 81 02 cmpA #$02 F9B0 27 0D beq LF9BF F9B2 5C incB F9B3 81 04 cmpA #$04 F9B5 27 08 beq LF9BF F9B7 5C incB F9B8 81 08 cmpA #$08 F9BA 27 03 beq LF9BF F9BC 7E F8 9D jmp CMD_08 ; F9BF 39 LF9BF ret ; F9C0 CMD_03: ; Set VolA,VolB,VolC for both AY's F9C0 C1 30 cmpB #$30 F9C2 26 29 bne LF9ED F9C4 86 03 ldaA #$03 ; loop count=3 F9C6 97 A9 staA L00A9 F9C8 86 08 ldaA #$08 ; Reg-8 = VolA F9CA CE 00 F7 ldX #$00F7 ; Data = [F7/8/9;FA/B/C] F9CD C6 03 LF9CD ldaB #$03 F9CF D7 88 staB L0088 F9D1 E6 00 ldaB 0, X F9D3 BD FA DF call WriteAY38913_AB F9D6 C6 0C ldaB #$0C F9D8 D7 88 staB L0088 F9DA E6 03 ldaB 3, X F9DC BD FA DF call WriteAY38913_AB F9DF 4C incA F9E0 08 incX F9E1 7A 00 A9 dec >L00A9 F9E4 26 E7 bne LF9CD F9E6 96 81 ldaA L0081 F9E8 8A 80 oraA #%10000000 F9EA 97 81 staA L0081 F9EC 39 ret ; F9ED C1 32 LF9ED cmpB #$32 F9EF 22 2A bhi LFA1B F9F1 96 81 ldaA L0081 F9F3 84 7F andA #%01111111 F9F5 97 81 staA L0081 F9F7 7F 00 8B clr >L008B F9FA C1 32 cmpB #$32 F9FC 26 1C bne LFA1A ; Mute VolA,VolB,VolC for both AY's F9FE 86 03 ldaA #$03 ; loop count=3 FA00 97 A9 staA L00A9 FA02 86 08 ldaA #$08 ; Reg-8 = VolA FA04 C6 03 LFA04 ldaB #$03 FA06 D7 88 staB L0088 FA08 5F clrB ; VolX=0 FA09 BD FA DF call WriteAY38913_AB FA0C C6 0C ldaB #$0C FA0E D7 88 staB L0088 FA10 5F clrB ; VolX=0 FA11 BD FA DF call WriteAY38913_AB FA14 4C incA FA15 7A 00 A9 dec >L00A9 FA18 26 EA bne LFA04 FA1A 39 LFA1A ret ; FA1B 7E F8 9D LFA1B jmp CMD_08 ; FA1E CMD_04: ; Reset components FA1E 0F di FA1F D7 89 staB L0089 FA21 C5 01 bitB #%00000001 FA23 27 03 beq LFA28 FA25 BD FA 93 call ResetAY38913_ChipA FA28 D6 89 LFA28 ldaB L0089 FA2A C5 02 bitB #%00000010 FA2C 27 03 beq LFA31 FA2E BD FA B3 call ResetAY38913_ChipB FA31 D6 89 LFA31 ldaB L0089 FA33 C5 04 bitB #%00000100 FA35 27 02 beq LFA39 FA37 8D 39 callr ResetSSI263 FA39 D6 89 LFA39 ldaB L0089 FA3B C5 08 bitB #%00001000 FA3D 27 02 beq LFA41 FA3F 8D 20 callr ResetInternal FA41 0E LFA41 ei FA42 39 ret ; FA43 CMD_09: ; Set wTimerInterval FA43 BD F8 59 call WaitRxData FA46 36 pushA FA47 BD F8 59 call WaitRxData FA4A 33 popB FA4B DD F5 stD L00F5 FA4D 39 ret ; ; FA4E db $BD, $F8, $59, $36, $BD, $F8, $59, $36, $38, $39 ; FA58 CMD_10: ; Set NoACK FA58 86 01 ldaA #$01 FA5A 97 8C staA L008C ; bNoACK=1 FA5C 39 ret ; FA5D CMD_11: ; Clr NoACK FA5D 7F 00 8C clr >L008C ; bNoACK=0 FA60 39 ret ; FA61 CE 82 D6 ResetInternal: ldX #$82D6 FA64 DF 93 stX L0093 FA66 DF 9B stX L009B FA68 4F clrA FA69 97 A0 staA L00A0 FA6B 97 EE staA L00EE FA6D 97 F1 staA L00F1 FA6F 97 8B staA L008B FA71 39 ret ; FA72 CE 82 0E ResetSSI263: ldX #$820E FA75 DF 91 stX L0091 FA77 DF 99 stX L0099 FA79 4F clrA FA7A 97 9F staA L009F FA7C 97 E0 staA L00E0 FA7E 97 E3 staA L00E3 FA80 86 FF ldaA #$FF FA82 B7 A0 04 staA LA004 FA85 86 80 ldaA #$80 FA87 B7 A0 03 staA LA003 FA8A 86 04 ldaA #$04 FA8C 97 E4 staA L00E4 FA8E 86 FF ldaA #$FF FA90 97 E5 staA L00E5 FA92 39 ret ; FA93 86 03 ResetAY38913_ChipA: ldaA #$03 FA95 8D 3C callr ResetAY38913 FA97 CE 80 10 ldX #$8010 FA9A DF 8D stX L008D FA9C DF 95 stX L0095 FA9E 4F clrA FA9F 97 9D staA L009D FAA1 97 B2 staA L00B2 FAA3 97 F7 staA L00F7 FAA5 97 F8 staA L00F8 FAA7 97 F9 staA L00F9 FAA9 86 01 ldaA #$01 FAAB 97 B3 staA L00B3 FAAD CE 82 E6 ldX #$82E6 FAB0 8D 4C callr LFAFE FAB2 39 ret ; FAB3 86 0C ResetAY38913_ChipB: ldaA #$0C FAB5 8D 1C callr ResetAY38913 FAB7 CE 81 0F ldX #$810F FABA DF 8F stX L008F FABC DF 97 stX L0097 FABE 4F clrA FABF 97 9E staA L009E FAC1 97 B4 staA L00B4 FAC3 97 FA staA L00FA FAC5 97 FB staA L00FB FAC7 97 FC staA L00FC FAC9 86 01 ldaA #$01 FACB 97 B5 staA L00B5 FACD CE 83 4B ldX #$834B FAD0 8D 2C callr LFAFE FAD2 39 ret ; FAD3 97 88 ResetAY38913: staA L0088 ; A=$03 or $0C FAD5 4F clrA ; A=Reg# FAD6 5F clrB ; B=Value FAD7 8D 06 LFAD7 callr WriteAY38913_AB FAD9 4C incA FADA 81 0E cmpA #$0E FADC 26 F9 bne LFAD7 FADE 39 ret ; FADF 36 WriteAY38913_AB: pushA FAE0 B7 C0 00 staA LC000 ; Select reg FAE3 96 80 ldaA L0080 FAE5 9A 88 oraA L0088 ; Chip select bits FAE7 97 02 staA PORT1 FAE9 84 F0 andA #%11110000 FAEB 97 02 staA PORT1 FAED F7 C0 00 staB LC000 ; Set value FAF0 9A 88 oraA L0088 ; Chip select bits FAF2 84 F5 andA #%11110101 FAF4 97 02 staA PORT1 FAF6 84 F0 andA #%11110000 FAF8 97 02 staA PORT1 FAFA 97 80 staA L0080 FAFC 32 popA FAFD 39 ret ; FAFE 86 0B LFAFE: ldaA #$0B FB00 6F 00 LFB00 clr 0, X FB02 C6 0B ldaB #$0B FB04 81 08 cmpA #$08 FB06 2C 02 bge LFB0A FB08 C6 09 ldaB #$09 FB0A 3A LFB0A aBX FB0B 4A decA FB0C 26 F2 bne LFB00 FB0E 39 ret ; FB0F 96 8B LFB0F: ldaA L008B FB11 85 02 bitA #%00000010 FB13 27 05 beq LFB1A FB15 C6 40 ldaB #$40 FB17 BD F8 4B call SendByte_B FB1A 7F 00 8B LFB1A clr >L008B FB1D 39 ret ; FB1E 96 8B LFB1E: ldaA L008B FB20 85 01 bitA #%00000001 FB22 27 05 beq LFB29 FB24 8A 02 oraA #%00000010 FB26 97 8B staA L008B FB28 39 ret ; FB29 C6 40 LFB29 ldaB #$40 FB2B BD F8 4B call SendByte_B FB2E 7F 00 8B clr >L008B FB31 39 ret ; FB32 D7 A6 LFB32: staB L00A6 FB34 CE FB 48 ldX #$FB48 FB37 3A aBX FB38 A6 00 ldaA 0, X FB3A CE FB 4C ldX #$FB4C FB3D 58 lslB FB3E 3A aBX FB3F EE 00 ldX 0, X FB41 DF A1 stX L00A1 FB43 16 tAB FB44 3A aBX FB45 DF A3 stX L00A3 FB47 39 ret ; ; FB48 db $FF, $FF, $C8, $10, $80, $0F, $81, $0E, $82, $0D FB52 db $82, $D5 ; FB54 3C LFB54: pushX FB55 DE A1 ldX L00A1 FB57 3C pushX FB58 DE A3 ldX L00A3 FB5A 3C pushX FB5B DE A6 ldX L00A6 FB5D 3C pushX FB5E DE 89 ldX L0089 FB60 3C pushX FB61 16 tAB FB62 BD F9 A3 call LF9A3 FB65 8D CB callr LFB32 FB67 D6 A6 ldaB L00A6 FB69 CE 00 9D ldX #$009D FB6C 3A aBX FB6D 6D 00 tst 0, X FB6F 27 1F beq LFB90 FB71 6A 00 dec 0, X FB73 CE 00 95 ldX #$0095 FB76 58 lslB FB77 3A aBX FB78 EE 00 ldX 0, X FB7A A6 00 ldaA 0, X FB7C 36 pushA FB7D 9C A3 cmpX L00A3 FB7F 26 02 bne LFB83 FB81 DE A1 ldX L00A1 FB83 08 LFB83 incX FB84 3C pushX FB85 CE 00 95 ldX #$0095 FB88 3A aBX FB89 32 popA FB8A 33 popB FB8B ED 00 stD 0, X FB8D 32 popA FB8E 0C clc FB8F 0D sec FB90 38 LFB90 popX FB91 DF 89 stX L0089 FB93 38 popX FB94 DF A6 stX L00A6 FB96 38 popX FB97 DF A3 stX L00A3 FB99 38 popX FB9A DF A1 stX L00A1 FB9C 38 popX FB9D 39 ret ; FB9E ISR_Timer_Output_Compare: FB9E 96 08 ldaA TIMER_CTRL_STAT FBA0 85 40 bitA #%01000000 FBA2 27 33 beq LFBD7 FBA4 DC 0B ldD OUTPUT_COMPARE_H FBA6 D3 F5 addD L00F5 ; wTimerInterval FBA8 DD 0B stD OUTPUT_COMPARE_H ; Set new timeout value FBAA 7F 00 08 clr >TIMER_CTRL_STAT FBAD 0E ei FBAE D6 81 ldaB L0081 FBB0 C5 80 bitB #%10000000 FBB2 27 1E beq LFBD2 FBB4 C5 08 bitB #%00001000 FBB6 27 02 beq LFBBA FBB8 8D 1E callr LFBD8 FBBA C5 04 LFBBA bitB #%00000100 FBBC 27 02 beq LFBC0 FBBE 8D 73 callr LFC33 FBC0 C5 01 LFBC0 bitB #%00000001 FBC2 27 05 beq LFBC9 FBC4 86 01 ldaA #$01 FBC6 BD FD 34 call LFD34 FBC9 C5 02 LFBC9 bitB #%00000010 FBCB 27 05 beq LFBD2 FBCD 86 02 ldaA #$02 FBCF BD FD 34 call LFD34 FBD2 0F LFBD2 di FBD3 86 08 ldaA #$08 FBD5 97 08 staA TIMER_CTRL_STAT FBD7 3B LFBD7 reti ; FBD8 37 LFBD8: pushB FBD9 96 EE ldaA L00EE FBDB 27 19 beq LFBF6 FBDD DE EF ldX L00EF FBDF 09 decX FBE0 DF EF stX L00EF FBE2 26 4D bne LFC31 FBE4 BD FB 1E call LFB1E FBE7 96 F2 ldaA L00F2 FBE9 27 05 beq LFBF0 FBEB 7A 00 F2 dec >L00F2 FBEE 27 06 beq LFBF6 FBF0 DC F3 LFBF0 ldD L00F3 FBF2 DD EF stD L00EF FBF4 20 3B jr LFC31 ; FBF6 7F 00 EE LFBF6 clr >L00EE FBF9 D6 F1 ldaB L00F1 FBFB CE 00 F2 ldX #$00F2 FBFE 3A aBX FBFF 86 08 LFBFF ldaA #$08 FC01 BD FB 54 call LFB54 FC04 24 2B bcc LFC31 FC06 A7 00 staA 0, X FC08 08 incX FC09 7C 00 F1 inc >L00F1 FC0C 96 F1 ldaA L00F1 FC0E 81 02 cmpA #$02 FC10 26 09 bne LFC1B FC12 D6 81 ldaB L0081 FC14 C5 40 bitB #%01000000 FC16 27 03 beq LFC1B FC18 4C incA FC19 6F 00 clr 0, X FC1B 81 03 LFC1B cmpA #$03 FC1D 26 E0 bne LFBFF FC1F 7F 00 F1 clr >L00F1 FC22 DC F3 ldD L00F3 FC24 27 D0 beq LFBF6 FC26 36 pushA FC27 17 tBA FC28 33 popB FC29 DD F3 stD L00F3 FC2B DD EF stD L00EF FC2D 86 80 ldaA #$80 FC2F 97 EE staA L00EE FC31 33 LFC31 popB FC32 39 ret ; FC33 37 LFC33: pushB FC34 0F di FC35 96 E0 ldaA L00E0 FC37 85 80 bitA #%10000000 FC39 27 0E beq LFC49 FC3B DE E1 ldX L00E1 FC3D 09 decX FC3E DF E1 stX L00E1 FC40 26 0F bne LFC51 FC42 7F 00 E0 clr >L00E0 FC45 8D 0D callr LFC54 FC47 25 08 bcs LFC51 FC49 96 E0 LFC49 ldaA L00E0 FC4B 85 40 bitA #%01000000 FC4D 26 02 bne LFC51 FC4F 8D 39 callr LFC8A FC51 33 LFC51 popB FC52 0E ei FC53 39 ret ; FC54 0C LFC54: clc FC55 96 E9 ldaA L00E9 FC57 97 E6 staA L00E6 FC59 27 20 beq LFC7B FC5B 7C 00 E4 inc >L00E4 FC5E D6 EC ldaB L00EC FC60 C4 C0 andB #%11000000 FC62 17 tBA FC63 98 E5 xorA L00E5 FC65 26 06 bne LFC6D FC67 96 E0 ldaA L00E0 FC69 85 40 bitA #%01000000 FC6B 26 0E bne LFC7B FC6D D7 E5 LFC6D staB L00E5 FC6F 96 E0 ldaA L00E0 FC71 8A 40 oraA #%01000000 FC73 97 E0 staA L00E0 FC75 7C 00 E6 inc >L00E6 FC78 8D 02 callr WritePhoneme_B FC7A 0D sec FC7B 39 LFC7B ret ; FC7C 86 80 WritePhoneme_B: ldaA #$80 FC7E B7 A0 03 staA LA003 ; Set CTRL FC81 F7 A0 00 staB LA000 ; Write Duration/phoneme FC84 86 70 ldaA #$70 FC86 B7 A0 03 staA LA003 ; Clr CTRL FC89 39 ret ; FC8A CE 00 E9 LFC8A: ldX #$00E9 FC8D D6 E3 ldaB L00E3 FC8F 3A aBX FC90 86 04 LFC90 ldaA #$04 FC92 BD FB 54 call LFB54 FC95 24 6B bcc LFD02 FC97 A7 00 staA 0, X FC99 08 incX FC9A 7C 00 E3 inc >L00E3 FC9D 96 E4 ldaA L00E4 FC9F 81 04 cmpA #$04 FCA1 26 12 bne LFCB5 FCA3 D6 E3 ldaB L00E3 FCA5 C1 02 cmpB #$02 FCA7 26 0C bne LFCB5 FCA9 D6 81 ldaB L0081 FCAB C5 40 bitB #%01000000 FCAD 27 06 beq LFCB5 FCAF 7C 00 E3 inc >L00E3 FCB2 6F 00 clr 0, X FCB4 08 incX FCB5 91 E3 LFCB5 cmpA L00E3 FCB7 26 D7 bne LFC90 FCB9 7F 00 E3 clr >L00E3 FCBC 81 04 cmpA #$04 FCBE 26 19 bne LFCD9 FCC0 DC EA ldD L00EA FCC2 27 0E beq LFCD2 FCC4 D7 E1 staB L00E1 FCC6 97 E2 staA L00E2 FCC8 96 E0 ldaA L00E0 FCCA 8A 80 oraA #%10000000 FCCC 97 E0 staA L00E0 FCCE 8D 35 callr LFD05 FCD0 20 32 jr LFD04 ; FCD2 BD FC 54 LFCD2 call LFC54 FCD5 24 B3 bcc LFC8A FCD7 20 2B jr LFD04 ; FCD9 96 E0 LFCD9 ldaA L00E0 FCDB 85 40 bitA #%01000000 FCDD 26 08 bne LFCE7 FCDF 8A 40 oraA #%01000000 FCE1 97 E0 staA L00E0 FCE3 D6 E5 ldaB L00E5 FCE5 8D 95 callr WritePhoneme_B FCE7 CC A0 04 LFCE7 ldD #$A004 FCEA DD E7 stD L00E7 FCEC CE 00 E9 ldX #$00E9 FCEF C6 05 ldaB #$05 FCF1 A6 00 LFCF1 ldaA 0, X FCF3 08 incX FCF4 3C pushX FCF5 DE E7 ldX L00E7 FCF7 A7 00 staA 0, X FCF9 09 decX FCFA DF E7 stX L00E7 FCFC 38 popX FCFD 5A decB FCFE 26 F1 bne LFCF1 FD00 20 02 jr LFD04 ; FD02 8D 01 LFD02 callr LFD05 FD04 39 LFD04 ret ; FD05 96 E0 LFD05: ldaA L00E0 FD07 85 40 bitA #%01000000 FD09 27 12 beq LFD1D FD0B 84 BF andA #%10111111 FD0D 97 E0 staA L00E0 FD0F 5F clrB FD10 BD FC 7C call WritePhoneme_B FD13 86 FF ldaA #$FF FD15 B7 A0 04 staA LA004 FD18 86 80 ldaA #$80 FD1A B7 A0 03 staA LA003 FD1D 39 LFD1D ret ; FD1E ISR_IRQ1_Strobe3: FD1E 7A 00 E6 dec >L00E6 FD21 26 03 bne LFD26 FD23 7A 00 E4 dec >L00E4 FD26 96 81 LFD26 ldaA L0081 FD28 85 80 bitA #%10000000 FD2A 26 04 bne LFD30 FD2C 8D D7 callr LFD05 FD2E 20 03 jr LFD33 ; FD30 BD FC 8A LFD30 call LFC8A FD33 3B LFD33 reti ; FD34 37 LFD34: pushB FD35 D6 88 ldaB L0088 FD37 37 pushB FD38 8D 40 callr LFD7A FD3A C6 0A ldaB #$0A FD3C D7 AB staB L00AB FD3E DE D8 ldX L00D8 FD40 A6 00 LFD40 ldaA 0, X FD42 85 80 bitA #%10000000 FD44 27 0B beq LFD51 FD46 EC 01 ldD 1, X FD48 83 00 01 subD #$0001 FD4B ED 01 stD 1, X FD4D 26 02 bne LFD51 FD4F 8D 5F callr LFDB0 FD51 C6 0B LFD51 ldaB #$0B FD53 86 07 ldaA #$07 FD55 91 AB cmpA L00AB FD57 23 02 bls LFD5B FD59 C6 09 ldaB #$09 FD5B 3A LFD5B aBX FD5C 7A 00 AB dec >L00AB FD5F 26 DF bne LFD40 FD61 A6 00 ldaA 0, X FD63 85 80 bitA #%10000000 FD65 27 0B beq LFD72 FD67 EC 01 ldD 1, X FD69 83 00 01 subD #$0001 FD6C ED 01 stD 1, X FD6E 26 05 bne LFD75 FD70 6F 00 clr 0, X FD72 BD FE 0E LFD72 call LFE0E FD75 33 LFD75 popB FD76 D7 88 staB L0088 FD78 33 popB FD79 39 ret ; FD7A 85 01 LFD7A: bitA #%00000001 FD7C 27 19 beq LFD97 FD7E CC 82 E6 ldD #$82E6 FD81 DD D8 stD L00D8 FD83 CC 00 B2 ldD #$00B2 FD86 DD DA stD L00DA FD88 CC 00 B6 ldD #$00B6 FD8B DD DC stD L00DC FD8D 86 03 ldaA #$03 FD8F 97 88 staA L0088 FD91 CC 00 EF ldD #$00EF FD94 DD DE stD L00DE FD96 39 ret ; FD97 CC 83 4B LFD97 ldD #$834B FD9A DD D8 stD L00D8 FD9C CC 00 B4 ldD #$00B4 FD9F DD DA stD L00DA FDA1 CC 00 C7 ldD #$00C7 FDA4 DD DC stD L00DC FDA6 86 0C ldaA #$0C FDA8 97 88 staA L0088 FDAA CC 00 F2 ldD #$00F2 FDAD DD DE stD L00DE FDAF 39 ret ; FDB0 A6 00 LFDB0: ldaA 0, X FDB2 84 7F andA #%01111111 FDB4 A7 00 staA 0, X FDB6 36 pushA FDB7 EC 05 ldD 5, X FDB9 83 00 01 subD #$0001 FDBC ED 05 stD 5, X FDBE 27 0A beq LFDCA FDC0 EC 03 ldD 3, X FDC2 ED 01 stD 1, X FDC4 A6 00 ldaA 0, X FDC6 8A 80 oraA #%10000000 FDC8 A7 00 staA 0, X FDCA 32 LFDCA popA FDCB 81 05 cmpA #$05 FDCD 2F 04 ble LFDD3 FDCF 81 0B cmpA #$0B FDD1 26 10 bne LFDE3 FDD3 EC 07 LFDD3 ldD 7, X FDD5 E3 09 addD 9, X FDD7 ED 07 stD 7, X FDD9 36 pushA FDDA A6 00 ldaA 0, X FDDC 8D 18 callr LFDF6 FDDE 33 popB FDDF 4C incA FDE0 8D 14 callr LFDF6 FDE2 39 ret ; FDE3 E6 07 LFDE3 ldaB 7, X FDE5 EB 08 addB 8, X FDE7 81 07 cmpA #$07 FDE9 2F 06 ble LFDF1 FDEB 6D 08 tst 8, X FDED 2A 02 bpl LFDF1 FDEF C4 0F andB #%00001111 FDF1 E7 07 LFDF1 staB 7, X FDF3 8D 01 callr LFDF6 FDF5 39 ret ; FDF6 84 7F LFDF6: andA #%01111111 FDF8 81 08 cmpA #$08 FDFA 2D 0E blt LFE0A ; VolC FE00 3C pushX FE01 37 pushB FE02 16 tAB FE03 DE DE ldX L00DE FE05 3A aBX FE06 33 popB FE07 E7 00 staB 0, X FE09 38 popX FE0A BD FA DF LFE0A call WriteAY38913_AB FE0D 39 ret ; FE0E DE DA LFE0E: ldX L00DA FE10 E6 00 ldaB 0, X FE12 DE DC ldX L00DC FE14 3A aBX FE15 86 01 LFE15 ldaA #$01 FE17 D6 88 ldaB L0088 FE19 C1 03 cmpB #$03 FE1B 27 02 beq LFE1F FE1D 86 02 ldaA #$02 FE1F BD FB 54 LFE1F call LFB54 FE22 24 46 bcc LFE6A FE24 A7 00 staA 0, X FE26 08 incX FE27 3C pushX FE28 DE DA ldX L00DA FE2A 6C 00 inc 0, X FE2C A6 00 ldaA 0, X FE2E E6 01 ldaB 1, X FE30 38 popX FE31 81 02 cmpA #$02 FE33 27 0C beq LFE41 FE35 81 04 cmpA #$04 FE37 26 1A bne LFE53 FE39 C1 04 cmpB #$04 FE3B 27 16 beq LFE53 FE3D C1 11 cmpB #$11 FE3F 27 12 beq LFE53 FE41 37 LFE41 pushB FE42 D6 81 ldaB L0081 FE44 C5 40 bitB #%01000000 FE46 27 0A beq LFE52 FE48 6F 00 clr 0, X FE4A 08 incX FE4B 3C pushX FE4C DE DA ldX L00DA FE4E 6C 00 inc 0, X FE50 4C incA FE51 38 popX FE52 33 LFE52 popB FE53 11 LFE53 cBA FE54 26 BF bne LFE15 FE56 C1 01 cmpB #$01 FE58 26 04 bne LFE5E FE5A 8D 0F callr LFE6B FE5C 20 B0 jr LFE0E ; FE5E DE DA LFE5E ldX L00DA FE60 6F 00 clr 0, X FE62 86 01 ldaA #$01 FE64 A7 01 staA 1, X FE66 8D 4A callr LFEB2 FE68 27 A4 beq LFE0E FE6A 39 LFE6A ret ; FE6B DE DC LFE6B: ldX L00DC FE6D A6 00 ldaA 0, X FE6F 84 BF andA #%10111111 FE71 2B 0A bmi LFE7D FE73 C6 04 ldaB #$04 FE75 81 0E cmpA #$0E FE77 26 20 bne LFE99 FE79 C6 11 ldaB #$11 FE7B 20 1C jr LFE99 ; FE7D C6 07 LFE7D ldaB #$07 FE7F 84 7F andA #%01111111 FE81 81 05 cmpA #$05 FE83 2E 08 bgt LFE8D FE85 A6 00 ldaA 0, X FE87 84 FE andA #%11111110 FE89 A7 00 staA 0, X FE8B 20 0A jr LFE97 ; FE8D 81 0B LFE8D cmpA #$0B FE8F 27 06 beq LFE97 FE91 81 0C cmpA #$0C FE93 26 04 bne LFE99 FE95 6A 00 dec 0, X FE97 C6 09 LFE97 ldaB #$09 FE99 6F 01 LFE99 clr 1, X FE9B 6F 02 clr 2, X FE9D A6 00 ldaA 0, X FE9F DE DA ldX L00DA FEA1 E7 01 staB 1, X FEA3 85 40 bitA #%01000000 FEA5 27 0A beq LFEB1 FEA7 6C 00 inc 0, X FEA9 6C 00 inc 0, X FEAB DE DC ldX L00DC FEAD 84 BF andA #%10111111 FEAF A7 00 staA 0, X FEB1 39 LFEB1 ret ; FEB2 DE DC LFEB2: ldX L00DC FEB4 A6 00 ldaA 0, X FEB6 2B 19 bmi LFED1 FEB8 81 0E cmpA #$0E FEBA 27 07 beq LFEC3 FEBC E6 03 ldaB 3, X FEBE BD FD F6 call LFDF6 FEC1 20 10 jr LFED3 ; FEC3 4F LFEC3 clrA FEC4 E6 03 LFEC4 ldaB 3, X FEC6 BD FD F6 call LFDF6 FEC9 08 incX FECA 4C incA FECB 81 0E cmpA #$0E FECD 26 F5 bne LFEC4 FECF 20 02 jr LFED3 ; FED1 8D 11 LFED1 callr LFEE4 FED3 DE DC LFED3 ldX L00DC FED5 EC 01 ldD 1, X FED7 27 0A beq LFEE3 FED9 DE D8 ldX L00D8 FEDB E7 63 staB 99, X FEDD A7 64 staA 100, X FEDF 86 80 ldaA #$80 FEE1 A7 62 staA 98, X FEE3 39 LFEE3 ret ; FEE4 8D 52 LFEE4: callr LFF38 FEE6 7F 00 B1 clr >L00B1 FEE9 DC AD ldD L00AD FEEB 27 4A beq LFF37 FEED DC AF ldD L00AF FEEF 27 46 beq LFF37 FEF1 3C pushX FEF2 2A 0A bpl LFEFE FEF4 7C 00 B1 inc >L00B1 FEF7 53 comB FEF8 43 comA FEF9 C3 00 01 addD #$0001 FEFC DD AF stD L00AF FEFE 93 AD LFEFE subD L00AD FF00 2F 0E ble LFF10 FF02 7C 00 B1 inc >L00B1 FF05 7C 00 B1 inc >L00B1 FF08 DC AF ldD L00AF FF0A DE AD ldX L00AD FF0C DD AD stD L00AD FF0E DF AF stX L00AF FF10 BD FF 9E LFF10 call LFF9E FF13 38 popX FF14 DC AF ldD L00AF FF16 ED 05 stD 5, X FF18 96 B1 ldaA L00B1 FF1A 85 02 bitA #%00000010 FF1C 27 07 beq LFF25 FF1E CC 00 01 ldD #$0001 FF21 DD AB stD L00AB FF23 20 09 jr LFF2E ; FF25 DC AD LFF25 ldD L00AD FF27 DD AB stD L00AB FF29 CC 00 01 ldD #$0001 FF2C DD AD stD L00AD FF2E BD FF C2 LFF2E call LFFC2 FF31 A6 00 ldaA 0, X FF33 8A 80 oraA #%10000000 FF35 A7 00 staA 0, X FF37 39 LFF37 ret ; FF38 84 7F LFF38: andA #%01111111 FF3A 16 tAB FF3B CE FF 90 ldX #$FF90 FF3E 3A aBX FF3F E6 00 ldaB 0, X FF41 DE D8 ldX L00D8 FF43 3A aBX FF44 A7 00 staA 0, X FF46 3C pushX FF47 36 pushA FF48 DE DC ldX L00DC FF4A E6 03 ldaB 3, X FF4C A6 04 ldaA 4, X FF4E DD AD stD L00AD FF50 32 popA FF51 81 05 cmpA #$05 FF53 2F 04 ble LFF59 FF55 81 0B cmpA #$0B FF57 26 1E bne LFF77 FF59 E6 05 LFF59 ldaB 5, X FF5B A6 06 ldaA 6, X FF5D 38 popX FF5E ED 07 stD 7, X FF60 DD AB stD L00AB FF62 36 pushA FF63 A6 00 ldaA 0, X FF65 BD FD F6 call LFDF6 FF68 33 popB FF69 4C incA FF6A BD FD F6 call LFDF6 FF6D 3C pushX FF6E DE DC ldX L00DC FF70 E6 07 ldaB 7, X FF72 A6 08 ldaA 8, X FF74 38 popX FF75 20 14 jr LFF8B ; FF77 E6 05 LFF77 ldaB 5, X FF79 A6 06 ldaA 6, X FF7B 38 popX FF7C 36 pushA FF7D E7 07 staB 7, X FF7F D7 AC staB L00AC FF81 A6 00 ldaA 0, X FF83 BD FD F6 call LFDF6 FF86 33 popB FF87 7F 00 AB clr >L00AB FF8A 4F clrA FF8B 93 AB LFF8B subD L00AB FF8D DD AF stD L00AF FF8F 39 ret ; ; FF90 db $00, $00, $0B, $0B, $16, $16, $2C, $35, $3E, $47 FF9A db $50, $21, $21, $59 ; FF9E CE 00 10 LFF9E: ldX #$0010 FFA1 7F 00 AB clr >L00AB FFA4 7F 00 AC clr >L00AC FFA7 78 00 AE LFFA7 lsl >L00AE FFAA 79 00 AD rol >L00AD FFAD 79 00 AC rol >L00AC FFB0 79 00 AB rol >L00AB FFB3 DC AB ldD L00AB FFB5 93 AF subD L00AF FFB7 2D 05 blt LFFBE FFB9 DD AB stD L00AB FFBB 7C 00 AE inc >L00AE FFBE 09 LFFBE decX FFBF 26 E6 bne LFFA7 FFC1 39 ret ; FFC2 96 B1 LFFC2: ldaA L00B1 FFC4 85 01 bitA #%00000001 FFC6 27 07 beq LFFCF FFC8 CC 00 00 ldD #$0000 FFCB 93 AD subD L00AD FFCD DD AD stD L00AD FFCF A6 00 LFFCF ldaA 0, X FFD1 81 05 cmpA #$05 FFD3 2F 04 ble LFFD9 FFD5 81 0B cmpA #$0B FFD7 26 06 bne LFFDF FFD9 DC AD LFFD9 ldD L00AD FFDB ED 09 stD 9, X FFDD 20 04 jr LFFE3 ; FFDF 96 AE LFFDF ldaA L00AE FFE1 A7 08 staA 8, X FFE3 DC AB LFFE3 ldD L00AB FFE5 ED 01 stD 1, X FFE7 ED 03 stD 3, X FFE9 39 ret ; ; FFEA db $FF, $FF, $FF, $FF, $FF, $FF FFF0 VEC_IRQ2_Serial_IO: FFF0 dw ISR_IRQ2_Serial_IO FFF2 VEC_IRQ2_Timer_Overflow: FFF2 dw ISR_DUMMY FFF4 VEC_IRQ2_Timer_Output_Compare: FFF4 dw ISR_Timer_Output_Compare FFF6 VEC_IRQ2_Timer_Input_Capture: FFF6 dw ISR_DUMMY FFF8 VEC_IRQ1_Strobe3: FFF8 dw ISR_IRQ1_Strobe3 FFFA VEC_SWI: FFFA dw ISR_DUMMY FFFC VEC_NMI: FFFC dw ISR_DUMMY FFFE VEC_Reset: FFFE db Start end