📄 basal_reader_de.lst
字号:
76 {
\ 00F0 C5 PUSH BC
\ 00F1 FDE5 PUSH IY
\ 00F3 DDE5 PUSH IX
\ 00F5 DD210000 LD IX,0
\ 00F9 DD39 ADD IX,SP
\ 00FB F5 PUSH AF
\ 00FC F5 PUSH AF
\ 00FD D5 PUSH DE
\ 00FE FDE1 POP IY
77 uint nSector, nOffset;
78
79 if( (OA_LongAddr<ViewFileStructPoint->FileLengthBytes) && (ReadDataLength<FILE_SECTOR) )
\ 0100 13 INC DE
\ 0101 13 INC DE
\ 0102 EB EX DE,HL
\ 0103 5E LD E,(HL)
\ 0104 23 INC HL
\ 0105 56 LD D,(HL)
\ 0106 23 INC HL
\ 0107 4E LD C,(HL)
\ 0108 23 INC HL
\ 0109 46 LD B,(HL)
\ 010A C5 PUSH BC
\ 010B D5 PUSH DE
\ 010C DD4E0C LD C,(IX+12)
\ 010F DD460D LD B,(IX+13)
\ 0112 DD6E0A LD L,(IX+10)
\ 0115 DD660B LD H,(IX+11)
\ 0118 CD0000 CALL LWRD ?SL_CMP_L03
\ 011B D2EE01 JP NC,?0031
\ 011E 010002 LD BC,512
\ 0121 DD6E0E LD L,(IX+14)
\ 0124 DD660F LD H,(IX+15)
\ 0127 A7 AND A
\ 0128 ED42 SBC HL,BC
\ 012A D2EE01 JP NC,?0031
\ 012D ?0019:
\ 012D ?0018:
\ 012D ?0016:
80 {
81 nSector = OA_LongAddr / FILE_SECTOR;
\ 012D 69 LD L,C
\ 012E 61 LD H,C
\ 012F E5 PUSH HL
\ 0130 C5 PUSH BC
\ 0131 DD4E0C LD C,(IX+12)
\ 0134 DD460D LD B,(IX+13)
\ 0137 DD6E0A LD L,(IX+10)
\ 013A DD660B LD H,(IX+11)
\ 013D CD0000 CALL LWRD ?SL_DIV_L03
\ 0140 DD75FE LD (IX-2),L
\ 0143 DD74FF LD (IX-1),H
82 nOffset = OA_LongAddr % FILE_SECTOR;
\ 0146 210000 LD HL,0
\ 0149 E5 PUSH HL
\ 014A 2602 LD H,2
\ 014C E5 PUSH HL
\ 014D DD4E0C LD C,(IX+12)
\ 0150 DD460D LD B,(IX+13)
\ 0153 DD6E0A LD L,(IX+10)
\ 0156 DD660B LD H,(IX+11)
\ 0159 CD0000 CALL LWRD ?SL_MOD_L03
\ 015C DD75FC LD (IX-4),L
\ 015F DD74FD LD (IX-3),H
83
84
85 if( nOffset + ReadDataLength <= FILE_SECTOR ) //第一种情况:不超过一块
\ 0162 DD4E0E LD C,(IX+14)
\ 0165 DD460F LD B,(IX+15)
\ 0168 09 ADD HL,BC
\ 0169 4D LD C,L
\ 016A 44 LD B,H
\ 016B 210002 LD HL,512
\ 016E A7 AND A
\ 016F ED42 SBC HL,BC
\ 0171 3809 JR C,?0021
\ 0173 ?0020:
86 {
87 if( !read_text(ViewFileStructPoint, nSector ) )
\ 0173 CDFB01 CALL LWRD ?0189
\ 0176 2C INC L
\ 0177 2D DEC L
\ 0178 202E JR NZ,?0029
\ 017A ?0022:
88 return NULL; // 失败
\ 017A 1872 JR ?0031
\ 017C ?0023:
89 return (byte*)ViewFileStructPoint->bufFile + nOffset;
90 }
\ 017C ?0021:
91 else if( nOffset + ReadDataLength <= FILE_SECTOR + (BUFF_ONE_ROW) ) //第二种情况:超过一块, 不超过FILE_SECTOR + BUFF_ONE_ROW
\ 017C DD6E0E LD L,(IX+14)
\ 017F DD660F LD H,(IX+15)
\ 0182 DD4EFC LD C,(IX-4)
\ 0185 DD46FD LD B,(IX-3)
\ 0188 09 ADD HL,BC
\ 0189 4D LD C,L
\ 018A 44 LD B,H
\ 018B 211402 LD HL,532
\ 018E A7 AND A
\ 018F ED42 SBC HL,BC
\ 0191 3824 JR C,?0025
\ 0193 ?0024:
92 {
93 if( !read_text(ViewFileStructPoint, nSector+1 ) )
\ 0193 DD4EFE LD C,(IX-2)
\ 0196 DD46FF LD B,(IX-1)
\ 0199 03 INC BC
\ 019A CD0102 CALL LWRD ?0190
\ 019D 2C INC L
\ 019E 2D DEC L
\ 019F 284D JR Z,?0031
\ 01A1 ?0026:
94 return NULL; // 失败
\ 01A1 ?0027:
95 if( !read_text(ViewFileStructPoint, nSector ) ) //通过两次读取,将下一扇区的头部数据保存到BufNext中
\ 01A1 CDFB01 CALL LWRD ?0189
\ 01A4 2C INC L
\ 01A5 2D DEC L
\ 01A6 2846 JR Z,?0031
\ 01A8 ?0028:
96 return NULL; // 失败
\ 01A8 ?0029:
97 return (byte*)ViewFileStructPoint->bufFile + nOffset;
\ 01A8 212700 LD HL,39
\ 01AB FDE5 PUSH IY
\ 01AD C1 POP BC
\ 01AE 09 ADD HL,BC
\ 01AF DD4EFC LD C,(IX-4)
\ 01B2 DD46FD LD B,(IX-3)
\ 01B5 1834 JR ?0179
98 }
\ 01B7 ?0025:
99 else if( nOffset > FILE_SECTOR - (BUFF_ONE_ROW) ) //第三种情况:处理(nOffset + ReadDataLength)>(FILE_SECTOR +BUFF_ONE_ROW)的情况
\ 01B7 DD4EFC LD C,(IX-4)
\ 01BA DD46FD LD B,(IX-3)
\ 01BD 21EC01 LD HL,492
\ 01C0 A7 AND A
\ 01C1 ED42 SBC HL,BC
\ 01C3 3029 JR NC,?0031
\ 01C5 ?0030:
100 {
101 if( !read_text(ViewFileStructPoint, nSector ) )
\ 01C5 CDFB01 CALL LWRD ?0189
\ 01C8 2C INC L
\ 01C9 2D DEC L
\ 01CA 2822 JR Z,?0031
\ 01CC ?0032:
102 return NULL; // 失败
\ 01CC ?0033:
103 if( !read_text(ViewFileStructPoint, nSector+1 ) ) //通过两次读取,将本扇区的尾部数据保存到BufPrev中
\ 01CC DD4EFE LD C,(IX-2)
\ 01CF DD46FF LD B,(IX-1)
\ 01D2 03 INC BC
\ 01D3 CD0102 CALL LWRD ?0190
\ 01D6 2C INC L
\ 01D7 2D DEC L
\ 01D8 2814 JR Z,?0031
\ 01DA ?0034:
104 return NULL; // 失败
\ 01DA ?0035:
105 return (byte*)ViewFileStructPoint->bufFile-(FILE_SECTOR-nOffset);
\ 01DA 212700 LD HL,39
\ 01DD FDE5 PUSH IY
\ 01DF C1 POP BC
\ 01E0 09 ADD HL,BC
\ 01E1 DD4EFC LD C,(IX-4)
\ 01E4 DD46FD LD B,(IX-3)
\ 01E7 09 ADD HL,BC
\ 01E8 0100FE LD BC,65024
\ 01EB ?0179:
\ 01EB 09 ADD HL,BC
106 }
\ 01EC 1803 JR ?0036
\ 01EE ?0031:
\ 01EE ?0017:
107 }
108 return NULL; // 失败
\ 01EE 210000 LD HL,0
109 }
\ 01F1 ?0036:
\ 01F1 DDF9 LD SP,IX
\ 01F3 DDE1 POP IX
\ 01F5 FDE1 POP IY
\ 01F7 C1 POP BC
\ 01F8 C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 01FB ?0189:
\ 01FB DD4EFE LD C,(IX-2)
\ 01FE DD46FF LD B,(IX-1)
\ 0201 ?0190:
\ 0201 FDE5 PUSH IY
\ 0203 D1 POP DE
\ 0204 3E00 LD A,BYTE3 read_text
\ 0206 213E00 LD HL,LWRD read_text
\ 0209 C30000 JP LWRD ?BANK_CALL_DIRECT_L08
\ 020C view_page_down:
110
111
112 //////////////////////////////////////////////////
113 //向后翻阅
114 // DealMode =0: 显示一屏并计算下一屏的起始位置;=1: 计算下一屏的起始位置;2 .只读取下一屏数据
115 byte view_page_down(STRUCT_VIEW_FILE *ViewFileStructPoint, unsigned char DealMode,int BackGroundID )
116 {
\ 020C FDE5 PUSH IY
\ 020E DDE5 PUSH IX
\ 0210 DD210000 LD IX,0
\ 0214 DD39 ADD IX,SP
\ 0216 C5 PUSH BC
\ 0217 D5 PUSH DE
\ 0218 21F0FF LD HL,65520
\ 021B 39 ADD HL,SP
\ 021C F9 LD SP,HL
117 long LeftFileLength; // 文件剩余长度
118 long ReadFileLength; // 已读取的文件长度
119 uint ReadLengthOneTime; //读取一次数据的长度
120 byte *str; //一次读取数据的首地址
121 uint RowHeadPosition; //行首地址(在一次所读数据中的位置)
122 BOOL ReReadFlag; //是否需要重新读取数据的标志
123 byte row, col; //显示的行列号
124 byte CountWords; //一行的显示字数
125
126
127 LeftFileLength = ViewFileStructPoint->FileLengthBytes - ViewFileStructPoint->CurrentSeek;
\ 021D 210A00 LD HL,10
\ 0220 19 ADD HL,DE
\ 0221 4E LD C,(HL)
\ 0222 23 INC HL
\ 0223 46 LD B,(HL)
\ 0224 23 INC HL
\ 0225 5E LD E,(HL)
\ 0226 23 INC HL
\ 0227 56 LD D,(HL)
\ 0228 69 LD L,C
\ 0229 60 LD H,B
\ 022A D5 PUSH DE
\ 022B E5 PUSH HL
\ 022C DD4EFC LD C,(IX-4)
\ 022F DD46FD LD B,(IX-3)
\ 0232 03 INC BC
\ 0233 03 INC BC
\ 0234 69 LD L,C
\ 0235 60 LD H,B
\ 0236 4E LD C,(HL)
\ 0237 23 INC HL
\ 0238 46 LD B,(HL)
\ 0239 23 INC HL
\ 023A 5E LD E,(HL)
\ 023B 23 INC HL
\ 023C 56 LD D,(HL)
\ 023D 69 LD L,C
\ 023E 60 LD H,B
\ 023F A7 AND A
\ 0240 C1 POP BC
\ 0241 ED42 SBC HL,BC
\ 0243 EB EX DE,HL
\ 0244 C1 POP BC
\ 0245 ED42 SBC HL,BC
\ 0247 4D LD C,L
\ 0248 44 LD B,H
\ 0249 EB EX DE,HL
\ 024A DD75F4 LD (IX-12),L
\ 024D DD74F5 LD (IX-11),H
\ 0250 DD71F6 LD (IX-10),C
\ 0253 DD70F7 LD (IX-9),B
128 if( LeftFileLength <= 0 )
\ 0256 C5 PUSH BC
\ 0257 E5 PUSH HL
\ 0258 010000 LD BC,0
\ 025B 69 LD L,C
\ 025C 60 LD H,B
\ 025D CD0000 CALL LWRD ?SL_CMP_L03
\ 0260 3811 JR C,?0038
\ 0262 ?0037:
129 {
130 ViewFileStructPoint->CurrentSeek =0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -