Files
Z8C-Homebrew-Computer/OperatingSystem/software/zout/test.lst
2022-12-20 19:29:01 +01:00

903 lines
37 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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