📄 conio.asm
字号:
SACL *+,AR3
LARK AR3,3
MAR *0+,AR1
SAR AR3,*+
CALL _getline
SBRK 2
*** 152 ----------------------- val = buf[0] ? atol_F240(&buf) : deflt;
.line 21
;>>>> if (buf[0] == 0)
;>>>> val = deflt;
;>>>> else
MAR * ,AR2
LARK AR2,3
MAR *0+
LAC *
BZ LL8
MAR * ,AR3
LARK AR3,3
MAR *0+,AR1
SAR AR3,*+
CALL _atol_F240
MAR *-
B LL9
LL8:
SBRK 8-LF6
ZALS *+
ADDH *
LL9:
MAR * ,AR2
LARK AR2,1
MAR *0+
SACL *+
SACH *
*** 155 ----------------------- if ( val < lowlimit || val > highlimit ) goto g2;
.line 24
;>>>> val = atol_F240(buf);
;>>>> } while (val<lowlimit || val>highlimit);
BNV $+2
MAR *-
ZALS *+
ADDH *
SBRK 9-LF6
SUBS *+
SUBH * ,AR1
BNV $+6
BGZ L12
B $+4
BLZ L12
BNV $+2
MAR * ,AR2
ADRK 7-LF6
ZALS *+
ADDH *
SBRK 11-LF6
SUBS *+
SUBH * ,AR1
BNV $+6
BLZ L12
B $+4
BGZ L12
*** 157 ----------------------- return val;
.line 26
;>>>> return val;
MAR * ,AR2
ADRK 9-LF6
ZALS *+
ADDH *
EPI0_6:
.line 27
MAR * ,AR1
; <restore register vars>
MAR *-
LAR AR6,*
SBRK 14
LAR AR0,*-
PSHD *
RET
.endfunc 158,000000040H,13
.sym _getline,_getline,36,2,0
.globl _getline
.func 164
;>>>> int getline(char *x, int maxlen)
******************************************************
* FUNCTION DEF : _getline
******************************************************
_getline:
LF7 .set 0
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,4
LAR AR0,*0+
; <save register vars>
SAR AR6,*+
SAR AR7,*+,AR6
LARK AR6,1
LARK AR7,3
MAR *0+,AR7
MAR *0+,AR2
.sym _x,-3+LF7,20,9,16
.sym _maxlen,-4+LF7,4,9,16
.sym _x,1,20,1,16
.sym _pos,2,4,1,16
.sym _c,3,4,1,16
.line 2
;>>>> int c;
LARK AR2,-3+LF7
MAR *0+
LAC * ,AR6
SACL * ,AR2
*** 167 ----------------------- pos = 0;
.line 4
;>>>> int pos = 0;
;>>>> do
LACK 0
ADRK 5-LF7
SACL * ,AR1
L14:
*** -----------------------g2:
*** 171 ----------------------- if ( (c = getch()) != 8 ) goto g5;
.line 8
;>>>> c = getch();
;>>>> if (c == '\b')
CALL _getch,AR1
MAR * ,AR7
SACL *
SUBK 8
BNZ L17
*** 175 ----------------------- if ( pos <= 0 ) goto g10;
.line 12
;>>>> if (pos > 0)
SSXM
MAR * ,AR2
LARK AR2,2
MAR *0+
LAC *
BLEZ L22
*** 176 ----------------------- --pos;
.line 13
;>>>> pos--;
;>>>> else
;>>>> c = '\a'; /* bell */
SUBK 1
SACL *
L17:
*** -----------------------g5:
*** 181 ----------------------- if ( c != 13 ) goto g7;
.line 18
;>>>> if (c == '\r')
MAR * ,AR7
LAC * ,AR1
SACL *
LAC *
SUBK 13
BNZ L19
*** 182 ----------------------- x[pos] = 0;
.line 19
;>>>> x[pos++] = 0;
MAR * ,AR6
LAC * ,AR2
LARK AR2,2
MAR *0+
ADD * ,AR0
SACL *
LAR AR3,* ,AR3
LACK 0
SACL * ,AR2
*** 182 ----------------------- ++pos;
LAC *
ADDK 1
SACL *
L19:
*** -----------------------g7:
*** 184 ----------------------- if ( c == 13 || c == 8 || c == 7 ) goto g11;
.line 21
;>>>> if (c != '\r' && c != '\b' && c != '\a')
MAR * ,AR7
LAC * ,AR1
SACL *
LAC *
SUBK 13
BZ L23
MAR * ,AR7
LAC * ,AR1
SACL *
LAC *
SUBK 8
BZ L23
MAR * ,AR7
LAC * ,AR1
SACL *
LAC *
SUBK 7
BZ L23
*** 186 ----------------------- if ( pos-maxlen == (-1) ) goto g10;
.line 23
;>>>> if (pos == maxlen-1)
;>>>> c = '\a';
;>>>> else
SSXM
MAR * ,AR2
LARK AR2,2
MAR *0+
LAC *
SBRK 6-LF7
SUB *
SUBK -1
BZ L22
*** 189 ----------------------- x[pos] = c;
.line 26
;>>>> x[pos++] = c;
MAR * ,AR6
LAC * ,AR2
ADRK 6-LF7
ADD * ,AR0
SACL *
LAR AR3,* ,AR7
LAC * ,AR3
SACL * ,AR2
*** 189 ----------------------- ++pos;
LAC *
ADDK 1
SACL *
*** 189 ----------------------- goto g11;
B L23
L22:
*** -----------------------g10:
*** 187 ----------------------- c = 7;
.line 24
LACK 7
MAR * ,AR7
SACL *
L23:
*** -----------------------g11:
*** 192 ----------------------- putch(c);
.line 29
;>>>> putch(c);
MAR * ,AR7
LAC * ,AR1
SACL *+
CALL _putch
MAR *-,AR7
*** 193 ----------------------- if ( c != 13 ) goto g2;
.line 30
;>>>> } while (c != '\r');
LAC * ,AR1
SACL *
LAC *
SUBK 13
BNZ L14
*** 195 ----------------------- return pos;
.line 32
;>>>> return (pos); /* returning length of string */
SSXM
MAR * ,AR2
LARK AR2,2
MAR *0+
LAC *
EPI0_7:
.line 33
MAR * ,AR1
; <restore register vars>
MAR *-
LAR AR7,*-
LAR AR6,*
SBRK 5
LAR AR0,*-
PSHD *
RET
.endfunc 196,0000000c0H,4
.sym _atol_F240,_atol_F240,37,2,0
.globl _atol_F240
.func 212
;>>>> long atol_F240(const char *st)
******************************************************
* FUNCTION DEF : _atol_F240
******************************************************
_atol_F240:
LF8 .set 1
SAR AR0,*+
SAR AR1,*
LARK AR0,5
LAR AR0,*0+
; <save register vars>
SAR AR6,*+
SAR AR7,*+,AR6
LARK AR6,3
LARK AR7,4
MAR *0+,AR7
MAR *0+,AR2
.sym _st,-3+LF8,20,9,16
*
* AR5 assigned to variable fst
* --- fc shares AUTO storage with C$4
*
.sym _result,1,5,1,32
.sym C$3,3,4,1,16
.sym _fc,4,4,1,16
.line 2
*** 214 ----------------------- fst = st;
.line 3
;>>>> register const char *fst = st;
LARK AR2,-3+LF8
MAR *0+
LAR AR5,*
*** 215 ----------------------- result = 0L;
.line 4
;>>>> register long result = 0;
;>>>> register char fc;
LACK 0
ADRK 4-LF8
SACL *+
SACH * ,AR5
*** ----------------------- if ( *fst == 32 ) goto g3;
LAC * ,AR1
SACL *
LAC *
SUBK 32
BZ L26
MAR * ,AR5
L25:
*** -----------------------g2:
*** 221 ----------------------- if ( (C$4 = *fst) <= 8 || C$4 >= 14 ) goto g5;
.line 10
;>>>> while ((*fst == 0x20) || ((*fst > 0x08) && (*fst < 0x0E)))
SSXM
LAC * ,AR7
SACL *
SUBK 8
BLEZ L28
LAC *
SUBK 14
BGEZ L28
L26:
L27:
*** -----------------------g3:
*** -----------------------g4:
*** 223 ----------------------- if ( *(++fst) != 32 ) goto g2;
.line 12
;>>>> fst++;
MAR * ,AR5
MAR *+
LAC * ,AR1
SACL *
LAC * ,AR5
SUBK 32
BNZ L25
*** 223 ----------------------- goto g4;
B L27
L28:
*** -----------------------g5:
*** 229 ----------------------- C$3 = *fst;
.line 18
;>>>> fc = *fst;
MAR * ,AR5
LAC * ,AR6
SACL * ,AR7
*** 229 ----------------------- fc = C$3-45;
SUBK 45
SACL * ,AR6
*** 230 ----------------------- if ( C$3 != 45 && C$3 != 43 ) goto g7;
.line 19
;>>>> if ((fc == '-') || (fc == '+'))
LAC *
SUBK 45
BZ LL13
LAC *
SUBK 43
BNZ L30
LL13:
*** 231 ----------------------- ++fst;
.line 20
;>>>> fst++;
MAR * ,AR5
MAR *+
L30:
*** -----------------------g7:
*** 236 ----------------------- if ( (C$2 = *fst) < 48 ) goto g11;
.line 25
;>>>> while ((*fst >= '0') && (*fst <= '9'))
MAR * ,AR5
LAC * ,AR6
SACL *
SUBK 48
BLZ L34
L32:
*** -----------------------g9:
*** 236 ----------------------- if ( C$1 >= 58 ) goto g11;
LAC *
SUBK 58
BGEZ L34
*** 238 ----------------------- result *= 10L;
.line 27
;>>>> result *= 10;
MAR * ,AR2
LARK AR2,1
MAR *0+
ZALS *+
ADDH *-,AR1
SACL *+
SACH *+
SACL *+
LACK 10
MAR *-
CALL L$$MPY
MAR * ,AR2
SACL *+
SACH *-,AR5
*** 239 ----------------------- result += *fst++-48;
.line 28
;>>>> result += *fst++ - '0';
SSXM
LAC *+,AR2
SUBK 48
ADDS *+
ADDH *-
SACL *+
SACH * ,AR5
*** 236 ----------------------- if ( (C$1 = *fst) >= 48 ) goto g9;
.line 25
LAC * ,AR6
SACL *
SUBK 48
BGEZ L32
L34:
*** -----------------------g11:
*** 242 ----------------------- return fc ? result : -result;
.line 31
;>>>> return (fc == '-') ? -result : result;
MAR * ,AR7
LAC *
BZ LL14
MAR * ,AR2
LARK AR2,1
MAR *0+
ZALS *+
ADDH *
B EPI0_8
LL14:
MAR * ,AR2
LARK AR2,1
MAR *0+
ZALS *+
ADDH *
NEG
EPI0_8:
.line 32
MAR * ,AR1
; <restore register vars>
MAR *-
LAR AR7,*-
LAR AR6,*
SBRK 6
LAR AR0,*
RET
.endfunc 243,0000000c0H,5
.text
.def _read_PMEM
_read_PMEM:
popd *+ ;push return address
sar AR0, *+ ;push old frame pointer
sar AR1, *
lar AR0,* ;init new frame pointer
adrk #1 ;alocate space for one local variable
lar AR2,#-3
mar *,AR2
mar *0+ ;AR2 = x
LACC * ;ACC = x
ADRK #3 ;AR2 = local #1
TBLR * ;local #1 = *x(PMEM)
LACC * ;ACC = char
;context restore
;---------------
mar *,AR1
sbrk #(1+1) ;pop local var's+1 from stack
lar ar0, *- ;restore old frame pointer
pshd * ;restore return address
ret
******************************************************
* DEFINE STRING CONSTANTS *
******************************************************
.sect ".const"
SL0: .byte 27,"c",0
SL1: .byte 15,0
SL2: .byte "[",0
SL3: .byte ",",0
SL4: .byte "]",0
SL5: .byte "<",0
SL6: .byte ">: ",0
*****************************************************
* UNDEFINED REFERENCES *
*****************************************************
.global _ltoa
.global L$$MPY
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -