1: .include "extern_symbols.s" ;include monitor symbols. **** include/extern_symbols.s **** 1: ;This file is generated by the build script. 2: ;Do not make any changes here! 3: 4: - 0091 AY0_WRITE_REG equ 0x91 5: - 0312 A_RTS_OFF equ 0x312 6: - 031B A_RTS_ON equ 0x31B 7: - 0239 CMD_DASM equ 0x239 8: - 012F CMD_EXEC equ 0x12F 9: - 021D CMD_IO_READ equ 0x21D 10: - 01F4 CMD_IO_WRITE equ 0x1F4 11: - 01B8 CMD_SET equ 0x1B8 12: - 01EE CMD_SET_END equ 0x1EE 13: - 01D3 CMD_SET_LOOP equ 0x1D3 14: - 0272 CMD_SYNTAX_ERROR equ 0x272 15: - 014E CMD_VIEW equ 0x14E 16: - 01B2 CMD_VIEW_END equ 0x1B2 17: - 0187 CMD_VIEW_ROW equ 0x187 18: - 0199 CMD_VIEW_ROW_LOOP equ 0x199 19: - 027E CONSOLE_INIT equ 0x27E 20: - 027E CONSOLE_INIT_CTC equ 0x27E 21: - 0286 CONSOLE_INIT_SIO equ 0x286 22: - 0324 DHEX_TO_BYTE equ 0x324 23: - 0340 DHEX_TO_BYTE_FAILED equ 0x340 24: - 0EC4 EXEC_RST_08 equ 0xEC4 25: - 0EC8 EXEC_RST_10 equ 0xEC8 26: - 0ED4 EXEC_RST_18 equ 0xED4 27: - 0344 HEX_TO_BIN equ 0x344 28: - 0352 HEX_TO_BIN_2 equ 0x352 29: - 0359 HEX_TO_INVALID_2 equ 0x359 30: - 001B INT_VEC equ 0x1B 31: - 027E Includes equ 0x27E 32: - 030A MSG_CLEAR equ 0x30A 33: - 108E MSG_ERROR equ 0x108E 34: - 10A7 MSG_START equ 0x10A7 35: - 0099 PROMPT_BEGIN equ 0x99 36: - 00D6 PROMPT_BEGIN_READ_BACKSPACE equ 0xD6 37: - 00A5 PROMPT_BEGIN_READ_LOOP equ 0xA5 38: - 00FC PROMPT_BEGIN_READ_PROCESS equ 0xFC 39: - 0000 RST_00 equ 0x00 40: - 0008 RST_08 equ 0x08 41: - 0010 RST_10 equ 0x10 42: - 0018 RST_18 equ 0x18 43: - 035B STRCONV_BYTES_TO_HEX equ 0x35B 44: - 036A STRCONV_BYTES_TO_HEX_1 equ 0x36A 45: - 0374 STRCONV_BYTES_TO_HEX_2 equ 0x374 46: - 0F00 STR_Banner_Start equ 0xF00 47: - 0F30 STR_HEXDUMP_HEADER equ 0xF30 48: - 0F26 STR_SyntaxError equ 0xF26 49: - 0F2B STR_Unknown equ 0xF2B 50: - 0ED7 beep equ 0xED7 51: - 0EF1 beep_pause equ 0xEF1 52: - 0ADC dasm_00 equ 0xADC 53: - 0DC8 dasm_01 equ 0xDC8 54: - 0B62 dasm_02 equ 0xB62 55: - 0D9A dasm_03 equ 0xD9A 56: - 0BDF dasm_08 equ 0xBDF 57: - 0D6D dasm_09 equ 0xD6D 58: - 0B44 dasm_0A equ 0xB44 59: - 0DB1 dasm_0B equ 0xDB1 60: - 0B24 dasm_10 equ 0xB24 61: - 0B6D dasm_12 equ 0xB6D 62: - 0AE7 dasm_18 equ 0xAE7 63: - 0B4E dasm_1A equ 0xB4E 64: - 0B01 dasm_20 equ 0xB01 65: - 0E0E dasm_22 equ 0xE0E 66: - 0BA7 dasm_27 equ 0xBA7 67: - 0AFA dasm_28 equ 0xAFA 68: - 0DDF dasm_2A equ 0xDDF 69: - 0BAB dasm_2F equ 0xBAB 70: - 0AF2 dasm_30 equ 0xAF2 71: - 0B78 dasm_32 equ 0xB78 72: - 0BB7 dasm_37 equ 0xBB7 73: - 0AEB dasm_38 equ 0xAEB 74: - 0B58 dasm_3A equ 0xB58 75: - 0BB3 dasm_3F equ 0xBB3 76: - 0BBB dasm_76 equ 0xBBB 77: - 0C38 dasm_80C6 equ 0xC38 78: - 0BD5 dasm_BE equ 0xBD5 79: - 0AE0 dasm_C3 equ 0xAE0 80: - 0C5E dasm_C88E equ 0xC5E 81: - 0B30 dasm_C9 equ 0xB30 82: - 0B2A dasm_CD equ 0xB2A 83: - 0BEC dasm_D9 equ 0xBEC 84: - 0B12 dasm_DD equ 0xB12 85: - 0DCF dasm_DD_01 equ 0xDCF 86: - 0D88 dasm_DD_09 equ 0xD88 87: - 0E24 dasm_DD_22 equ 0xE24 88: - 0D9F dasm_DD_23 equ 0xD9F 89: - 0DF6 dasm_DD_2A equ 0xDF6 90: - 0DB6 dasm_DD_2B equ 0xDB6 91: - 0D38 dasm_DD_34 equ 0xD38 92: - 0D55 dasm_DD_35 equ 0xD55 93: - 0C40 dasm_DD_86 equ 0xC40 94: - 0C66 dasm_DD_8E equ 0xC66 95: - 0C89 dasm_DD_96 equ 0xC89 96: - 0CA9 dasm_DD_9E equ 0xCA9 97: - 0CCA dasm_DD_A6 equ 0xCCA 98: - 0D01 dasm_DD_AE equ 0xD01 99: - 0CE6 dasm_DD_B6 equ 0xCE6 100: - 0D1D dasm_DD_BE equ 0xD1D 101: - 0E76 dasm_DD_E1 equ 0xE76 102: - 0BFC dasm_DD_E3 equ 0xBFC 103: - 0E60 dasm_DD_E5 equ 0xE60 104: - 0E46 dasm_DD_F9 equ 0xE46 105: - 0E70 dasm_E1 equ 0xE70 106: - 0BF0 dasm_E3 equ 0xBF0 107: - 0E5A dasm_E5 equ 0xE5A 108: - 0B09 dasm_E9 equ 0xB09 109: - 0D7F dasm_ED_42 equ 0xD7F 110: - 0E1A dasm_ED_43 equ 0xE1A 111: - 0BAF dasm_ED_44 equ 0xBAF 112: - 0B3A dasm_ED_45 equ 0xB3A 113: - 0BC6 dasm_ED_46 equ 0xBC6 114: - 0D76 dasm_ED_4A equ 0xD76 115: - 0DEB dasm_ED_4B equ 0xDEB 116: - 0B35 dasm_ED_4D equ 0xB35 117: - 0BCB dasm_ED_56 equ 0xBCB 118: - 0BD0 dasm_ED_5E equ 0xBD0 119: - 0C14 dasm_ED_A0 equ 0xC14 120: - 0C26 dasm_ED_A1 equ 0xC26 121: - 0C1D dasm_ED_A8 equ 0xC1D 122: - 0C2F dasm_ED_A9 equ 0xC2F 123: - 0C18 dasm_ED_B0 equ 0xC18 124: - 0C2A dasm_ED_B1 equ 0xC2A 125: - 0C21 dasm_ED_B8 equ 0xC21 126: - 0C33 dasm_ED_B9 equ 0xC33 127: - 0BC0 dasm_F3 equ 0xBC0 128: - 0E3C dasm_F9 equ 0xE3C 129: - 0BC3 dasm_FB equ 0xBC3 130: - 0B1B dasm_FD equ 0xB1B 131: - 0DD7 dasm_FD_01 equ 0xDD7 132: - 0D91 dasm_FD_09 equ 0xD91 133: - 0E30 dasm_FD_22 equ 0xE30 134: - 0DA8 dasm_FD_23 equ 0xDA8 135: - 0E02 dasm_FD_2A equ 0xE02 136: - 0DBF dasm_FD_2B equ 0xDBF 137: - 0D44 dasm_FD_34 equ 0xD44 138: - 0D61 dasm_FD_35 equ 0xD61 139: - 0C4F dasm_FD_86 equ 0xC4F 140: - 0C75 dasm_FD_8E equ 0xC75 141: - 0C95 dasm_FD_96 equ 0xC95 142: - 0CB7 dasm_FD_9E equ 0xCB7 143: - 0CD6 dasm_FD_A6 equ 0xCD6 144: - 0D0D dasm_FD_AE equ 0xD0D 145: - 0CF1 dasm_FD_B6 equ 0xCF1 146: - 0D28 dasm_FD_BE equ 0xD28 147: - 0E7E dasm_FD_E1 equ 0xE7E 148: - 0C08 dasm_FD_E3 equ 0xC08 149: - 0E68 dasm_FD_E5 equ 0xE68 150: - 0E50 dasm_FD_F9 equ 0xE50 151: - 0B3F dasm_FF equ 0xB3F 152: - 0E86 dasm_UU equ 0xE86 153: - 0E8A dasm_UW equ 0xE8A 154: - 0CC5 dasm__AND equ 0xCC5 155: - 0D19 dasm__CP equ 0xD19 156: - 0D50 dasm__DEC equ 0xD50 157: - 0B97 dasm__ED_47 equ 0xB97 158: - 0B9F dasm__ED_4F equ 0xB9F 159: - 0B87 dasm__ED_57 equ 0xB87 160: - 0B8F dasm__ED_5F equ 0xB8F 161: - 0D33 dasm__INC equ 0xD33 162: - 0B83 dasm__LD equ 0xB83 163: - 0CE2 dasm__OR equ 0xCE2 164: - 0CA1 dasm__SBC equ 0xCA1 165: - 0C84 dasm__SUB equ 0xC84 166: - 0CFC dasm__XOR equ 0xCFC 167: - 0684 dasm_opcode_table equ 0x684 168: - 04B1 dasm_print16hex_addr equ 0x4B1 169: - 04C9 dasm_print8hex equ 0x4C9 170: - 0E8F dasm_printFlags_table equ 0xE8F 171: - 0E9F dasm_printRegister8_table equ 0xE9F 172: - 0EBF dasm_printRegister8_table_HL equ 0xEBF 173: - 0EA7 dasm_printRegisterIX_table equ 0xEA7 174: - 0EAF dasm_printRegisterIY_table equ 0xEAF 175: - 0EB7 dasm_printRegisterSP_table equ 0xEB7 176: - 0375 disassemble equ 0x375 177: - 045B disassemble_continue equ 0x45B 178: - 044B disassemble_err equ 0x44B 179: - 0379 disassemble_next equ 0x379 180: - 0448 disassemble_print_opcode_params_end equ 0x448 181: - 03F4 disassemble_print_opcode_params_loop equ 0x3F4 182: - 03B6 disassemble_print_opcode_raw equ 0x3B6 183: - 03CA disassemble_print_opcode_raw_fill equ 0x3CA 184: - 048D disassemble_table_first_match equ 0x48D 185: - 04A7 disassemble_table_found equ 0x4A7 186: - 04AB disassemble_table_notfound equ 0x4AB 187: - 0469 disassemble_table_seek equ 0x469 188: - 046D disassemble_table_seek_loop equ 0x46D 189: - 007E mon_start_complete equ 0x7E 190: - 0050 mon_start_init_ctc equ 0x50 191: - 0067 mon_start_init_serial equ 0x67 192: - 0050 mon_start_init_sound equ 0x50 193: - 006A mon_start_ram equ 0x6A 194: - 0073 mon_start_ram_loop equ 0x73 195: - 0044 mon_var_template equ 0x44 196: - 402A mon_var_template_end equ 0x402A 197: - 04D7 param_01 equ 0x4D7 198: - 04FE param_02 equ 0x4FE 199: - 051B param_03 equ 0x51B 200: - 0553 param_03_done equ 0x553 201: - 053C param_03_neg equ 0x53C 202: - 0557 param_04 equ 0x557 203: - 0567 param_04_i equ 0x567 204: - 056D param_05 equ 0x56D 205: - 057A param_06 equ 0x57A 206: - 0594 param_07 equ 0x594 207: - 05A1 param_08 equ 0x5A1 208: - 05B6 param_09 equ 0x5B6 209: - 05BC param_09_0A equ 0x5BC 210: - 05AD param_0A equ 0x5AD 211: - 05CB param_10 equ 0x5CB 212: - 05DB param_11 equ 0x5DB 213: - 05EA param_11_12 equ 0x5EA 214: - 060A param_11_12_all equ 0x60A 215: - 05FD param_11_12_def equ 0x5FD 216: - 0602 param_11_12_ix equ 0x602 217: - 0607 param_11_12_iy equ 0x607 218: - 05E3 param_12 equ 0x5E3 219: - 061B param_13 equ 0x61B 220: - 063A param_80 equ 0x63A 221: - 0641 param_80_seek equ 0x641 222: - 0631 param_81 equ 0x631 223: - 0675 param_comma equ 0x675 224: - 0650 param_printRegister equ 0x650 225: - 066E param_printRegisterA equ 0x66E 226: - 0666 param_printRegisterHL equ 0x666 227: - 02E7 print_a_hex equ 0x2E7 228: - 02B7 print_char equ 0x2B7 229: - 02CA print_clear equ 0x2CA 230: - 02D1 print_newLine equ 0x2D1 231: - 02BF print_str equ 0x2BF 232: - 02C9 print_str_end equ 0x2C9 233: - 02DC print_wait_out equ 0x2DC 234: - 02F8 read_char equ 0x2F8 235: - 4029 var_buffer equ 0x4029 236: - 4000 var_buffer_len equ 0x4000 237: - 4006 var_curserchar equ 0x4006 238: - 4007 var_curserlastaddr equ 0x4007 239: - 4005 var_curseron equ 0x4005 240: - 4004 var_curserstate equ 0x4004 241: - 4002 var_curserx equ 0x4002 242: - 4003 var_cursery equ 0x4003 243: - 4001 var_last_char equ 0x4001 244: - 4019 var_ps2mem equ 0x4019 245: - 4009 var_scratch equ 0x4009 246: - 10C1 xmodem_ack equ 0x10C1 247: - 0F7A xmodem_await_conn equ 0xF7A 248: - 1025 xmodem_end equ 0x1025 249: - 0FEB xmodem_err equ 0xFEB 250: - 0F4C xmodem_init equ 0xF4C 251: - 102C xmodem_int equ 0x102C 252: - 104B xmodem_int_cont equ 0x104B 253: - 10CF xmodem_nak equ 0x10CF 254: - 107D xmodem_out equ 0x107D 255: - 0F85 xmodem_packet equ 0xF85 256: - 0FE3 xmodem_packet_EOT equ 0xFE3 257: - 0F97 xmodem_packet_get equ 0xF97 258: - 0FD0 xmodem_packet_get_crc equ 0xFD0 259: - 0FC1 xmodem_packet_get_data equ 0xFC1 260: - 1050 xmodem_read_wait equ 0x1050 261: - 105E xmodem_read_wait_loop equ 0x105E 262: - 107B xmodem_read_wait_timeout equ 0x107B 263: - 10DD xmodem_wait equ 0x10DD 264: - 10E3 xmodem_wait_1 equ 0x10E3 265: - 1083 xmodem_wait_out equ 0x1083 **** test.asm **** 2: - B000 org 0xB000 3: - 00F5 CS_PIO_BD .EQU 0xF5 4: - 00F7 CS_PIO_BC .EQU 0xF7 5: - 00F4 CS_PIO_AD .EQU 0xF4 6: - 00F6 CS_PIO_AC .EQU 0xF6 7: 8: - 00F3 CS_I2C_S1 .EQU 0xF3 9: - 00F2 CS_I2C_SX .EQU 0xF2 10: 11: - 00D0 IIC_RTC equ 11010000b 12: 13: - B000 IIC_INIT: 14: 0+7 B000 3ECF LD A,0xCF 15: 7+11 B002 D3F6 OUT (CS_PIO_AC), A 16: 18+7 B004 3EF5 LD A,11110101b 17: 25+11 B006 D3F6 OUT (CS_PIO_AC), A 18: 19: 36+7 B008 3E00 LD A,00000000b ; Reset PCF8584 minimum 30 clock cycles 20: 43+11 B00A D3F4 OUT (CS_PIO_AD), A 21: 54+10 B00C 010010 LD BC,0x1000 22: 64+17 B00F CDF6B0 CALL PAUSE_LOOP 23: 81+7 B012 3E02 LD A,0000010b 24: 88+11 B014 D3F4 OUT (CS_PIO_AD), A 25: 26: 99+4 B016 00 NOP 27: 103+4 B017 00 NOP 28: 107+4 B018 00 NOP 29: 30: 111+7 B019 3E80 LD A, 0x80 ;S1 -> Select S0, PIN disabled, ESO = 0, Interrupt disabled, STA, STA, ACK = 0 31: 118+11 B01B D3F3 OUT (CS_I2C_S1),A 32: 129+17 B01D CD16B1 CALL SlowAccess 33: 146+17 B020 CD16B1 CALL SlowAccess 34: 35: 163+7 B023 3E55 LD A,0x55 ;S0 -> Loads byte 55H into register S0'; effective own address becomes AAH 36: 170+11 B025 D3F2 OUT (CS_I2C_SX),A 37: 181+17 B027 CD16B1 CALL SlowAccess 38: 39: 198+7 B02A 3EA0 LD A, 0xA0 ;S1 -> Loads byte A0H into register S1, i.e. next byte will be loaded into the clock control register S2. 40: 205+11 B02C D3F3 OUT (CS_I2C_S1),A 41: 216+17 B02E CD16B1 CALL SlowAccess 42: 43: 44: 233+7 B031 3E00 LD A,0x00 ;Load 18H into S2 register (clock control - 8 MHz, 90 KHz) 45: 240+11 B033 D3F2 OUT (CS_I2C_SX),A 46: 251+17 B035 CD16B1 CALL SlowAccess 47: 48: 268+7 B038 3EC1 LD A,0xC1 ;S1 -> loads byte C1H into register S1; register enable 49: ;serial interface, set I 2C-bus into idle mode; 50: ;SDA and SCL are HIGH. The next write or read 51: ;operation will be to/from data transfer register 52: ;S0 if A0 = LOW.; 53: 275+11 B03A D3F3 OUT (CS_I2C_S1),A 54: 286+17 B03C CD16B1 CALL SlowAccess 55: 56: 57: 58: ;CALL force_stop 59: 303+10 B03F C39900 JP PROMPT_BEGIN 60: 61: 313+10 B042 010001 LD BC,$0100 62: 323+17 B045 CDF6B0 CALL PAUSE_LOOP 63: 64: 65: ; Send test message to RTC 66: 67: 340+10 B048 1100C0 LD DE, 0xC000 ; Set I2C Buffer Location 68: 350+7 B04B 3E00 LD A,0x00 69: 357+7 B04D 12 LD (DE),A 70: ;call regdump 71: 72: 364+7 B04E 06D0 LD B, IIC_RTC ; Set I2C Address 73: 371+7 B050 3E01 LD A, 1 ; Set I2C Buffer length 74: 378+17 B052 CD62B0 call i2c_send 75: 76: 395+10 B055 1110C0 LD DE, 0xC010 77: 405+7 B058 06D0 LD B, IIC_RTC 78: 412+7 B05A 3E07 LD A, 7 79: 419+17 B05C CD90B0 call i2c_read 80: 81: 82: 83: 436+10 B05F C39900 JP PROMPT_BEGIN 84: 85: 86: ;CLK_ENABLE: 87: ; LD DE, 0xC000 ; Set I2C Buffer Location 88: ; LD A,0x00 89: ; LD (0xC000),A 90: ; LD (0xC001),A 91: ; ;call regdump 92: ; 93: ; LD B, IIC_RTC ; Set I2C Address 94: ; LD A, 2 ; Set I2C Buffer length 95: ; call i2c_send 96: ; JP PROMPT_BEGIN 97: 98: ;------------------------------------------------------------------------------ 99: ; i2c_send 100: ; 101: ; Sends data over the i2c bus 102: ; A contains BYTE COUNTER 103: ; B contains ADDRESS 104: ; DE contains location of Data Buffer 105: ;------------------------------------------------------------------------------ 106: - B062 i2c_send: 107: ; CALL PRINTINLINE; 108: ; defb "SEND A",10,13,0 109: 446+11 B062 C5 PUSH BC 110: 457+11 B063 F5 PUSH AF 111: 468+17 B064 CDE8B0 CALL i2c_bus_rdy 112: ; CALL PRINTINLINE 113: ; defb "SEND START",10,13,0 114: 485+4 B067 78 LD A,B ;Load 'slave address' into S0 register: 115: 489+11 B068 D3F2 OUT (CS_I2C_SX),A 116: 500+17 B06A CD16B1 CALL SlowAccess 117: 118: 517+7 B06D 3EC5 LD A, 0xC5 ;Load C5H into S1. 'C5H' = PCF8584 generates 119: ;the 'START' condition and clocks out the slave 120: ;address and the clock pulse for slave acknowledgement. 121: 524+11 B06F D3F3 OUT (CS_I2C_S1),A 122: 535+10 B071 F1 POP AF 123: 545+4 B072 4F LD C,A 124: 549+4 B073 0C INC C 125: - B074 i2c_send_1: ; LOOP 1 : Wait for bus ready 126: 553+11 B074 DBF3 IN A,(CS_I2C_S1) ; Read byte from S1 register 127: 564+8 B076 CB7F BIT 7,A ; Is bus free? (S1 ~BB=1?) 128: 572+7+5 B078 20FA JR NZ,i2c_send_1 ; No - loop 129: 579+8 B07A CB67 BIT 4,A ; slave acknowledged? (LRB = 0?) 130: 587+7+5 B07C 2009 JR NZ, i2c_send_stop ; if not, cancel transmission 131: 594+7 B07E 1A LD A,(DE) ; Load next byte from buffer 132: 601+6 B07F 13 INC DE 133: 607+4 B080 0D DEC C 134: 611+7+5 B081 2804 JR Z, i2c_send_stop ; if counter = 0, exit loop 135: 618+11 B083 D3F2 OUT (CS_I2C_SX),A ; Send byte 136: 629+12 B085 18ED JR i2c_send_1 ; if counter > 0, loop again 137: - B087 i2c_send_stop: 138: 641+7 B087 3EC3 LD A, 0xC3 ;STOP 139: 648+11 B089 D3F3 OUT (CS_I2C_S1),A 140: 659+17 B08B CD16B1 CALL SlowAccess 141: 676+10 B08E C1 POP BC 142: 686+10 B08F C9 RET 143: 144: 145: ;------------------------------------------------------------------------------ 146: ; i2c_read 147: ; 148: ; Sends data over the i2c bus 149: ; A contains BYTE COUNTER 150: ; B contains ADDRESS 151: ; DE contains location of Data Buffer 152: ;------------------------------------------------------------------------------ 153: - B090 i2c_read: 154: 696+11 B090 D5 PUSH DE 155: 707+11 B091 C5 PUSH BC 156: 718+11 B092 F5 PUSH AF 157: 729+4 B093 78 LD A,B ;Load 'slave address' into S0 register: 158: 733+7 B094 F601 OR 0x01 ;Set RW Bit for read operation 159: 740+11 B096 D3F2 OUT (CS_I2C_SX),A 160: 751+17 B098 CD16B1 CALL SlowAccess 161: 768+17 B09B CDE8B0 CALL i2c_bus_rdy ; Is bus ready 162: 785+7 B09E 3EC5 LD A, 0xC5 ;Load C5H into S1. 'C5H' = PCF8584 generates 163: ;the 'START' condition and clocks out the slave 164: ;address and the clock pulse for slave acknowledgement. 165: 792+11 B0A0 D3F3 OUT (CS_I2C_S1),A 166: ;Setup counter 167: 803+10 B0A2 F1 POP AF 168: 813+4 B0A3 4F LD C,A ; Load BYTE COUNTER into C 169: 817+4 B0A4 0C INC C ; Offset C by 1 170: - B0A5 i2c_read_1: ;Wait for PIN = 0 171: 821+11 B0A5 DBF3 IN A,(CS_I2C_S1) ; Read byte from S1 register 172: 832+8 B0A7 CB7F BIT 7,A ; S1 PIN=1? 173: 840+7+5 B0A9 20FA JR NZ,i2c_read_1 ; No - loop 174: 847+8 B0AB CB5F BIT 3,A ; S1 LRB=0? slave ACK? 175: 855+7+5 B0AD 201C JR NZ, i2c_read_error ; No ACK -> an error has occured 176: 862+4 B0AF 0D DEC C 177: 866+4 B0B0 79 LD A, C 178: 870+4 B0B1 3D DEC A ;If n = m − 1? 179: 874+7+5 B0B2 2806 JR Z, i2c_read_last 180: 881+11 B0B4 DBF2 IN A,(CS_I2C_SX) 181: 892+7 B0B6 12 LD (DE),A 182: 899+6 B0B7 13 INC DE 183: 905+12 B0B8 18EB JR i2c_read_1 184: - B0BA i2c_read_last: ;read last byte 185: 917+7 B0BA 3E40 LD A, 0x40 186: 924+11 B0BC D3F3 OUT (CS_I2C_S1),A 187: 935+17 B0BE CD16B1 CALL SlowAccess 188: 952+11 B0C1 DBF2 IN A,(CS_I2C_SX) ;receives the final data byte. Neg. ACK is also sent. 189: 963+7 B0C3 12 LD (DE),A 190: 970+6 B0C4 13 INC DE 191: - B0C5 i2c_read_last_1: 192: 976+11 B0C5 DBF3 IN A,(CS_I2C_S1) ; Read byte from S1 register 193: 987+8 B0C7 CB7F BIT 7,A ; S1 PIN=1? 194: 995+7+5 B0C9 20FA JR NZ,i2c_read_last_1 ; No - loop 195: 196: - B0CB i2c_read_error: 197: 1002+4 B0CB 00 NOP 198: - B0CC i2c_read_stop: 199: 1006+7 B0CC 3EC3 LD A, 0xC3 200: 1013+11 B0CE D3F3 OUT (CS_I2C_S1),A 201: 1024+17 B0D0 CD16B1 CALL SlowAccess 202: 1041+11 B0D3 DBF2 IN A,(CS_I2C_SX) ;transfers the final data byte from the 203: ;data buffer to accumulator. 204: 1052+17 B0D5 CD16B1 CALL SlowAccess 205: 1069+7 B0D8 12 LD (DE),A 206: 1076+10 B0D9 C1 POP BC 207: 1086+10 B0DA D1 POP DE 208: 1096+10 B0DB C9 RET 209: 210: 211: - B0DC i2c_stop_force: 212: 213: ;------------------------------------------------------------------------------ 214: ; i2c_rdy 215: ; 216: ; Waits until the PCF8584 signals a byte transmission/reception is complete. 217: ;------------------------------------------------------------------------------ 218: - B0DC i2c_rdy: 219: 1106+11 B0DC F5 PUSH AF 220: - B0DD i2c_rlp: 221: 1117+11 B0DD DBF3 IN A,(CS_I2C_S1) ; Read byte from S1 register 222: 1128+8 B0DF CB7F BIT 7,A ; Is Tx/Rx complete? (S1 PIN=0?) 223: 1136+17 B0E1 CDE702 call print_a_hex 224: 1153+7+5 B0E4 20F7 JR NZ,i2c_rlp ; No - loop 225: - B0E6 i2crlpex: 226: 1160+10 B0E6 F1 POP AF 227: 1170+10 B0E7 C9 RET 228: 229: ;------------------------------------------------------------------------------ 230: ; i2c_bus_rdy 231: ; 232: ; Waits until the I2C bus is free before RETurning 233: ;------------------------------------------------------------------------------ 234: - B0E8 i2c_bus_rdy: 235: 1180+11 B0E8 F5 PUSH AF 236: - B0E9 i2c_blp: 237: 1191+11 B0E9 DBF3 IN A,(CS_I2C_S1) ; Read byte from S1 register 238: 1202+11 B0EB F5 PUSH AF 239: 1213+17 B0EC CDE702 call print_a_hex 240: 1230+10 B0EF F1 POP AF 241: 1240+8 B0F0 CB47 BIT 0,A ; Is bus free? (S1 ~BB=1?) 242: 1248+7+5 B0F2 28F5 JR Z,i2c_blp ; No - loop 243: - B0F4 i2cblpex: 244: 1255+10 B0F4 F1 POP AF 245: 1265+10 B0F5 C9 RET 246: 247: ;------------------------------------------------------------------------------ 248: ; PAUSE_LOOP 249: ; 250: ; Timer function 251: ; 252: ; 16-bit (BC) decrement counter, performing 4xNEG loop until BC 253: ; reaches zero. 254: ; 255: ; 61 T-states in loop = 15.25uS per loop @ 4 MHz - near enough 256: ; a second delay for 65,535 iterations. 257: ; 258: ; Set iteration count in BC before calling this function. 259: ; Destroys: BC 260: ;------------------------------------------------------------------------------ 261: - B0F6 PAUSE_LOOP: 262: 1275+11 B0F6 F5 PUSH AF ; 11 T-states 263: - B0F7 pau_lp: 264: ;NEG ; 8 T-states 265: ;NEG ; 8 T-states 266: ;NEG ; 8 T-states 267: ;NEG ; 8 T-states 268: 1286+11 B0F7 C5 PUSH BC ; 11 T-states 269: 1297+10 B0F8 C1 POP BC ; 10 T-states 270: 1307+11 B0F9 C5 PUSH BC ; 11 T-states 271: 1318+10 B0FA C1 POP BC ; 10 T-states 272: 1328+6 B0FB 0B DEC BC ; 6 T-states 273: 1334+4 B0FC 79 LD A,C ; 9 T-states 274: 1338+4 B0FD B0 OR B ; 4 T-states 275: 1342+10 B0FE C2F7B0 JP NZ,pau_lp ; 10 T-states 276: 1352+10 B101 F1 POP AF ; 10 T-states 277: 1362+10 B102 C9 RET ; Pause complete, RETurn 278: 279: ;------------------------------------------------------------------------------ 280: ; PRINTINLINE 281: ; 282: ; String output function 283: ; 284: ; Prints in-line data (bytes immediately following the PRINTINLINE call) 285: ; until a string terminator is encountered (0 - null char). 286: ;------------------------------------------------------------------------------ 287: - B103 PRINTINLINE: 288: 1372+19 B103 E3 EX (SP),HL ; PUSH HL and put RET ADDress into HL 289: 1391+11 B104 F5 PUSH AF 290: 1402+11 B105 C5 PUSH BC 291: - B106 nxtILC: 292: 1413+7 B106 7E LD A,(HL) 293: 1420+7 B107 FE00 CP 0 294: 1427+7+5 B109 2806 JR Z,endPrint 295: 1434+17 B10B CDB702 CALL print_char 296: 1451+6 B10E 23 INC HL 297: 1457+12 B10F 18F5 JR nxtILC 298: - B111 endPrint: 299: 1469+6 B111 23 INC HL ; Get past "null" terminator 300: 1475+10 B112 C1 POP BC 301: 1485+10 B113 F1 POP AF 302: 1495+19 B114 E3 EX (SP),HL ; PUSH new RET ADDress on stack and restore HL 303: 1514+10 B115 C9 RET 304: 305: - B116 SlowAccess: 306: 1524+4 B116 00 NOP 307: 1528+4 B117 00 NOP 308: 1532+4 B118 00 NOP 309: 1536+4 B119 00 NOP 310: 1540+4 B11A 00 NOP 311: 1544+4 B11B 00 NOP 312: 1548+4 B11C 00 NOP 313: 1552+4 B11D 00 NOP 314: 1556+10 B11E C9 RET 315: 316: 317: ;.include "regdump.s" 318: 319: - B11F force_stop: 320: 1566+11 B11F DBF3 IN A,(CS_I2C_S1) 321: 1577+8 B121 CB47 BIT 0, A 322: 1585+5+6 B123 C0 RET NZ 323: 1590+7 B124 3EC3 LD A, 11000011b 324: 1597+11 B126 D3F3 OUT (CS_I2C_S1),A 325: 1608+4 B128 00 NOP 326: 1612+4 B129 00 NOP **** test.asm **** 327: 1616+12 B12A 18F3 JR force_stop Statistics: 4 passes 0 jr promotions 293 symbols 300 bytes Symbol Table: AY0_WRITE_REG =91 145 A_RTS_OFF = 312 786 A_RTS_ON = 31B 795 CMD_DASM = 239 569 CMD_EXEC = 12F 303 CMD_IO_READ = 21D 541 CMD_IO_WRITE = 1F4 500 CMD_SET = 1B8 440 CMD_SET_END = 1EE 494 CMD_SET_LOOP = 1D3 467 CMD_SYNTAX_ERROR= 272 626 CMD_VIEW = 14E 334 CMD_VIEW_END = 1B2 434 CMD_VIEW_ROW = 187 391 CMD_VIEW_ROW_LOOP= 199 409 CONSOLE_INIT = 27E 638 CONSOLE_INIT_CTC= 27E 638 CONSOLE_INIT_SIO= 286 646 CS_I2C_S1 =F3 243 CS_I2C_SX =F2 242 CS_PIO_AC =F6 246 CS_PIO_AD =F4 244 CS_PIO_BC =F7 247 CS_PIO_BD =F5 245 DHEX_TO_BYTE = 324 804 DHEX_TO_BYTE_FAILED= 340 832 EXEC_RST_08 = EC4 3780 EXEC_RST_10 = EC8 3784 EXEC_RST_18 = ED4 3796 HEX_TO_BIN = 344 836 HEX_TO_BIN_2 = 352 850 HEX_TO_INVALID_2= 359 857 IIC_INIT B000 45056 IIC_RTC =D0 208 INT_VEC =1B 27 Includes = 27E 638 MSG_CLEAR = 30A 778 MSG_ERROR =108E 4238 MSG_START =10A7 4263 PAUSE_LOOP B0F6 45302 PRINTINLINE B103 45315 PROMPT_BEGIN =99 153 PROMPT_BEGIN_READ_BACKSPACE=D6 214 PROMPT_BEGIN_READ_LOOP=A5 165 PROMPT_BEGIN_READ_PROCESS=FC 252 RST_00 =00 0 RST_08 =08 8 RST_10 =10 16 RST_18 =18 24 STRCONV_BYTES_TO_HEX= 35B 859 STRCONV_BYTES_TO_HEX_1= 36A 874 STRCONV_BYTES_TO_HEX_2= 374 884 STR_Banner_Start= F00 3840 STR_HEXDUMP_HEADER= F30 3888 STR_SyntaxError= F26 3878 STR_Unknown = F2B 3883 SlowAccess B116 45334 beep = ED7 3799 beep_pause = EF1 3825 dasm_00 = ADC 2780 dasm_01 = DC8 3528 dasm_02 = B62 2914 dasm_03 = D9A 3482 dasm_08 = BDF 3039 dasm_09 = D6D 3437 dasm_0A = B44 2884 dasm_0B = DB1 3505 dasm_10 = B24 2852 dasm_12 = B6D 2925 dasm_18 = AE7 2791 dasm_1A = B4E 2894 dasm_20 = B01 2817 dasm_22 = E0E 3598 dasm_27 = BA7 2983 dasm_28 = AFA 2810 dasm_2A = DDF 3551 dasm_2F = BAB 2987 dasm_30 = AF2 2802 dasm_32 = B78 2936 dasm_37 = BB7 2999 dasm_38 = AEB 2795 dasm_3A = B58 2904 dasm_3F = BB3 2995 dasm_76 = BBB 3003 dasm_80C6 = C38 3128 dasm_BE = BD5 3029 dasm_C3 = AE0 2784 dasm_C88E = C5E 3166 dasm_C9 = B30 2864 dasm_CD = B2A 2858 dasm_D9 = BEC 3052 dasm_DD = B12 2834 dasm_DD_01 = DCF 3535 dasm_DD_09 = D88 3464 dasm_DD_22 = E24 3620 dasm_DD_23 = D9F 3487 dasm_DD_2A = DF6 3574 dasm_DD_2B = DB6 3510 dasm_DD_34 = D38 3384 dasm_DD_35 = D55 3413 dasm_DD_86 = C40 3136 dasm_DD_8E = C66 3174 dasm_DD_96 = C89 3209 dasm_DD_9E = CA9 3241 dasm_DD_A6 = CCA 3274 dasm_DD_AE = D01 3329 dasm_DD_B6 = CE6 3302 dasm_DD_BE = D1D 3357 dasm_DD_E1 = E76 3702 dasm_DD_E3 = BFC 3068 dasm_DD_E5 = E60 3680 dasm_DD_F9 = E46 3654 dasm_E1 = E70 3696 dasm_E3 = BF0 3056 dasm_E5 = E5A 3674 dasm_E9 = B09 2825 dasm_ED_42 = D7F 3455 dasm_ED_43 = E1A 3610 dasm_ED_44 = BAF 2991 dasm_ED_45 = B3A 2874 dasm_ED_46 = BC6 3014 dasm_ED_4A = D76 3446 dasm_ED_4B = DEB 3563 dasm_ED_4D = B35 2869 dasm_ED_56 = BCB 3019 dasm_ED_5E = BD0 3024 dasm_ED_A0 = C14 3092 dasm_ED_A1 = C26 3110 dasm_ED_A8 = C1D 3101 dasm_ED_A9 = C2F 3119 dasm_ED_B0 = C18 3096 dasm_ED_B1 = C2A 3114 dasm_ED_B8 = C21 3105 dasm_ED_B9 = C33 3123 dasm_F3 = BC0 3008 dasm_F9 = E3C 3644 dasm_FB = BC3 3011 dasm_FD = B1B 2843 dasm_FD_01 = DD7 3543 dasm_FD_09 = D91 3473 dasm_FD_22 = E30 3632 dasm_FD_23 = DA8 3496 dasm_FD_2A = E02 3586 dasm_FD_2B = DBF 3519 dasm_FD_34 = D44 3396 dasm_FD_35 = D61 3425 dasm_FD_86 = C4F 3151 dasm_FD_8E = C75 3189 dasm_FD_96 = C95 3221 dasm_FD_9E = CB7 3255 dasm_FD_A6 = CD6 3286 dasm_FD_AE = D0D 3341 dasm_FD_B6 = CF1 3313 dasm_FD_BE = D28 3368 dasm_FD_E1 = E7E 3710 dasm_FD_E3 = C08 3080 dasm_FD_E5 = E68 3688 dasm_FD_F9 = E50 3664 dasm_FF = B3F 2879 dasm_UU = E86 3718 dasm_UW = E8A 3722 dasm__AND = CC5 3269 dasm__CP = D19 3353 dasm__DEC = D50 3408 dasm__ED_47 = B97 2967 dasm__ED_4F = B9F 2975 dasm__ED_57 = B87 2951 dasm__ED_5F = B8F 2959 dasm__INC = D33 3379 dasm__LD = B83 2947 dasm__OR = CE2 3298 dasm__SBC = CA1 3233 dasm__SUB = C84 3204 dasm__XOR = CFC 3324 dasm_opcode_table= 684 1668 dasm_print16hex_addr= 4B1 1201 dasm_print8hex = 4C9 1225 dasm_printFlags_table= E8F 3727 dasm_printRegister8_table= E9F 3743 dasm_printRegister8_table_HL= EBF 3775 dasm_printRegisterIX_table= EA7 3751 dasm_printRegisterIY_table= EAF 3759 dasm_printRegisterSP_table= EB7 3767 disassemble = 375 885 disassemble_continue= 45B 1115 disassemble_err= 44B 1099 disassemble_next= 379 889 disassemble_print_opcode_params_end= 448 1096 disassemble_print_opcode_params_loop= 3F4 1012 disassemble_print_opcode_raw= 3B6 950 disassemble_print_opcode_raw_fill= 3CA 970 disassemble_table_first_match= 48D 1165 disassemble_table_found= 4A7 1191 disassemble_table_notfound= 4AB 1195 disassemble_table_seek= 469 1129 disassemble_table_seek_loop= 46D 1133 endPrint B111 45329 force_stop B11F 45343 i2c_blp B0E9 45289 i2c_bus_rdy B0E8 45288 i2c_rdy B0DC 45276 i2c_read B090 45200 i2c_read_1 B0A5 45221 i2c_read_error B0CB 45259 i2c_read_last B0BA 45242 i2c_read_last_1 B0C5 45253 i2c_read_stop B0CC 45260 i2c_rlp B0DD 45277 i2c_send B062 45154 i2c_send_1 B074 45172 i2c_send_stop B087 45191 i2c_stop_force B0DC 45276 i2cblpex B0F4 45300 i2crlpex B0E6 45286 mon_start_complete=7E 126 mon_start_init_ctc=50 80 mon_start_init_serial=67 103 mon_start_init_sound=50 80 mon_start_ram =6A 106 mon_start_ram_loop=73 115 mon_var_template=44 68 mon_var_template_end=402A 16426 nxtILC B106 45318 param_01 = 4D7 1239 param_02 = 4FE 1278 param_03 = 51B 1307 param_03_done = 553 1363 param_03_neg = 53C 1340 param_04 = 557 1367 param_04_i = 567 1383 param_05 = 56D 1389 param_06 = 57A 1402 param_07 = 594 1428 param_08 = 5A1 1441 param_09 = 5B6 1462 param_09_0A = 5BC 1468 param_0A = 5AD 1453 param_10 = 5CB 1483 param_11 = 5DB 1499 param_11_12 = 5EA 1514 param_11_12_all= 60A 1546 param_11_12_def= 5FD 1533 param_11_12_ix = 602 1538 param_11_12_iy = 607 1543 param_12 = 5E3 1507 param_13 = 61B 1563 param_80 = 63A 1594 param_80_seek = 641 1601 param_81 = 631 1585 param_comma = 675 1653 param_printRegister= 650 1616 param_printRegisterA= 66E 1646 param_printRegisterHL= 666 1638 pau_lp B0F7 45303 print_a_hex = 2E7 743 print_char = 2B7 695 print_clear = 2CA 714 print_newLine = 2D1 721 print_str = 2BF 703 print_str_end = 2C9 713 print_wait_out = 2DC 732 read_char = 2F8 760 var_buffer =4029 16425 var_buffer_len =4000 16384 var_curserchar =4006 16390 var_curserlastaddr=4007 16391 var_curseron =4005 16389 var_curserstate=4004 16388 var_curserx =4002 16386 var_cursery =4003 16387 var_last_char =4001 16385 var_ps2mem =4019 16409 var_scratch =4009 16393 xmodem_ack =10C1 4289 xmodem_await_conn= F7A 3962 xmodem_end =1025 4133 xmodem_err = FEB 4075 xmodem_init = F4C 3916 xmodem_int =102C 4140 xmodem_int_cont=104B 4171 xmodem_nak =10CF 4303 xmodem_out =107D 4221 xmodem_packet = F85 3973 xmodem_packet_EOT= FE3 4067 xmodem_packet_get= F97 3991 xmodem_packet_get_crc= FD0 4048 xmodem_packet_get_data= FC1 4033 xmodem_read_wait=1050 4176 xmodem_read_wait_loop=105E 4190 xmodem_read_wait_timeout=107B 4219 xmodem_wait =10DD 4317 xmodem_wait_1 =10E3 4323 xmodem_wait_out=1083 4227